diff --git a/sway/commands/seat.c b/sway/commands/seat.c index a827bf74..197a405e 100644 --- a/sway/commands/seat.c +++ b/sway/commands/seat.c @@ -7,15 +7,45 @@ #include "stringop.h" // must be in order for the bsearch +// these handlers perform actions on the seat +static struct cmd_handler seat_action_handlers[] = { + { "cursor", seat_cmd_cursor }, +}; + +// must be in order for the bsearch +// these handlers alter the seat config static struct cmd_handler seat_handlers[] = { { "attach", seat_cmd_attach }, - { "cursor", seat_cmd_cursor }, { "fallback", seat_cmd_fallback }, { "hide_cursor", seat_cmd_hide_cursor }, { "pointer_constraint", seat_cmd_pointer_constraint }, { "xcursor_theme", seat_cmd_xcursor_theme }, }; +static struct cmd_results *action_handlers(int argc, char **argv) { + struct cmd_results *res = config_subcommand(argv, argc, + seat_action_handlers, sizeof(seat_action_handlers)); + free_seat_config(config->handler_context.seat_config); + config->handler_context.seat_config = NULL; + return res; +} + +static struct cmd_results *config_handlers(int argc, char **argv) { + struct cmd_results *res = config_subcommand(argv, argc, + seat_handlers, sizeof(seat_handlers)); + if (res && res->status != CMD_SUCCESS) { + free_seat_config(config->handler_context.seat_config); + } else { + struct seat_config *sc = + store_seat_config(config->handler_context.seat_config); + if (!config->reading) { + input_manager_apply_seat_config(sc); + } + } + config->handler_context.seat_config = NULL; + return res; +} + struct cmd_results *cmd_seat(int argc, char **argv) { struct cmd_results *error = NULL; if ((error = checkarg(argc, "seat", EXPECTED_AT_LEAST, 2))) { @@ -36,20 +66,12 @@ struct cmd_results *cmd_seat(int argc, char **argv) { return cmd_results_new(CMD_FAILURE, "Couldn't allocate config"); } - struct cmd_results *res = config_subcommand(argv + 1, argc - 1, - seat_handlers, sizeof(seat_handlers)); - if (res && res->status != CMD_SUCCESS) { - free_seat_config(config->handler_context.seat_config); - config->handler_context.seat_config = NULL; - return res; + struct cmd_results *res = NULL; + if (find_handler(argv[1], seat_action_handlers, + sizeof(seat_action_handlers))) { + res = action_handlers(argc - 1, argv + 1); + } else { + res = config_handlers(argc - 1, argv + 1); } - - struct seat_config *sc = - store_seat_config(config->handler_context.seat_config); - if (!config->reading) { - input_manager_apply_seat_config(sc); - } - - config->handler_context.seat_config = NULL; return res ? res : cmd_results_new(CMD_SUCCESS, NULL); }