Jacek Caban : win32u: Move NtUserSetClipboardViewer implementation from user32.

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


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

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

win32u: Move NtUserSetClipboardViewer 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      | 25 -------------------------
 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(+), 27 deletions(-)

diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c
index f2861fce28f..0a502de5846 100644
--- a/dlls/user32/clipboard.c
+++ b/dlls/user32/clipboard.c
@@ -702,31 +702,6 @@ BOOL WINAPI EmptyClipboard(void)
 }
 
 
-/**************************************************************************
- *		SetClipboardViewer (USER32.@)
- */
-HWND WINAPI SetClipboardViewer( HWND hwnd )
-{
-    HWND prev = 0, owner = 0;
-
-    SERVER_START_REQ( set_clipboard_viewer )
-    {
-        req->viewer = wine_server_user_handle( hwnd );
-        if (!wine_server_call_err( req ))
-        {
-            prev = wine_server_ptr_handle( reply->old_viewer );
-            owner = wine_server_ptr_handle( reply->owner );
-        }
-    }
-    SERVER_END_REQ;
-
-    if (hwnd) SendNotifyMessageW( hwnd, WM_DRAWCLIPBOARD, (WPARAM)owner, 0 );
-
-    TRACE( "%p returning %p\n", hwnd, prev );
-    return prev;
-}
-
-
 /**************************************************************************
  *              ChangeClipboardChain (USER32.@)
  */
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index f8683a78426..fa195442b27 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -655,7 +655,7 @@
 @ stdcall SetClassLongW(long long long)
 @ stdcall SetClassWord(long long long) NtUserSetClassWord
 @ stdcall SetClipboardData(long long)
-@ stdcall SetClipboardViewer(long)
+@ stdcall SetClipboardViewer(long) NtUserSetClipboardViewer
 @ stdcall SetCoalescableTimer(long long long ptr long) NtUserSetTimer
 # @ stub SetConsoleReserveKeys
 @ stdcall -import SetCursor(long) NtUserSetCursor
diff --git a/dlls/win32u/clipboard.c b/dlls/win32u/clipboard.c
index f49d9db3b9d..d4004c045e0 100644
--- a/dlls/win32u/clipboard.c
+++ b/dlls/win32u/clipboard.c
@@ -231,6 +231,32 @@ HWND WINAPI NtUserGetClipboardOwner(void)
     return owner;
 }
 
+/**************************************************************************
+ *           NtUserSetClipboardViewer    (win32u.@)
+ */
+HWND WINAPI NtUserSetClipboardViewer( HWND hwnd )
+{
+    HWND prev = 0, owner = 0;
+
+    SERVER_START_REQ( set_clipboard_viewer )
+    {
+        req->viewer = wine_server_user_handle( hwnd );
+        if (!wine_server_call_err( req ))
+        {
+            prev = wine_server_ptr_handle( reply->old_viewer );
+            owner = wine_server_ptr_handle( reply->owner );
+        }
+    }
+    SERVER_END_REQ;
+
+    if (hwnd)
+        NtUserMessageCall( hwnd, WM_DRAWCLIPBOARD, (WPARAM)owner, 0,
+                           NULL, NtUserSendNotifyMessage, FALSE );
+
+    TRACE( "%p returning %p\n", hwnd, prev );
+    return prev;
+}
+
 /**************************************************************************
  *           NtUserGetClipboardViewer    (win32u.@)
  */
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index c0f21662403..453c4893317 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -1192,6 +1192,7 @@ static struct unix_funcs unix_funcs =
     NtUserSetClassLong,
     NtUserSetClassLongPtr,
     NtUserSetClassWord,
+    NtUserSetClipboardViewer,
     NtUserSetCursor,
     NtUserSetCursorIconData,
     NtUserSetCursorPos,
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index f3e2f9ca2f5..05818d001cd 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -1175,7 +1175,7 @@
 @ stdcall NtUserSetClassLongPtr(long long long long)
 @ stdcall NtUserSetClassWord(long long long)
 @ stub NtUserSetClipboardData
-@ stub NtUserSetClipboardViewer
+@ stdcall NtUserSetClipboardViewer(long)
 @ stub NtUserSetCoreWindow
 @ stub NtUserSetCoreWindowPartner
 @ stdcall NtUserSetCursor(long)
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 2299330be0d..a693a972830 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -263,6 +263,7 @@ struct unix_funcs
     DWORD    (WINAPI *pNtUserSetClassLong)( HWND hwnd, INT offset, LONG newval, BOOL ansi );
     ULONG_PTR (WINAPI *pNtUserSetClassLongPtr)( HWND hwnd, INT offset, LONG_PTR newval, BOOL ansi );
     WORD     (WINAPI *pNtUserSetClassWord)( HWND hwnd, INT offset, WORD newval );
+    HWND     (WINAPI *pNtUserSetClipboardViewer)( HWND hwnd );
     HCURSOR  (WINAPI *pNtUserSetCursor)( HCURSOR cursor );
     BOOL     (WINAPI *pNtUserSetCursorIconData)( HCURSOR cursor, UNICODE_STRING *module,
                                                  UNICODE_STRING *res_name, struct cursoricon_desc *desc );
diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c
index d8b117bac8f..994f8c63a5b 100644
--- a/dlls/win32u/wrappers.c
+++ b/dlls/win32u/wrappers.c
@@ -1088,6 +1088,12 @@ WORD WINAPI NtUserSetClassWord( HWND hwnd, INT offset, WORD newval )
     return unix_funcs->pNtUserSetClassWord( hwnd, offset, newval );
 }
 
+HWND WINAPI NtUserSetClipboardViewer( HWND hwnd )
+{
+    if (!unix_funcs) return 0;
+    return unix_funcs->pNtUserSetClipboardViewer( hwnd );
+}
+
 BOOL WINAPI NtUserSetCursorIconData( HCURSOR cursor, UNICODE_STRING *module, UNICODE_STRING *res_name,
                                      struct cursoricon_desc *desc )
 {
diff --git a/include/ntuser.h b/include/ntuser.h
index 7fc52979e7e..5d49cd8caba 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -547,6 +547,7 @@ HWND     WINAPI NtUserSetCapture( HWND hwnd );
 DWORD    WINAPI NtUserSetClassLong( HWND hwnd, INT offset, LONG newval, BOOL ansi );
 ULONG_PTR WINAPI NtUserSetClassLongPtr( HWND hwnd, INT offset, LONG_PTR newval, BOOL ansi );
 WORD    WINAPI NtUserSetClassWord( HWND hwnd, INT offset, WORD newval );
+HWND    WINAPI NtUserSetClipboardViewer( HWND hwnd );
 HCURSOR WINAPI NtUserSetCursor( HCURSOR cursor );
 BOOL    WINAPI NtUserSetCursorIconData( HCURSOR cursor, UNICODE_STRING *module, UNICODE_STRING *res_name,
                                         struct cursoricon_desc *desc );




More information about the wine-cvs mailing list