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

commitfeb3584d3a36dbda52fd245061fd4ef2e1bea2fe
parentd6de61b9d5
authorIsaac Freund <[email protected]>
date2020-06-28 00:29
cursor: fix viewAt() ordering

Focused views must be checked first as they are always rendered on top.

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

diff --git a/river/Cursor.zig b/river/Cursor.zig
index eeae028..c38c0dd 100644
--- a/river/Cursor.zig
+++ b/river/Cursor.zig
@@ -359,8 +359,17 @@ fn layerSurfaceAt(
 
 /// Find the topmost visible view surface (incl. popups) at ox,oy.
 fn viewSurfaceAt(output: Output, ox: f64, oy: f64, sx: *f64, sy: *f64) ?*c.wlr_surface {
+    // Focused views are rendered on top, so look for them first.
     var it = ViewStack(View).iterator(output.views.first, output.current_focused_tags);
-    return while (it.next()) |node| {
-        if (node.view.surfaceAt(ox, oy, sx, sy)) |found| break found;
-    } else null;
+    while (it.next()) |node| {
+        if (!node.view.focused) continue;
+        if (node.view.surfaceAt(ox, oy, sx, sy)) |found| return found;
+    }
+
+    it = ViewStack(View).iterator(output.views.first, output.current_focused_tags);
+    while (it.next()) |node| {
+        if (node.view.surfaceAt(ox, oy, sx, sy)) |found| return found;
+    }
+
+    return null;
 }