Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/comctl32/tests/trackbar.c | 11 +++++++++++ dlls/comctl32/trackbar.c | 31 +++++++++++++++++-------------- 2 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/dlls/comctl32/tests/trackbar.c b/dlls/comctl32/tests/trackbar.c index 7d66df775e..7f17e9e4b6 100644 --- a/dlls/comctl32/tests/trackbar.c +++ b/dlls/comctl32/tests/trackbar.c @@ -613,6 +613,17 @@ static void test_page_size(void) r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0); ok(r == 10, "Unexpected page size %d.\n", r);
+ r = SendMessageA(hWndTrackbar, TBM_SETPAGESIZE, 0, -1); + ok(r == 10, "Unexpected page size %d.\n", r); + + r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0); + ok(r == 7, "Unexpected page size %d.\n", r); + + SendMessageA(hWndTrackbar, TBM_SETRANGEMAX, 0, 100); + + r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0); + ok(r == 19, "Unexpected page size %d.\n", r); + DestroyWindow(hWndTrackbar);
hWndTrackbar = create_trackbar(defaultstyle, hWndParent); diff --git a/dlls/comctl32/trackbar.c b/dlls/comctl32/trackbar.c index 762d2e1376..d774823d60 100644 --- a/dlls/comctl32/trackbar.c +++ b/dlls/comctl32/trackbar.c @@ -1196,18 +1196,30 @@ TRACKBAR_SetLineSize (TRACKBAR_INFO *infoPtr, LONG lLineSize) return lTemp; }
+static void TRACKBAR_UpdatePageSize(TRACKBAR_INFO *infoPtr) +{ + if (infoPtr->flags & TB_USER_PAGE) + return; + + infoPtr->lPageSize = (infoPtr->lRangeMax - infoPtr->lRangeMin) / 5; + if (infoPtr->lPageSize == 0) infoPtr->lPageSize = 1; +}
static inline LONG TRACKBAR_SetPageSize (TRACKBAR_INFO *infoPtr, LONG lPageSize) { LONG lTemp = infoPtr->lPageSize;
- if (lPageSize != -1) - infoPtr->lPageSize = lPageSize; + if (lPageSize == -1) + { + infoPtr->flags &= ~TB_USER_PAGE; + TRACKBAR_UpdatePageSize(infoPtr); + } else - infoPtr->lPageSize = TB_DEFAULTPAGESIZE; - - infoPtr->flags |= TB_USER_PAGE; + { + infoPtr->flags |= TB_USER_PAGE; + infoPtr->lPageSize = lPageSize; + }
return lTemp; } @@ -1234,15 +1246,6 @@ TRACKBAR_SetPos (TRACKBAR_INFO *infoPtr, BOOL fPosition, LONG lPosition) return 0; }
-static void TRACKBAR_UpdatePageSize(TRACKBAR_INFO *infoPtr) -{ - if (infoPtr->flags & TB_USER_PAGE) - return; - - infoPtr->lPageSize = (infoPtr->lRangeMax - infoPtr->lRangeMin) / 5; - if (infoPtr->lPageSize == 0) infoPtr->lPageSize = 1; -} - static inline LRESULT TRACKBAR_SetRange (TRACKBAR_INFO *infoPtr, BOOL redraw, LONG range) {