[PATCH v2 1/4] gdi32: Support StockFlag in GDI_HANDLE_ENTRY.

Huw Davies huw at codeweavers.com
Fri Aug 6 09:59:07 CDT 2021


From: Jacek Caban <jacek at codeweavers.com>

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
---
 dlls/gdi32/gdiobj.c       | 14 ++++++++++++--
 dlls/gdi32/tests/gdiobj.c |  1 -
 include/ntgdi.h           |  5 +++--
 3 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/dlls/gdi32/gdiobj.c b/dlls/gdi32/gdiobj.c
index 16a7b897e30..326414372e6 100644
--- a/dlls/gdi32/gdiobj.c
+++ b/dlls/gdi32/gdiobj.c
@@ -613,6 +613,16 @@ static void set_gdi_shared(void)
     NtCurrentTeb()->Peb->GdiSharedHandleTable = &gdi_shared;
 }
 
+static HGDIOBJ make_stock_object( HGDIOBJ obj )
+{
+    GDI_HANDLE_ENTRY *entry;
+
+    if (!(entry = handle_entry( obj ))) return 0;
+    entry_obj( entry )->system = TRUE;
+    entry->StockFlag = 1;
+    return entry_to_handle( entry );
+}
+
 /***********************************************************************
  *           DllMain
  *
@@ -668,8 +678,8 @@ BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
     /* clear the NOSYSTEM bit on all stock objects*/
     for (i = 0; i < NB_STOCK_OBJECTS; i++)
     {
-        if (stock_objects[i]) __wine_make_gdi_object_system( stock_objects[i], TRUE );
-        if (scaled_stock_objects[i]) __wine_make_gdi_object_system( scaled_stock_objects[i], TRUE );
+        stock_objects[i] = make_stock_object( stock_objects[i] );
+        scaled_stock_objects[i] = make_stock_object( scaled_stock_objects[i] );
     }
     return TRUE;
 }
diff --git a/dlls/gdi32/tests/gdiobj.c b/dlls/gdi32/tests/gdiobj.c
index 789c9ecb0f8..64d37e39ab6 100644
--- a/dlls/gdi32/tests/gdiobj.c
+++ b/dlls/gdi32/tests/gdiobj.c
@@ -396,7 +396,6 @@ static void test_shared_handle_entry( HGDIOBJ obj, unsigned int type, BOOL is_st
         todo_wine
         ok(entry->ExtType == NTGDI_OBJ_DC, "ExtType = %x, expected NTGDI_OBJ_DC\n", entry->ExtType);
     }
-    todo_wine_if(is_stock)
     ok(entry->StockFlag == is_stock, "StockFlag = %x\n", entry->StockFlag);
     ok(entry->Type == (type & 0x1f), "Type = %x, expected %x\n", entry->Type, type & 0x1f);
     ok(entry->Object, "Object = NULL\n");
diff --git a/include/ntgdi.h b/include/ntgdi.h
index d023d10bfc6..d6d7a5572d1 100644
--- a/include/ntgdi.h
+++ b/include/ntgdi.h
@@ -67,8 +67,9 @@ typedef struct _GDI_HANDLE_ENTRY
 /* Wine extension, native uses NTGDI_OBJ_DC */
 #define NTGDI_OBJ_MEMDC           0x41
 
-#define NTGDI_HANDLE_TYPE_SHIFT  16
-#define NTGDI_HANDLE_TYPE_MASK   0x007f0000
+#define NTGDI_HANDLE_TYPE_SHIFT    16
+#define NTGDI_HANDLE_TYPE_MASK     0x007f0000
+#define NTGDI_HANDLE_STOCK_OBJECT  0x00800000
 
 typedef struct _GDI_SHARED_MEMORY
 {
-- 
2.23.0




More information about the wine-devel mailing list