[SailfishDevel] [bug] Silica ComboBox.qml - can't set currentIndex after initialization
Thomas Amler
armadillo at penguinfriends.org
Tue Jan 6 10:36:33 UTC 2015
I'm using this workaround:
Component.onCompleted: {
listid = parseInt(DB.getTaskProperty(taskid, "ListID"))
DB.readLists()
listLocatedIn.currentIndex = listindex
listLocatedIn.currentItem = listLocatedIn.menu.children[listindex]
}
Am 05.01.2015 um 11:40 schrieb Andrey Kozhevnikov:
> yeah, i'm using _updating = false in my application also. This is the
> best workaround i found.
>
> 29.12.2014 19:45, ok1hlm at centrum.cz пишет:
>> Hi,
>>
>> I've found a bug in ComboBox.qml used in Jolla phone. I wrote an
>> application using pyotherside. During initialization, it populates
>> combobox and sets the currentIndex to saved value. The problem is,
>> that setting the currentIndex does nothing.
>>
>> ComboBox.qml uses weird timer to delay some tasks. When you change
>> currentIndex before that timer is triggered, it ignores the change.
>>
>> Connections {
>> target: comboBox.menu ? comboBox.menu._contentColumn : null
>> onChildrenChanged: {
>> // delay the reload in case there are more children changes
>> to come
>> if (!updateCurrentTimer.running) {
>> _updating = true
>> updateCurrentTimer.start()
>> }
>> }
>> }
>>
>> VS.
>>
>> onCurrentIndexChanged: {
>> _currentIndexSet = true
>> if (_completed && !_updating) {
>> _updating = true
>> _updateCurrent(currentIndex, null)
>> _updating = false
>> }
>> }
>>
>> My application does something like:
>>
>> function foo(result) {
>> for(var i=0; i<result.length; ++i)
>> combolistmodel.append({index:i, text:result[i]});
>> }
>> foo(['abc','def','foo','bar','baz']);
>> // comboid._updating = 0; // REQUIRED WORKAROUND
>> comboid.currentIndex=3;
>>
>> Whey I force the _updating to 'false', it works. Also if I set the
>> correntIndex in a timer some time later, it works.
>>
>> I've tested following workaround:
>>
>> onCurrentIndexChanged: {
>> _currentIndexSet = true
>> if (_completed) {
>> if (updateCurrentTimer.running) {
>> var save_currentIndex = currentIndex;
>> updateCurrentTimer.stop()
>> updateCurrentTimer.onTriggered()
>> currentIndex = save_currentIndex;
>> }
>> if (!_updating) {
>> _updating = true
>> _updateCurrent(currentIndex, null)
>> _updating = false
>> }
>> }
>> }
>>
>> But it still seems odd to me to use a timer in in a combobox.
>>
>> Whole reproducer: http://fpaste.org/164044/59940141/
>> Code causing this problem: http://fpaste.org/163881/97171141/
>> Tested workaround: http://fpaste.org/164045/85997614/
>>
>>
>> Michal
>> _______________________________________________
>> SailfishOS.org Devel mailing list
>> To unsubscribe, please send a mail to
>> devel-unsubscribe at lists.sailfishos.org
>
> _______________________________________________
> SailfishOS.org Devel mailing list
> To unsubscribe, please send a mail to
> devel-unsubscribe at lists.sailfishos.org
More information about the Devel
mailing list