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

Reply via email to