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

commitb0dd84da5a6204c16f2aae3d41358749b2525a99
parentf897c00448
authorIsaac Freund <[email protected]>
date2023-02-10 13:12
Seat: guard setFocusRaw() usage while locked

Focusing a layer shell or Xwayland override redirect surface while
locked is a bug.

 river/Output.zig                   | 2 ++
 river/XwaylandOverrideRedirect.zig | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/river/Output.zig b/river/Output.zig
index f994190..b654193 100644
--- a/river/Output.zig
+++ b/river/Output.zig
@@ -293,6 +293,8 @@ pub fn arrangeLayers(self: *Self, target: ArrangeLayersTarget) void {
 
     if (target == .unmapped) return;
 
+    if (server.lock_manager.state != .unlocked) return;
+
     // Find the topmost layer surface in the top or overlay layers which
     // requests keyboard interactivity if any.
     const topmost_surface = outer: for (layers[0..2]) |layer| {
diff --git a/river/XwaylandOverrideRedirect.zig b/river/XwaylandOverrideRedirect.zig
index 224ad65..ad604ba 100644
--- a/river/XwaylandOverrideRedirect.zig
+++ b/river/XwaylandOverrideRedirect.zig
@@ -101,6 +101,8 @@ pub fn handleMap(listener: *wl.Listener(*wlr.XwaylandSurface), xwayland_surface:
 }
 
 pub fn focusIfDesired(self: *Self) void {
+    if (server.lock_manager.state != .unlocked) return;
+
     if (self.xwayland_surface.overrideRedirectWantsFocus() and
         self.xwayland_surface.icccmInputModel() != .none)
     {