aboutsummaryrefslogtreecommitdiff
path: root/sway/commands/seat.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/commands/seat.c')
-rw-r--r--sway/commands/seat.c52
1 files changed, 37 insertions, 15 deletions
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 seat_config *sc =
- store_seat_config(config->handler_context.seat_config);
- if (!config->reading) {
- input_manager_apply_seat_config(sc);
+ 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);
}
-
- config->handler_context.seat_config = NULL;
return res ? res : cmd_results_new(CMD_SUCCESS, NULL);
}