ebe5399ed6
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.
45 lines
1.3 KiB
C
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);
|
|
}
|