From: Rémi Bernon rbernon@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57610 --- dlls/winex11.drv/display.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)
diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c index 8d1a1dfd414..2d5000ea1e4 100644 --- a/dlls/winex11.drv/display.c +++ b/dlls/winex11.drv/display.c @@ -434,6 +434,7 @@ UINT X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manage x11drv_settings_id settings_id; BOOL is_primary = adapters[adapter].state_flags & DISPLAY_DEVICE_PRIMARY_DEVICE; UINT dpi = NtUserGetSystemDpiForProcess( NULL ); + POINT position = {0};
sprintf( buffer, "%04lx", adapters[adapter].id ); device_manager->add_source( buffer, adapters[adapter].state_flags, dpi, param ); @@ -445,6 +446,12 @@ UINT X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manage for (monitor = 0; monitor < monitor_count; monitor++) device_manager->add_monitor( &monitors[monitor], param );
+ if (monitor_count) + { + position.x = monitors[0].rc_monitor.left; + position.y = monitors[0].rc_monitor.top; + } + host_handler.free_monitors( monitors, monitor_count );
/* Get the settings handler id for the adapter */ @@ -453,6 +460,13 @@ UINT X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manage if (!settings_handler.get_id( devname, is_primary, &settings_id )) break;
settings_handler.get_current_mode( settings_id, ¤t_mode ); + if (memcmp( ¤t_mode.dmPosition, &position, sizeof(position) )) + { + WARN( "Inconsistent monitor / current mode coordinates, using %s\n", wine_dbgstr_point( &position )); + current_mode.dmPosition.x = position.x; + current_mode.dmPosition.y = position.y; + } + if (settings_handler.get_modes( settings_id, EDS_ROTATEDMODE, &modes, &mode_count, FALSE )) { device_manager->add_modes( ¤t_mode, mode_count, modes, param );