[PATCH] Implement DwmIsCompositionEnabled

Joel Leclerc meerkatanonymous at gmail.com
Thu Oct 3 04:12:27 CDT 2019


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=39469
Signed-off-by: Joel Leclerc <meerkatanonymous at gmail.com>
---
 dlls/dwmapi/Makefile.in   |  1 +
 dlls/dwmapi/dwmapi_main.c | 41 ++++++++++++++++++++++++++++++++-------
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/dlls/dwmapi/Makefile.in b/dlls/dwmapi/Makefile.in
index 3a3691326f..ebdd3aae05 100644
--- a/dlls/dwmapi/Makefile.in
+++ b/dlls/dwmapi/Makefile.in
@@ -1,5 +1,6 @@
 MODULE    = dwmapi.dll
 IMPORTLIB = dwmapi
+IMPORTS   = advapi32
 
 EXTRADLLFLAGS = -mno-cygwin
 
diff --git a/dlls/dwmapi/dwmapi_main.c b/dlls/dwmapi/dwmapi_main.c
index 6378a091f0..ede3c49420 100644
--- a/dlls/dwmapi/dwmapi_main.c
+++ b/dlls/dwmapi/dwmapi_main.c
@@ -26,6 +26,7 @@
 #include "winbase.h"
 #include "wingdi.h"
 #include "winuser.h"
+#include "winreg.h"
 #include "dwmapi.h"
 #include "wine/debug.h"
 
@@ -51,14 +52,40 @@ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv)
  */
 HRESULT WINAPI DwmIsCompositionEnabled(BOOL *enabled)
 {
-    static int once;
-    if (!once)
-    {
-        FIXME("%p\n", enabled);
-        once = 1;
+    static const WCHAR dwn_reg_keyW[] = {'S','o','f','t','w','a','r','e','\\',
+                                         'M','i','c','r','o','s','o','f','t','\\',
+                                         'W','i','n','d','o','w','s','\\',
+                                         'D','W','M','\0'};
+    static const WCHAR compositionW[] = {'C','o','m','p','o','s','i','t','i','o','n','\0'};
+
+    HKEY hkey;
+    WCHAR buf[12];
+    DWORD type, value, count = sizeof(buf);
+
+    if (RegOpenKeyW(HKEY_CURRENT_USER, dwn_reg_keyW, &hkey) != ERROR_SUCCESS) {
+        goto fail;
+    }
+
+    if (RegQueryValueExW(hkey, compositionW, NULL, &type, (BYTE *)buf, &count) != ERROR_SUCCESS) {
+        goto fail;
+    }
+
+    if (type == REG_DWORD) {
+        memcpy(&value, buf, sizeof(value));
+    } else {
+        FIXME("Software\\Microsoft\\Windows\\DWM\\Composition is not of type DWORD\n");
+        goto fail;
     }
-    else
-        TRACE("%p\n", enabled);
+
+    if (value == 1) {
+        TRACE("*%p = 1\n", enabled);
+
+        *enabled = TRUE;
+        return S_OK;
+    }
+
+ fail:
+    TRACE("*%p = 0\n", enabled);
 
     *enabled = FALSE;
     return S_OK;
-- 
2.23.0




More information about the wine-devel mailing list