From d7786e1f0e2e7fb541edd4129c9a1ee0a20940e5 Mon Sep 17 00:00:00 2001
From: FunkyFr3sh <cc.red.alert.1@googlemail.com>
Date: Thu, 10 Aug 2023 11:32:43 +0200
Subject: [PATCH] support CLSID_DirectDrawClipper in CoCreateInstance

---
 src/dd.c           |  8 --------
 src/winapi_hooks.c | 13 +++++++++++++
 2 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/src/dd.c b/src/dd.c
index 2eb5e73..7789e43 100644
--- a/src/dd.c
+++ b/src/dd.c
@@ -758,14 +758,6 @@ HRESULT dd_SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwFl
             real_SetWindowLongA(g_ddraw->hwnd, GWL_EXSTYLE, exstyle & ~(WS_EX_TOOLWINDOW));
         }
 
-        if (g_ddraw->wine)
-        {
-            real_SetWindowLongA(
-                g_ddraw->hwnd,
-                GWL_STYLE,
-                (real_GetWindowLongA(g_ddraw->hwnd, GWL_STYLE) | WS_MINIMIZEBOX) & ~(WS_MAXIMIZEBOX | WS_THICKFRAME));
-        }
-
         /* center the window with correct dimensions */
         int cy = g_ddraw->mode.dmPelsWidth ? g_ddraw->mode.dmPelsWidth : g_ddraw->render.width;
         int cx = g_ddraw->mode.dmPelsHeight ? g_ddraw->mode.dmPelsHeight : g_ddraw->render.height;
diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c
index dcf2be2..0a02e09 100644
--- a/src/winapi_hooks.c
+++ b/src/winapi_hooks.c
@@ -13,6 +13,7 @@
 #include "render_gdi.h"
 #include "directinput.h"
 #include "ddsurface.h"
+#include "ddclipper.h"
 #include "dllmain.h"
 #include "hook.h"
 
@@ -1206,6 +1207,8 @@ HRESULT WINAPI fake_CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD
 
         if (IsEqualGUID(&CLSID_DirectDraw, rclsid) || IsEqualGUID(&CLSID_DirectDraw7, rclsid))
         {
+            TRACE("     GUID = %08X (CLSID_DirectDrawX)\n", ((GUID*)rclsid)->Data1);
+
             if (IsEqualGUID(&IID_IDirectDraw2, riid) ||
                 IsEqualGUID(&IID_IDirectDraw4, riid) ||
                 IsEqualGUID(&IID_IDirectDraw7, riid))
@@ -1217,6 +1220,16 @@ HRESULT WINAPI fake_CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD
                 return dd_CreateEx(NULL, ppv, &IID_IDirectDraw, NULL);
             }
         }    
+
+        if (IsEqualGUID(&CLSID_DirectDrawClipper, rclsid))
+        {
+            TRACE("     GUID = %08X (CLSID_DirectDrawClipper)\n", ((GUID*)rclsid)->Data1);
+
+            if (IsEqualGUID(&IID_IDirectDrawClipper, riid))
+            {
+                return dd_CreateClipper(0, (IDirectDrawClipperImpl**)ppv, NULL);
+            }
+        }
     }
 
     return real_CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv);