Jacek Caban : win32u: Move NtUserIsClipboardFormatAvailable implementation from user32.
Alexandre Julliard
julliard at winehq.org
Mon Nov 15 16:01:27 CST 2021
Module: wine
Branch: master
Commit: a4e800f380be6733c46f0a202c0333f28ec0f954
URL: https://source.winehq.org/git/wine.git/?a=commit;h=a4e800f380be6733c46f0a202c0333f28ec0f954
Author: Jacek Caban <jacek at codeweavers.com>
Date: Fri Nov 12 12:53:40 2021 +0100
win32u: Move NtUserIsClipboardFormatAvailable 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 | 24 +----------------
dlls/user32/edit.c | 2 +-
dlls/user32/user32.spec | 2 +-
dlls/win32u/clipboard.c | 62 ++++++++++++++++++++++++++++++++++++++++++++
dlls/win32u/gdiobj.c | 1 +
dlls/win32u/win32u.spec | 2 +-
dlls/win32u/win32u_private.h | 1 +
dlls/win32u/wrappers.c | 5 ++++
include/ntuser.h | 1 +
9 files changed, 74 insertions(+), 26 deletions(-)
diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c
index 2e0c6b92d39..8023eee4944 100644
--- a/dlls/user32/clipboard.c
+++ b/dlls/user32/clipboard.c
@@ -939,28 +939,6 @@ UINT WINAPI EnumClipboardFormats( UINT format )
}
-/**************************************************************************
- * IsClipboardFormatAvailable (USER32.@)
- */
-BOOL WINAPI IsClipboardFormatAvailable( UINT format )
-{
- BOOL ret = FALSE;
-
- if (!format) return FALSE;
-
- USER_Driver->pUpdateClipboard();
-
- SERVER_START_REQ( get_clipboard_formats )
- {
- req->format = format;
- if (!wine_server_call_err( req )) ret = (reply->count > 0);
- }
- SERVER_END_REQ;
- TRACE( "%s -> %u\n", debugstr_format( format ), ret );
- return ret;
-}
-
-
/**************************************************************************
* GetUpdatedClipboardFormats (USER32.@)
*/
@@ -1080,7 +1058,7 @@ INT WINAPI GetPriorityClipboardFormat(UINT *list, INT nCount)
return 0;
for (i = 0; i < nCount; i++)
- if (IsClipboardFormatAvailable(list[i]))
+ if (NtUserIsClipboardFormatAvailable(list[i]))
return list[i];
return -1;
diff --git a/dlls/user32/edit.c b/dlls/user32/edit.c
index 4de206aa12f..cf5e807de21 100644
--- a/dlls/user32/edit.c
+++ b/dlls/user32/edit.c
@@ -3313,7 +3313,7 @@ static void EDIT_WM_ContextMenu(EDITSTATE *es, INT x, INT y)
/* copy */
EnableMenuItem(popup, 3, MF_BYPOSITION | ((end - start) && !(es->style & ES_PASSWORD) ? MF_ENABLED : MF_GRAYED));
/* paste */
- EnableMenuItem(popup, 4, MF_BYPOSITION | (IsClipboardFormatAvailable(CF_UNICODETEXT) && !(es->style & ES_READONLY) ? MF_ENABLED : MF_GRAYED));
+ EnableMenuItem(popup, 4, MF_BYPOSITION | (NtUserIsClipboardFormatAvailable(CF_UNICODETEXT) && !(es->style & ES_READONLY) ? MF_ENABLED : MF_GRAYED));
/* delete */
EnableMenuItem(popup, 5, MF_BYPOSITION | ((end - start) && !(es->style & ES_READONLY) ? MF_ENABLED : MF_GRAYED));
/* select all */
diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index 319dda49eb5..3a46765c038 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -460,7 +460,7 @@
@ stdcall -import IsCharUpperA(long)
@ stdcall -import IsCharUpperW(long)
@ stdcall IsChild(long long)
-@ stdcall IsClipboardFormatAvailable(long)
+@ stdcall IsClipboardFormatAvailable(long) NtUserIsClipboardFormatAvailable
@ stdcall IsDialogMessage(long ptr) IsDialogMessageA
@ stdcall IsDialogMessageA(long ptr)
@ stdcall IsDialogMessageW(long ptr)
diff --git a/dlls/win32u/clipboard.c b/dlls/win32u/clipboard.c
index c2fd07ac5b9..4c64655b69e 100644
--- a/dlls/win32u/clipboard.c
+++ b/dlls/win32u/clipboard.c
@@ -34,6 +34,47 @@
WINE_DEFAULT_DEBUG_CHANNEL(clipboard);
+/* get a debug string for a format id */
+static const char *debugstr_format( UINT id )
+{
+ WCHAR buffer[256];
+ DWORD le = GetLastError();
+ BOOL r = NtUserGetClipboardFormatName( id, buffer, ARRAYSIZE(buffer) );
+ SetLastError(le);
+
+ if (r)
+ return wine_dbg_sprintf( "%04x %s", id, debugstr_w(buffer) );
+
+ switch (id)
+ {
+#define BUILTIN(id) case id: return #id;
+ BUILTIN(CF_TEXT)
+ BUILTIN(CF_BITMAP)
+ BUILTIN(CF_METAFILEPICT)
+ BUILTIN(CF_SYLK)
+ BUILTIN(CF_DIF)
+ BUILTIN(CF_TIFF)
+ BUILTIN(CF_OEMTEXT)
+ BUILTIN(CF_DIB)
+ BUILTIN(CF_PALETTE)
+ BUILTIN(CF_PENDATA)
+ BUILTIN(CF_RIFF)
+ BUILTIN(CF_WAVE)
+ BUILTIN(CF_UNICODETEXT)
+ BUILTIN(CF_ENHMETAFILE)
+ BUILTIN(CF_HDROP)
+ BUILTIN(CF_LOCALE)
+ BUILTIN(CF_DIBV5)
+ BUILTIN(CF_OWNERDISPLAY)
+ BUILTIN(CF_DSPTEXT)
+ BUILTIN(CF_DSPBITMAP)
+ BUILTIN(CF_DSPMETAFILEPICT)
+ BUILTIN(CF_DSPENHMETAFILE)
+#undef BUILTIN
+ default: return wine_dbg_sprintf( "%04x", id );
+ }
+}
+
/**************************************************************************
* NtUserCountClipboardFormats (win32u.@)
*/
@@ -54,6 +95,27 @@ INT WINAPI NtUserCountClipboardFormats(void)
return count;
}
+/**************************************************************************
+ * NtUserIsClipboardFormatAvailable (win32u.@)
+ */
+BOOL WINAPI NtUserIsClipboardFormatAvailable( UINT format )
+{
+ BOOL ret = FALSE;
+
+ if (!format) return FALSE;
+
+ user_driver->pUpdateClipboard();
+
+ SERVER_START_REQ( get_clipboard_formats )
+ {
+ req->format = format;
+ if (!wine_server_call_err( req )) ret = (reply->count > 0);
+ }
+ SERVER_END_REQ;
+ TRACE( "%s -> %u\n", debugstr_format( format ), ret );
+ return ret;
+}
+
/**************************************************************************
* NtUserGetClipboardFormatName (win32u.@)
*/
diff --git a/dlls/win32u/gdiobj.c b/dlls/win32u/gdiobj.c
index 4737aa30cd2..005bd5af165 100644
--- a/dlls/win32u/gdiobj.c
+++ b/dlls/win32u/gdiobj.c
@@ -1168,6 +1168,7 @@ static struct unix_funcs unix_funcs =
NtGdiUpdateColors,
NtGdiWidenPath,
NtUserCountClipboardFormats,
+ NtUserIsClipboardFormatAvailable,
GDIRealizePalette,
GDISelectPalette,
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index d1774804293..dbfe196dbcf 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -1050,7 +1050,7 @@
@ stub NtUserInvalidateRect
@ stub NtUserInvalidateRgn
@ stub NtUserIsChildWindowDpiMessageEnabled
-@ stub NtUserIsClipboardFormatAvailable
+@ stdcall NtUserIsClipboardFormatAvailable(long)
@ stub NtUserIsMouseInPointerEnabled
@ stub NtUserIsMouseInputEnabled
@ stub NtUserIsNonClientDpiScalingEnabled
diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 7526f4414dd..71a9909cfba 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -195,6 +195,7 @@ struct unix_funcs
BOOL (WINAPI *pNtGdiUpdateColors)( HDC hdc );
BOOL (WINAPI *pNtGdiWidenPath)( HDC hdc );
INT (WINAPI *pNtUserCountClipboardFormats)(void);
+ BOOL (WINAPI *pNtUserIsClipboardFormatAvailable)( UINT format );
/* Wine-specific functions */
UINT (WINAPI *pGDIRealizePalette)( HDC hdc );
diff --git a/dlls/win32u/wrappers.c b/dlls/win32u/wrappers.c
index d236fb6b2db..50f000bdb3c 100644
--- a/dlls/win32u/wrappers.c
+++ b/dlls/win32u/wrappers.c
@@ -601,6 +601,11 @@ INT WINAPI NtUserCountClipboardFormats(void)
return unix_funcs->pNtUserCountClipboardFormats();
}
+BOOL WINAPI NtUserIsClipboardFormatAvailable( UINT format )
+{
+ return unix_funcs->pNtUserIsClipboardFormatAvailable( format );
+}
+
UINT WINAPI GDIRealizePalette( HDC hdc )
{
return unix_funcs->pGDIRealizePalette( hdc );
diff --git a/include/ntuser.h b/include/ntuser.h
index a68c8458213..083d6cb4a1b 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -38,6 +38,7 @@ BOOL WINAPI NtUserGetObjectInformation( HANDLE handle, INT index, void *info,
HWINSTA WINAPI NtUserGetProcessWindowStation(void);
HANDLE WINAPI NtUserGetProp( HWND hwnd, const WCHAR *str );
HDESK WINAPI NtUserGetThreadDesktop( DWORD thread );
+BOOL WINAPI NtUserIsClipboardFormatAvailable( UINT format );
HWINSTA WINAPI NtUserOpenWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK access );
BOOL WINAPI NtUserSetObjectInformation( HANDLE handle, INT index, void *info, DWORD len );
HDESK WINAPI NtUserOpenDesktop( OBJECT_ATTRIBUTES *attr, DWORD flags, ACCESS_MASK access );
More information about the wine-cvs
mailing list