From: Alexandros Frantzis alexandros.frantzis@collabora.com
Update the desktop window size to match the current virtual screen rect. --- dlls/winewayland.drv/wayland_output.c | 1 + dlls/winewayland.drv/waylanddrv.h | 2 ++ dlls/winewayland.drv/window.c | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+)
diff --git a/dlls/winewayland.drv/wayland_output.c b/dlls/winewayland.drv/wayland_output.c index c0f23413162..11fc3c99962 100644 --- a/dlls/winewayland.drv/wayland_output.c +++ b/dlls/winewayland.drv/wayland_output.c @@ -105,6 +105,7 @@ static void wayland_output_state_add_mode(struct wayland_output_state *state, static void handle_init_display_devices(void) { wayland_init_display_devices(TRUE); + wayland_resize_desktop(); }
static void maybe_init_display_devices(void) diff --git a/dlls/winewayland.drv/waylanddrv.h b/dlls/winewayland.drv/waylanddrv.h index 167b76493cb..e4623c36cb3 100644 --- a/dlls/winewayland.drv/waylanddrv.h +++ b/dlls/winewayland.drv/waylanddrv.h @@ -105,6 +105,7 @@ void wayland_init_display_devices(BOOL force) DECLSPEC_HIDDEN; struct wayland_thread_data *wayland_init_thread_data(void) DECLSPEC_HIDDEN; BOOL wayland_thread_init(struct wayland_thread_data *thread) DECLSPEC_HIDDEN; void wayland_thread_deinit(struct wayland_thread_data *thread) DECLSPEC_HIDDEN; +void wayland_resize_desktop(void) DECLSPEC_HIDDEN;
static inline struct wayland_thread_data *wayland_thread_data(void) { @@ -130,6 +131,7 @@ void wayland_queue_thread_event(HWND hwnd, DWORD mask, void (*handle)(void)) DEC */
BOOL WAYLAND_CreateWindow(HWND hwnd) DECLSPEC_HIDDEN; +LRESULT WAYLAND_DesktopWindowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) DECLSPEC_HIDDEN; BOOL WAYLAND_ProcessEvents(DWORD mask) DECLSPEC_HIDDEN; BOOL WAYLAND_UpdateDisplayDevices(const struct gdi_device_manager *device_manager, BOOL force, void *param) DECLSPEC_HIDDEN; diff --git a/dlls/winewayland.drv/window.c b/dlls/winewayland.drv/window.c index 039a27fbecf..f8e3a80e68b 100644 --- a/dlls/winewayland.drv/window.c +++ b/dlls/winewayland.drv/window.c @@ -43,3 +43,28 @@ BOOL WAYLAND_CreateWindow(HWND hwnd)
return TRUE; } + +void wayland_resize_desktop(void) +{ + RECT virtual_rect = NtUserGetVirtualScreenRect(); + NtUserSetWindowPos(NtUserGetDesktopWindow(), 0, + virtual_rect.left, virtual_rect.top, + virtual_rect.right - virtual_rect.left, + virtual_rect.bottom - virtual_rect.top, + SWP_NOZORDER | SWP_NOACTIVATE | SWP_DEFERERASE); +} + +/********************************************************************** + * WAYLAND_DesktopWindowProc + */ +LRESULT WAYLAND_DesktopWindowProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) +{ + switch (msg) + { + case WM_DISPLAYCHANGE: + wayland_resize_desktop(); + break; + } + + return NtUserMessageCall(hwnd, msg, wp, lp, 0, NtUserDefWindowProc, FALSE); +}