[PATCH 3/9] user32: moving EnumDisplayDevices to drivers

Donat Enikeev donat at enikeev.net
Mon Apr 24 15:49:25 CDT 2017


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

Signed-off-by: Donat Enikeev <donat at enikeev.net>
---
 dlls/user32/driver.c       | 15 +++++++++++++++
 dlls/user32/misc.c         | 34 +++++++++-------------------------
 dlls/user32/user_private.h |  1 +
 3 files changed, 25 insertions(+), 25 deletions(-)

diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c
index d59a2ea..bcc57a2 100644
--- a/dlls/user32/driver.c
+++ b/dlls/user32/driver.c
@@ -126,6 +126,7 @@ static const USER_DRIVER *load_driver(void)
         GET_USER_FUNC(UpdateClipboard);
         GET_USER_FUNC(ChangeDisplaySettingsEx);
         GET_USER_FUNC(EnumDisplayMonitors);
+        GET_USER_FUNC(EnumDisplayDevices);
         GET_USER_FUNC(EnumDisplaySettingsEx);
         GET_USER_FUNC(GetMonitorInfo);
         GET_USER_FUNC(CreateDesktopWindow);
@@ -357,6 +358,12 @@ static BOOL CDECL nulldrv_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITORENUM
     return FALSE;
 }
 
+static BOOL CDECL nulldrv_EnumDisplayDevices( LPCWSTR lpDevice, DWORD iDevNum, LPDISPLAY_DEVICEW lpDisplayDevice,
+                                 DWORD dwFlags )
+{
+    return FALSE;
+}
+
 static BOOL CDECL nulldrv_EnumDisplaySettingsEx( LPCWSTR name, DWORD num, LPDEVMODEW mode, DWORD flags )
 {
     return FALSE;
@@ -527,6 +534,7 @@ static USER_DRIVER null_driver =
     /* display modes */
     nulldrv_ChangeDisplaySettingsEx,
     nulldrv_EnumDisplayMonitors,
+    nulldrv_EnumDisplayDevices,
     nulldrv_EnumDisplaySettingsEx,
     nulldrv_GetMonitorInfo,
     /* windowing functions */
@@ -673,6 +681,12 @@ static BOOL CDECL loaderdrv_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITOREN
     return load_driver()->pEnumDisplayMonitors( hdc, rect, proc, lp );
 }
 
+static BOOL CDECL loaderdrv_EnumDisplayDevices( LPCWSTR lpDevice, DWORD iDevNum,
+                                                LPDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags )
+{
+    return load_driver()->pEnumDisplayDevices( lpDevice, iDevNum, lpDisplayDevice, dwFlags );
+}
+
 static BOOL CDECL loaderdrv_EnumDisplaySettingsEx( LPCWSTR name, DWORD num, LPDEVMODEW mode, DWORD flags )
 {
     return load_driver()->pEnumDisplaySettingsEx( name, num, mode, flags );
@@ -748,6 +762,7 @@ static USER_DRIVER lazy_load_driver =
     /* display modes */
     loaderdrv_ChangeDisplaySettingsEx,
     loaderdrv_EnumDisplayMonitors,
+    loaderdrv_EnumDisplayDevices,
     loaderdrv_EnumDisplaySettingsEx,
     loaderdrv_GetMonitorInfo,
     /* windowing functions */
diff --git a/dlls/user32/misc.c b/dlls/user32/misc.c
index fa0502e..c8cb2e8 100644
--- a/dlls/user32/misc.c
+++ b/dlls/user32/misc.c
@@ -243,12 +243,6 @@ DWORD WINAPI SetLogonNotifyWindow(HWINSTA hwinsta,HWND hwnd)
     return 1;
 }
 
-static const WCHAR primary_device_name[] = {'\\','\\','.','\\','D','I','S','P','L','A','Y','1',0};
-static const WCHAR primary_device_string[] = {'X','1','1',' ','W','i','n','d','o','w','i','n','g',' ',
-                                              'S','y','s','t','e','m',0};
-static const WCHAR primary_device_deviceid[] = {'P','C','I','\\','V','E','N','_','0','0','0','0','&',
-                                                'D','E','V','_','0','0','0','0',0};
-
 /***********************************************************************
  *		EnumDisplayDevicesA (USER32.@)
  */
@@ -285,28 +279,18 @@ BOOL WINAPI EnumDisplayDevicesA( LPCSTR lpDevice, DWORD i, LPDISPLAY_DEVICEA lpD
 /***********************************************************************
  *		EnumDisplayDevicesW (USER32.@)
  */
-BOOL WINAPI EnumDisplayDevicesW( LPCWSTR lpDevice, DWORD i, LPDISPLAY_DEVICEW lpDisplayDevice,
+BOOL WINAPI EnumDisplayDevicesW( LPCWSTR lpDevice, DWORD iDevNum, LPDISPLAY_DEVICEW lpDisplayDevice,
                                  DWORD dwFlags )
 {
-    FIXME("(%s,%d,%p,0x%08x), stub!\n",debugstr_w(lpDevice),i,lpDisplayDevice,dwFlags);
-
-    if (i)
-        return FALSE;
-
-    memcpy(lpDisplayDevice->DeviceName, primary_device_name, sizeof(primary_device_name));
-    memcpy(lpDisplayDevice->DeviceString, primary_device_string, sizeof(primary_device_string));
-  
-    lpDisplayDevice->StateFlags =
-        DISPLAY_DEVICE_ATTACHED_TO_DESKTOP |
-        DISPLAY_DEVICE_PRIMARY_DEVICE |
-        DISPLAY_DEVICE_VGA_COMPATIBLE;
-
-    if(lpDisplayDevice->cb >= offsetof(DISPLAY_DEVICEW, DeviceID) + sizeof(lpDisplayDevice->DeviceID))
-        memcpy(lpDisplayDevice->DeviceID, primary_device_deviceid, sizeof(primary_device_deviceid));
-    if(lpDisplayDevice->cb >= offsetof(DISPLAY_DEVICEW, DeviceKey) + sizeof(lpDisplayDevice->DeviceKey))
-        lpDisplayDevice->DeviceKey[0] = 0;
+    BOOL ret;
+    TRACE("%s %d %p 0x%08x\n",debugstr_w(lpDevice),iDevNum,lpDisplayDevice,dwFlags);
 
-    return TRUE;
+    ret = USER_Driver->pEnumDisplayDevices( lpDevice, iDevNum, lpDisplayDevice, dwFlags );
+    if (ret)
+        TRACE("StateFlags %04x, DeviceName '%s', DeviceString '%s'\n", lpDisplayDevice->StateFlags,
+            debugstr_w(lpDisplayDevice->DeviceName),
+            debugstr_w(lpDisplayDevice->DeviceString));
+    return ret;
 }
 
 struct monitor_enum_info
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 0b5b2ac..70773e3 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -84,6 +84,7 @@ typedef struct tagUSER_DRIVER {
     /* display modes */
     LONG   (CDECL *pChangeDisplaySettingsEx)(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID);
     BOOL   (CDECL *pEnumDisplayMonitors)(HDC,LPRECT,MONITORENUMPROC,LPARAM);
+    BOOL   (CDECL *pEnumDisplayDevices)(LPCWSTR,DWORD,LPDISPLAY_DEVICEW,DWORD);
     BOOL   (CDECL *pEnumDisplaySettingsEx)(LPCWSTR,DWORD,LPDEVMODEW,DWORD);
     BOOL   (CDECL *pGetMonitorInfo)(HMONITOR,MONITORINFO*);
     /* windowing functions */
-- 
2.7.4




More information about the wine-patches mailing list