focus: support focus_wrapping workspace

Following i3 support: https://github.com/i3/i3/pull/3407
This commit is contained in:
lbonn 2019-10-16 20:27:19 +02:00 committed by Simon Ser
parent 74c0e7921a
commit 3ee3a9ef60
4 changed files with 10 additions and 4 deletions

View file

@ -409,7 +409,8 @@ enum focus_follows_mouse_mode {
enum focus_wrapping_mode { enum focus_wrapping_mode {
WRAP_NO, WRAP_NO,
WRAP_YES, WRAP_YES,
WRAP_FORCE WRAP_FORCE,
WRAP_WORKSPACE
}; };
enum mouse_warping_mode { enum mouse_warping_mode {

View file

@ -160,7 +160,8 @@ static struct sway_node *node_get_in_direction_tiling(
// Check a different output // Check a different output
struct sway_output *output = container->workspace->output; struct sway_output *output = container->workspace->output;
struct sway_output *new_output = output_get_in_direction(output, dir); struct sway_output *new_output = output_get_in_direction(output, dir);
if (new_output) { if ((config->focus_wrapping != WRAP_WORKSPACE ||
container->node.type == N_WORKSPACE) && new_output) {
return get_node_in_output_direction(new_output, dir); return get_node_in_output_direction(new_output, dir);
} }

View file

@ -11,6 +11,8 @@ struct cmd_results *cmd_focus_wrapping(int argc, char **argv) {
if (strcasecmp(argv[0], "force") == 0) { if (strcasecmp(argv[0], "force") == 0) {
config->focus_wrapping = WRAP_FORCE; config->focus_wrapping = WRAP_FORCE;
} else if (strcasecmp(argv[0], "workspace") == 0) {
config->focus_wrapping = WRAP_WORKSPACE;
} else if (parse_boolean(argv[0], config->focus_wrapping == WRAP_YES)) { } else if (parse_boolean(argv[0], config->focus_wrapping == WRAP_YES)) {
config->focus_wrapping = WRAP_YES; config->focus_wrapping = WRAP_YES;
} else { } else {

View file

@ -551,14 +551,16 @@ The default colors are:
If set to _smart_, the window will become focused only if it is already If set to _smart_, the window will become focused only if it is already
visible, otherwise the urgent state will be set. Default is _smart_. visible, otherwise the urgent state will be set. Default is _smart_.
*focus_wrapping* yes|no|force *focus_wrapping* yes|no|force|workspace
This option determines what to do when attempting to focus over the edge This option determines what to do when attempting to focus over the edge
of a container. If set to _no_, the focused container will retain focus, of a container. If set to _no_, the focused container will retain focus,
if there are no other containers in the direction. If set to _yes_, focus if there are no other containers in the direction. If set to _yes_, focus
will be wrapped to the opposite edge of the container, if there are no will be wrapped to the opposite edge of the container, if there are no
other containers in the direction. If set to _force_, focus will be wrapped other containers in the direction. If set to _force_, focus will be wrapped
to the opposite edge of the container, even if there are other containers to the opposite edge of the container, even if there are other containers
in the direction. Default is _yes_. in the direction. If set to _workspace_, focus will wrap like in the _yes_
case and additionally wrap when moving outside of workspaces boundaries.
Default is _yes_.
*font* [pango:]<font> *font* [pango:]<font>
Sets font to use for the title bars. To enable support for pango markup, Sets font to use for the title bars. To enable support for pango markup,