swayfx/sway/commands/seat.c
Brian Ashworth ebe5399ed6 pointer_constraint: change to a seat subcommand
This changes the `pointer_constraint` command to be a subcommand of seat
to allow for per-seat settings. The current implementation that is not a
seat subcommand will only operate on the current seat and will segfault
in the config due to `config->handler_context.seat` only being set at
runtime.

This also allows for the wildcard identifier to be used to alter the
pointer constraint settings on all seats and allows for the setting to
be merged with the rest of the seat config.
2019-01-31 22:58:52 -05:00

45 lines
1.3 KiB
C

#include <string.h>
#include <strings.h>
#include "sway/commands.h"
#include "sway/input/input-manager.h"
#include "log.h"
#include "stringop.h"
// must be in order for the bsearch
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 },
};
struct cmd_results *cmd_seat(int argc, char **argv) {
struct cmd_results *error = NULL;
if ((error = checkarg(argc, "seat", EXPECTED_AT_LEAST, 2))) {
return error;
}
config->handler_context.seat_config = new_seat_config(argv[0]);
if (!config->handler_context.seat_config) {
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);
}
config->handler_context.seat_config = NULL;
return cmd_results_new(CMD_SUCCESS, NULL);
}