From: Rémi Bernon rbernon@codeweavers.com
When no display cache update is needed. --- dlls/win32u/driver.c | 6 +++--- dlls/win32u/sysparams.c | 21 ++++++++++++--------- dlls/wineandroid.drv/init.c | 6 ++++-- dlls/winemac.drv/display.c | 8 ++++---- dlls/winemac.drv/macdrv.h | 2 +- dlls/winewayland.drv/display.c | 8 +++++--- dlls/winewayland.drv/waylanddrv.h | 2 +- dlls/winex11.drv/display.c | 11 +++++++---- dlls/winex11.drv/x11drv.h | 2 +- include/wine/gdi_driver.h | 2 +- 10 files changed, 39 insertions(+), 29 deletions(-)
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c index e22a457d6d6..7c694d20a3c 100644 --- a/dlls/win32u/driver.c +++ b/dlls/win32u/driver.c @@ -761,9 +761,9 @@ static INT nulldrv_GetDisplayDepth( LPCWSTR name, BOOL is_primary ) return -1; /* use default implementation */ }
-static BOOL nulldrv_UpdateDisplayDevices( const struct gdi_device_manager *manager, BOOL force, void *param ) +static UINT nulldrv_UpdateDisplayDevices( const struct gdi_device_manager *manager, BOOL force, void *param ) { - return FALSE; + return STATUS_NOT_IMPLEMENTED; }
static BOOL nulldrv_CreateDesktop( const WCHAR *name, UINT width, UINT height ) @@ -1166,7 +1166,7 @@ static void loaderdrv_UpdateClipboard(void) load_driver()->pUpdateClipboard(); }
-static BOOL loaderdrv_UpdateDisplayDevices( const struct gdi_device_manager *manager, BOOL force, void *param ) +static UINT loaderdrv_UpdateDisplayDevices( const struct gdi_device_manager *manager, BOOL force, void *param ) { return load_driver()->pUpdateDisplayDevices( manager, force, param ); } diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 00bc7e0a6e1..88b9e7ef629 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -1885,7 +1885,7 @@ static BOOL add_virtual_source( struct device_manager_ctx *ctx ) if (!write_source_to_registry( &virtual_source, &ctx->source_key )) { WARN( "Failed to write source to registry\n" ); - return FALSE; + return STATUS_UNSUCCESSFUL; }
ctx->source = virtual_source; @@ -1913,18 +1913,21 @@ static BOOL add_virtual_source( struct device_manager_ctx *ctx ) add_monitor( &monitor, ctx ); add_virtual_modes( ctx, ¤t, &initial, &maximum );
- return TRUE; + return STATUS_SUCCESS; }
-static BOOL update_display_devices( BOOL force, struct device_manager_ctx *ctx ) +static UINT update_display_devices( BOOL force, struct device_manager_ctx *ctx ) { - if (user_driver->pUpdateDisplayDevices( &device_manager, force, ctx )) + UINT status; + + if (!(status = user_driver->pUpdateDisplayDevices( &device_manager, force, ctx ))) { if (ctx->source_count && is_virtual_desktop()) return add_virtual_source( ctx ); - return TRUE; + return status; }
- return default_update_display_devices( force, ctx ); + if (status == STATUS_NOT_IMPLEMENTED) return default_update_display_devices( force, ctx ); + return status; }
BOOL update_display_cache( BOOL force ) @@ -1933,7 +1936,7 @@ BOOL update_display_cache( BOOL force ) {'_','_','w','i','n','e','s','e','r','v','i','c','e','_','w','i','n','s','t','a','t','i','o','n',0}; HWINSTA winstation = NtUserGetProcessWindowStation(); struct device_manager_ctx ctx = {0}; - BOOL ret; + UINT status; WCHAR name[MAX_PATH];
/* services do not have any adapters, only a virtual monitor */ @@ -1947,10 +1950,10 @@ BOOL update_display_cache( BOOL force ) return TRUE; }
- ret = update_display_devices( force, &ctx ); + status = update_display_devices( force, &ctx );
release_display_manager_ctx( &ctx ); - if (!ret) WARN( "Failed to update display devices\n" ); + if (status && status != STATUS_ALREADY_COMPLETE) WARN( "Failed to update display devices, status %#x\n", status );
if (!update_display_cache_from_registry()) { diff --git a/dlls/wineandroid.drv/init.c b/dlls/wineandroid.drv/init.c index 264bd6a7908..c8d997b7aa4 100644 --- a/dlls/wineandroid.drv/init.c +++ b/dlls/wineandroid.drv/init.c @@ -269,7 +269,7 @@ LONG ANDROID_ChangeDisplaySettings( LPDEVMODEW displays, LPCWSTR primary_name, H /*********************************************************************** * ANDROID_UpdateDisplayDevices */ -BOOL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ) +UINT ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ) { if (force || force_display_devices_refresh) { @@ -295,9 +295,11 @@ BOOL ANDROID_UpdateDisplayDevices( const struct gdi_device_manager *device_manag current.dmFields |= DM_POSITION; device_manager->add_modes( ¤t, 1, &mode, param ); force_display_devices_refresh = FALSE; + + return STATUS_SUCCESS; }
- return TRUE; + return STATUS_ALREADY_COMPLETE; }
diff --git a/dlls/winemac.drv/display.c b/dlls/winemac.drv/display.c index 78019d43de9..edf740b260e 100644 --- a/dlls/winemac.drv/display.c +++ b/dlls/winemac.drv/display.c @@ -1110,7 +1110,7 @@ static BOOL is_same_devmode(const DEVMODEW *a, const DEVMODEW *b) a->dmDisplayFrequency == b->dmDisplayFrequency; }
-BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ) +UINT macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ) { struct macdrv_adapter *adapters, *adapter; struct macdrv_monitor *monitors, *monitor; @@ -1120,7 +1120,7 @@ BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manage DEVMODEW *mode, *modes; DWORD len;
- if (!force && !force_display_devices_refresh) return TRUE; + if (!force && !force_display_devices_refresh) return STATUS_ALREADY_COMPLETE; force_display_devices_refresh = FALSE;
if (macdrv_get_displays(&displays, &display_count)) @@ -1133,7 +1133,7 @@ BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manage if (macdrv_get_gpus(&gpus, &gpu_count)) { ERR("could not get GPUs\n"); - return FALSE; + return STATUS_UNSUCCESSFUL; } TRACE("GPU count: %d\n", gpu_count);
@@ -1198,7 +1198,7 @@ BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manage
macdrv_free_gpus(gpus); macdrv_free_displays(displays); - return TRUE; + return STATUS_SUCCESS; }
/*********************************************************************** diff --git a/dlls/winemac.drv/macdrv.h b/dlls/winemac.drv/macdrv.h index b8d54222a47..19efc4dc7d4 100644 --- a/dlls/winemac.drv/macdrv.h +++ b/dlls/winemac.drv/macdrv.h @@ -129,7 +129,7 @@ static inline RECT rect_from_cgrect(CGRect cgrect) extern BOOL macdrv_GetCurrentDisplaySettings(LPCWSTR name, BOOL is_primary, LPDEVMODEW devmode); extern INT macdrv_GetDisplayDepth(LPCWSTR name, BOOL is_primary); extern LRESULT macdrv_ClipboardWindowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); -extern BOOL macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, +extern UINT macdrv_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ); extern BOOL macdrv_GetDeviceGammaRamp(PHYSDEV dev, LPVOID ramp); extern BOOL macdrv_SetDeviceGammaRamp(PHYSDEV dev, LPVOID ramp); diff --git a/dlls/winewayland.drv/display.c b/dlls/winewayland.drv/display.c index ffe46117191..ec5b825ed76 100644 --- a/dlls/winewayland.drv/display.c +++ b/dlls/winewayland.drv/display.c @@ -24,6 +24,8 @@
#include "config.h"
+#include "ntstatus.h" +#define WIN32_NO_STATUS #include "waylanddrv.h"
#include "wine/debug.h" @@ -275,7 +277,7 @@ static void wayland_add_device_modes(const struct gdi_device_manager *device_man /*********************************************************************** * UpdateDisplayDevices (WAYLAND.@) */ -BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manager, +UINT WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manager, BOOL force, void *param) { struct wayland_output *output; @@ -283,7 +285,7 @@ BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manage struct wl_array output_info_array; struct output_info *output_info;
- if (!force && !force_display_devices_refresh) return TRUE; + if (!force && !force_display_devices_refresh) return STATUS_ALREADY_COMPLETE;
TRACE("force=%d force_refresh=%d\n", force, force_display_devices_refresh);
@@ -318,5 +320,5 @@ BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manage
pthread_mutex_unlock(&process_wayland.output_mutex);
- return TRUE; + return STATUS_SUCCESS; } diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index 595a2e64430..7852c23b690 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -332,7 +332,7 @@ void WAYLAND_DestroyWindow(HWND hwnd); void WAYLAND_SetCursor(HWND hwnd, HCURSOR hcursor); void WAYLAND_SetWindowText(HWND hwnd, LPCWSTR text); LRESULT WAYLAND_SysCommand(HWND hwnd, WPARAM wparam, LPARAM lparam); -BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manager, +UINT WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manager, BOOL force, void *param); LRESULT WAYLAND_WindowMessage(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp); void WAYLAND_WindowPosChanged(HWND hwnd, HWND insert_after, UINT swp_flags, diff --git a/dlls/winex11.drv/display.c b/dlls/winex11.drv/display.c index bfee95b6642..19466225bc8 100644 --- a/dlls/winex11.drv/display.c +++ b/dlls/winex11.drv/display.c @@ -23,6 +23,9 @@ #endif
#include "config.h" + +#include "ntstatus.h" +#define WIN32_NO_STATUS #include "x11drv.h" #include "wine/debug.h"
@@ -494,7 +497,7 @@ BOOL X11DRV_DisplayDevices_SupportEventHandlers(void)
static BOOL force_display_devices_refresh;
-BOOL X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ) +UINT X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ) { struct x11drv_adapter *adapters; struct gdi_monitor *monitors; @@ -504,13 +507,13 @@ BOOL X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manage DEVMODEW *modes; UINT mode_count;
- if (!force && !force_display_devices_refresh) return TRUE; + if (!force && !force_display_devices_refresh) return STATUS_ALREADY_COMPLETE; force_display_devices_refresh = FALSE;
TRACE( "via %s\n", debugstr_a(host_handler.name) );
/* Initialize GPUs */ - if (!host_handler.get_gpus( &gpus, &gpu_count, TRUE )) return FALSE; + if (!host_handler.get_gpus( &gpus, &gpu_count, TRUE )) return STATUS_UNSUCCESSFUL; TRACE("GPU count: %d\n", gpu_count);
for (gpu = 0; gpu < gpu_count; gpu++) @@ -559,7 +562,7 @@ BOOL X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manage }
host_handler.free_gpus( gpus, gpu_count ); - return TRUE; + return STATUS_SUCCESS; }
void X11DRV_DisplayDevices_Init(BOOL force) diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h index d8d5622abfd..a0f63e10147 100644 --- a/dlls/winex11.drv/x11drv.h +++ b/dlls/winex11.drv/x11drv.h @@ -217,7 +217,7 @@ extern BOOL X11DRV_SystrayDockRemove( HWND hwnd ); extern LONG X11DRV_ChangeDisplaySettings( LPDEVMODEW displays, LPCWSTR primary_name, HWND hwnd, DWORD flags, LPVOID lpvoid ); extern BOOL X11DRV_GetCurrentDisplaySettings( LPCWSTR name, BOOL is_primary, LPDEVMODEW devmode ); extern INT X11DRV_GetDisplayDepth( LPCWSTR name, BOOL is_primary ); -extern BOOL X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, +extern UINT X11DRV_UpdateDisplayDevices( const struct gdi_device_manager *device_manager, BOOL force, void *param ); extern BOOL X11DRV_CreateDesktop( const WCHAR *name, UINT width, UINT height ); extern BOOL X11DRV_CreateWindow( HWND hwnd ); diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h index a8680e2d758..c299dc2ae42 100644 --- a/include/wine/gdi_driver.h +++ b/include/wine/gdi_driver.h @@ -306,7 +306,7 @@ struct user_driver_funcs LONG (*pChangeDisplaySettings)(LPDEVMODEW,LPCWSTR,HWND,DWORD,LPVOID); BOOL (*pGetCurrentDisplaySettings)(LPCWSTR,BOOL,LPDEVMODEW); INT (*pGetDisplayDepth)(LPCWSTR,BOOL); - BOOL (*pUpdateDisplayDevices)(const struct gdi_device_manager *,BOOL,void*); + UINT (*pUpdateDisplayDevices)(const struct gdi_device_manager *,BOOL,void*); /* windowing functions */ BOOL (*pCreateDesktop)(const WCHAR *,UINT,UINT); BOOL (*pCreateWindow)(HWND);