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

commitc6cdc45bdf5c68b4a09dd4b09bce56f84e9f6b82
parent9a5a49a4c9
authorIsaac Freund <[email protected]>
date2025-03-23 11:49
rivercompat: change border color on focus

 rivercompat/Config.zig |  3 ++-
 rivercompat/Window.zig | 32 +++++++++++++++++++++++---------
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/rivercompat/Config.zig b/rivercompat/Config.zig
index b81bb24..52e6e28 100644
--- a/rivercompat/Config.zig
+++ b/rivercompat/Config.zig
@@ -22,7 +22,8 @@ const assert = std.debug.assert;
 const gpa = std.heap.c_allocator;
 
 border_width: u31 = 3,
-border_color: u32 = 0x586e75,
+border_color_unfocused: u32 = 0x586e75,
+border_color_focused: u32 = 0x93a1a1,
 
 main_count: u31 = 1,
 main_location: enum { left, right, top, bottom } = .left,
diff --git a/rivercompat/Window.zig b/rivercompat/Window.zig
index 4a30d3e..def241f 100644
--- a/rivercompat/Window.zig
+++ b/rivercompat/Window.zig
@@ -134,15 +134,6 @@ pub fn updateWindowing(window: *Window) void {
     if (window.windowing.new) {
         window.window_v1.useSsd();
 
-        window.window_v1.setBorders(
-            .{ .left = true, .bottom = true, .top = true, .right = true },
-            wm.config.border_width,
-            @as(u32, (wm.config.border_color >> 16) & 0xff) * (0xffff_ffff / 0xff),
-            @as(u32, (wm.config.border_color >> 8) & 0xff) * (0xffff_ffff / 0xff),
-            @as(u32, (wm.config.border_color >> 0) & 0xff) * (0xffff_ffff / 0xff),
-            0xffff_ffff,
-        );
-
         if (if (wm.seats.first()) |seat| seat.focused_output else null) |output| {
             window.output = output;
             window.tags = output.tags;
@@ -177,6 +168,29 @@ pub fn updateRendering(window: *Window) void {
         window.shadow_decoration.syncNextCommit();
         window.shadow_surface.commit();
     }
+
+    {
+        var it = wm.seats.iterator(.forward);
+        while (it.next()) |seat| {
+            if (seat.focused == window) {
+                window.setBorders(wm.config.border_color_focused);
+                break;
+            }
+        } else {
+            window.setBorders(wm.config.border_color_unfocused);
+        }
+    }
+}
+
+fn setBorders(window: *Window, rgb: u32) void {
+    window.window_v1.setBorders(
+        .{ .left = true, .bottom = true, .top = true, .right = true },
+        wm.config.border_width,
+        @as(u32, (rgb >> 16) & 0xff) * (0xffff_ffff / 0xff),
+        @as(u32, (rgb >> 8) & 0xff) * (0xffff_ffff / 0xff),
+        @as(u32, (rgb >> 0) & 0xff) * (0xffff_ffff / 0xff),
+        0xffff_ffff,
+    );
 }
 
 pub const Box = struct {