win32u: Move NtUserEnumDisplaySettings implementation from user32.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
8b9b2580a5
commit
1f2c3e8538
|
@ -274,11 +274,6 @@ static BOOL CDECL loaderdrv_EnumDisplayMonitors( HDC hdc, LPRECT rect, MONITOREN
|
|||
return load_driver()->pEnumDisplayMonitors( hdc, rect, proc, lp );
|
||||
}
|
||||
|
||||
static BOOL CDECL loaderdrv_EnumDisplaySettingsEx( LPCWSTR name, DWORD num, LPDEVMODEW mode, DWORD flags )
|
||||
{
|
||||
return load_driver()->pEnumDisplaySettingsEx( name, num, mode, flags );
|
||||
}
|
||||
|
||||
static BOOL CDECL loaderdrv_GetMonitorInfo( HMONITOR handle, LPMONITORINFO info )
|
||||
{
|
||||
return load_driver()->pGetMonitorInfo( handle, info );
|
||||
|
@ -345,7 +340,7 @@ static struct user_driver_funcs lazy_load_driver =
|
|||
/* display modes */
|
||||
loaderdrv_ChangeDisplaySettingsEx,
|
||||
loaderdrv_EnumDisplayMonitors,
|
||||
loaderdrv_EnumDisplaySettingsEx,
|
||||
NULL,
|
||||
loaderdrv_GetMonitorInfo,
|
||||
NULL,
|
||||
/* windowing functions */
|
||||
|
|
|
@ -3298,41 +3298,14 @@ BOOL WINAPI EnumDisplaySettingsExA(LPCSTR lpszDeviceName, DWORD iModeNum,
|
|||
/***********************************************************************
|
||||
* EnumDisplaySettingsExW (USER32.@)
|
||||
*/
|
||||
BOOL WINAPI EnumDisplaySettingsExW(LPCWSTR lpszDeviceName, DWORD iModeNum,
|
||||
LPDEVMODEW lpDevMode, DWORD dwFlags)
|
||||
BOOL WINAPI EnumDisplaySettingsExW( const WCHAR *device, DWORD mode,
|
||||
DEVMODEW *dev_mode, DWORD flags )
|
||||
{
|
||||
WCHAR primary_adapter[CCHDEVICENAME];
|
||||
BOOL ret;
|
||||
|
||||
TRACE("%s %#x %p %#x\n", wine_dbgstr_w(lpszDeviceName), iModeNum, lpDevMode, dwFlags);
|
||||
|
||||
if (!lpszDeviceName)
|
||||
{
|
||||
if (!get_primary_adapter(primary_adapter))
|
||||
return FALSE;
|
||||
|
||||
lpszDeviceName = primary_adapter;
|
||||
}
|
||||
|
||||
if (!is_valid_adapter_name(lpszDeviceName))
|
||||
{
|
||||
ERR("Invalid device name %s.\n", wine_dbgstr_w(lpszDeviceName));
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ret = USER_Driver->pEnumDisplaySettingsEx(lpszDeviceName, iModeNum, lpDevMode, dwFlags);
|
||||
if (ret)
|
||||
TRACE("device:%s mode index:%#x position:(%d,%d) resolution:%ux%u frequency:%uHz "
|
||||
"depth:%ubits orientation:%#x.\n", wine_dbgstr_w(lpszDeviceName), iModeNum,
|
||||
lpDevMode->u1.s2.dmPosition.x, lpDevMode->u1.s2.dmPosition.y, lpDevMode->dmPelsWidth,
|
||||
lpDevMode->dmPelsHeight, lpDevMode->dmDisplayFrequency, lpDevMode->dmBitsPerPel,
|
||||
lpDevMode->u1.s2.dmDisplayOrientation);
|
||||
else
|
||||
WARN("Failed to query %s display settings.\n", wine_dbgstr_w(lpszDeviceName));
|
||||
return ret;
|
||||
UNICODE_STRING str;
|
||||
RtlInitUnicodeString( &str, device );
|
||||
return NtUserEnumDisplaySettings( &str, mode, dev_mode, flags );
|
||||
}
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* get_monitor_dpi
|
||||
*/
|
||||
|
|
|
@ -263,18 +263,18 @@ static INT CDECL nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap )
|
|||
}
|
||||
case BITSPIXEL:
|
||||
{
|
||||
UNICODE_STRING display;
|
||||
DEVMODEW devmode;
|
||||
WCHAR *display;
|
||||
DC *dc;
|
||||
|
||||
if (NtGdiGetDeviceCaps( dev->hdc, TECHNOLOGY ) == DT_RASDISPLAY && user_callbacks)
|
||||
if (NtGdiGetDeviceCaps( dev->hdc, TECHNOLOGY ) == DT_RASDISPLAY)
|
||||
{
|
||||
dc = get_nulldrv_dc( dev );
|
||||
display = dc->display[0] ? dc->display : NULL;
|
||||
memset( &devmode, 0, sizeof(devmode) );
|
||||
devmode.dmSize = sizeof(devmode);
|
||||
if (user_callbacks->pEnumDisplaySettingsW( display, ENUM_CURRENT_SETTINGS, &devmode )
|
||||
&& devmode.dmFields & DM_BITSPERPEL && devmode.dmBitsPerPel)
|
||||
init_unicode_string( &display, dc->display );
|
||||
if (NtUserEnumDisplaySettings( &display, ENUM_CURRENT_SETTINGS, &devmode, 0 ) &&
|
||||
(devmode.dmFields & DM_BITSPERPEL) && devmode.dmBitsPerPel)
|
||||
return devmode.dmBitsPerPel;
|
||||
}
|
||||
return 32;
|
||||
|
@ -313,24 +313,21 @@ static INT CDECL nulldrv_GetDeviceCaps( PHYSDEV dev, INT cap )
|
|||
case SCALINGFACTORY: return 0;
|
||||
case VREFRESH:
|
||||
{
|
||||
UNICODE_STRING display;
|
||||
DEVMODEW devmode;
|
||||
WCHAR *display;
|
||||
DC *dc;
|
||||
|
||||
if (NtGdiGetDeviceCaps( dev->hdc, TECHNOLOGY ) != DT_RASDISPLAY)
|
||||
return 0;
|
||||
|
||||
if (user_callbacks)
|
||||
{
|
||||
dc = get_nulldrv_dc( dev );
|
||||
|
||||
memset( &devmode, 0, sizeof(devmode) );
|
||||
devmode.dmSize = sizeof(devmode);
|
||||
display = dc->display[0] ? dc->display : NULL;
|
||||
if (user_callbacks->pEnumDisplaySettingsW( display, ENUM_CURRENT_SETTINGS, &devmode ))
|
||||
return devmode.dmDisplayFrequency ? devmode.dmDisplayFrequency : 1;
|
||||
}
|
||||
|
||||
init_unicode_string( &display, dc->display );
|
||||
if (NtUserEnumDisplaySettings( &display, ENUM_CURRENT_SETTINGS, &devmode, 0 ) &&
|
||||
devmode.dmDisplayFrequency)
|
||||
return devmode.dmDisplayFrequency;
|
||||
return 1;
|
||||
}
|
||||
case DESKTOPHORZRES:
|
||||
|
@ -1044,6 +1041,11 @@ static SHORT CDECL loaderdrv_VkKeyScanEx( WCHAR ch, HKL layout )
|
|||
return load_driver()->pVkKeyScanEx( ch, layout );
|
||||
}
|
||||
|
||||
static BOOL CDECL loaderdrv_EnumDisplaySettingsEx( LPCWSTR name, DWORD num, LPDEVMODEW mode, DWORD flags )
|
||||
{
|
||||
return load_driver()->pEnumDisplaySettingsEx( name, num, mode, flags );
|
||||
}
|
||||
|
||||
static void CDECL loaderdrv_UpdateClipboard(void)
|
||||
{
|
||||
load_driver()->pUpdateClipboard();
|
||||
|
@ -1064,6 +1066,7 @@ static const struct user_driver_funcs lazy_load_driver =
|
|||
.pToUnicodeEx = loaderdrv_ToUnicodeEx,
|
||||
.pUnregisterHotKey = loaderdrv_UnregisterHotKey,
|
||||
.pVkKeyScanEx = loaderdrv_VkKeyScanEx,
|
||||
.pEnumDisplaySettingsEx = loaderdrv_EnumDisplaySettingsEx,
|
||||
.pUpdateDisplayDevices = loaderdrv_UpdateDisplayDevices,
|
||||
.pUpdateClipboard = loaderdrv_UpdateClipboard,
|
||||
.pScrollDC = nulldrv_ScrollDC,
|
||||
|
|
|
@ -1170,6 +1170,7 @@ static struct unix_funcs unix_funcs =
|
|||
NtUserActivateKeyboardLayout,
|
||||
NtUserCountClipboardFormats,
|
||||
NtUserEnumDisplayDevices,
|
||||
NtUserEnumDisplaySettings,
|
||||
NtUserGetDisplayConfigBufferSizes,
|
||||
NtUserGetKeyNameText,
|
||||
NtUserGetKeyboardLayoutList,
|
||||
|
|
|
@ -1282,3 +1282,36 @@ BOOL WINAPI NtUserEnumDisplayDevices( UNICODE_STRING *device, DWORD index,
|
|||
unlock_display_devices();
|
||||
return !!found;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* NtUserEnumDisplaySettings (win32u.@)
|
||||
*/
|
||||
BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD mode,
|
||||
DEVMODEW *dev_mode, DWORD flags )
|
||||
{
|
||||
WCHAR device_name[CCHDEVICENAME];
|
||||
struct adapter *adapter;
|
||||
BOOL ret;
|
||||
|
||||
TRACE( "%s %#x %p %#x\n", debugstr_us(device), mode, dev_mode, flags );
|
||||
|
||||
if (!lock_display_devices()) return FALSE;
|
||||
if ((adapter = find_adapter( device ))) lstrcpyW( device_name, adapter->dev.device_name );
|
||||
unlock_display_devices();
|
||||
if (!adapter)
|
||||
{
|
||||
WARN( "Invalid device name %s.\n", debugstr_us(device) );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
ret = user_driver->pEnumDisplaySettingsEx( device_name, mode, dev_mode, flags );
|
||||
if (ret)
|
||||
TRACE( "device:%s mode index:%#x position:(%d,%d) resolution:%ux%u frequency:%uHz "
|
||||
"depth:%ubits orientation:%#x.\n", debugstr_w(device_name), mode,
|
||||
dev_mode->dmPosition.x, dev_mode->dmPosition.y, dev_mode->dmPelsWidth,
|
||||
dev_mode->dmPelsHeight, dev_mode->dmDisplayFrequency, dev_mode->dmBitsPerPel,
|
||||
dev_mode->dmDisplayOrientation );
|
||||
else
|
||||
WARN( "Failed to query %s display settings.\n", wine_dbgstr_w(device_name) );
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -877,7 +877,7 @@
|
|||
@ stub NtUserEndPaint
|
||||
@ stdcall NtUserEnumDisplayDevices(ptr long ptr long)
|
||||
@ stub NtUserEnumDisplayMonitors
|
||||
@ stub NtUserEnumDisplaySettings
|
||||
@ stdcall NtUserEnumDisplaySettings(ptr long ptr long)
|
||||
@ stub NtUserEvent
|
||||
@ stub NtUserExcludeUpdateRgn
|
||||
@ stub NtUserFillWindow
|
||||
|
|
|
@ -38,7 +38,6 @@ struct user_callbacks
|
|||
INT (WINAPI *pGetSystemMetrics)(INT);
|
||||
BOOL (WINAPI *pGetWindowRect)( HWND hwnd, LPRECT rect );
|
||||
BOOL (WINAPI *pEnumDisplayMonitors)( HDC, LPRECT, MONITORENUMPROC, LPARAM );
|
||||
BOOL (WINAPI *pEnumDisplaySettingsW)(LPCWSTR, DWORD, LPDEVMODEW );
|
||||
BOOL (WINAPI *pRedrawWindow)( HWND, const RECT*, HRGN, UINT );
|
||||
DPI_AWARENESS_CONTEXT (WINAPI *pSetThreadDpiAwarenessContext)( DPI_AWARENESS_CONTEXT );
|
||||
HWND (WINAPI *pWindowFromDC)( HDC );
|
||||
|
@ -200,6 +199,8 @@ struct unix_funcs
|
|||
INT (WINAPI *pNtUserCountClipboardFormats)(void);
|
||||
BOOL (WINAPI *pNtUserEnumDisplayDevices)( UNICODE_STRING *device, DWORD index,
|
||||
DISPLAY_DEVICEW *info, DWORD flags );
|
||||
BOOL (WINAPI *pNtUserEnumDisplaySettings)( UNICODE_STRING *device, DWORD mode,
|
||||
DEVMODEW *dev_mode, DWORD flags );
|
||||
LONG (WINAPI *pNtUserGetDisplayConfigBufferSizes)( UINT32 flags, UINT32 *num_path_info,
|
||||
UINT32 *num_mode_info );
|
||||
INT (WINAPI *pNtUserGetKeyNameText)( LONG lparam, WCHAR *buffer, INT size );
|
||||
|
@ -394,6 +395,13 @@ static inline BOOL is_win9x(void)
|
|||
return NtCurrentTeb()->Peb->OSPlatformId == VER_PLATFORM_WIN32s;
|
||||
}
|
||||
|
||||
static inline void init_unicode_string( UNICODE_STRING *str, const WCHAR *data )
|
||||
{
|
||||
str->Length = lstrlenW(data) * sizeof(WCHAR);
|
||||
str->MaximumLength = str->Length + sizeof(WCHAR);
|
||||
str->Buffer = (WCHAR *)data;
|
||||
}
|
||||
|
||||
static inline const char *debugstr_us( const UNICODE_STRING *us )
|
||||
{
|
||||
if (!us) return "<null>";
|
||||
|
|
|
@ -612,6 +612,12 @@ BOOL WINAPI NtUserEnumDisplayDevices( UNICODE_STRING *device, DWORD index,
|
|||
return unix_funcs->pNtUserEnumDisplayDevices( device, index, info, flags );
|
||||
}
|
||||
|
||||
BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD mode,
|
||||
DEVMODEW *dev_mode, DWORD flags )
|
||||
{
|
||||
return unix_funcs->pNtUserEnumDisplaySettings( device, mode, dev_mode, flags );
|
||||
}
|
||||
|
||||
LONG WINAPI NtUserGetDisplayConfigBufferSizes( UINT32 flags, UINT32 *num_path_info,
|
||||
UINT32 *num_mode_info )
|
||||
{
|
||||
|
@ -821,14 +827,6 @@ static BOOL WINAPI call_EnumDisplayMonitors( HDC hdc, RECT *rect, MONITORENUMPRO
|
|||
return pEnumDisplayMonitors && pEnumDisplayMonitors( hdc, rect, proc, lparam );
|
||||
}
|
||||
|
||||
static BOOL WINAPI call_EnumDisplaySettingsW( const WCHAR *device, DWORD mode, DEVMODEW *devmode )
|
||||
{
|
||||
static BOOL (WINAPI *pEnumDisplaySettingsW)(LPCWSTR, DWORD, LPDEVMODEW );
|
||||
if (!pEnumDisplaySettingsW)
|
||||
pEnumDisplaySettingsW = get_user_proc( "EnumDisplaySettingsW", FALSE );
|
||||
return pEnumDisplaySettingsW && pEnumDisplaySettingsW( device, mode, devmode );
|
||||
}
|
||||
|
||||
static BOOL WINAPI call_RedrawWindow( HWND hwnd, const RECT *rect, HRGN rgn, UINT flags )
|
||||
{
|
||||
static BOOL (WINAPI *pRedrawWindow)( HWND, const RECT*, HRGN, UINT );
|
||||
|
@ -861,7 +859,6 @@ static const struct user_callbacks user_funcs =
|
|||
call_GetSystemMetrics,
|
||||
call_GetWindowRect,
|
||||
call_EnumDisplayMonitors,
|
||||
call_EnumDisplaySettingsW,
|
||||
call_RedrawWindow,
|
||||
call_SetThreadDpiAwarenessContext,
|
||||
call_WindowFromDC,
|
||||
|
|
|
@ -66,6 +66,8 @@ HWINSTA WINAPI NtUserCreateWindowStation( OBJECT_ATTRIBUTES *attr, ACCESS_MASK m
|
|||
ULONG arg4, ULONG arg5, ULONG arg6, ULONG arg7 );
|
||||
BOOL WINAPI NtUserEnumDisplayDevices( UNICODE_STRING *device, DWORD index,
|
||||
DISPLAY_DEVICEW *info, DWORD flags );
|
||||
BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD mode,
|
||||
DEVMODEW *dev_mode, DWORD flags );
|
||||
INT WINAPI NtUserGetClipboardFormatName( UINT format, WCHAR *buffer, INT maxlen );
|
||||
HWND WINAPI NtUserGetClipboardOwner(void);
|
||||
DWORD WINAPI NtUserGetClipboardSequenceNumber(void);
|
||||
|
|
Loading…
Reference in New Issue