Module: wine Branch: master Commit: 308ca7f6b1163a40724339b7f0d53034bf6a1073 URL: https://source.winehq.org/git/wine.git/?a=commit;h=308ca7f6b1163a40724339b7f...
Author: Jacek Caban jacek@codeweavers.com Date: Tue Feb 15 13:10:51 2022 +0100
win32u: Move GetInputState implementation from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/input.c | 13 +------------ dlls/win32u/gdiobj.c | 1 + dlls/win32u/input.c | 19 +++++++++++++++++++ dlls/win32u/sysparams.c | 15 +++++++++++++++ dlls/win32u/win32u.spec | 2 +- dlls/win32u/win32u_private.h | 2 ++ dlls/win32u/wrappers.c | 6 ++++++ include/ntuser.h | 7 +++++++ 8 files changed, 52 insertions(+), 13 deletions(-)
diff --git a/dlls/user32/input.c b/dlls/user32/input.c index 9d7b24c7b82..99f6bcb159b 100644 --- a/dlls/user32/input.c +++ b/dlls/user32/input.c @@ -450,18 +450,7 @@ SHORT WINAPI DECLSPEC_HOTPATCH GetAsyncKeyState( INT key ) */ BOOL WINAPI GetInputState(void) { - DWORD ret; - - check_for_events( QS_INPUT ); - - SERVER_START_REQ( get_queue_status ) - { - req->clear_bits = 0; - wine_server_call( req ); - ret = reply->wake_bits & (QS_KEY | QS_MOUSEBUTTON); - } - SERVER_END_REQ; - return ret; + return NtUserCallNoParam( NtUserGetInputState ); }
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c index 0dc41e7730c..ca71850e86f 100644 --- a/dlls/win32u/gdiobj.c +++ b/dlls/win32u/gdiobj.c @@ -1150,6 +1150,7 @@ static struct unix_funcs unix_funcs = NtGdiUpdateColors, NtGdiWidenPath, NtUserActivateKeyboardLayout, + NtUserCallNoParam, NtUserCallOneParam, NtUserCallTwoParam, NtUserChangeDisplaySettings, diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c index d91931768c0..b576660c8a5 100644 --- a/dlls/win32u/input.c +++ b/dlls/win32u/input.c @@ -159,6 +159,25 @@ DWORD WINAPI NtUserGetQueueStatus( UINT flags ) return ret; }
+/*********************************************************************** + * get_input_state + */ +DWORD get_input_state(void) +{ + DWORD ret; + + check_for_events( QS_INPUT ); + + SERVER_START_REQ( get_queue_status ) + { + req->clear_bits = 0; + wine_server_call( req ); + ret = reply->wake_bits & (QS_KEY | QS_MOUSEBUTTON); + } + SERVER_END_REQ; + return ret; +} + /*********************************************************************** * get_locale_kbd_layout */ diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 6d1d6689bfe..816ce5ecded 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -4483,6 +4483,21 @@ static BOOL message_beep( UINT i ) return TRUE; }
+/*********************************************************************** + * NtUserCallOneParam (win32u.@) + */ +ULONG_PTR WINAPI NtUserCallNoParam( ULONG code ) +{ + switch(code) + { + case NtUserGetInputState: + return get_input_state(); + default: + FIXME( "invalid code %u\n", code ); + return 0; + } +} + /*********************************************************************** * NtUserCallOneParam (win32u.@) */ diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 15efb8d9645..03e37e14f0b 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -778,7 +778,7 @@ @ stub NtUserCallHwndSafe @ stub NtUserCallMsgFilter @ stub NtUserCallNextHookEx -@ stub NtUserCallNoParam +@ stdcall NtUserCallNoParam(long) @ stdcall NtUserCallOneParam(long long) @ stdcall NtUserCallTwoParam(long long long) @ stub NtUserCanBrokerForceForeground diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h index 4630813cdd2..fa87db16829 100644 --- a/dlls/win32u/win32u_private.h +++ b/dlls/win32u/win32u_private.h @@ -192,6 +192,7 @@ struct unix_funcs BOOL (WINAPI *pNtGdiUpdateColors)( HDC hdc ); BOOL (WINAPI *pNtGdiWidenPath)( HDC hdc ); HKL (WINAPI *pNtUserActivateKeyboardLayout)( HKL layout, UINT flags ); + ULONG_PTR (WINAPI *pNtUserCallNoParam)( ULONG code ); ULONG_PTR (WINAPI *pNtUserCallOneParam)( ULONG_PTR arg, ULONG code ); ULONG_PTR (WINAPI *pNtUserCallTwoParam)( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code ); LONG (WINAPI *pNtUserChangeDisplaySettings)( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd, @@ -248,6 +249,7 @@ extern BOOL get_clip_cursor( RECT *rect ) DECLSPEC_HIDDEN;
/* input.c */ extern BOOL get_cursor_pos( POINT *pt ) DECLSPEC_HIDDEN; +extern DWORD get_input_state(void) DECLSPEC_HIDDEN;
/* sysparams.c */ extern RECT get_display_rect( const WCHAR *display ) DECLSPEC_HIDDEN; diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c index 8e39953c782..44b7e267a06 100644 --- a/dlls/win32u/wrappers.c +++ b/dlls/win32u/wrappers.c @@ -701,6 +701,12 @@ HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags ) return unix_funcs->pNtUserActivateKeyboardLayout( layout, flags ); }
+ULONG_PTR WINAPI NtUserCallNoParam( ULONG code ) +{ + if (!unix_funcs) return 0; + return unix_funcs->pNtUserCallNoParam( code ); +} + ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code ) { if (!unix_funcs) return 0; diff --git a/include/ntuser.h b/include/ntuser.h index fa32370a90a..029da87c7b2 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -49,6 +49,12 @@ struct enum_display_monitor_params #define NTUSER_DPI_PER_MONITOR_AWARE_V2 0x00000022 #define NTUSER_DPI_PER_UNAWARE_GDISCALED 0x40006010
+/* NtUserCallNoParam codes, not compatible with Windows */ +enum +{ + NtUserGetInputState, +}; + /* NtUserCallOneParam codes, not compatible with Windows */ enum { @@ -133,6 +139,7 @@ BOOL WINAPI NtUserAddClipboardFormatListener( HWND hwnd ); BOOL WINAPI NtUserAttachThreadInput( DWORD from, DWORD to, BOOL attach ); NTSTATUS WINAPI NtUserBuildHwndList( HDESK desktop, ULONG unk2, ULONG unk3, ULONG unk4, ULONG thread_id, ULONG count, HWND *buffer, ULONG *size ); +ULONG_PTR WINAPI NtUserCallNoParam( ULONG code ); ULONG_PTR WINAPI NtUserCallOneParam( ULONG_PTR arg, ULONG code ); ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code ); LONG WINAPI NtUserChangeDisplaySettings( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,