user32: Implement UserRegisterWowHandlers function and add a handler for the button winproc.
This commit is contained in:
parent
020c75b0fe
commit
02e74fa8a6
|
@ -73,7 +73,6 @@
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
#include "wingdi.h"
|
#include "wingdi.h"
|
||||||
#include "wine/winuser16.h"
|
|
||||||
#include "controls.h"
|
#include "controls.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "user_private.h"
|
#include "user_private.h"
|
||||||
|
@ -230,8 +229,7 @@ static void setup_clipping( HWND hwnd, HDC hdc )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ButtonWndProc_common
|
* ButtonWndProc_common
|
||||||
*/
|
*/
|
||||||
static LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL unicode )
|
||||||
WPARAM wParam, LPARAM lParam, BOOL unicode )
|
|
||||||
{
|
{
|
||||||
RECT rect;
|
RECT rect;
|
||||||
POINT pt;
|
POINT pt;
|
||||||
|
@ -547,33 +545,13 @@ static LRESULT ButtonWndProc_common(HWND hWnd, UINT uMsg,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* ButtonWndProc_wrapper16
|
|
||||||
*/
|
|
||||||
static LRESULT ButtonWndProc_wrapper16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )
|
|
||||||
{
|
|
||||||
static const UINT msg16_offset = BM_GETCHECK16 - BM_GETCHECK;
|
|
||||||
|
|
||||||
switch (msg)
|
|
||||||
{
|
|
||||||
case BM_GETCHECK16:
|
|
||||||
case BM_SETCHECK16:
|
|
||||||
case BM_GETSTATE16:
|
|
||||||
case BM_SETSTATE16:
|
|
||||||
case BM_SETSTYLE16:
|
|
||||||
return ButtonWndProc_common( hwnd, msg - msg16_offset, wParam, lParam, FALSE );
|
|
||||||
default:
|
|
||||||
return ButtonWndProc_common( hwnd, msg, wParam, lParam, unicode );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ButtonWndProcW
|
* ButtonWndProcW
|
||||||
*/
|
*/
|
||||||
static LRESULT WINAPI ButtonWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
static LRESULT WINAPI ButtonWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
if (!IsWindow( hWnd )) return 0;
|
if (!IsWindow( hWnd )) return 0;
|
||||||
return ButtonWndProc_wrapper16( hWnd, uMsg, wParam, lParam, TRUE );
|
return wow_handlers.button_proc( hWnd, uMsg, wParam, lParam, TRUE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -583,7 +561,7 @@ static LRESULT WINAPI ButtonWndProcW( HWND hWnd, UINT uMsg, WPARAM wParam, LPARA
|
||||||
static LRESULT WINAPI ButtonWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
static LRESULT WINAPI ButtonWndProcA( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
if (!IsWindow( hWnd )) return 0;
|
if (!IsWindow( hWnd )) return 0;
|
||||||
return ButtonWndProc_wrapper16( hWnd, uMsg, wParam, lParam, FALSE );
|
return wow_handlers.button_proc( hWnd, uMsg, wParam, lParam, FALSE );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,26 @@ extern const struct builtin_class_descr MESSAGE_builtin_class DECLSPEC_HIDDEN;
|
||||||
extern const struct builtin_class_descr SCROLL_builtin_class DECLSPEC_HIDDEN;
|
extern const struct builtin_class_descr SCROLL_builtin_class DECLSPEC_HIDDEN;
|
||||||
extern const struct builtin_class_descr STATIC_builtin_class DECLSPEC_HIDDEN;
|
extern const struct builtin_class_descr STATIC_builtin_class DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
/* Wow handlers */
|
||||||
|
|
||||||
|
struct wow_handlers16
|
||||||
|
{
|
||||||
|
LRESULT (*button_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wow_handlers32
|
||||||
|
{
|
||||||
|
LRESULT (*button_proc)(HWND,UINT,WPARAM,LPARAM,BOOL);
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct wow_handlers16 wow_handlers DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
extern LRESULT ButtonWndProc_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,
|
||||||
|
struct wow_handlers32 *orig );
|
||||||
|
|
||||||
extern WNDPROC EDIT_winproc_handle DECLSPEC_HIDDEN;
|
extern WNDPROC EDIT_winproc_handle DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
/* Class functions */
|
/* Class functions */
|
||||||
|
|
|
@ -23,12 +23,15 @@
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "user_private.h"
|
#include "user_private.h"
|
||||||
|
#include "controls.h"
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(msg);
|
WINE_DEFAULT_DEBUG_CHANNEL(msg);
|
||||||
|
|
||||||
DWORD USER16_AlertableWait = 0;
|
DWORD USER16_AlertableWait = 0;
|
||||||
|
|
||||||
|
static struct wow_handlers32 wow_handlers32;
|
||||||
|
|
||||||
static LRESULT cwp_hook_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,
|
static LRESULT cwp_hook_callback( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp,
|
||||||
LRESULT *result, void *arg )
|
LRESULT *result, void *arg )
|
||||||
{
|
{
|
||||||
|
@ -584,3 +587,34 @@ BOOL16 WINAPI TranslateMDISysAccel16( HWND16 hwndClient, LPMSG16 msg )
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* button_proc16
|
||||||
|
*/
|
||||||
|
static LRESULT button_proc16( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL unicode )
|
||||||
|
{
|
||||||
|
static const UINT msg16_offset = BM_GETCHECK16 - BM_GETCHECK;
|
||||||
|
|
||||||
|
switch (msg)
|
||||||
|
{
|
||||||
|
case BM_GETCHECK16:
|
||||||
|
case BM_SETCHECK16:
|
||||||
|
case BM_GETSTATE16:
|
||||||
|
case BM_SETSTATE16:
|
||||||
|
case BM_SETSTYLE16:
|
||||||
|
return wow_handlers32.button_proc( hwnd, msg - msg16_offset, wParam, lParam, FALSE );
|
||||||
|
default:
|
||||||
|
return wow_handlers32.button_proc( hwnd, msg, wParam, lParam, unicode );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void register_wow_handlers(void)
|
||||||
|
{
|
||||||
|
static const struct wow_handlers16 handlers16 =
|
||||||
|
{
|
||||||
|
button_proc16,
|
||||||
|
};
|
||||||
|
|
||||||
|
UserRegisterWowHandlers( &handlers16, &wow_handlers32 );
|
||||||
|
}
|
||||||
|
|
|
@ -1387,6 +1387,7 @@ BOOL WINAPI DllEntryPoint( DWORD reason, HINSTANCE16 inst, WORD ds,
|
||||||
if (USER_HeapSel) return TRUE; /* already called */
|
if (USER_HeapSel) return TRUE; /* already called */
|
||||||
|
|
||||||
USER_HeapSel = ds;
|
USER_HeapSel = ds;
|
||||||
|
register_wow_handlers();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -738,7 +738,7 @@
|
||||||
# @ stub UserLpkPSMTextOut
|
# @ stub UserLpkPSMTextOut
|
||||||
# @ stub UserLpkTabbedTextOut
|
# @ stub UserLpkTabbedTextOut
|
||||||
@ stdcall UserRealizePalette(long)
|
@ stdcall UserRealizePalette(long)
|
||||||
@ stub UserRegisterWowHandlers
|
@ stdcall UserRegisterWowHandlers(ptr ptr)
|
||||||
# @ stub UserSetDeviceHoldState
|
# @ stub UserSetDeviceHoldState
|
||||||
@ stdcall UserSignalProc(long long long long)
|
@ stdcall UserSignalProc(long long long long)
|
||||||
# @ stub VRipOutput
|
# @ stub VRipOutput
|
||||||
|
|
|
@ -2378,3 +2378,21 @@ INT_PTR WINPROC_CallDlgProcW( DLGPROC func, HWND hwnd, UINT msg, WPARAM wParam,
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* UserRegisterWowHandlers (USER32.@)
|
||||||
|
*
|
||||||
|
* NOTE: no attempt has been made to be compatible here,
|
||||||
|
* the Windows function is most likely completely different.
|
||||||
|
*/
|
||||||
|
void WINAPI UserRegisterWowHandlers( const struct wow_handlers16 *new, struct wow_handlers32 *orig )
|
||||||
|
{
|
||||||
|
orig->button_proc = ButtonWndProc_common;
|
||||||
|
wow_handlers = *new;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct wow_handlers16 wow_handlers =
|
||||||
|
{
|
||||||
|
ButtonWndProc_common,
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue