** Description changed:

  This is the cause for the Sections index resetting after initialization,
  see bug 1610231.
  
- Create the file ModelTest.qml:
- 
+ Use this code:
+ ------ ModelFromList13.qml ------
  import QtQuick 2.4
  
+ // This component is used in tst_listview_bug1621509.13.qml
  Item {
-     id: root
-     width: 800
-     height: 600
+     id: root
+     property var myObject
+     property int count: 0 // will hold the number of changes to myObject 
after Component.completed.
  
-     ListView {
-         model: root.model
-         onModelChanged: print("LV model changed to "+model[0]+" "+model[1]+" 
"+model[2]+" "+model[3])
-         Component.onCompleted: print("ListView completed.")
-     }
-     Component.onCompleted: print("root item completed.")
- 
-     property list<QtObject> objectList
-     onObjectListChanged: print("root.objectList changed to "+objectList[0]+" 
"+objectList[1]+" "+objectList[2])
-     property var model: objectList
+     onMyObjectChanged: {
+         print("myObject changed to "+myObject)
+         count++;
+     }
+     Component.onCompleted: {
+         count = 0;
+     }
  }
  
- And run this program modelInst.qml:
+ ------ tst_list_model_from_list_bug1621509.13.qml ------
+ import QtQuick 2.4
+ import QtTest 1.0
  
- import QtQuick 2.4
+ // Ubuntu.Components is not explicitly used below, but its import causes bug 
#1621509.
  import Ubuntu.Components 1.3
  
- ModelTest {
-     QtObject {
-         objectName: "one"
-         id: objectOne
-     }
-     QtObject {
-         objectName: "two"
-         id: objectTwo
-     }
-     QtObject{
-         objectName: "three"
-         id: objectThree
-     }
+ TestCase {
+     id: testCase
+     name: "EmbeddedListView"
+     width: 100
+     height: 100
  
-    objectList: [objectOne, objectTwo, objectThree]
+     // Bug #1621509 only occurs when we wait for the window to be visible.
+     // Forces the components to be completed before the test functions are 
executed.
+     when: windowShown
+ 
+     ModelFromList13 {
+         id: embeddedListView
+         QtObject {
+             objectName: "one"
+             id: objectOne
+         }
+         myObject: objectOne
+     }
+ 
+     Component.onCompleted: {
+         print("Component completed."); // must print something to reproduce 
the bug.
+     }
+ 
+     function test_no_model_change_after_completed_bug1621509_bug1610231() {
+         compare(embeddedListView.count, 0,
+                 "The model was changed after the component was completed.");
+     }
  }
+ ----------
  
- The output is as follows:
- 
- $ qmlscene modelInst.qml
- qml: root.objectList changed to undefined undefined undefined
- qml: root.objectList changed to QObject(0x118abf0, "one") undefined undefined
- qml: root.objectList changed to QObject(0x118abf0, "one") QObject(0x118a110, 
"two") undefined
- qml: root.objectList changed to QObject(0x118abf0, "one") QObject(0x118a110, 
"two") QObject(0x1182f80, "three")
- qml: LV model changed to QObject(0x118abf0, "one") QObject(0x118a110, "two") 
QObject(0x1182f80, "three") undefined
- qml: LV model changed to QObject(0x118abf0, "one") QObject(0x118a110, "two") 
QObject(0x1182f80, "three") undefined
- qml: root item completed.
- qml: ListView completed.
- qml: LV model changed to QObject(0x118abf0, "one") QObject(0x118a110, "two") 
QObject(0x1182f80, "three") undefined
- qml: LV model changed to QObject(0x118abf0, "one") QObject(0x118a110, "two") 
QObject(0x1182f80, "three") undefined
- 
- So the model is changed AFTER the ListView and root item are completed.
- 
- When the Ubuntu.Components import is removed the output is correct:
- 
- $ qmlscene modelInst.qml
- qml: root.objectList changed to undefined undefined undefined
- qml: root.objectList changed to QObject(0x171c8d0, "one") undefined undefined
- qml: root.objectList changed to QObject(0x171c8d0, "one") QObject(0x171d290, 
"two") undefined
- qml: root.objectList changed to QObject(0x171c8d0, "one") QObject(0x171d290, 
"two") QObject(0x171d420, "three")
- qml: LV model changed to QObject(0x171c8d0, "one") QObject(0x171d290, "two") 
QObject(0x171d420, "three") undefined
- qml: LV model changed to QObject(0x171c8d0, "one") QObject(0x171d290, "two") 
QObject(0x171d420, "three") undefined
- qml: root item completed.
- qml: ListView completed.
- 
- Also, if there is no ListView inside ModelTest.qml, then nothing is
- updated after the items are completed. So I suspect the issue is in our
- ListView extension.
+ the test will fail. Also, one can replace the TestCase by Item (and
+ remove when: windowShown) and simply use qmlscene to start the app. It
+ will show that myObject is set twice: before the component completed,
+ and then again afterwards. I suspect the reason for this is the change
+ of the 'window' context property which causes everything in the context
+ (objectOne) and properties that depend on that to be re-evaluated.

-- 
You received this bug notification because you are a member of Ubuntu
Touch seeded packages, which is subscribed to ubuntu-ui-toolkit in
Ubuntu.
https://bugs.launchpad.net/bugs/1621509

Title:
  'window' contextProperty is registered after components are completed

Status in ubuntu-ui-toolkit package in Ubuntu:
  In Progress

Bug description:
  This is the cause for the Sections index resetting after
  initialization, see bug 1610231.

  Use this code:
  ------ ModelFromList13.qml ------
  import QtQuick 2.4

  // This component is used in tst_listview_bug1621509.13.qml
  Item {
      id: root
      property var myObject
      property int count: 0 // will hold the number of changes to myObject 
after Component.completed.

      onMyObjectChanged: {
          print("myObject changed to "+myObject)
          count++;
      }
      Component.onCompleted: {
          count = 0;
      }
  }

  ------ tst_list_model_from_list_bug1621509.13.qml ------
  import QtQuick 2.4
  import QtTest 1.0

  // Ubuntu.Components is not explicitly used below, but its import causes bug 
#1621509.
  import Ubuntu.Components 1.3

  TestCase {
      id: testCase
      name: "EmbeddedListView"
      width: 100
      height: 100

      // Bug #1621509 only occurs when we wait for the window to be visible.
      // Forces the components to be completed before the test functions are 
executed.
      when: windowShown

      ModelFromList13 {
          id: embeddedListView
          QtObject {
              objectName: "one"
              id: objectOne
          }
          myObject: objectOne
      }

      Component.onCompleted: {
          print("Component completed."); // must print something to reproduce 
the bug.
      }

      function test_no_model_change_after_completed_bug1621509_bug1610231() {
          compare(embeddedListView.count, 0,
                  "The model was changed after the component was completed.");
      }
  }
  ----------

  the test will fail. Also, one can replace the TestCase by Item (and
  remove when: windowShown) and simply use qmlscene to start the app. It
  will show that myObject is set twice: before the component completed,
  and then again afterwards. I suspect the reason for this is the change
  of the 'window' context property which causes everything in the
  context (objectOne) and properties that depend on that to be re-
  evaluated.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1621509/+subscriptions

-- 
Mailing list: https://launchpad.net/~touch-packages
Post to     : touch-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~touch-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to