From de608991eacc944d63ae45bb418813e7f9af09cf Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Thu, 15 Mar 2007 22:04:45 -0700 Subject: [PATCH] comctl32: trackbar: Correctly set lSetMin and lSelMax. Modify the behavior when the messages TBM_SETSEL, TBM_SETSELSTART, and TBM_SETSELEND are sent and TBS_ENABLESELRANGE is not set. When the style TBS_ENABLESELRANGE is not set, Windows observed behavior is to set the Selection Start and End values to 0, rather than leave them unchanged. --- dlls/comctl32/tests/trackbar.c | 16 ++++------------ dlls/comctl32/trackbar.c | 13 ++++++++++--- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/dlls/comctl32/tests/trackbar.c b/dlls/comctl32/tests/trackbar.c index bb2ccdb6b3d..3cecd88313b 100644 --- a/dlls/comctl32/tests/trackbar.c +++ b/dlls/comctl32/tests/trackbar.c @@ -902,16 +902,12 @@ static void test_ignore_selection(HWND hWndTrackbar){ /* test TBM_SETSEL ensure that it is ignored */ SendMessage(hWndTrackbar, TBM_SETSEL, TRUE, MAKELONG(0,10)); r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - todo_wine{ - expect(0, r); - } + expect(0, r); r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); expect(0, r); SendMessage(hWndTrackbar, TBM_SETSEL, FALSE, MAKELONG(0,10)); r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - todo_wine{ - expect(0, r); - } + expect(0, r); r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); expect(0, r); @@ -921,9 +917,7 @@ static void test_ignore_selection(HWND hWndTrackbar){ expect(0, r); SendMessage(hWndTrackbar, TBM_SETSELEND, TRUE, 10); r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); - todo_wine{ - expect(0,r); - } + expect(0,r); SendMessage(hWndTrackbar, TBM_SETSELEND, FALSE, 0); r = SendMessage(hWndTrackbar, TBM_GETSELEND, 0,0); expect(0, r); @@ -934,9 +928,7 @@ static void test_ignore_selection(HWND hWndTrackbar){ expect(0, r); SendMessage(hWndTrackbar, TBM_SETSELSTART, TRUE, 10); r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); - todo_wine{ - expect(0,r); - } + expect(0,r); SendMessage(hWndTrackbar, TBM_SETSELSTART, FALSE, 0); r = SendMessage(hWndTrackbar, TBM_GETSELSTART, 0,0); expect(0, r); diff --git a/dlls/comctl32/trackbar.c b/dlls/comctl32/trackbar.c index b61e64d0c3a..d718e00abd2 100644 --- a/dlls/comctl32/trackbar.c +++ b/dlls/comctl32/trackbar.c @@ -1216,8 +1216,11 @@ TRACKBAR_SetRangeMin (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lMin) inline static LRESULT TRACKBAR_SetSel (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lSel) { - if (!GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE) + if (!(GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE)){ + infoPtr->lSelMin = 0; + infoPtr->lSelMax = 0; return 0; + } infoPtr->lSelMin = (SHORT)LOWORD(lSel); infoPtr->lSelMax = (SHORT)HIWORD(lSel); @@ -1237,8 +1240,10 @@ TRACKBAR_SetSel (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lSel) inline static LRESULT TRACKBAR_SetSelEnd (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lEnd) { - if (!GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE) + if (!(GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE)){ + infoPtr->lSelMax = 0; return 0; + } infoPtr->lSelMax = lEnd; infoPtr->flags |= TB_SELECTIONCHANGED; @@ -1255,8 +1260,10 @@ TRACKBAR_SetSelEnd (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lEnd) inline static LRESULT TRACKBAR_SetSelStart (TRACKBAR_INFO *infoPtr, BOOL fRedraw, LONG lStart) { - if (!GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE) + if (!(GetWindowLongW (infoPtr->hwndSelf, GWL_STYLE) & TBS_ENABLESELRANGE)){ + infoPtr->lSelMin = 0; return 0; + } infoPtr->lSelMin = lStart; infoPtr->flags |=TB_SELECTIONCHANGED;