From: R��mi Bernon rbernon@codeweavers.com
--- dlls/win32u/sysparams.c | 4 ++++ dlls/winemac.drv/display.c | 16 +++++++++------- include/wine/gdi_driver.h | 2 ++ 3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index c44a6e4e98e..8416dc0ebcc 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -2133,6 +2133,8 @@ static const DEVMODEW *find_display_mode( const DEVMODEW *modes, DEVMODEW *devmo
for (mode = modes; mode && mode->dmSize; mode = NEXT_DEVMODEW(mode)) { + if ((mode->dmFields & DM_DISPLAYFLAGS) && (mode->dmDisplayFlags & WINE_DM_UNSUPPORTED)) + continue; if ((devmode->dmFields & DM_BITSPERPEL) && devmode->dmBitsPerPel && devmode->dmBitsPerPel != mode->dmBitsPerPel) continue; if ((devmode->dmFields & DM_PELSWIDTH) && devmode->dmPelsWidth != mode->dmPelsWidth) @@ -2524,6 +2526,8 @@ BOOL WINAPI NtUserEnumDisplaySettings( UNICODE_STRING *device, DWORD index, DEVM else ret = user_driver->pGetCurrentDisplaySettings( adapter->dev.device_name, devmode ); adapter_release( adapter );
+ devmode->dmDisplayFlags &= ~WINE_DM_UNSUPPORTED; + if (!ret) WARN( "Failed to query %s display settings.\n", debugstr_us(device) ); else TRACE( "position %dx%d, resolution %ux%u, frequency %u, depth %u, orientation %#x.\n", devmode->dmPosition.x, devmode->dmPosition.y, devmode->dmPelsWidth, devmode->dmPelsHeight, diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 1cebcdfce2f..def291508be 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -97,6 +97,13 @@ static int display_mode_bits_per_pixel(CGDisplayModeRef display_mode) }
+static BOOL display_mode_is_supported(CGDisplayModeRef display_mode) +{ + uint32_t io_flags = CGDisplayModeGetIOFlags(display_mode); + return (io_flags & kDisplayModeValidFlag) && (io_flags & kDisplayModeSafeFlag); +} + + static void display_mode_to_devmode(CGDirectDisplayID display_id, CGDisplayModeRef display_mode, DEVMODEW *devmode) { uint32_t io_flags; @@ -124,6 +131,8 @@ static void display_mode_to_devmode(CGDirectDisplayID display_id, CGDisplayModeR devmode->dmDisplayFlags = 0; if (io_flags & kDisplayModeInterlacedFlag) devmode->dmDisplayFlags |= DM_INTERLACED; + if (!display_mode_is_supported(display_mode)) + devmode->dmDisplayFlags |= WINE_DM_UNSUPPORTED; devmode->dmFields |= DM_DISPLAYFLAGS;
devmode->dmDisplayFrequency = CGDisplayModeGetRefreshRate(display_mode); @@ -417,13 +426,6 @@ static int get_default_bpp(void) }
-static BOOL display_mode_is_supported(CGDisplayModeRef display_mode) -{ - uint32_t io_flags = CGDisplayModeGetIOFlags(display_mode); - return (io_flags & kDisplayModeValidFlag) && (io_flags & kDisplayModeSafeFlag); -} - - #if defined(MAC_OS_X_VERSION_10_8) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8 static CFDictionaryRef create_mode_dict(CGDisplayModeRef display_mode, BOOL is_original) { diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index e1d8998d812..9863a4a36ea 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -269,6 +269,8 @@ struct gdi_device_manager void (*add_mode)( const DEVMODEW *mode, void *param ); };
+#define WINE_DM_UNSUPPORTED 0x80000000 + struct tagUPDATELAYEREDWINDOWINFO;
struct user_driver_funcs