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

commit194731b686f0405175ba0f9e78ce436a3e61c70b
parentacb946382a
authorIsaac Freund <[email protected]>
date2021-01-07 11:19
cursor: fix down mode motion event coords

These are required to be surface local and we need to take the output's
layout coords into account as the cursor itself is in layout coords.

 river/Cursor.zig | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/river/Cursor.zig b/river/Cursor.zig
index 7e8d427..0cc2b9a 100644
--- a/river/Cursor.zig
+++ b/river/Cursor.zig
@@ -471,10 +471,12 @@ fn processMotion(self: *Self, device: *wlr.InputDevice, time: u32, delta_x: f64,
         },
         .down => |view| {
             self.wlr_cursor.move(device, delta_x, delta_y);
+            // This takes surface-local coordinates
+            const output_box = view.output.root.output_layout.getBox(view.output.wlr_output).?;
             self.seat.wlr_seat.pointerNotifyMotion(
                 time,
-                self.wlr_cursor.x - @intToFloat(f64, view.current.box.x - view.surface_box.x),
-                self.wlr_cursor.y - @intToFloat(f64, view.current.box.y - view.surface_box.y),
+                self.wlr_cursor.x - @intToFloat(f64, output_box.x + view.current.box.x - view.surface_box.x),
+                self.wlr_cursor.y - @intToFloat(f64, output_box.y + view.current.box.y - view.surface_box.y),
             );
         },
         .move => |view| {