git.lucas.co / cce-compositor
Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git

commit94262cfdba34bfebf26b736e1b50b13d95be847b
parentd17b100f9c
authorIsaac Freund <[email protected]>
date2025-06-25 23:12
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;