With latest master of Kirigami we are observing an odd problem in
Subsurface-mobile.
This happens in landscape mode (at least I haven't been able to reproduce this
in portrait mode).
Our page stack has in position zero a vertical listview (dive list). If you
select one of the dives in this listview, that opens a secondary listview in
position one of the page stack, this one is horizontal.
If you swipe left or right to flip from dive to dive in that horizontal
listview, syncIndexWithPosition gets called on the page stack with
mapped.x(1024), actualRoot.currentItem.width(1024) and actualRoot.width(1024).
This is where I don't quite understand how the code is supposed to work:
var mapped = actualRoot.currentItem.mapToItem(mainFlickable, 0, 0);
if (mapped.x >= 0 && mapped.x + actualRoot.currentItem.width <=
actualRoot.width) {
return;
}
So the first test fails as mapped.x + currentItem.width is 2048 > width of 1024
what does that mean? what are we checking here for?
Then the code loops through the page stack to find an item that can be mapped
on the screen - which always picks the first item in the page stack.
//search the last page to kinda fit
for (var i = Engine.pageStack.length - 1; i >= 0; --i) {
var item = Engine.pageStack[i];
var mapped = item.mapToItem(mainFlickable, 0, 0, item.width,
item.height);
if (mapped.x < item.width /2 && (mapped.x+mapped.width) <=
actualRoot.width) {
actualRoot.currentIndex = i;
break;
}
}
As a result, trying to move from one item to the next in the inner horizontal
listview makes us jump back to page zero (which is the vertical outer listview).
So I tried to figure out why this happens in landscape mode and not in portrait
mode... the difference that I could find is that in landscape mode for some
reason we trigger the scrollEventCompressTimer but in portrait mode we don't ?!?
Adding a ton more print statements leads me to this:
in landscape mode we end up in the page stack's onContentXChanged handler
(why?) with dragging = false. And that causes us to restart the
scrollEventCompressTimer, even though we are scrolling only the inner listview
and not the page stack. But in portrait mode we never trigger the page stack's
onContentXChanged when swiping left and right between dives.
Does this make sense to anyone? Any idea how to fix this?
/D_______________________________________________
Plasma-devel mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/plasma-devel