Module: wine Branch: master Commit: f025570c801d72f8355a988d58a28bfe75390a8a URL: https://source.winehq.org/git/wine.git/?a=commit;h=f025570c801d72f8355a988d5...
Author: Gabriel Ivăncescu gabrielopcode@gmail.com Date: Thu Aug 16 18:03:49 2018 +0300
user32/listbox: Fix scrolling for multi-column listboxes.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=38565 Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/listbox.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/dlls/user32/listbox.c b/dlls/user32/listbox.c index 991ab87..3f1396d 100644 --- a/dlls/user32/listbox.c +++ b/dlls/user32/listbox.c @@ -300,28 +300,27 @@ static LRESULT LISTBOX_SetTopItem( LB_DESCR *descr, INT index, BOOL scroll ) if (descr->top_item == index) return LB_OKAY; if (scroll) { - INT diff; + INT dx = 0, dy = 0; if (descr->style & LBS_MULTICOLUMN) - diff = (descr->top_item - index) / descr->page_size * descr->column_width; + dx = (descr->top_item - index) / descr->page_size * descr->column_width; else if (descr->style & LBS_OWNERDRAWVARIABLE) { INT i; - diff = 0; if (index > descr->top_item) { for (i = index - 1; i >= descr->top_item; i--) - diff -= descr->items[i].height; + dy -= descr->items[i].height; } else { for (i = index; i < descr->top_item; i++) - diff += descr->items[i].height; + dy += descr->items[i].height; } } else - diff = (descr->top_item - index) * descr->item_height; + dy = (descr->top_item - index) * descr->item_height;
- ScrollWindowEx( descr->self, 0, diff, NULL, NULL, 0, NULL, + ScrollWindowEx( descr->self, dx, dy, NULL, NULL, 0, NULL, SW_INVALIDATE | SW_ERASE | SW_SCROLLCHILDREN ); } else