From: Rémi Bernon rbernon@codeweavers.com
--- dlls/win32u/sysparams.c | 41 +++++++++++++--------------------- dlls/wineandroid.drv/init.c | 7 ++---- dlls/winemac.drv/display.c | 10 ++++----- dlls/winewayland.drv/display.c | 25 +++++---------------- dlls/winex11.drv/display.c | 7 +++--- dlls/winex11.drv/x11drv.h | 10 +++++++-- dlls/winex11.drv/xinerama.c | 8 +++---- dlls/winex11.drv/xrandr.c | 10 ++++----- include/wine/gdi_driver.h | 8 +------ 9 files changed, 49 insertions(+), 77 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index a6841c45c65..4692b6c51f2 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -1296,11 +1296,11 @@ static BOOL write_source_to_registry( const struct source *source, HKEY *source_ return TRUE; }
-static void add_adapter( const struct gdi_adapter *adapter, void *param ) +static void add_source( const char *name, UINT state_flags, void *param ) { struct device_manager_ctx *ctx = param;
- TRACE( "\n" ); + TRACE( "name %s, state_flags %#x\n", name, state_flags );
if (ctx->source_key) { @@ -1311,11 +1311,11 @@ static void add_adapter( const struct gdi_adapter *adapter, void *param ) memset( &ctx->source, 0, sizeof(ctx->source) ); ctx->source.gpu = &ctx->gpu; ctx->source.id = ctx->source_count; - ctx->source.state_flags = adapter->state_flags; + ctx->source.state_flags = state_flags;
/* Wine specific config key where source settings will be held, symlinked with the logically indexed config key */ - sprintf( ctx->source.path, "%s\%s\Video\%s\Sources\%04x", config_keyA, - control_keyA + strlen( "\Registry\Machine" ), ctx->gpu.guid, ctx->gpu.source_count ); + sprintf( ctx->source.path, "%s\%s\Video\%s\Sources\%s", config_keyA, + control_keyA + strlen( "\Registry\Machine" ), ctx->gpu.guid, name );
if (!write_source_to_registry( &ctx->source, &ctx->source_key )) WARN( "Failed to write source to registry\n" ); @@ -1446,12 +1446,9 @@ static void add_mode( const DEVMODEW *mode, BOOL current, void *param )
if (!ctx->gpu.source_count) { - static const struct gdi_adapter default_adapter = - { - .state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE, - }; - TRACE( "adding default fake adapter\n" ); - add_adapter( &default_adapter, ctx ); + static const DWORD source_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE; + TRACE( "adding default fake source\n" ); + add_source( "Default", source_flags, ctx ); }
nopos_mode = *mode; @@ -1475,7 +1472,7 @@ static void add_mode( const DEVMODEW *mode, BOOL current, void *param ) static const struct gdi_device_manager device_manager = { add_gpu, - add_adapter, + add_source, add_monitor, add_mode, }; @@ -1757,11 +1754,8 @@ static BOOL default_update_display_devices( const struct gdi_device_manager *man { .dmFields = DM_DISPLAYORIENTATION | DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFLAGS | DM_DISPLAYFREQUENCY, .dmBitsPerPel = 16, .dmPelsWidth = 1024, .dmPelsHeight = 768, .dmDisplayFrequency = 60, }, }; + static const DWORD source_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE; static const struct gdi_gpu gpu; - static const struct gdi_adapter adapter = - { - .state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE, - }; struct gdi_monitor monitor = {0}; DEVMODEW mode = {{0}}; UINT i; @@ -1769,7 +1763,7 @@ static BOOL default_update_display_devices( const struct gdi_device_manager *man if (!force) return TRUE;
manager->add_gpu( &gpu, ctx ); - manager->add_adapter( &adapter, ctx ); + manager->add_source( "Default", source_flags, ctx );
if (!read_source_mode( ctx->source_key, ENUM_CURRENT_SETTINGS, &mode )) { @@ -1833,10 +1827,10 @@ static void desktop_add_gpu( const struct gdi_gpu *gpu, void *param ) { }
-static void desktop_add_adapter( const struct gdi_adapter *adapter, void *param ) +static void desktop_add_source( const char *name, UINT state_flags, void *param ) { struct device_manager_ctx *ctx = param; - ctx->is_primary = !!(adapter->state_flags & DISPLAY_DEVICE_PRIMARY_DEVICE); + ctx->is_primary = !!(state_flags & DISPLAY_DEVICE_PRIMARY_DEVICE); }
static void desktop_add_monitor( const struct gdi_monitor *monitor, void *param ) @@ -1858,18 +1852,15 @@ static void desktop_add_mode( const DEVMODEW *mode, BOOL current, void *param ) static const struct gdi_device_manager desktop_device_manager = { desktop_add_gpu, - desktop_add_adapter, + desktop_add_source, desktop_add_monitor, desktop_add_mode, };
static BOOL desktop_update_display_devices( BOOL force, struct device_manager_ctx *ctx ) { + static const DWORD source_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE; static const struct gdi_gpu gpu; - static const struct gdi_adapter adapter = - { - .state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE, - }; struct gdi_monitor monitor = {0}; static struct screen_size { @@ -1934,7 +1925,7 @@ static BOOL desktop_update_display_devices( BOOL force, struct device_manager_ct }
add_gpu( &gpu, ctx ); - add_adapter( &adapter, ctx ); + add_source( "Default", source_flags, ctx ); if (!read_source_mode( ctx->source_key, ENUM_CURRENT_SETTINGS, ¤t )) { current = mode; diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c index c39bf690a06..f8646378627 100644 --- a/dlls/wineandroid.drv/init.c +++ b/dlls/wineandroid.drv/init.c @@ -273,11 +273,8 @@ BOOL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manag { if (force || force_display_devices_refresh) { + static const DWORD source_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE; static const struct gdi_gpu gpu; - static const struct gdi_adapter adapter = - { - .state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE | DISPLAY_DEVICE_VGA_COMPATIBLE, - }; struct gdi_monitor gdi_monitor = { .rc_monitor = virtual_screen_rect, @@ -290,7 +287,7 @@ BOOL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manag .dmBitsPerPel = screen_bpp, .dmPelsWidth = screen_width, .dmPelsHeight = screen_height, .dmDisplayFrequency = 60, }; device_manager->add_gpu( &gpu, param ); - device_manager->add_adapter( &adapter, param ); + device_manager->add_source( "Default", source_flags, param ); device_manager->add_monitor( &gdi_monitor, param ); device_manager->add_mode( &mode, TRUE, param ); force_display_devices_refresh = FALSE; diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 6d6e76da1ee..ea9b5771064 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -1178,12 +1178,10 @@ BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manage for (adapter = adapters; adapter < adapters + adapter_count; adapter++) { DEVMODEW current_mode = { .dmSize = sizeof(current_mode) }; - struct gdi_adapter gdi_adapter = - { - .id = adapter->id, - .state_flags = adapter->state_flags, - }; - device_manager->add_adapter( &gdi_adapter, param ); + char buffer[32]; + + sprintf( buffer, "%04x", adapter->id ); + device_manager->add_source( buffer, adapter->state_flags, param );
if (macdrv_get_monitors(adapter->id, &monitors, &monitor_count)) break; TRACE("adapter: %#x, monitor count: %d\n", adapter->id, monitor_count); diff --git a/dlls/winewayland.drv/display.c b/dlls/winewayland.drv/display.c index 6c399cbf321..13ab8d64abb 100644 --- a/dlls/winewayland.drv/display.c +++ b/dlls/winewayland.drv/display.c @@ -210,23 +210,8 @@ static void wayland_add_device_gpu(const struct gdi_device_manager *device_manag device_manager->add_gpu(&gpu, param); }
-static void wayland_add_device_adapter(const struct gdi_device_manager *device_manager, - void *param, INT output_id) -{ - struct gdi_adapter adapter; - adapter.id = output_id; - adapter.state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP; - if (output_id == 0) - adapter.state_flags |= DISPLAY_DEVICE_PRIMARY_DEVICE; - - TRACE("id=0x%s state_flags=0x%x\n", - wine_dbgstr_longlong(adapter.id), (UINT)adapter.state_flags); - - device_manager->add_adapter(&adapter, param); -} - static void wayland_add_device_monitor(const struct gdi_device_manager *device_manager, - void *param, struct output_info *output_info) + void *param, DWORD state_flags, struct output_info *output_info) { struct gdi_monitor monitor = {0};
@@ -240,6 +225,7 @@ static void wayland_add_device_monitor(const struct gdi_device_manager *device_m TRACE("name=%s rc_monitor=rc_work=%s\n", output_info->output->name, wine_dbgstr_rect(&monitor.rc_monitor));
+ device_manager->add_source(output_info->output->name, state_flags, param); device_manager->add_monitor(&monitor, param); }
@@ -283,7 +269,7 @@ BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manage BOOL force, void *param) { struct wayland_output *output; - INT output_id = 0; + DWORD state_flags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE; struct wl_array output_info_array; struct output_info *output_info;
@@ -312,10 +298,9 @@ BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manage
wl_array_for_each(output_info, &output_info_array) { - wayland_add_device_adapter(device_manager, param, output_id); - wayland_add_device_monitor(device_manager, param, output_info); + wayland_add_device_monitor(device_manager, param, state_flags, output_info); wayland_add_device_modes(device_manager, param, output_info); - output_id++; + state_flags &= ~DISPLAY_DEVICE_PRIMARY_DEVICE; }
wl_array_release(&output_info_array); diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c index 49475571f71..5dfbd1b797d 100644 --- a/dlls/winex11.drv/display.c +++ b/dlls/winex11.drv/display.c @@ -397,7 +397,7 @@ RECT get_host_primary_monitor_rect(void) { INT gpu_count, adapter_count, monitor_count; struct gdi_gpu *gpus = NULL; - struct gdi_adapter *adapters = NULL; + struct x11drv_adapter *adapters = NULL; struct gdi_monitor *monitors = NULL; RECT rect = {0};
@@ -515,7 +515,7 @@ static const char *debugstr_devmodew( const DEVMODEW *devmode )
BOOL X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ) { - struct gdi_adapter *adapters; + struct x11drv_adapter *adapters; struct gdi_monitor *monitors; struct gdi_gpu *gpus; INT gpu_count, adapter_count, monitor_count; @@ -548,7 +548,8 @@ BOOL 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;
- device_manager->add_adapter( &adapters[adapter], param ); + sprintf( buffer, "%04lx", adapters[adapter].id ); + device_manager->add_source( buffer, adapters[adapter].state_flags, param );
if (!host_handler.get_monitors( adapters[adapter].id, &monitors, &monitor_count )) break; TRACE("adapter: %#lx, monitor count: %d\n", adapters[adapter].id, monitor_count); diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index a525f0dd499..19b9b23337e 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -764,6 +764,12 @@ void init_user_driver(void);
/* X11 display device handler. Used to initialize display device registry data */
+struct x11drv_adapter +{ + ULONG_PTR id; + DWORD state_flags; +}; + /* Required functions for display device registry initialization */ struct x11drv_display_device_handler { @@ -782,7 +788,7 @@ struct x11drv_display_device_handler * The first adapter has to be primary if GPU is primary. * * Return FALSE on failure with parameters unchanged */ - BOOL (*get_adapters)(ULONG_PTR gpu_id, struct gdi_adapter **adapters, int *count); + BOOL (*get_adapters)(ULONG_PTR gpu_id, struct x11drv_adapter **adapters, int *count);
/* get_monitors will be called to get a list of monitors in EnumDisplayDevices context under an adapter. * The first monitor has to be primary if adapter is primary. @@ -794,7 +800,7 @@ struct x11drv_display_device_handler void (*free_gpus)(struct gdi_gpu *gpus);
/* free_adapters will be called to free an adapter list from get_adapters */ - void (*free_adapters)(struct gdi_adapter *adapters); + void (*free_adapters)(struct x11drv_adapter *adapters);
/* free_monitors will be called to free a monitor list from get_monitors */ void (*free_monitors)(struct gdi_monitor *monitors, int count); diff --git a/dlls/winex11.drv/xinerama.c b/dlls/winex11.drv/xinerama.c index 43b25c02b86..426ea6c11d4 100644 --- a/dlls/winex11.drv/xinerama.c +++ b/dlls/winex11.drv/xinerama.c @@ -213,9 +213,9 @@ static void xinerama_free_gpus( struct gdi_gpu *gpus ) free( gpus ); }
-static BOOL xinerama_get_adapters( ULONG_PTR gpu_id, struct gdi_adapter **new_adapters, int *count ) +static BOOL xinerama_get_adapters( ULONG_PTR gpu_id, struct x11drv_adapter **new_adapters, int *count ) { - struct gdi_adapter *adapters = NULL; + struct x11drv_adapter *adapters = NULL; INT index = 0; INT i, j; INT primary_index; @@ -268,7 +268,7 @@ static BOOL xinerama_get_adapters( ULONG_PTR gpu_id, struct gdi_adapter **new_ad /* Primary adapter has to be first */ if (primary_index) { - struct gdi_adapter tmp; + struct x11drv_adapter tmp; tmp = adapters[primary_index]; adapters[primary_index] = adapters[0]; adapters[0] = tmp; @@ -280,7 +280,7 @@ static BOOL xinerama_get_adapters( ULONG_PTR gpu_id, struct gdi_adapter **new_ad return TRUE; }
-static void xinerama_free_adapters( struct gdi_adapter *adapters ) +static void xinerama_free_adapters( struct x11drv_adapter *adapters ) { free( adapters ); } diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c index d77eb1a0163..9d027e75175 100644 --- a/dlls/winex11.drv/xrandr.c +++ b/dlls/winex11.drv/xrandr.c @@ -863,9 +863,9 @@ static void xrandr14_free_gpus( struct gdi_gpu *gpus ) free( gpus ); }
-static BOOL xrandr14_get_adapters( ULONG_PTR gpu_id, struct gdi_adapter **new_adapters, int *count ) +static BOOL xrandr14_get_adapters( ULONG_PTR gpu_id, struct x11drv_adapter **new_adapters, int *count ) { - struct gdi_adapter *adapters = NULL; + struct x11drv_adapter *adapters = NULL; XRRScreenResources *screen_resources = NULL; XRRProviderInfo *provider_info = NULL; XRRCrtcInfo *enum_crtc_info, *crtc_info = NULL; @@ -999,7 +999,7 @@ static BOOL xrandr14_get_adapters( ULONG_PTR gpu_id, struct gdi_adapter **new_ad /* Make primary adapter the first */ if (primary_adapter) { - struct gdi_adapter tmp = adapters[0]; + struct x11drv_adapter tmp = adapters[0]; adapters[0] = adapters[primary_adapter]; adapters[primary_adapter] = tmp; } @@ -1024,7 +1024,7 @@ done: return ret; }
-static void xrandr14_free_adapters( struct gdi_adapter *adapters ) +static void xrandr14_free_adapters( struct x11drv_adapter *adapters ) { free( adapters ); } @@ -1219,7 +1219,7 @@ static BOOL xrandr14_get_id( const WCHAR *device_name, BOOL is_primary, x11drv_s struct current_mode *tmp_modes, *new_current_modes = NULL; INT gpu_count, adapter_count, new_current_mode_count = 0; INT gpu_idx, adapter_idx, display_idx; - struct gdi_adapter *adapters; + struct x11drv_adapter *adapters; struct gdi_gpu *gpus; WCHAR *end;
diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index ffe84787d51..f16af308cd3 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -252,12 +252,6 @@ struct gdi_gpu ULONGLONG memory_size; };
-struct gdi_adapter -{ - ULONG_PTR id; - DWORD state_flags; -}; - struct gdi_monitor { RECT rc_monitor; /* RcMonitor in MONITORINFO struct */ @@ -269,7 +263,7 @@ struct gdi_monitor struct gdi_device_manager { void (*add_gpu)( const struct gdi_gpu *gpu, void *param ); - void (*add_adapter)( const struct gdi_adapter *adapter, void *param ); + void (*add_source)( const char *name, UINT state_flags, void *param ); void (*add_monitor)( const struct gdi_monitor *monitor, void *param ); void (*add_mode)( const DEVMODEW *mode, BOOL current, void *param ); };