Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com --- dlls/user32/driver.c | 37 +++++++++++++++++++++++++++++++++++++ dlls/user32/misc.c | 26 +------------------------- dlls/user32/user_private.h | 1 + 3 files changed, 39 insertions(+), 25 deletions(-)
diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c index 5b2929245c..483d5552bf 100644 --- a/dlls/user32/driver.c +++ b/dlls/user32/driver.c @@ -125,6 +125,7 @@ static const USER_DRIVER *load_driver(void) GET_USER_FUNC(ClipCursor); GET_USER_FUNC(UpdateClipboard); GET_USER_FUNC(ChangeDisplaySettingsEx); + GET_USER_FUNC(EnumDisplayDevicesW); GET_USER_FUNC(EnumDisplayMonitors); GET_USER_FUNC(EnumDisplaySettingsEx); GET_USER_FUNC(GetMonitorInfo); @@ -354,6 +355,35 @@ static LONG CDECL nulldrv_ChangeDisplaySettingsEx( LPCWSTR name, LPDEVMODEW mode return DISP_CHANGE_FAILED; }
+static BOOL CDECL nulldrv_EnumDisplayDevicesW( LPCWSTR lpDevice, DWORD i, LPDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags ) +{ + 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}; + + 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; + + return TRUE; +} + static BOOL CDECL nulldrv_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITORENUMPROC proc, LPARAM lp ) { RECT r = {0, 0, 640, 480}; @@ -549,6 +579,7 @@ static USER_DRIVER null_driver = nulldrv_UpdateClipboard, /* display modes */ nulldrv_ChangeDisplaySettingsEx, + nulldrv_EnumDisplayDevicesW, nulldrv_EnumDisplayMonitors, nulldrv_EnumDisplaySettingsEx, nulldrv_GetMonitorInfo, @@ -691,6 +722,11 @@ static LONG CDECL loaderdrv_ChangeDisplaySettingsEx( LPCWSTR name, LPDEVMODEW mo return load_driver()->pChangeDisplaySettingsEx( name, mode, hwnd, flags, lparam ); }
+static BOOL CDECL loaderdrv_EnumDisplayDevicesW( LPCWSTR lpDevice, DWORD i, LPDISPLAY_DEVICEW lpDisplayDevice, DWORD dwFlags ) +{ + return load_driver()->pEnumDisplayDevicesW( lpDevice, i, lpDisplayDevice, dwFlags ); +} + static BOOL CDECL loaderdrv_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITORENUMPROC proc, LPARAM lp ) { return load_driver()->pEnumDisplayMonitors( hdc, rect, proc, lp ); @@ -770,6 +806,7 @@ static USER_DRIVER lazy_load_driver = loaderdrv_UpdateClipboard, /* display modes */ loaderdrv_ChangeDisplaySettingsEx, + loaderdrv_EnumDisplayDevicesW, loaderdrv_EnumDisplayMonitors, loaderdrv_EnumDisplaySettingsEx, loaderdrv_GetMonitorInfo, diff --git a/dlls/user32/misc.c b/dlls/user32/misc.c index d28cd9fd05..1a45e1c882 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.@) */ @@ -288,25 +282,7 @@ BOOL WINAPI EnumDisplayDevicesA( LPCSTR lpDevice, DWORD i, LPDISPLAY_DEVICEA lpD BOOL WINAPI EnumDisplayDevicesW( LPCWSTR lpDevice, DWORD i, 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; - - return TRUE; + return USER_Driver->pEnumDisplayDevicesW(lpDevice, i, lpDisplayDevice, dwFlags); }
/*********************************************************************** diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h index 514cf6753f..51b60a4b5c 100644 --- a/dlls/user32/user_private.h +++ b/dlls/user32/user_private.h @@ -86,6 +86,7 @@ typedef struct tagUSER_DRIVER { void (CDECL *pUpdateClipboard)(void); /* display modes */ LONG (CDECL *pChangeDisplaySettingsEx)(LPCWSTR,LPDEVMODEW,HWND,DWORD,LPVOID); + BOOL (CDECL *pEnumDisplayDevicesW)(LPCWSTR,DWORD,LPDISPLAY_DEVICEW,DWORD); BOOL (CDECL *pEnumDisplayMonitors)(HDC,LPRECT,MONITORENUMPROC,LPARAM); BOOL (CDECL *pEnumDisplaySettingsEx)(LPCWSTR,DWORD,LPDEVMODEW,DWORD); BOOL (CDECL *pGetMonitorInfo)(HMONITOR,MONITORINFO*);