cad6e59b93
Deferred commands are only run once, during sway startup. This means that deferring seat attachment based on whether we are reading the config prevents devices from being reattached to the correct seat during a config reload. Instead, only defer if the config is not yet active. Fixes #6048.
29 lines
833 B
C
29 lines
833 B
C
#define _POSIX_C_SOURCE 200809L
|
|
#include <string.h>
|
|
#include "sway/commands.h"
|
|
#include "sway/config.h"
|
|
#include "stringop.h"
|
|
|
|
struct cmd_results *seat_cmd_attach(int argc, char **argv) {
|
|
struct cmd_results *error = NULL;
|
|
if ((error = checkarg(argc, "attach", EXPECTED_AT_LEAST, 1))) {
|
|
return error;
|
|
}
|
|
if (!config->handler_context.seat_config) {
|
|
return cmd_results_new(CMD_FAILURE, "No seat defined");
|
|
}
|
|
if (!config->active) {
|
|
return cmd_results_new(CMD_DEFER, NULL);
|
|
}
|
|
|
|
struct seat_attachment_config *attachment = seat_attachment_config_new();
|
|
if (!attachment) {
|
|
return cmd_results_new(CMD_FAILURE,
|
|
"Failed to allocate seat attachment config");
|
|
}
|
|
attachment->identifier = strdup(argv[0]);
|
|
list_add(config->handler_context.seat_config->attachments, attachment);
|
|
|
|
return cmd_results_new(CMD_SUCCESS, NULL);
|
|
}
|