user32: end scrollbar tracking if the mouse capture is lost
Rein Klazes
wijn at online.nl
Thu Apr 2 04:37:12 CDT 2009
Fixes bug #16595
---
dlls/user32/scroll.c | 5 +----
dlls/user32/tests/scroll.c | 17 ++++++++++++++++-
2 files changed, 17 insertions(+), 5 deletions(-)
diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c
index 93f85f2..91adb74 100644
--- a/dlls/user32/scroll.c
+++ b/dlls/user32/scroll.c
@@ -1105,11 +1105,8 @@ void SCROLL_TrackScrollBar( HWND hwnd, INT scrollbar, POINT pt )
DispatchMessageW( &msg );
}
if (!IsWindow( hwnd ))
- {
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 46080ca..4f602c2 100644
--- a/dlls/user32/tests/scroll.c
+++ b/dlls/user32/tests/scroll.c
@@ -41,7 +41,11 @@ 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);
}
@@ -206,6 +210,16 @@ static void scrollbar_test4(void)
sbi.rcScrollBar.bottom, sbi.rcScrollBar.right );
}
+static void scrollbar_test_track(void)
+{
+ /* test that scrollbar tracking is terminated when
+ * the control looses mouse capture */
+ SendMessage( hScroll, WM_LBUTTONDBLCLK, 0, 0x10001);
+ /* a normal return from the sendmessage */
+ /* not normal for instance by closing the windws */
+ ok( IsWindow( hScroll), "Scrollbar has gone!\n");
+}
+
START_TEST ( scroll )
{
WNDCLASSA wc;
@@ -235,6 +249,7 @@ START_TEST ( scroll )
scrollbar_test2();
scrollbar_test3();
scrollbar_test4();
+ scrollbar_test_track();
DestroyWindow(hScroll);
DestroyWindow(hMainWnd);
--
1.6.2.1
More information about the wine-patches
mailing list