Module: wine Branch: master Commit: 22de82978eafef97b84248203503e284ca557783 URL: https://source.winehq.org/git/wine.git/?a=commit;h=22de82978eafef97b84248203...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Apr 6 11:11:25 2022 +0200
win32u: Move NtUserCloseClipboard implementation from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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 );