From 0e7a6928312773b660b6ac8502e75a826814f7e7 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Fri, 15 Mar 2024 15:24:46 +0100 Subject: [PATCH] XdgToplevel: validate move/resize request serial Currently we only support interactive move/resize with the pointer, touch and tablet tool support are TODO. Validate the serial here to ensure we don't start a pointer move/resize in response to the client attempting to start a move/resize with touch/tablet tool. This fixes an assertion failure that the pointer's cursor is not hidden during move/resize, which is how the issue was discovered. Another win for assertions :) --- river/XdgToplevel.zig | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/river/XdgToplevel.zig b/river/XdgToplevel.zig index 76e73a6..1e99a3c 100644 --- a/river/XdgToplevel.zig +++ b/river/XdgToplevel.zig @@ -427,9 +427,12 @@ fn handleRequestMove( if (view.pending.fullscreen) return; if (!(view.pending.float or view.pending.output.?.layout == null)) return; - switch (seat.cursor.mode) { - .passthrough, .down => seat.cursor.startMove(view), - .move, .resize => {}, + // Moving windows with touch or tablet tool is not yet supported. + if (seat.wlr_seat.validatePointerGrabSerial(null, event.serial)) { + switch (seat.cursor.mode) { + .passthrough, .down => seat.cursor.startMove(view), + .move, .resize => {}, + } } } @@ -443,9 +446,12 @@ fn handleRequestResize(listener: *wl.Listener(*wlr.XdgToplevel.event.Resize), ev if (view.pending.fullscreen) return; if (!(view.pending.float or view.pending.output.?.layout == null)) return; - switch (seat.cursor.mode) { - .passthrough, .down => seat.cursor.startResize(view, event.edges), - .move, .resize => {}, + // Resizing windows with touch or tablet tool is not yet supported. + if (seat.wlr_seat.validatePointerGrabSerial(null, event.serial)) { + switch (seat.cursor.mode) { + .passthrough, .down => seat.cursor.startResize(view, event.edges), + .move, .resize => {}, + } } }