From ebe65a4d481341d38b99e8fb36e66832888bc085 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 1 Sep 2018 11:13:48 +1000 Subject: Fix crash on reload If sway is reloaded using a bindsym which has multiple commands, it failed to detect the reload command, didn't create a duplicate of the binding and would crash because the reload command frees the bindings. For example: mode system { bindsym r reload, mode default } In this example, the binding->command is "reload, mode default". Fixes #2545 --- sway/commands/bind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sway/commands') diff --git a/sway/commands/bind.c b/sway/commands/bind.c index 8270b958..e73b0aea 100644 --- a/sway/commands/bind.c +++ b/sway/commands/bind.c @@ -310,7 +310,7 @@ void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding) bool reload = false; // if this is a reload command we need to make a duplicate of the // binding since it will be gone after the reload has completed. - if (strcasecmp(binding->command, "reload") == 0) { + if (strncasecmp(binding->command, "reload", 6) == 0) { reload = true; binding_copy = sway_binding_dup(binding); if (!binding_copy) { -- cgit v1.2.3 From 7e81e58e7d1f540e448f3827751f75bf54b1fe9f Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 1 Sep 2018 11:45:48 +1000 Subject: Allow reload command to exist anywhere in the command string This fixes a crash if you have commands where reload appears in the middle or at the end, such as `bindsym r mode default, reload`. --- sway/commands/bind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'sway/commands') diff --git a/sway/commands/bind.c b/sway/commands/bind.c index e73b0aea..b134c92f 100644 --- a/sway/commands/bind.c +++ b/sway/commands/bind.c @@ -310,7 +310,7 @@ void seat_execute_command(struct sway_seat *seat, struct sway_binding *binding) bool reload = false; // if this is a reload command we need to make a duplicate of the // binding since it will be gone after the reload has completed. - if (strncasecmp(binding->command, "reload", 6) == 0) { + if (strcasestr(binding->command, "reload")) { reload = true; binding_copy = sway_binding_dup(binding); if (!binding_copy) { -- cgit v1.2.3 From 016d0455f809ac3b8da8a040611d691b96502c15 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 1 Sep 2018 21:28:13 +1000 Subject: Implement deprecated new_window and new_float commands May as well make it as easy as possible for users who are coming from i3. This also changes the `border` command to accept a thickness when setting the border to normal. This makes it work the same way as the `default_border` command. Eg. `border normal 5` --- sway/commands/border.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'sway/commands') diff --git a/sway/commands/border.c b/sway/commands/border.c index 9c19e20a..9502c877 100644 --- a/sway/commands/border.c +++ b/sway/commands/border.c @@ -27,9 +27,6 @@ struct cmd_results *cmd_border(int argc, char **argv) { view->border = B_NORMAL; } else if (strcmp(argv[0], "pixel") == 0) { view->border = B_PIXEL; - if (argc == 2) { - view->border_thickness = atoi(argv[1]); - } } else if (strcmp(argv[0], "toggle") == 0) { view->border = (view->border + 1) % 3; } else { @@ -37,6 +34,9 @@ struct cmd_results *cmd_border(int argc, char **argv) { "Expected 'border ' " "or 'border pixel '"); } + if (argc == 2) { + view->border_thickness = atoi(argv[1]); + } if (container_is_floating(view->swayc)) { container_set_geometry_from_floating_view(view->swayc); -- cgit v1.2.3 From f057a0195ee79dfcaeddbcab026c06e310998c75 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 2 Sep 2018 15:03:58 +1000 Subject: Implement focus_on_window_activation Depends on https://github.com/swaywm/wlroots/pull/1223 --- sway/commands/focus_on_window_activation.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 sway/commands/focus_on_window_activation.c (limited to 'sway/commands') diff --git a/sway/commands/focus_on_window_activation.c b/sway/commands/focus_on_window_activation.c new file mode 100644 index 00000000..1fb07918 --- /dev/null +++ b/sway/commands/focus_on_window_activation.c @@ -0,0 +1,25 @@ +#include "sway/commands.h" + +struct cmd_results *cmd_focus_on_window_activation(int argc, char **argv) { + struct cmd_results *error = NULL; + if ((error = checkarg(argc, "focus_on_window_activation", + EXPECTED_EQUAL_TO, 1))) { + return error; + } + + if (strcmp(argv[0], "smart") == 0) { + config->focus_on_window_activation = FOWA_SMART; + } else if (strcmp(argv[0], "urgent") == 0) { + config->focus_on_window_activation = FOWA_URGENT; + } else if (strcmp(argv[0], "focus") == 0) { + config->focus_on_window_activation = FOWA_FOCUS; + } else if (strcmp(argv[0], "none") == 0) { + config->focus_on_window_activation = FOWA_NONE; + } else { + return cmd_results_new(CMD_INVALID, "focus_on_window_activation", + "Expected " + "'focus_on_window_activation smart|urgent|focus|none'"); + } + + return cmd_results_new(CMD_SUCCESS, NULL, NULL); +} -- cgit v1.2.3