It is currently unsupported. This helps later patches so that settings handlers using a new interface can be introduced without detaching adapter support, making patches smaller.
Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com --- dlls/user32/sysparams.c | 12 +++++++++++- dlls/winemac.drv/display.c | 15 +++++++++++++++ dlls/winex11.drv/settings.c | 15 +++++++++++++++ dlls/winex11.drv/x11drv.h | 1 + 4 files changed, 42 insertions(+), 1 deletion(-)
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index e6f33006dbf..82ed8513646 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -3287,6 +3287,15 @@ static void trace_devmode(const DEVMODEW *devmode) TRACE("\n"); }
+static BOOL is_detached_mode(const DEVMODEW *mode) +{ + return mode->dmFields & DM_POSITION && + mode->dmFields & DM_PELSWIDTH && + mode->dmFields & DM_PELSHEIGHT && + mode->dmPelsWidth == 0 && + mode->dmPelsHeight == 0; +} + /*********************************************************************** * ChangeDisplaySettingsExW (USER32.@) */ @@ -3318,7 +3327,8 @@ LONG WINAPI ChangeDisplaySettingsExW( LPCWSTR devname, LPDEVMODEW devmode, HWND if (devmode->dmSize < FIELD_OFFSET(DEVMODEW, dmICMMethod)) return DISP_CHANGE_BADMODE;
- if (((devmode->dmFields & DM_BITSPERPEL) && devmode->dmBitsPerPel) || + if (is_detached_mode(devmode) || + ((devmode->dmFields & DM_BITSPERPEL) && devmode->dmBitsPerPel) || ((devmode->dmFields & DM_PELSWIDTH) && devmode->dmPelsWidth) || ((devmode->dmFields & DM_PELSHEIGHT) && devmode->dmPelsHeight) || ((devmode->dmFields & DM_DISPLAYFREQUENCY) && devmode->dmDisplayFrequency)) diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 402f54982a5..7d9ff2d7c60 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -765,6 +765,15 @@ static BOOL get_primary_adapter(WCHAR *name) return FALSE; }
+static BOOL is_detached_mode(const DEVMODEW *mode) +{ + return mode->dmFields & DM_POSITION && + mode->dmFields & DM_PELSWIDTH && + mode->dmFields & DM_PELSHEIGHT && + mode->dmPelsWidth == 0 && + mode->dmPelsHeight == 0; +} + /*********************************************************************** * ChangeDisplaySettingsEx (MACDRV.@) * @@ -811,6 +820,12 @@ LONG CDECL macdrv_ChangeDisplaySettingsEx(LPCWSTR devname, LPDEVMODEW devmode, return DISP_CHANGE_SUCCESSFUL; }
+ if (is_detached_mode(devmode)) + { + FIXME("Detaching adapters is currently unsupported.\n"); + return DISP_CHANGE_SUCCESSFUL; + } + if (macdrv_get_displays(&displays, &num_displays)) return DISP_CHANGE_FAILED;
diff --git a/dlls/winex11.drv/settings.c b/dlls/winex11.drv/settings.c index 5609e2b43f8..70ce35361b6 100644 --- a/dlls/winex11.drv/settings.c +++ b/dlls/winex11.drv/settings.c @@ -329,6 +329,15 @@ BOOL CDECL X11DRV_EnumDisplaySettingsEx( LPCWSTR name, DWORD n, LPDEVMODEW devmo return FALSE; }
+BOOL is_detached_mode(const DEVMODEW *mode) +{ + return mode->dmFields & DM_POSITION && + mode->dmFields & DM_PELSWIDTH && + mode->dmFields & DM_PELSHEIGHT && + mode->dmPelsWidth == 0 && + mode->dmPelsHeight == 0; +} + /*********************************************************************** * ChangeDisplaySettingsEx (X11DRV.@) * @@ -364,6 +373,12 @@ LONG CDECL X11DRV_ChangeDisplaySettingsEx( LPCWSTR devname, LPDEVMODEW devmode, return DISP_CHANGE_SUCCESSFUL; }
+ if (is_detached_mode(devmode)) + { + FIXME("Detaching adapters is currently unsupported.\n"); + return DISP_CHANGE_SUCCESSFUL; + } + for (i = 0; i < dd_mode_count; i++) { if (devmode->dmFields & DM_BITSPERPEL) diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index 52057e875d5..5021c71a415 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -660,6 +660,7 @@ extern void X11DRV_init_desktop( Window win, unsigned int width, unsigned int he extern void X11DRV_resize_desktop(BOOL) DECLSPEC_HIDDEN; extern BOOL is_virtual_desktop(void) DECLSPEC_HIDDEN; extern BOOL is_desktop_fullscreen(void) DECLSPEC_HIDDEN; +extern BOOL is_detached_mode(const DEVMODEW *) DECLSPEC_HIDDEN; extern BOOL create_desktop_win_data( Window win ) DECLSPEC_HIDDEN; extern BOOL get_primary_adapter(WCHAR *) DECLSPEC_HIDDEN; extern void X11DRV_Settings_AddDepthModes(void) DECLSPEC_HIDDEN;
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=72251
Your paranoid android.
=== debiant (32 bit Chinese:China report) ===
user32: clipboard.c:321: Test failed: clipboard should not be open