Sébastien Ramage : user32: End scrollbar tracking if the mouse capture is lost.

Alexandre Julliard julliard at winehq.org
Thu Mar 25 11:44:44 CDT 2010


Module: wine
Branch: master
Commit: e7165b3921a38cccf6e6eebbf6d4041423493d5b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e7165b3921a38cccf6e6eebbf6d4041423493d5b

Author: Sébastien Ramage <sebastien.ramage at gmail.com>
Date:   Thu Mar 25 09:15:37 2010 +0100

user32: End scrollbar tracking if the mouse capture is lost.

---

 dlls/user32/scroll.c       |    2 +-
 dlls/user32/tests/scroll.c |   16 +++++++++++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c
index 423dea1..81d5d0b 100644
--- a/dlls/user32/scroll.c
+++ b/dlls/user32/scroll.c
@@ -1129,7 +1129,7 @@ void SCROLL_TrackScrollBar( HWND hwnd, INT scrollbar, POINT pt )
             ReleaseCapture();
             break;
         }
-    } while (msg.message != WM_LBUTTONUP);
+    } while (msg.message != WM_LBUTTONUP && GetCapture() == hwnd);
 }
 
 
diff --git a/dlls/user32/tests/scroll.c b/dlls/user32/tests/scroll.c
index 0695639..e3f6938 100644
--- a/dlls/user32/tests/scroll.c
+++ b/dlls/user32/tests/scroll.c
@@ -42,12 +42,25 @@ static LRESULT CALLBACK MyWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
     case WM_DESTROY:
         PostQuitMessage(0);
         break;
-
+    case WM_HSCROLL:
+    case WM_VSCROLL:
+        /* stop tracking */
+        ReleaseCapture();
+        return 0;
     default:
         return DefWindowProcA(hWnd, msg, wParam, lParam);
     }
     return 0;
 }
+static void scrollbar_test_track(void)
+{
+    /* test that scrollbar tracking is terminated when
+     * the control looses mouse capture */
+    SendMessage( hScroll, WM_LBUTTONDOWN, 0, MAKELPARAM( 1, 1));
+    /* a normal return from the sendmessage */
+    /* not normal for instance by closing the windws */
+    ok( IsWindow( hScroll), "Scrollbar has gone!\n");
+}
 
 static void scrollbar_test1(void)
 {
@@ -420,6 +433,7 @@ START_TEST ( scroll )
     scrollbar_test2();
     scrollbar_test3();
     scrollbar_test4();
+    scrollbar_test_track();
 
     /* Some test results vary depending of theming being active or not */
     hUxtheme = LoadLibraryA("uxtheme.dll");




More information about the wine-cvs mailing list