Jacek Caban : win32u: Move GetInputState implementation from user32.

Alexandre Julliard julliard at winehq.org
Tue Feb 15 16:07:19 CST 2022


Module: wine
Branch: master
Commit: 308ca7f6b1163a40724339b7f0d53034bf6a1073
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=308ca7f6b1163a40724339b7f0d53034bf6a1073

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Feb 15 13:10:51 2022 +0100

win32u: Move GetInputState implementation from user32.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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,




More information about the wine-cvs mailing list