aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/sway/commands.h1
-rw-r--r--include/sway/config.h1
-rw-r--r--sway/commands.c1
-rw-r--r--sway/commands/force_focus_wrapping.c12
-rw-r--r--sway/layout.c3
5 files changed, 18 insertions, 0 deletions
diff --git a/include/sway/commands.h b/include/sway/commands.h
index f646c412..fe67c58c 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -106,6 +106,7 @@ sway_cmd cmd_focus;
sway_cmd cmd_focus_follows_mouse;
sway_cmd cmd_font;
sway_cmd cmd_for_window;
+sway_cmd cmd_force_focus_wrapping;
sway_cmd cmd_fullscreen;
sway_cmd cmd_gaps;
sway_cmd cmd_hide_edge_borders;
diff --git a/include/sway/config.h b/include/sway/config.h
index 56deaf01..b29fe6c5 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -211,6 +211,7 @@ struct sway_config {
// Flags
bool focus_follows_mouse;
bool mouse_warping;
+ bool force_focus_wrapping;
bool active;
bool failed;
bool reloading;
diff --git a/sway/commands.c b/sway/commands.c
index 317122cd..d93f6591 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -171,6 +171,7 @@ static struct cmd_handler handlers[] = {
{ "focus", cmd_focus },
{ "focus_follows_mouse", cmd_focus_follows_mouse },
{ "font", cmd_font },
+ { "force_focus_wrapping", cmd_force_focus_wrapping },
{ "for_window", cmd_for_window },
{ "fullscreen", cmd_fullscreen },
{ "gaps", cmd_gaps },
diff --git a/sway/commands/force_focus_wrapping.c b/sway/commands/force_focus_wrapping.c
new file mode 100644
index 00000000..23019cd3
--- /dev/null
+++ b/sway/commands/force_focus_wrapping.c
@@ -0,0 +1,12 @@
+#include <string.h>
+#include "sway/commands.h"
+
+struct cmd_results *cmd_force_focus_wrapping(int argc, char **argv) {
+ struct cmd_results *error = NULL;
+ if ((error = checkarg(argc, "force_focus_wrapping", EXPECTED_EQUAL_TO, 1))) {
+ return error;
+ }
+
+ config->force_focus_wrapping = !strcasecmp(argv[0], "yes");
+ return cmd_results_new(CMD_SUCCESS, NULL, NULL);
+}
diff --git a/sway/layout.c b/sway/layout.c
index f10e21bd..a7206e9a 100644
--- a/sway/layout.c
+++ b/sway/layout.c
@@ -1123,6 +1123,9 @@ swayc_t *get_swayc_in_direction_under(swayc_t *container, enum movement_directio
} else {
wrap_candidate = parent->children->items[0];
}
+ if (config->force_focus_wrapping) {
+ return wrap_candidate;
+ }
}
} else {
return parent->children->items[desired];