Nikolay Sivov : comctl32/trackbar: Don' t update page size if it was explicitly set.

Alexandre Julliard julliard at winehq.org
Thu Sep 13 03:49:14 CDT 2018


Module: wine
Branch: stable
Commit: c9a060afbcbc624206b99b26656d3913e8a54b8b
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=c9a060afbcbc624206b99b26656d3913e8a54b8b

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sat May  5 19:18:58 2018 +0300

comctl32/trackbar: Don't update page size if it was explicitly set.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 6dc3c6ba879b79fac7e4c9c0693539a614229978)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/comctl32/tests/trackbar.c | 41 +++++++++++++++++++++++++++++++++++++++++
 dlls/comctl32/trackbar.c       | 42 ++++++++++++++++++++++++++----------------
 2 files changed, 67 insertions(+), 16 deletions(-)

diff --git a/dlls/comctl32/tests/trackbar.c b/dlls/comctl32/tests/trackbar.c
index 9cc8b27..d4a9eb7 100644
--- a/dlls/comctl32/tests/trackbar.c
+++ b/dlls/comctl32/tests/trackbar.c
@@ -576,6 +576,47 @@ static void test_page_size(void)
     hWndTrackbar = create_trackbar(defaultstyle, hWndParent);
     ok(hWndTrackbar != NULL, "Expected non NULL value\n");
 
+    r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0);
+    ok(r == 20, "Unexpected page size %d.\n", r);
+
+    SendMessageA(hWndTrackbar, TBM_SETRANGE, 0, MAKELPARAM(0, 65));
+
+    r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0);
+    ok(r == 13, "Unexpected page size %d.\n", r);
+
+    SendMessageA(hWndTrackbar, TBM_SETRANGEMIN, 0, 10);
+
+    r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0);
+    ok(r == 11, "Unexpected page size %d.\n", r);
+
+    SendMessageA(hWndTrackbar, TBM_SETRANGEMAX, 0, 50);
+
+    r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0);
+    ok(r == 8, "Unexpected page size %d.\n", r);
+
+    r = SendMessageA(hWndTrackbar, TBM_SETPAGESIZE, 0, 10);
+    ok(r == 8, "Unexpected page size %d.\n", r);
+
+    SendMessageA(hWndTrackbar, TBM_SETRANGE, 0, MAKELPARAM(0, 30));
+
+    r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0);
+    ok(r == 10, "Unexpected page size %d.\n", r);
+
+    SendMessageA(hWndTrackbar, TBM_SETRANGEMIN, 0, 5);
+
+    r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0);
+    ok(r == 10, "Unexpected page size %d.\n", r);
+
+    SendMessageA(hWndTrackbar, TBM_SETRANGEMAX, 0, 40);
+
+    r = SendMessageA(hWndTrackbar, TBM_GETPAGESIZE, 0, 0);
+    ok(r == 10, "Unexpected page size %d.\n", r);
+
+    DestroyWindow(hWndTrackbar);
+
+    hWndTrackbar = create_trackbar(defaultstyle, hWndParent);
+    ok(hWndTrackbar != NULL, "Failed to create trackbar window.\n");
+
     flush_sequences(sequences, NUM_MSG_SEQUENCE);
 
     /* test TBM_SETPAGESIZE */
diff --git a/dlls/comctl32/trackbar.c b/dlls/comctl32/trackbar.c
index cdbf859..074304c 100644
--- a/dlls/comctl32/trackbar.c
+++ b/dlls/comctl32/trackbar.c
@@ -69,7 +69,7 @@ typedef struct
     HWND hwndBuddyLA;
     HWND hwndBuddyRB;
     INT  fLocation;
-    INT  flags;
+    DWORD flags;
     BOOL bUnicode;
     BOOL bFocussed;
     RECT rcChannel;
@@ -88,15 +88,18 @@ typedef struct
 /* Used by TRACKBAR_Refresh to find out which parts of the control
    need to be recalculated */
 
