Does it mean you still cannot reproduce it? Anyway, I don't think that's the issue. In a test case where I select the bottom element in the screen (with the list scrolled to the top), this is what I get:
vertical_scrolling_per_row = False
The new position (i.e. what's passed to vsb.setValue()) is 188. The selected row is scrolled to the middle of the screen, so the calculations are correct.
vertical_scrolling_per_row = True
All values are the same, so the new position is also 188. But now passing this to vsb.setValue() seems to have a different meaning, and indeed the list is scrolled down until row #189 is at the top.
Does it mean you still cannot reproduce it? Anyway, I don't think that's the issue. In a test case where I select the bottom element in the screen (with the list scrolled to the top), this is what I get:
vertical_ scrolling_ per_row = False
The new position (i.e. what's passed to vsb.setValue()) is 188. The selected row is scrolled to the middle of the screen, so the calculations are correct.
vertical_ scrolling_ per_row = True
All values are the same, so the new position is also 188. But now passing this to vsb.setValue() seems to have a different meaning, and indeed the list is scrolled down until row #189 is at the top.