Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
rwm: simplify pointer_leave
protocol/river-window-management-v1.xml | 6 +++---
river/Seat.zig | 8 +++-----
rivercompat/Seat.zig | 8 +-------
3 files changed, 7 insertions(+), 15 deletions(-)
diff --git a/protocol/river-window-management-v1.xml b/protocol/river-window-management-v1.xml
index d921b49..d200375 100644
--- a/protocol/river-window-management-v1.xml
+++ b/protocol/river-window-management-v1.xml
@@ -1262,13 +1262,13 @@
</event>
<event name="pointer_leave">
- <description summary="pointer left a window">
- The seat's pointer left the given window. See pointer_enter for details.
+ <description summary="pointer left the entered window">
+ The seat's pointer left the window for which pointer_enter was most
+ recently sent. See pointer_enter for details.
This event will be followed by an update_windowing_start event after all
other new state has been sent by the server.
</description>
- <arg name="window" type="object" interface="river_window_v1"/>
</event>
<event name="pointer_activity">
diff --git a/river/Seat.zig b/river/Seat.zig
index f6505e8..31f6e7e 100644
--- a/river/Seat.zig
+++ b/river/Seat.zig
@@ -325,11 +325,9 @@ pub fn updateWindowingStart(seat: *Seat) void {
}
}
} else if (seat.windowing_scheduled.window != seat.windowing_sent.window) {
- if (seat.windowing_sent.window) |window| {
- if (window.object) |window_v1| {
- seat_v1.sendPointerLeave(window_v1);
- seat.windowing_sent.window = null;
- }
+ if (seat.windowing_sent.window != null) {
+ seat_v1.sendPointerLeave();
+ seat.windowing_sent.window = null;
}
if (seat.windowing_scheduled.window) |window| {
if (window.object) |window_v1| {
diff --git a/rivercompat/Seat.zig b/rivercompat/Seat.zig
index 95ef662..1f6bb1f 100644
--- a/rivercompat/Seat.zig
+++ b/rivercompat/Seat.zig
@@ -77,13 +77,7 @@ fn handleEvent(seat_v1: *river.SeatV1, event: river.SeatV1.Event, seat: *Seat) v
const window: *Window = @ptrCast(@alignCast(window_v1.getUserData()));
seat.hovered = window;
},
- .pointer_leave => |args| {
- const window_v1 = args.window orelse return;
- const window: *Window = @ptrCast(@alignCast(window_v1.getUserData()));
- if (seat.hovered == window) {
- seat.hovered = null;
- }
- },
+ .pointer_leave => seat.hovered = null,
.op_delta => |args| {
seat.op.?.dx = args.dx;
seat.op.?.dy = args.dy;