From: Rémi Bernon rbernon@codeweavers.com
--- dlls/user32/clipboard.c | 18 ++++++++++++++++-- dlls/win32u/tests/win32u.c | 2 +- 2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c index 79edf9e2187..6dd787920d7 100644 --- a/dlls/user32/clipboard.c +++ b/dlls/user32/clipboard.c @@ -33,6 +33,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(clipboard);
+#define MAX_ATOM_LEN 255
static CRITICAL_SECTION clipboard_cs; static CRITICAL_SECTION_DEBUG critsect_debug = @@ -526,7 +527,12 @@ HANDLE render_synthesized_format( UINT format, UINT from ) */ UINT WINAPI RegisterClipboardFormatW( LPCWSTR name ) { - return GlobalAddAtomW( name ); + UNICODE_STRING str; + + TRACE( "%s\n", debugstr_w(name) ); + + RtlInitUnicodeString( &str, name ); + return NtUserRegisterWindowMessage( &str ); }
@@ -535,7 +541,15 @@ UINT WINAPI RegisterClipboardFormatW( LPCWSTR name ) */ UINT WINAPI RegisterClipboardFormatA( LPCSTR name ) { - return GlobalAddAtomA( name ); + WCHAR buf[MAX_ATOM_LEN + 1]; + UNICODE_STRING str = {.Buffer = buf, .MaximumLength = sizeof(buf)}; + STRING ansi; + + TRACE( "%s\n", debugstr_a(name) ); + + RtlInitAnsiString( &ansi, name ); + RtlAnsiStringToUnicodeString( &str, &ansi, FALSE ); + return NtUserRegisterWindowMessage( &str ); }
diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index 47497f6858d..6379b7a65a9 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -2612,7 +2612,7 @@ static void test_RegisterClipboardFormat(void) SetLastError( 0xdeadbeef ); atom = RegisterClipboardFormatW( NULL ); ok( atom == 0, "got %#x\n", atom ); - todo_wine ok( GetLastError() == ERROR_INVALID_PARAMETER, "got %#lx\n", GetLastError() ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "got %#lx\n", GetLastError() );
SetLastError( 0xdeadbeef ); atom = RegisterClipboardFormatW( L"" );