Jactry Zeng : win32u/clipboard: Set handle of bitmap and palette as system object.

Alexandre Julliard julliard at winehq.org
Thu Jun 2 16:26:09 CDT 2022


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

Author: Jactry Zeng <jzeng at codeweavers.com>
Date:   Sun May 29 02:25:01 2022 -0500

win32u/clipboard: Set handle of bitmap and palette as system object.

Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>

---

 dlls/user32/tests/clipboard.c | 6 +++---
 dlls/win32u/clipboard.c       | 9 ++++++++-
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/dlls/user32/tests/clipboard.c b/dlls/user32/tests/clipboard.c
index 537b714a6ac..e05de29805e 100644
--- a/dlls/user32/tests/clipboard.c
+++ b/dlls/user32/tests/clipboard.c
@@ -2032,7 +2032,7 @@ static void test_data_handles(void)
     memset( &bmi, 0, sizeof(bmi) );
     bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
     result = GetDIBits( hdc, h, 0, 0, NULL, &bmi, 0 );
-    todo_wine ok( !!result, "GetDIBits failed: %#lx.\n", GetLastError() );
+    ok( !!result, "GetDIBits failed: %#lx.\n", GetLastError() );
 
     bitmap = CreateBitmap( 10, 10, 1, 1, NULL );
     h = SetClipboardData( CF_DSPBITMAP, bitmap );
@@ -2050,8 +2050,8 @@ static void test_data_handles(void)
     ok( !!DeleteObject( palette ), "DeleteObject failed.\n" );
     h = GetClipboardData( CF_PALETTE );
     ok( h == palette, "Expected palette %p, got %p.\n", palette, h );
-    todo_wine ok( !!GetPaletteEntries( h, 0, 1, &entry ), "GetPaletteEntries %p failed.\n", h );
-    todo_wine ok( entry.peRed == 0x12 && entry.peGreen == 0x34 && entry.peBlue == 0x56,
+    ok( !!GetPaletteEntries( h, 0, 1, &entry ), "GetPaletteEntries %p failed.\n", h );
+    ok( entry.peRed == 0x12 && entry.peGreen == 0x34 && entry.peBlue == 0x56,
             "Got wrong color (%02x, %02x, %02x).\n", entry.peRed, entry.peGreen, entry.peBlue );
 
     emf = create_emf();
diff --git a/dlls/win32u/clipboard.c b/dlls/win32u/clipboard.c
index 67bdd0ba391..0ddbc62f444 100644
--- a/dlls/win32u/clipboard.c
+++ b/dlls/win32u/clipboard.c
@@ -31,6 +31,7 @@
 #include "ntstatus.h"
 #define WIN32_NO_STATUS
 #include "win32u_private.h"
+#include "ntgdi_private.h"
 #include "ntuser_private.h"
 #include "wine/server.h"
 #include "wine/debug.h"
@@ -112,8 +113,9 @@ static void free_cached_data( struct cached_format *cache )
     switch (cache->format)
     {
     case CF_BITMAP:
-    case CF_DSPBITMAP:
     case CF_PALETTE:
+        make_gdi_object_system( cache->handle, FALSE );
+    case CF_DSPBITMAP:
         NtGdiDeleteObjectApp( cache->handle );
         break;
 
@@ -595,6 +597,11 @@ NTSTATUS WINAPI NtUserSetClipboardData( UINT format, HANDLE data, struct set_cli
             cache->format = format;
             cache->handle = data;
         }
+
+        if (format == CF_BITMAP || format == CF_PALETTE)
+        {
+            make_gdi_object_system( cache->handle, TRUE );
+        }
     }
 
     pthread_mutex_lock( &clipboard_mutex );




More information about the wine-cvs mailing list