Module: wine Branch: master Commit: e7165b3921a38cccf6e6eebbf6d4041423493d5b URL: http://source.winehq.org/git/wine.git/?a=commit;h=e7165b3921a38cccf6e6eebbf6...
Author: Sébastien Ramage sebastien.ramage@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");