Jacek Caban : win32u: Move NtUserCloseClipboard implementation from user32.

Alexandre Julliard julliard at winehq.org
Wed Apr 6 16:09:00 CDT 2022


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Apr  6 11:11:25 2022 +0200

win32u: Move NtUserCloseClipboard 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/edit.c           |  4 ++--
 dlls/user32/user32.spec      |  2 +-
 dlls/win32u/clipboard.c      | 25 +++++++++++++++++++++++++
 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 +
 9 files changed, 38 insertions(+), 29 deletions(-)

diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c
index b45ddf9c7c0..64b1ba2fe17 100644
--- a/dlls/user32/clipboard.c
+++ b/dlls/user32/clipboard.c
@@ -674,31 +674,6 @@ BOOL WINAPI OpenClipboard( HWND hwnd )
 }
 
 
-/**************************************************************************
- *		CloseClipboard (USER32.@)
- */
-BOOL WINAPI CloseClipboard(void)
-{
-    HWND viewer = 0, owner = 0;
-    BOOL ret;
-
-    TRACE( "\n" );
-
-    SERVER_START_REQ( close_clipboard )
-    {
-        if ((ret = !wine_server_call_err( req )))
-        {
-            viewer = wine_server_ptr_handle( reply->viewer );
-            owner = wine_server_ptr_handle( reply->owner );
-        }
-    }
-    SERVER_END_REQ;
-
-    if (viewer) SendNotifyMessageW( viewer, WM_DRAWCLIPBOARD, (WPARAM)owner, 0 );
-    return ret;
-}
-
-
 /**************************************************************************
  *		EmptyClipboard (USER32.@)
  * Empties and acquires ownership of the clipboard
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index 02ed19dffd5..4037ea7b1c1 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -3107,7 +3107,7 @@ static void EDIT_WM_Paste(EDITSTATE *es)
             /* clear selected text in password edit box even with empty clipboard */
             EDIT_EM_ReplaceSel(es, TRUE, NULL, 0, TRUE, TRUE);
         }
-	CloseClipboard();
+	NtUserCloseClipboard();
 }
 
 
@@ -3136,7 +3136,7 @@ static void EDIT_WM_Copy(EDITSTATE *es)
 	OpenClipboard(es->hwndSelf);
 	EmptyClipboard();
 	SetClipboardData(CF_UNICODETEXT, hdst);
-	CloseClipboard();
+	NtUserCloseClipboard();
 }
 
 
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index 2c4dba5cd86..b8b27ff49ba 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -73,7 +73,7 @@
 @ stub ClientThreadSetup
 @ stdcall ClientToScreen(long ptr)
 @ stdcall -import ClipCursor(ptr) NtUserClipCursor
-@ stdcall CloseClipboard()
+@ stdcall CloseClipboard() NtUserCloseClipboard
 @ stdcall CloseDesktop(long) NtUserCloseDesktop
 @ stdcall CloseTouchInputHandle(long)
 @ stdcall CloseWindow(long)
diff --git a/dlls/win32u/clipboard.c b/dlls/win32u/clipboard.c
index 585a2aae631..8ab915d5931 100644
--- a/dlls/win32u/clipboard.c
+++ b/dlls/win32u/clipboard.c
@@ -76,6 +76,31 @@ static const char *debugstr_format( UINT id )
     }
 }
 
+/**************************************************************************
+ *           NtUserCloseClipboard    (win32u.@)
+ */
+BOOL WINAPI NtUserCloseClipboard(void)
+{
+    HWND viewer = 0, owner = 0;
+    BOOL ret;
+
+    TRACE( "\n" );
+
+    SERVER_START_REQ( close_clipboard )
+    {
+        if ((ret = !wine_server_call_err( req )))
+        {
+            viewer = wine_server_ptr_handle( reply->viewer );
+            owner = wine_server_ptr_handle( reply->owner );
+        }
+    }
+    SERVER_END_REQ;
+
+    if (viewer) NtUserMessageCall( viewer, WM_DRAWCLIPBOARD, (WPARAM)owner, 0,
+                                   0, FNID_SENDNOTIFYMESSAGE, FALSE );
+    return ret;
+}
+
 /**************************************************************************
  *           NtUserCountClipboardFormats    (win32u.@)
  */
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index 1a569048f69..0679715c8fd 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -1159,6 +1159,7 @@ static struct unix_funcs unix_funcs =
     NtUserCallTwoParam,
     NtUserChangeDisplaySettings,
     NtUserClipCursor,
+    NtUserCloseClipboard,
     NtUserCountClipboardFormats,
     NtUserCreateWindowEx,
     NtUserDeferWindowPosAndBand,
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index 295f4780d71..6f75b802a51 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -793,7 +793,7 @@
 @ stub NtUserChildWindowFromPointEx
 @ stub NtUserClearForeground
 @ stdcall NtUserClipCursor(ptr)
-@ stub NtUserCloseClipboard
+@ stdcall NtUserCloseClipboard()
 @ stdcall -syscall NtUserCloseDesktop(long)
 @ stdcall -syscall NtUserCloseWindowStation(long)
 @ stub NtUserCompositionInputSinkLuidFromPoint
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 7677747b6f0..874cc92f4d4 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -194,6 +194,7 @@ struct unix_funcs
     LONG     (WINAPI *pNtUserChangeDisplaySettings)( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                                      DWORD flags, void *lparam );
     BOOL     (WINAPI *pNtUserClipCursor)( const RECT *rect );
+    BOOL     (WINAPI *pNtUserCloseClipboard)(void);
     INT      (WINAPI *pNtUserCountClipboardFormats)(void);
     HWND     (WINAPI *pNtUserCreateWindowEx)( DWORD ex_style, UNICODE_STRING *class_name,
                                               UNICODE_STRING *version, UNICODE_STRING *window_name,
diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c
index 63018dcb063..4a4ed00ef58 100644
--- a/dlls/win32u/wrappers.c
+++ b/dlls/win32u/wrappers.c
@@ -749,6 +749,12 @@ ULONG_PTR WINAPI NtUserCallHwndParam( HWND hwnd, DWORD_PTR param, DWORD code )
     return unix_funcs->pNtUserCallHwndParam( hwnd, param, code );
 }
 
+BOOL WINAPI NtUserCloseClipboard(void)
+{
+    if (!unix_funcs) return FALSE;
+    return unix_funcs->pNtUserCloseClipboard();
+}
+
 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 3de271a7174..53c8fb17139 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -507,6 +507,7 @@ ULONG_PTR WINAPI NtUserCallTwoParam( ULONG_PTR arg1, ULONG_PTR arg2, ULONG code
 LONG    WINAPI NtUserChangeDisplaySettings( UNICODE_STRING *devname, DEVMODEW *devmode, HWND hwnd,
                                             DWORD flags, void *lparam );
 BOOL    WINAPI NtUserClipCursor( const RECT *rect );
+BOOL    WINAPI NtUserCloseClipboard(void);
 BOOL    WINAPI NtUserCloseDesktop( HDESK handle );
 BOOL    WINAPI NtUserCloseWindowStation( HWINSTA handle );
 INT     WINAPI NtUserCopyAcceleratorTable( HACCEL src, ACCEL *dst, INT count );




More information about the wine-cvs mailing list