-#define TB_THUMBPOSCHANGED      1
-#define TB_THUMBSIZECHANGED     2
-#define TB_THUMBCHANGED 	(TB_THUMBPOSCHANGED | TB_THUMBSIZECHANGED)
-#define TB_SELECTIONCHANGED     4
-#define TB_DRAG_MODE            8     /* we're dragging the slider */
-#define TB_AUTO_PAGE_LEFT	16
-#define TB_AUTO_PAGE_RIGHT	32
-#define TB_AUTO_PAGE		(TB_AUTO_PAGE_LEFT | TB_AUTO_PAGE_RIGHT)
-#define TB_THUMB_HOT            64    /* mouse hovers above thumb */
+#define TB_THUMBPOSCHANGED      0x00000001
+#define TB_THUMBSIZECHANGED     0x00000002
+#define TB_THUMBCHANGED        (TB_THUMBPOSCHANGED | TB_THUMBSIZECHANGED)
+#define TB_SELECTIONCHANGED     0x00000004
+#define TB_DRAG_MODE            0x00000008     /* we're dragging the slider */
+#define TB_AUTO_PAGE_LEFT       0x00000010
+#define TB_AUTO_PAGE_RIGHT      0x00000020
+#define TB_AUTO_PAGE           (TB_AUTO_PAGE_LEFT | TB_AUTO_PAGE_RIGHT)
+#define TB_THUMB_HOT            0x00000040    /* mouse hovers above thumb */
+
+/* Page was set with TBM_SETPAGESIZE */
+#define TB_USER_PAGE            0x00000080
 
 /* helper defines for TRACKBAR_DrawTic */
 #define TIC_EDGE                0x20
@@ -1214,6 +1217,8 @@ TRACKBAR_SetPageSize (TRACKBAR_INFO *infoPtr, LONG lPageSize)
     else
         infoPtr->lPageSize = TB_DEFAULTPAGESIZE;
 
+    infoPtr->flags |= TB_USER_PAGE;
+
     return lTemp;
 }
 
@@ -1239,6 +1244,14 @@ 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)
@@ -1256,8 +1269,7 @@ TRACKBAR_SetRange (TRACKBAR_INFO *infoPtr, BOOL redraw, LONG range)
     if (infoPtr->lPos > infoPtr->lRangeMax)
         infoPtr->lPos = infoPtr->lRangeMax;
 
-    infoPtr->lPageSize = (infoPtr->lRangeMax - infoPtr->lRangeMin) / 5;
-    if (infoPtr->lPageSize == 0) infoPtr->lPageSize = 1;
+    TRACKBAR_UpdatePageSize(infoPtr);
 
     if (changed) {
         if (infoPtr->dwStyle & TBS_AUTOTICKS)
@@ -1283,8 +1295,7 @@ TRACKBAR_SetRangeMax (TRACKBAR_INFO *infoPtr, BOOL redraw, LONG lMax)
         infoPtr->flags |= TB_THUMBPOSCHANGED;
     }
 
-    infoPtr->lPageSize = (infoPtr->lRangeMax - infoPtr->lRangeMin) / 5;
-    if (infoPtr->lPageSize == 0) infoPtr->lPageSize = 1;
+    TRACKBAR_UpdatePageSize(infoPtr);
 
     if (changed && (infoPtr->dwStyle & TBS_AUTOTICKS))
         TRACKBAR_RecalculateTics (infoPtr);
@@ -1306,8 +1317,7 @@ TRACKBAR_SetRangeMin (TRACKBAR_INFO *infoPtr, BOOL redraw, LONG lMin)
         infoPtr->flags |= TB_THUMBPOSCHANGED;
     }
 
-    infoPtr->lPageSize = (infoPtr->lRangeMax - infoPtr->lRangeMin) / 5;
-    if (infoPtr->lPageSize == 0) infoPtr->lPageSize = 1;
+    TRACKBAR_UpdatePageSize(infoPtr);
 
     if (changed && (infoPtr->dwStyle & TBS_AUTOTICKS))
         TRACKBAR_RecalculateTics (infoPtr);




More information about the wine-cvs mailing list