(resubmit: need a hint) Subject: user32: end scrollbar tracking if the mouse capture is lost
Rein Klazes
wijn at online.nl
Thu May 7 01:52:17 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 52c350c..0ee0241 100644
--- a/dlls/user32/scroll.c
+++ b/dlls/user32/scroll.c
@@ -1125,11 +1125,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 55fb6f6..56069c2 100644
--- a/dlls/user32/tests/scroll.c
+++ b/dlls/user32/tests/scroll.c
@@ -42,13 +42,27 @@ 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, 0x10001);
+ /* 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)
{
BOOL ret;
@@ -408,6 +422,7 @@ START_TEST ( scroll )
assert( hScroll );
+ scrollbar_test_track();
scrollbar_test1();
scrollbar_test2();
scrollbar_test3();
--
1.6.2.4
More information about the wine-patches
mailing list