diff options
author | Ian Fan <ianfan0@gmail.com> | 2018-07-13 23:22:34 +0100 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2018-08-01 16:57:14 +0100 |
commit | dd6debf367420d0771cc0326ecb2511c1ce05ac1 (patch) | |
tree | 347924ac927704f7cc49bd55a2b8277f7bc23948 /sway | |
parent | 686c084cec0b1143c877e8c0088732fad5229ce4 (diff) |
ipc: add barconfig_update event on config reload
Diffstat (limited to 'sway')
-rw-r--r-- | sway/commands/reload.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/sway/commands/reload.c b/sway/commands/reload.c index cea6a94b..36c6acce 100644 --- a/sway/commands/reload.c +++ b/sway/commands/reload.c @@ -1,17 +1,45 @@ +#define _XOPEN_SOURCE 500 +#include <string.h> #include "sway/commands.h" #include "sway/config.h" +#include "sway/ipc-server.h" #include "sway/tree/arrange.h" +#include "list.h" struct cmd_results *cmd_reload(int argc, char **argv) { struct cmd_results *error = NULL; if ((error = checkarg(argc, "reload", EXPECTED_EQUAL_TO, 0))) { return error; } + + // store bar ids to check against new bars for barconfig_update events + list_t *bar_ids = create_list(); + for (int i = 0; i < config->bars->length; ++i) { + struct bar_config *bar = config->bars->items[i]; + list_add(bar_ids, strdup(bar->id)); + } + if (!load_main_config(config->current_config_path, true)) { return cmd_results_new(CMD_FAILURE, "reload", "Error(s) reloading config."); } load_swaybars(); + + for (int i = 0; i < config->bars->length; ++i) { + struct bar_config *bar = config->bars->items[i]; + for (int j = 0; j < bar_ids->length; ++j) { + if (strcmp(bar->id, bar_ids->items[j]) == 0) { + ipc_event_barconfig_update(bar); + break; + } + } + } + + for (int i = 0; i < bar_ids->length; ++i) { + free(bar_ids->items[i]); + } + list_free(bar_ids); + arrange_windows(&root_container); return cmd_results_new(CMD_SUCCESS, NULL, NULL); } |