2zw - X11 Windowmanager
Files | Log | Commits | Refs | README
Author: erikbackman
Date: 2024-02-20
Subject: focus the globally previous node instead of relative to cursor
commit 96b0ef80d2813355f473672870e469fae04a185f
Author: erikbackman <erikbackman@users.noreply.github.com>
Date: Tue Feb 20 22:35:12 2024 +0100
focus the globally previous node instead of relative to cursor
diff --git a/src/main.zig b/src/main.zig
index cd790cd..9053ead 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -97,6 +97,7 @@ var display: *C.Display = undefined;
var root: C.Window = undefined;
var mouse: C.XButtonEvent = undefined;
var window_changes: C.XWindowChanges = undefined;
+var previously_focused: ?*L.Node = undefined;
// Clients are kept in a doubly-linked list
const L = std.DoublyLinkedList(Client);
@@ -147,7 +148,10 @@ fn center(c: *L.Node) void {
fn focus(node: *L.Node) void {
if (list.len == 0) return;
- if (cursor) |prev| _ = C.XSetWindowBorder(display, prev.data.w, NORMAL_BORDER_COLOR);
+ if (cursor) |c| {
+ _ = C.XSetWindowBorder(display, c.data.w, NORMAL_BORDER_COLOR);
+ previously_focused = c;
+ }
_ = C.XSetInputFocus(
display,
@@ -185,7 +189,7 @@ fn unmanage(allocator: std.mem.Allocator, node: *L.Node, destroyed: bool) void {
list.remove(node);
allocator.destroy(node);
- if (cursor) |c| focus(c) else {
+ if (previously_focused) |c| focus(c) else {
_ = C.XSetInputFocus(
display,
root,