Jacek Caban : win32u: Move NtUserGetMouseMovePointsEx implementation from user32.

Alexandre Julliard julliard at winehq.org
Wed Nov 17 16:27:58 CST 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Nov 17 12:48:53 2021 +0100

win32u: Move NtUserGetMouseMovePointsEx 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     | 67 -------------------------------------------------
 dlls/user32/user32.spec |  2 +-
 dlls/win32u/input.c     | 64 ++++++++++++++++++++++++++++++++++++++++++++++
 dlls/win32u/syscall.c   |  1 +
 dlls/win32u/win32u.spec |  2 +-
 dlls/wow64win/syscall.h |  1 +
 dlls/wow64win/user.c    | 11 ++++++++
 7 files changed, 79 insertions(+), 69 deletions(-)

diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 3de25f4218a..7349d865f01 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -1217,73 +1217,6 @@ TrackMouseEvent (TRACKMOUSEEVENT *ptme)
     return TRUE;
 }
 
-/***********************************************************************
- * GetMouseMovePointsEx [USER32]
- *
- * RETURNS
- *     Success: count of point set in the buffer
- *     Failure: -1
- */
-int WINAPI GetMouseMovePointsEx( UINT size, LPMOUSEMOVEPOINT ptin, LPMOUSEMOVEPOINT ptout, int count, DWORD resolution )
-{
-    cursor_pos_t *pos, positions[64];
-    int copied;
-    unsigned int i;
-
-
-    TRACE( "%d, %p, %p, %d, %d\n", size, ptin, ptout, count, resolution );
-
-    if ((size != sizeof(MOUSEMOVEPOINT)) || (count < 0) || (count > ARRAY_SIZE( positions )))
-    {
-        SetLastError( ERROR_INVALID_PARAMETER );
-        return -1;
-    }
-
-    if (!ptin || (!ptout && count))
-    {
-        SetLastError( ERROR_NOACCESS );
-        return -1;
-    }
-
-    if (resolution != GMMP_USE_DISPLAY_POINTS)
-    {
-        FIXME( "only GMMP_USE_DISPLAY_POINTS is supported for now\n" );
-        SetLastError( ERROR_POINT_NOT_FOUND );
-        return -1;
-    }
-
-    SERVER_START_REQ( get_cursor_history )
-    {
-        wine_server_set_reply( req, &positions, sizeof(positions) );
-        if (wine_server_call_err( req )) return -1;
-    }
-    SERVER_END_REQ;
-
-    for (i = 0; i < ARRAY_SIZE( positions ); i++)
-    {
-        pos = &positions[i];
-        if (ptin->x == pos->x && ptin->y == pos->y && (!ptin->time || ptin->time == pos->time))
-            break;
-    }
-
-    if (i == ARRAY_SIZE( positions ))
-    {
-        SetLastError( ERROR_POINT_NOT_FOUND );
-        return -1;
-    }
-
-    for (copied = 0; copied < count && i < ARRAY_SIZE( positions ); copied++, i++)
-    {
-        pos = &positions[i];
-        ptout[copied].x = pos->x;
-        ptout[copied].y = pos->y;
-        ptout[copied].time = pos->time;
-        ptout[copied].dwExtraInfo = pos->info;
-    }
-
-    return copied;
-}
-
 /***********************************************************************
  *		EnableMouseInPointer (USER32.@)
  */
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index 2b022d931aa..0e9d98164b5 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -349,7 +349,7 @@
 @ stdcall GetMessageW(ptr long long long)
 @ stdcall GetMonitorInfoA(long ptr)
 @ stdcall GetMonitorInfoW(long ptr)
-@ stdcall GetMouseMovePointsEx(long ptr ptr long long)
+@ stdcall GetMouseMovePointsEx(long ptr ptr long long) NtUserGetMouseMovePointsEx
 @ stdcall GetNextDlgGroupItem(long long long)
 @ stdcall GetNextDlgTabItem(long long long)
 # @ stub GetNextQueueWindow
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index e1c8595ac07..bc3cd17a29e 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -698,3 +698,67 @@ BOOL WINAPI NtUserUnregisterHotKey( HWND hwnd, INT id )
 
     return ret;
 }
