Consistently set focus across outputs
Patch status: rejected
Patch by Tony Crisci
Long description:
When focusing across containers, the window on the top of the focus stack should get focus, even when that container is on another output. fixes #1160
To apply this patch, use:
curl http://cr.i3wm.org/patch/596/raw.patch | git am
b/src/tree.c
| 18 |
@@ -581,7 +581,7 @@ static bool _tree_next(Con *con, char way, orientation_t orientation, bool wrap) |
| 19 |
if (con_get_fullscreen_con(workspace, CF_OUTPUT)) |
| 20 |
return true; |
| 21 |
|
| 22 |
- Con *focus = con_descend_direction(workspace, direction); |
| 23 |
+ Con *focus = con_descend_tiling_focused(workspace); |
| 24 |
if (focus) {
|
| 25 |
con_focus(focus); |
| 26 |
x_set_warp_to(&(focus->rect)); |
b/testcases/t/510-focus-across-outputs.t
| 31 |
@@ -99,7 +99,8 @@ reset_focus $s3_ws; |
| 32 |
|
| 33 |
cmd "workspace $s2_ws"; |
| 34 |
cmd 'focus right'; |
| 35 |
-is($x->input_focus, $sixth->id, 'sixth window focused'); |
| 36 |
+diag 'it should focus the window on the top of the focus stack'; |
| 37 |
+is($x->input_focus, $seventh->id, 'seventh window focused'); |
| 38 |
reset_focus $s3_ws; |
| 39 |
|
| 40 |
cmd "workspace $s2_ws"; |
| 41 |
@@ -128,7 +129,8 @@ reset_focus $s3_ws; |
| 42 |
|
| 43 |
cmd "workspace $s1_ws"; |
| 44 |
cmd 'focus left'; |
| 45 |
-is($x->input_focus, $second->id, 'second window focused'); |
| 46 |
+diag 'it should focus the window on the top of the focus stack'; |
| 47 |
+is($x->input_focus, $first->id, 'first window focused'); |
| 48 |
reset_focus $s0_ws; |
| 49 |
|
| 50 |
cmd "workspace $s1_ws"; |
| 51 |
@@ -142,7 +144,8 @@ is($x->input_focus, $sixth->id, 'sixth window focused'); |
| 52 |
|
| 53 |
cmd "workspace $s2_ws"; |
| 54 |
cmd 'focus up'; |
| 55 |
-is($x->input_focus, $second->id, 'second window focused'); |
| 56 |
+diag 'it should focus the window on the top of the focus stack'; |
| 57 |
+is($x->input_focus, $first->id, 'first window focused'); |
| 58 |
|
| 59 |
exit_gracefully($pid); |
| 60 |
|