[PATCH 2/9] winemac.drv: EnumDisplayDevices placeholder implementation

Donat Enikeev donat at enikeev.net
Mon Apr 24 15:48:27 CDT 2017


Based on Ken Thomases <ken at codeweavers.com> staging patches

Signed-off-by: Donat Enikeev <donat at enikeev.net>
---
 dlls/winemac.drv/display.c        | 51 +++++++++++++++++++++++++++++++++++++++
 dlls/winemac.drv/winemac.drv.spec |  1 +
 2 files changed, 52 insertions(+)

diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c
index 49892ca..9b4e231 100644
--- a/dlls/winemac.drv/display.c
+++ b/dlls/winemac.drv/display.c
@@ -971,6 +971,57 @@ BOOL CDECL macdrv_EnumDisplayMonitors(HDC hdc, LPRECT rect, MONITORENUMPROC proc
     return ret;
 }
 
+static const WCHAR display_name[] = { '%','s','\\','M','o','n','i','t','o','r','0',0};
+static const WCHAR display_string[] = {'W','i','n','e',' ','D','i','s','p','l','a','y',0};
+static const WCHAR display_deviceid[] = {'M','O','N','I','T','O','R','\\','W','I','N','E','0','0','0','0',0};
+
+static const WCHAR adapter_name[] = { '\\','\\','.','\\','D','I','S','P','L','A','Y','%','d',0 };
+static const WCHAR adapter_string[] = {'W','i','n','e',' ','C','o','c','o','a',' ','A','d','a','p','t','e','r',0};
+static const WCHAR adapter_deviceid[] = {'P','C','I','\\','V','E','N','_','0','0','0','0','&',
+                                                'D','E','V','_','0','0','0','0',0};
+
+/***********************************************************************
+ *              EnumDisplayDevices  (MACDRV.@)
+ */
+BOOL CDECL macdrv_EnumDisplayDevices( LPCWSTR lpDevice, DWORD iDevNum, LPDISPLAY_DEVICEW lpDisplayDevice,
+                                 DWORD dwFlags )
+{
+    TRACE("(%s, %d, %p, 0x%08x)\n",debugstr_w(lpDevice),iDevNum,lpDisplayDevice,dwFlags);
+
+    if (iDevNum)
+        return FALSE;
+
+    if (lpDevice)
+    {
+        lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ACTIVE | DISPLAY_DEVICE_ATTACHED;
+
+        sprintfW(lpDisplayDevice->DeviceName, display_name, lpDevice);
+        memcpy(lpDisplayDevice->DeviceString, display_string, sizeof(display_string));
+
+        if(lpDisplayDevice->cb >= offsetof(DISPLAY_DEVICEW, DeviceID) + sizeof(lpDisplayDevice->DeviceID))
+            memcpy(lpDisplayDevice->DeviceID, display_deviceid, sizeof(display_deviceid));
+
+    } else
+    {
+        lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_VGA_COMPATIBLE;
+        if (monitors[iDevNum].dwFlags & MONITORINFOF_PRIMARY)
+            lpDisplayDevice->StateFlags |= DISPLAY_DEVICE_PRIMARY_DEVICE;
+
+        memcpy(lpDisplayDevice->DeviceName, monitors[iDevNum].szDevice, sizeof(monitors[iDevNum].szDevice));
+
+        sprintfW(lpDisplayDevice->DeviceName, adapter_name, iDevNum+1);
+        memcpy(lpDisplayDevice->DeviceString, adapter_string, sizeof(adapter_string));
+
+        if(lpDisplayDevice->cb >= offsetof(DISPLAY_DEVICEW, DeviceID) + sizeof(lpDisplayDevice->DeviceID))
+            memcpy(lpDisplayDevice->DeviceID, adapter_deviceid, sizeof(adapter_deviceid));
+    }
+
+    if(lpDisplayDevice->cb >= offsetof(DISPLAY_DEVICEW, DeviceKey) + sizeof(lpDisplayDevice->DeviceKey))
+        lpDisplayDevice->DeviceKey[0] = 0;
+
+    return TRUE;
+}
+
 
 /***********************************************************************
  *              EnumDisplaySettingsEx  (MACDRV.@)
diff --git a/dlls/winemac.drv/winemac.drv.spec b/dlls/winemac.drv/winemac.drv.spec
index 6fa723a..be6376e 100644
--- a/dlls/winemac.drv/winemac.drv.spec
+++ b/dlls/winemac.drv/winemac.drv.spec
@@ -13,6 +13,7 @@
 @ cdecl DestroyCursorIcon(long) macdrv_DestroyCursorIcon
 @ cdecl DestroyWindow(long) macdrv_DestroyWindow
 @ cdecl EnumDisplayMonitors(long ptr ptr long) macdrv_EnumDisplayMonitors
+@ cdecl EnumDisplayDevices(ptr long ptr long) macdrv_EnumDisplayDevices
 @ cdecl EnumDisplaySettingsEx(ptr long ptr long) macdrv_EnumDisplaySettingsEx
 @ cdecl GetCursorPos(ptr) macdrv_GetCursorPos
 @ cdecl GetKeyboardLayout(long) macdrv_GetKeyboardLayout
-- 
2.7.4




More information about the wine-patches mailing list