+
+/***********************************************************************
+ *           NtUserGetMouseMovePointsEx    (win32u.@)
+ */
+int WINAPI NtUserGetMouseMovePointsEx( UINT size, MOUSEMOVEPOINT *ptin, MOUSEMOVEPOINT *ptout,
+                                       int count, DWORD resolution )
+{
+    cursor_pos_t *pos, positions[64];
+    int copied;
+    unsigned int i;
+
+
+    TRACE( "%d, %p, %p, %d, %d\n", size, ptin, ptout, count, resolution );
+
+    if ((size != sizeof(MOUSEMOVEPOINT)) || (count < 0) || (count > ARRAY_SIZE( positions )))
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return -1;
+    }
+
+    if (!ptin || (!ptout && count))
+    {
+        SetLastError( ERROR_NOACCESS );
+        return -1;
+    }
+
+    if (resolution != GMMP_USE_DISPLAY_POINTS)
+    {
+        FIXME( "only GMMP_USE_DISPLAY_POINTS is supported for now\n" );
+        SetLastError( ERROR_POINT_NOT_FOUND );
+        return -1;
+    }
+
+    SERVER_START_REQ( get_cursor_history )
+    {
+        wine_server_set_reply( req, &positions, sizeof(positions) );
+        if (wine_server_call_err( req )) return -1;
+    }
+    SERVER_END_REQ;
+
+    for (i = 0; i < ARRAY_SIZE( positions ); i++)
+    {
+        pos = &positions[i];
+        if (ptin->x == pos->x && ptin->y == pos->y && (!ptin->time || ptin->time == pos->time))
+            break;
+    }
+
+    if (i == ARRAY_SIZE( positions ))
+    {
+        SetLastError( ERROR_POINT_NOT_FOUND );
+        return -1;
+    }
+
+    for (copied = 0; copied < count && i < ARRAY_SIZE( positions ); copied++, i++)
+    {
+        pos = &positions[i];
+        ptout[copied].x = pos->x;
+        ptout[copied].y = pos->y;
+        ptout[copied].time = pos->time;
+        ptout[copied].dwExtraInfo = pos->info;
+    }
+
+    return copied;
+}
diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c
index 26471718e51..e07fdcc6953 100644
--- a/dlls/win32u/syscall.c
+++ b/dlls/win32u/syscall.c
@@ -115,6 +115,7 @@ static void * const syscalls[] =
     NtUserGetKeyboardLayout,
     NtUserGetKeyboardState,
     NtUserGetLayeredWindowAttributes,
+    NtUserGetMouseMovePointsEx,
     NtUserGetObjectInformation,
     NtUserGetOpenClipboardWindow,
     NtUserGetProcessWindowStation,
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index 47e352c2f27..7ae65b09279 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -956,7 +956,7 @@
 @ stub NtUserGetMenuIndex
 @ stub NtUserGetMenuItemRect
 @ stub NtUserGetMessage
-@ stub NtUserGetMouseMovePointsEx
+@ stdcall -syscall NtUserGetMouseMovePointsEx(long ptr ptr long long)
 @ stdcall -syscall NtUserGetObjectInformation(long long long long ptr)
 @ stub NtUserGetOemBitmapSize
 @ stdcall -syscall NtUserGetOpenClipboardWindow()
diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h
index d97563427ce..9a267025527 100644
--- a/dlls/wow64win/syscall.h
+++ b/dlls/wow64win/syscall.h
@@ -101,6 +101,7 @@
     SYSCALL_ENTRY( NtUserGetKeyState ) \
     SYSCALL_ENTRY( NtUserGetKeyboardState ) \
     SYSCALL_ENTRY( NtUserGetLayeredWindowAttributes ) \
+    SYSCALL_ENTRY( NtUserGetMouseMovePointsEx ) \
     SYSCALL_ENTRY( NtUserGetObjectInformation ) \
     SYSCALL_ENTRY( NtUserGetOpenClipboardWindow ) \
     SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \
diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c
index 39f54ae82ba..1c667889252 100644
--- a/dlls/wow64win/user.c
+++ b/dlls/wow64win/user.c
@@ -263,3 +263,14 @@ NTSTATUS WINAPI wow64_NtUserSetKeyboardState( UINT *args )
 
     return NtUserSetKeyboardState( state );
 }
+
+NTSTATUS WINAPI wow64_NtUserGetMouseMovePointsEx( UINT *args )
+{
+    UINT size = get_ulong( &args );
+    MOUSEMOVEPOINT *ptin = get_ptr( &args );
+    MOUSEMOVEPOINT *ptout = get_ptr( &args );
+    int count = get_ulong( &args );
+    DWORD resolution = get_ulong( &args );
+
+    return NtUserGetMouseMovePointsEx( size, ptin, ptout, count, resolution );
+}




More information about the wine-cvs mailing list