diff --git a/src/backend/wayland/wl_framebuf.c b/src/backend/wayland/wl_framebuf.c index 9127bbf..7d63940 100644 --- a/src/backend/wayland/wl_framebuf.c +++ b/src/backend/wayland/wl_framebuf.c @@ -575,6 +575,11 @@ void wl_frame_paint_button(WCoreWindow *button, WTexture *texture, int wl_frame_paint(struct WFrameWindow *fwin) { + /* During live resize, skip expensive repaint — decorations content + * doesn't change, only geometry. Paint once on grab release. */ + if (wl_state.grab_type == 2) + return 0; + struct wl_frame_buf *fb = frame_buf_find(fwin->core->window); if (!fb || !fb->image) return 0; diff --git a/src/backend/wayland/wl_grab.c b/src/backend/wayland/wl_grab.c index 51f4d43..2e17360 100644 --- a/src/backend/wayland/wl_grab.c +++ b/src/backend/wayland/wl_grab.c @@ -140,9 +140,14 @@ wl_grab_apply_motion(void) void wl_grab_end(void) { + int was_resize = (wl_state.grab_type == 2); wl_state.grab_type = 0; wl_state.grab_view = NULL; wl_set_cursor_image("left_ptr"); + /* Repaint frame decorations deferred during resize */ + if (was_resize && wl_state.scr && wl_state.scr->focused_window + && wl_state.scr->focused_window->frame) + wm_backend->frame_paint(wl_state.scr->focused_window->frame); } void