From b6ef4c5a1ab335337bdab7cc73e564c454d98aa5 Mon Sep 17 00:00:00 2001 From: Isaac Freund Date: Sun, 28 Jun 2020 00:29:44 +0200 Subject: [PATCH] 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; }