Jacek Caban : win32u: Move NtUserChangeClipboardChain implementation from user32.

Alexandre Julliard julliard at winehq.org
Fri Apr 22 14:46:05 CDT 2022


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Fri Apr 22 14:45:59 2022 +0200

win32u: Move NtUserChangeClipboardChain 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/clipboard.c      | 27 ---------------------------
 dlls/user32/user32.spec      |  2 +-
 dlls/win32u/clipboard.c      | 26 ++++++++++++++++++++++++++
 dlls/win32u/gdiobj.c         |  1 +
 dlls/win32u/win32u.spec      |  2 +-
 dlls/win32u/win32u_private.h |  1 +
 dlls/win32u/wrappers.c       |  6 ++++++
 include/ntuser.h             |  1 +
 8 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c
index 0a502de5846..911014ee628 100644
--- a/dlls/user32/clipboard.c
+++ b/dlls/user32/clipboard.c
@@ -702,33 +702,6 @@ BOOL WINAPI EmptyClipboard(void)
 }
 
 
-/**************************************************************************
- *              ChangeClipboardChain (USER32.@)
- */
-BOOL WINAPI ChangeClipboardChain( HWND hwnd, HWND next )
-{
-    NTSTATUS status;
-    HWND viewer;
-
-    if (!hwnd) return FALSE;
-
-    SERVER_START_REQ( set_clipboard_viewer )
-    {
-        req->viewer = wine_server_user_handle( next );
-        req->previous = wine_server_user_handle( hwnd );
-        status = wine_server_call( req );
-        viewer = wine_server_ptr_handle( reply->old_viewer );
-    }
-    SERVER_END_REQ;
-
-    if (status == STATUS_PENDING)
-        return !SendMessageW( viewer, WM_CHANGECBCHAIN, (WPARAM)hwnd, (LPARAM)next );
-
-    if (status) SetLastError( RtlNtStatusToDosError( status ));
-    return !status;
-}
-
-
 /**************************************************************************
  *		SetClipboardData (USER32.@)
  */
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index fa195442b27..a7b2f7e0681 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -33,7 +33,7 @@
 @ stdcall CallWindowProcW(ptr long long long long)
 @ stdcall CascadeChildWindows(long long)
 @ stdcall CascadeWindows(long long ptr long ptr)
-@ stdcall ChangeClipboardChain(long long)
+@ stdcall ChangeClipboardChain(long long) NtUserChangeClipboardChain
 @ stdcall ChangeDisplaySettingsA(ptr long)
 @ stdcall ChangeDisplaySettingsExA(str ptr long long ptr)
 @ stdcall ChangeDisplaySettingsExW(wstr ptr long long ptr)
diff --git a/dlls/win32u/clipboard.c b/dlls/win32u/clipboard.c
index d4004c045e0..29bf36ee80d 100644
--- a/dlls/win32u/clipboard.c
+++ b/dlls/win32u/clipboard.c
@@ -274,6 +274,32 @@ HWND WINAPI NtUserGetClipboardViewer(void)
     return viewer;
 }
 
+/**************************************************************************
+ *           NtUserChangeClipboardChain    (win32u.@)
+ */
+BOOL WINAPI NtUserChangeClipboardChain( HWND hwnd, HWND next )
+{
+    NTSTATUS status;
+    HWND viewer;
+
+    if (!hwnd) return FALSE;
+
+    SERVER_START_REQ( set_clipboard_viewer )
+    {
+        req->viewer = wine_server_user_handle( next );
+        req->previous = wine_server_user_handle( hwnd );
+        status = wine_server_call( req );
+        viewer = wine_server_ptr_handle( reply->old_viewer );
+    }
+    SERVER_END_REQ;
+
+    if (status == STATUS_PENDING)
+        return !send_message( viewer, WM_CHANGECBCHAIN, (WPARAM)hwnd, (LPARAM)next );
+
+    if (status) SetLastError( RtlNtStatusToDosError( status ));
+    return !status;
+}
+
 /**************************************************************************
  *	     NtUserGetOpenClipboardWindow    (win32u.@)
  */
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index 453c4893317..fbaf61a52f6 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -1139,6 +1139,7 @@ static struct unix_funcs unix_funcs =
     NtUserCallNoParam,
     NtUserCallOneParam,
     NtUserCallTwoParam,
+    NtUserChangeClipboardChain,
     NtUserChangeDisplaySettings,
     NtUserClipCursor,
     NtUserCloseClipboard,
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index 05818d001cd..aa40be5f652 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -782,7 +782,7 @@
 @ stdcall NtUserCallOneParam(long long)
 @ stdcall NtUserCallTwoParam(long long long)
 @ stub NtUserCanBrokerForceForeground
-@ stub NtUserChangeClipboardChain
+@ stdcall NtUserChangeClipboardChain(long long)
 @ stdcall NtUserChangeDisplaySettings(ptr ptr long long ptr)
 @ stub NtUserChangeWindowMessageFilterEx
 @ stub NtUserCheckAccessForIntegrityLevel
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index a693a972830..9d4c7b5021c 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -191,6 +191,7 @@ struct unix_funcs
     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 );
+    BOOL     (WINAPI *pNtUserChangeClipboardChain)( HWND hwnd, HWND next );
     LONG     (WINAPI *pNtUserChangeDisplaySettings)( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                                      DWORD flags, void *lparam );
     BOOL     (WINAPI *pNtUserClipCursor)( const RECT *rect );
diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c
index 994f8c63a5b..d3497d29f03 100644
--- a/dlls/win32u/wrappers.c
+++ b/dlls/win32u/wrappers.c
@@ -755,6 +755,12 @@ BOOL WINAPI NtUserCloseClipboard(void)
     return unix_funcs->pNtUserCloseClipboard();
 }
 
+BOOL WINAPI NtUserChangeClipboardChain( HWND hwnd, HWND next )
+{
+    if (!unix_funcs) return DISP_CHANGE_FAILED;
+    return unix_funcs->pNtUserChangeClipboardChain( hwnd, next );
+}
+
 LONG WINAPI NtUserChangeDisplaySettings( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                          DWORD flags, void *lparam )
 {
diff --git a/include/ntuser.h b/include/ntuser.h
index 5d49cd8caba..836854a12b4 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -417,6 +417,7 @@ LRESULT WINAPI NtUserCallNextHookEx( HHOOK hhook, INT code, WPARAM wparam, LPARA
 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 );
+BOOL    WINAPI NtUserChangeClipboardChain( HWND hwnd, HWND next );
 LONG    WINAPI NtUserChangeDisplaySettings( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                             DWORD flags, void *lparam );
 DWORD   WINAPI NtUserCheckMenuItem( HMENU handle, UINT id, UINT flags );




More information about the wine-cvs mailing list