gardesk/gar / fd402f6

Browse files

fix: improve focus navigation to prioritize alignment

Authored by mfwolffe <wolffemf@dukes.jmu.edu>
SHA
fd402f68a430b992c3cbca9bd29e552f3d7b9a78
Parents
c202e49
Tree
62620a6

2 changed files

StatusFile+-
M gar/src/core/tree.rs 7 10
M gar/src/x11/events.rs 22 21
gar/src/core/tree.rsmodified
@@ -317,23 +317,20 @@ impl Node {
317317
             .collect();
318318
 
319319
         // Find the closest window in the direction
320
+        // Prioritize alignment perpendicular to movement, then distance in movement direction
320321
         candidates
321322
             .into_iter()
322323
             .min_by_key(|(_, rect)| {
323324
                 let cx = rect.x as i32 + rect.width as i32 / 2;
324325
                 let cy = rect.y as i32 + rect.height as i32 / 2;
326
+                let dx = (cx - from_cx).abs();
327
+                let dy = (cy - from_cy).abs();
325328
 
326329
                 match direction {
327
-                    Direction::Left | Direction::Right => {
328
-                        let dx = (cx - from_cx).abs();
329
-                        let dy = (cy - from_cy).abs();
330
-                        dx * 10 + dy // Prioritize horizontal alignment
331
-                    }
332
-                    Direction::Up | Direction::Down => {
333
-                        let dx = (cx - from_cx).abs();
334
-                        let dy = (cy - from_cy).abs();
335
-                        dy * 10 + dx // Prioritize vertical alignment
336
-                    }
330
+                    // For left/right: prioritize same row (small dy), then closest x
331
+                    Direction::Left | Direction::Right => dy * 100 + dx,
332
+                    // For up/down: prioritize same column (small dx), then closest y
333
+                    Direction::Up | Direction::Down => dx * 100 + dy,
337334
                 }
338335
             })
339336
             .map(|(w, _)| *w)
gar/src/x11/events.rsmodified
@@ -38,86 +38,87 @@ struct Keybind {
3838
 
3939
 impl WindowManager {
4040
     /// Get all keybinds to register.
41
+    /// NOTE: Using Alt (M1) instead of Super (M4) for testing in nested X
4142
     fn keybinds() -> Vec<Keybind> {
4243
         vec![
43
-            // Mod+Return: spawn terminal
44
+            // Alt+Return: spawn terminal
4445
             Keybind {
45
-                modifiers: ModMask::M4,
46
+                modifiers: ModMask::M1,
4647
                 keysym: XK_RETURN,
4748
                 action: Action::SpawnTerminal,
4849
             },
49
-            // Mod+Q: close window
50
+            // Alt+Q: close window
5051
             Keybind {
51
-                modifiers: ModMask::M4,
52
+                modifiers: ModMask::M1,
5253
                 keysym: XK_Q,
5354
                 action: Action::CloseWindow,
5455
             },
55
-            // Mod+E: equalize splits
56
+            // Alt+E: equalize splits
5657
             Keybind {
57
-                modifiers: ModMask::M4,
58
+                modifiers: ModMask::M1,
5859
                 keysym: XK_E,
5960
                 action: Action::Equalize,
6061
             },
61
-            // Mod+Arrows: focus navigation
62
+            // Alt+Arrows: focus navigation
6263
             Keybind {
63
-                modifiers: ModMask::M4,
64
+                modifiers: ModMask::M1,
6465
                 keysym: XK_LEFT,
6566
                 action: Action::Focus(Direction::Left),
6667
             },
6768
             Keybind {
68
-                modifiers: ModMask::M4,
69
+                modifiers: ModMask::M1,
6970
                 keysym: XK_RIGHT,
7071
                 action: Action::Focus(Direction::Right),
7172
             },
7273
             Keybind {
73
-                modifiers: ModMask::M4,
74
+                modifiers: ModMask::M1,
7475
                 keysym: XK_UP,
7576
                 action: Action::Focus(Direction::Up),
7677
             },
7778
             Keybind {
78
-                modifiers: ModMask::M4,
79
+                modifiers: ModMask::M1,
7980
                 keysym: XK_DOWN,
8081
                 action: Action::Focus(Direction::Down),
8182
             },
82
-            // Mod+Shift+Arrows: swap windows
83
+            // Alt+Shift+Arrows: swap windows
8384
             Keybind {
84
-                modifiers: ModMask::M4 | ModMask::SHIFT,
85
+                modifiers: ModMask::M1 | ModMask::SHIFT,
8586
                 keysym: XK_LEFT,
8687
                 action: Action::Swap(Direction::Left),
8788
             },
8889
             Keybind {
89
-                modifiers: ModMask::M4 | ModMask::SHIFT,
90
+                modifiers: ModMask::M1 | ModMask::SHIFT,
9091
                 keysym: XK_RIGHT,
9192
                 action: Action::Swap(Direction::Right),
9293
             },
9394
             Keybind {
94
-                modifiers: ModMask::M4 | ModMask::SHIFT,
95
+                modifiers: ModMask::M1 | ModMask::SHIFT,
9596
                 keysym: XK_UP,
9697
                 action: Action::Swap(Direction::Up),
9798
             },
9899
             Keybind {
99
-                modifiers: ModMask::M4 | ModMask::SHIFT,
100
+                modifiers: ModMask::M1 | ModMask::SHIFT,
100101
                 keysym: XK_DOWN,
101102
                 action: Action::Swap(Direction::Down),
102103
             },
103
-            // Mod+Ctrl+Arrows: resize
104
+            // Alt+Ctrl+Arrows: resize
104105
             Keybind {
105
-                modifiers: ModMask::M4 | ModMask::CONTROL,
106
+                modifiers: ModMask::M1 | ModMask::CONTROL,
106107
                 keysym: XK_LEFT,
107108
                 action: Action::Resize(Direction::Left),
108109
             },
109110
             Keybind {
110
-                modifiers: ModMask::M4 | ModMask::CONTROL,
111
+                modifiers: ModMask::M1 | ModMask::CONTROL,
111112
                 keysym: XK_RIGHT,
112113
                 action: Action::Resize(Direction::Right),
113114
             },
114115
             Keybind {
115
-                modifiers: ModMask::M4 | ModMask::CONTROL,
116
+                modifiers: ModMask::M1 | ModMask::CONTROL,
116117
                 keysym: XK_UP,
117118
                 action: Action::Resize(Direction::Up),
118119
             },
119120
             Keybind {
120
-                modifiers: ModMask::M4 | ModMask::CONTROL,
121
+                modifiers: ModMask::M1 | ModMask::CONTROL,
121122
                 keysym: XK_DOWN,
122123
                 action: Action::Resize(Direction::Down),
123124
             },