From 3dc6317fc6cbdec26c0dbab798bef5dffd178650 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Tue, 15 Dec 2009 13:19:30 +0100 Subject: [PATCH] user32: Turn the scrollbar winproc into a Wow handler. --- dlls/user32/controls.h | 3 +++ dlls/user32/msg16.c | 33 +++++++++++++++++++++++++++++++++ dlls/user32/scroll.c | 40 ++++------------------------------------ dlls/user32/winproc.c | 10 ++++++---- 4 files changed, 46 insertions(+), 40 deletions(-) diff --git a/dlls/user32/controls.h b/dlls/user32/controls.h index 80f6bf52ebb..82036bf4a60 100644 --- a/dlls/user32/controls.h +++ b/dlls/user32/controls.h @@ -65,6 +65,7 @@ struct wow_handlers16 LRESULT (*combo_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*edit_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*listbox_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); + LRESULT (*scrollbar_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); }; struct wow_handlers32 @@ -73,6 +74,7 @@ struct wow_handlers32 LRESULT (*combo_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*edit_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); LRESULT (*listbox_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); + LRESULT (*scrollbar_proc)(HWND,UINT,WPARAM,LPARAM,BOOL); }; extern struct wow_handlers16 wow_handlers DECLSPEC_HIDDEN; @@ -81,6 +83,7 @@ extern LRESULT ButtonWndProc_common(HWND,UINT,WPARAM,LPARAM,BOOL) DECLSPEC_HIDDE extern LRESULT ComboWndProc_common(HWND,UINT,WPARAM,LPARAM,BOOL) DECLSPEC_HIDDEN; extern LRESULT EditWndProc_common(HWND,UINT,WPARAM,LPARAM,BOOL) DECLSPEC_HIDDEN; extern LRESULT ListBoxWndProc_common(HWND,UINT,WPARAM,LPARAM,BOOL) DECLSPEC_HIDDEN; +extern LRESULT ScrollBarWndProc_common(HWND,UINT,WPARAM,LPARAM,BOOL) DECLSPEC_HIDDEN; extern void register_wow_handlers(void) DECLSPEC_HIDDEN; extern void WINAPI UserRegisterWowHandlers( const struct wow_handlers16 *new, diff --git a/dlls/user32/msg16.c b/dlls/user32/msg16.c index 2ebb133d0eb..239e8e5bfbc 100644 --- a/dlls/user32/msg16.c +++ b/dlls/user32/msg16.c @@ -1159,6 +1159,38 @@ static LRESULT listbox_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam } +/*********************************************************************** + * scrollbar_proc16 + */ +static LRESULT scrollbar_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) +{ + static const UINT msg16_offset = SBM_SETPOS16 - SBM_SETPOS; + + switch (msg) + { + case SBM_SETPOS16: + case SBM_GETPOS16: + case SBM_ENABLE_ARROWS16: + msg -= msg16_offset; + break; + case SBM_SETRANGE16: + msg = wParam ? SBM_SETRANGEREDRAW : SBM_SETRANGE; + wParam = LOWORD(lParam); + lParam = HIWORD(lParam); + break; + case SBM_GETRANGE16: + { + INT min, max; + wow_handlers32.scrollbar_proc( hwnd, SBM_GETRANGE, (WPARAM)&min, (LPARAM)&max, FALSE ); + return MAKELRESULT(min, max); + } + default: + return wow_handlers32.scrollbar_proc( hwnd, msg, wParam, lParam, unicode ); + } + return wow_handlers32.scrollbar_proc( hwnd, msg, wParam, lParam, FALSE ); +} + + void register_wow_handlers(void) { static const struct wow_handlers16 handlers16 = @@ -1167,6 +1199,7 @@ void register_wow_handlers(void) combo_proc16, edit_proc16, listbox_proc16, + scrollbar_proc16, }; UserRegisterWowHandlers( &handlers16, &wow_handlers32 ); diff --git a/dlls/user32/scroll.c b/dlls/user32/scroll.c index 6ab1e56145a..b948c82fc00 100644 --- a/dlls/user32/scroll.c +++ b/dlls/user32/scroll.c @@ -33,7 +33,6 @@ #include "windef.h" #include "winbase.h" #include "wingdi.h" -#include "wine/winuser16.h" #include "controls.h" #include "win.h" #include "wine/debug.h" @@ -1401,9 +1400,9 @@ static BOOL SCROLL_SetScrollRange(HWND hwnd, INT nBar, INT minVal, INT maxVal) /*********************************************************************** - * ScrollBarWndProc + * ScrollBarWndProc_common */ -static LRESULT ScrollBarWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL unicode ) +LRESULT ScrollBarWndProc_common( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam, BOOL unicode ) { if (!IsWindow( hwnd )) return 0; @@ -1575,43 +1574,12 @@ static LRESULT ScrollBarWndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM } -/*********************************************************************** - * ScrollBarWndProc_wrapper16 - */ -static LRESULT ScrollBarWndProc_wrapper16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode ) -{ - static const UINT msg16_offset = SBM_SETPOS16 - SBM_SETPOS; - - switch (msg) - { - case SBM_SETPOS16: - case SBM_GETPOS16: - case SBM_ENABLE_ARROWS16: - msg -= msg16_offset; - break; - case SBM_SETRANGE16: - msg = wParam ? SBM_SETRANGEREDRAW : SBM_SETRANGE; - wParam = LOWORD(lParam); - lParam = HIWORD(lParam); - break; - case SBM_GETRANGE16: - { - INT min, max; - ScrollBarWndProc( hwnd, SBM_GETRANGE, (WPARAM)&min, (LPARAM)&max, FALSE ); - return MAKELRESULT(min, max); - } - default: - return ScrollBarWndProc( hwnd, msg, wParam, lParam, unicode ); - } - return ScrollBarWndProc( hwnd, msg, wParam, lParam, FALSE ); -} - /*********************************************************************** * ScrollBarWndProcA */ static LRESULT WINAPI ScrollBarWndProcA( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { - return ScrollBarWndProc_wrapper16( hwnd, message, wParam, lParam, FALSE ); + return wow_handlers.scrollbar_proc( hwnd, message, wParam, lParam, FALSE ); } @@ -1620,7 +1588,7 @@ static LRESULT WINAPI ScrollBarWndProcA( HWND hwnd, UINT message, WPARAM wParam, */ static LRESULT WINAPI ScrollBarWndProcW( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { - return ScrollBarWndProc_wrapper16( hwnd, message, wParam, lParam, TRUE ); + return wow_handlers.scrollbar_proc( hwnd, message, wParam, lParam, TRUE ); } diff --git a/dlls/user32/winproc.c b/dlls/user32/winproc.c index 0a91a586578..d434961c4ba 100644 --- a/dlls/user32/winproc.c +++ b/dlls/user32/winproc.c @@ -2388,10 +2388,11 @@ INT_PTR WINPROC_CallDlgProcW( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam, */ void WINAPI UserRegisterWowHandlers( const struct wow_handlers16 *new, struct wow_handlers32 *orig ) { - orig->button_proc = ButtonWndProc_common; - orig->combo_proc = ComboWndProc_common; - orig->edit_proc = EditWndProc_common; - orig->listbox_proc = ListBoxWndProc_common; + orig->button_proc = ButtonWndProc_common; + orig->combo_proc = ComboWndProc_common; + orig->edit_proc = EditWndProc_common; + orig->listbox_proc = ListBoxWndProc_common; + orig->scrollbar_proc = ScrollBarWndProc_common; wow_handlers = *new; } @@ -2402,4 +2403,5 @@ struct wow_handlers16 wow_handlers = ComboWndProc_common, EditWndProc_common, ListBoxWndProc_common, + ScrollBarWndProc_common, };