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 :)
This commit is contained in:
parent
1b63c463a7
commit
0e7a692831
@ -427,11 +427,14 @@ fn handleRequestMove(
|
||||
if (view.pending.fullscreen) return;
|
||||
if (!(view.pending.float or view.pending.output.?.layout == null)) return;
|
||||
|
||||
// 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 => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn handleRequestResize(listener: *wl.Listener(*wlr.XdgToplevel.event.Resize), event: *wlr.XdgToplevel.event.Resize) void {
|
||||
const toplevel = @fieldParentPtr(XdgToplevel, "request_resize", listener);
|
||||
@ -443,11 +446,14 @@ 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;
|
||||
|
||||
// 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 => {},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Called when the client sets / updates its title
|
||||
fn handleSetTitle(listener: *wl.Listener(void)) void {
|
||||
|
Loading…
Reference in New Issue
Block a user