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

commitca9939982b94e2f4d6f29769335d0b379769861b
parentf3c6d9f86b
authorIsaac Freund <[email protected]>
date2021-07-29 13:42
cursor: fix crash if focus-follows-cursor is set

Currently we hit a stack overflow as we do not check if the target view
already has keyboard focus before calling Seat.focus() in
Cursor.passthrough(). To fix this, simply add this check.

 river/Cursor.zig | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/river/Cursor.zig b/river/Cursor.zig
index 06fd452..0fca04a 100644
--- a/river/Cursor.zig
+++ b/river/Cursor.zig
@@ -826,9 +826,11 @@ fn passthrough(self: *Self, time: u32) void {
             if (follow_mode == .strict or (follow_mode == .normal and focus_change)) {
                 switch (result.parent) {
                     .view => |view| {
-                        self.seat.focusOutput(view.output);
-                        self.seat.focus(view);
-                        server.root.startTransaction();
+                        if (self.seat.focused != .view or self.seat.focused.view != view) {
+                            self.seat.focusOutput(view.output);
+                            self.seat.focus(view);
+                            server.root.startTransaction();
+                        }
                     },
                     .layer_surface => {},
                 }