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/commands/reload.c | |
parent | ipc: add workspace::empty event (diff) | |
download | sway-dd6debf367420d0771cc0326ecb2511c1ce05ac1.tar.gz sway-dd6debf367420d0771cc0326ecb2511c1ce05ac1.tar.zst sway-dd6debf367420d0771cc0326ecb2511c1ce05ac1.zip |
ipc: add barconfig_update event on config reload
Diffstat (limited to 'sway/commands/reload.c')
-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 @@ | |||
1 | #define _XOPEN_SOURCE 500 | ||
2 | #include <string.h> | ||
1 | #include "sway/commands.h" | 3 | #include "sway/commands.h" |
2 | #include "sway/config.h" | 4 | #include "sway/config.h" |
5 | #include "sway/ipc-server.h" | ||
3 | #include "sway/tree/arrange.h" | 6 | #include "sway/tree/arrange.h" |
7 | #include "list.h" | ||
4 | 8 | ||
5 | struct cmd_results *cmd_reload(int argc, char **argv) { | 9 | struct cmd_results *cmd_reload(int argc, char **argv) { |
6 | struct cmd_results *error = NULL; | 10 | struct cmd_results *error = NULL; |
7 | if ((error = checkarg(argc, "reload", EXPECTED_EQUAL_TO, 0))) { | 11 | if ((error = checkarg(argc, "reload", EXPECTED_EQUAL_TO, 0))) { |
8 | return error; | 12 | return error; |
9 | } | 13 | } |
14 | |||
15 | // store bar ids to check against new bars for barconfig_update events | ||
16 | list_t *bar_ids = create_list(); | ||
17 | for (int i = 0; i < config->bars->length; ++i) { | ||
18 | struct bar_config *bar = config->bars->items[i]; | ||
19 | list_add(bar_ids, strdup(bar->id)); | ||
20 | } | ||
21 | |||
10 | if (!load_main_config(config->current_config_path, true)) { | 22 | if (!load_main_config(config->current_config_path, true)) { |
11 | return cmd_results_new(CMD_FAILURE, "reload", "Error(s) reloading config."); | 23 | return cmd_results_new(CMD_FAILURE, "reload", "Error(s) reloading config."); |
12 | } | 24 | } |
13 | 25 | ||
14 | load_swaybars(); | 26 | load_swaybars(); |
27 | |||
28 | for (int i = 0; i < config->bars->length; ++i) { | ||
29 | struct bar_config *bar = config->bars->items[i]; | ||
30 | for (int j = 0; j < bar_ids->length; ++j) { | ||
31 | if (strcmp(bar->id, bar_ids->items[j]) == 0) { | ||
32 | ipc_event_barconfig_update(bar); | ||
33 | break; | ||
34 | } | ||
35 | } | ||
36 | } | ||
37 | |||
38 | for (int i = 0; i < bar_ids->length; ++i) { | ||
39 | free(bar_ids->items[i]); | ||
40 | } | ||
41 | list_free(bar_ids); | ||
42 | |||
15 | arrange_windows(&root_container); | 43 | arrange_windows(&root_container); |
16 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); | 44 | return cmd_results_new(CMD_SUCCESS, NULL, NULL); |
17 | } | 45 | } |