[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