sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit ee67c5bee34c4a98f8df3db68e92eaa55f1d579d
parent d03266a77a3a07a8a7488bb425410a87a658d9b0
Author: Drew DeVault <sir@cmpwn.com>
Date:   Thu, 28 Jul 2016 07:26:37 -0400

Merge pull request #791 from acrisci/feature/focus-child

Implement `focus child` command
Diffstat:
Minclude/focus.h | 3++-
Msway/commands.c | 4+++-
Msway/focus.c | 2+-
Msway/layout.c | 4++++
Msway/sway.5.txt | 4++--
5 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/include/focus.h b/include/focus.h @@ -5,7 +5,8 @@ enum movement_direction { MOVE_RIGHT, MOVE_UP, MOVE_DOWN, - MOVE_PARENT + MOVE_PARENT, + MOVE_CHILD }; #include "container.h" diff --git a/sway/commands.c b/sway/commands.c @@ -864,6 +864,8 @@ static struct cmd_results *cmd_focus(int argc, char **argv) { move_focus(MOVE_DOWN); } else if (strcasecmp(argv[0], "parent") == 0) { move_focus(MOVE_PARENT); + } else if (strcasecmp(argv[0], "child") == 0) { + move_focus(MOVE_CHILD); } else if (strcasecmp(argv[0], "mode_toggle") == 0) { int i; swayc_t *workspace = swayc_active_workspace(); @@ -903,7 +905,7 @@ static struct cmd_results *cmd_focus(int argc, char **argv) { } } else { return cmd_results_new(CMD_INVALID, "focus", - "Expected 'focus <direction|parent|mode_toggle>' or 'focus output <direction|name>'"); + "Expected 'focus <direction|parent|child|mode_toggle>' or 'focus output <direction|name>'"); } return cmd_results_new(CMD_SUCCESS, NULL, NULL); } diff --git a/sway/focus.c b/sway/focus.c @@ -72,7 +72,7 @@ bool move_focus(enum movement_direction direction) { return false; } else if (new_view->type == C_OUTPUT) { return set_focused_container(swayc_active_workspace_for(new_view)); - } else if (direction == MOVE_PARENT) { + } else if (direction == MOVE_PARENT || direction == MOVE_CHILD) { return set_focused_container(new_view); } else if (config->mouse_warping) { swayc_t *old_op = old_view->type == C_OUTPUT ? diff --git a/sway/layout.c b/sway/layout.c @@ -1009,6 +1009,10 @@ static swayc_t *get_swayc_in_output_direction(swayc_t *output, enum movement_dir } swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_direction dir, swayc_t *limit) { + if (dir == MOVE_CHILD) { + return container->focused; + } + swayc_t *parent = container->parent; if (dir == MOVE_PARENT) { if (parent->type == C_OUTPUT) { diff --git a/sway/sway.5.txt b/sway/sway.5.txt @@ -59,8 +59,8 @@ They are expected to be used with **bindsym** or at runtime through **swaymsg**( Make focused view floating, non-floating, or the opposite of what it is now. **focus** <direction>:: - Direction may be one of _up_, _down_, _left_, _right_, or _parent_. The - directional focus commands will move the focus in that direction. The parent + Direction may be one of _up_, _down_, _left_, _right_, _parent_, or _child_. + The directional focus commands will move the focus in that direction. The parent focus command will change the focus to the parent of the currently focused container, which is useful, for example, to open a sibling of the parent container, or to move the entire container around.