From 30dcfbc9cb3f77dbb729fb6f95ffde7dbdddc4cb Mon Sep 17 00:00:00 2001 From: Dudemanguy Date: Thu, 20 Aug 2020 10:24:52 -0500 Subject: wayland: conditionally commit surface on resize It was possible for sway to get incorrectly sized borders if you resized the mpv window in a creative manner (e.g. open a video in a non-floating mode, set window scale to 2, then float it and witness wrong border sizes). This is possibly a sway bug (Plasma doesn't have these border issues at least), but there's a reasonable workaround for this. The reason for the incorrect border size is because it is possible for mpv to ignore the width/height from the toplevel listener and set its own size. This new size can differ from what sway/wlroots believes the size is which is what causes the sever side decorations to be drawn on incorrect dimensions. A simple trick is to just explicitly commit the surface after a resize is performed. This is only done if mpv is not fullscreened or maximized since we always obey the compositor widths/heights in those cases. Sending the commit signals the compositor of the new change in the surface and thus sway/wlroots updates its internal coordinates appropriately and borders are no longer broken. --- video/out/vulkan/context_wayland.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'video/out/vulkan/context_wayland.c') diff --git a/video/out/vulkan/context_wayland.c b/video/out/vulkan/context_wayland.c index 8c69c2d249..ab295152dd 100644 --- a/video/out/vulkan/context_wayland.c +++ b/video/out/vulkan/context_wayland.c @@ -198,7 +198,10 @@ static bool resize(struct ra_ctx *ctx) const int32_t height = wl->scaling*mp_rect_h(wl->geometry); wl_surface_set_buffer_scale(wl->surface, wl->scaling); - return ra_vk_ctx_resize(ctx, width, height); + bool ok = ra_vk_ctx_resize(ctx, width, height); + if (!wl->vo_opts->fullscreen && !wl->vo_opts->window_maximized) + wl_surface_commit(wl->surface); + return ok; } static bool wayland_vk_reconfig(struct ra_ctx *ctx) -- cgit v1.2.3