Module: wine Branch: master Commit: 357d8654c9fd128e801b7fa914dc635fc84d7b94 URL: https://source.winehq.org/git/wine.git/?a=commit;h=357d8654c9fd128e801b7fa91...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Apr 22 14:45:59 2022 +0200
win32u: Move NtUserChangeClipboardChain 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 | 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 );