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.fullscreen) return;
|
||||||
if (!(view.pending.float or view.pending.output.?.layout == null)) 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) {
|
switch (seat.cursor.mode) {
|
||||||
.passthrough, .down => seat.cursor.startMove(view),
|
.passthrough, .down => seat.cursor.startMove(view),
|
||||||
.move, .resize => {},
|
.move, .resize => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn handleRequestResize(listener: *wl.Listener(*wlr.XdgToplevel.event.Resize), event: *wlr.XdgToplevel.event.Resize) void {
|
fn handleRequestResize(listener: *wl.Listener(*wlr.XdgToplevel.event.Resize), event: *wlr.XdgToplevel.event.Resize) void {
|
||||||
const toplevel = @fieldParentPtr(XdgToplevel, "request_resize", listener);
|
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.fullscreen) return;
|
||||||
if (!(view.pending.float or view.pending.output.?.layout == null)) 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) {
|
switch (seat.cursor.mode) {
|
||||||
.passthrough, .down => seat.cursor.startResize(view, event.edges),
|
.passthrough, .down => seat.cursor.startResize(view, event.edges),
|
||||||
.move, .resize => {},
|
.move, .resize => {},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Called when the client sets / updates its title
|
/// Called when the client sets / updates its title
|
||||||
fn handleSetTitle(listener: *wl.Listener(void)) void {
|
fn handleSetTitle(listener: *wl.Listener(void)) void {
|
||||||
|
Loading…
Reference in New Issue
Block a user