diff options
author | Mikkel Oscar Lyderik <mikkeloscar@gmail.com> | 2015-12-18 18:02:39 +0100 |
---|---|---|
committer | Mikkel Oscar Lyderik <mikkeloscar@gmail.com> | 2015-12-18 18:27:54 +0100 |
commit | 90ff36cab8657272b6727af69bab49dba463d6ba (patch) | |
tree | 683793bfcd1cd3a5a53fa27883abde31d71ac09c | |
parent | Reload swaybar/swaybg on config reload. (diff) | |
download | sway-90ff36cab8657272b6727af69bab49dba463d6ba.tar.gz sway-90ff36cab8657272b6727af69bab49dba463d6ba.tar.zst sway-90ff36cab8657272b6727af69bab49dba463d6ba.zip |
Terminate children when freeing output container
-rw-r--r-- | include/config.h | 2 | ||||
-rw-r--r-- | sway/config.c | 20 | ||||
-rw-r--r-- | sway/container.c | 4 |
3 files changed, 18 insertions, 8 deletions
diff --git a/include/config.h b/include/config.h index 1f25a0cd..b89ad553 100644 --- a/include/config.h +++ b/include/config.h | |||
@@ -185,6 +185,8 @@ int sway_mouse_binding_cmp_buttons(const void *a, const void *b); | |||
185 | void free_sway_mouse_binding(struct sway_mouse_binding *smb); | 185 | void free_sway_mouse_binding(struct sway_mouse_binding *smb); |
186 | 186 | ||
187 | void load_swaybars(swayc_t *output, int output_idx); | 187 | void load_swaybars(swayc_t *output, int output_idx); |
188 | void terminate_swaybars(list_t *pids); | ||
189 | void terminate_swaybg(pid_t pid); | ||
188 | 190 | ||
189 | /** | 191 | /** |
190 | * Allocate and initialize default bar configuration. | 192 | * Allocate and initialize default bar configuration. |
diff --git a/sway/config.c b/sway/config.c index 23fe5388..928d35a8 100644 --- a/sway/config.c +++ b/sway/config.c | |||
@@ -389,7 +389,7 @@ static void invoke_swaybar(swayc_t *output, struct bar_config *bar, int output_i | |||
389 | list_add(output->bar_pids, pid); | 389 | list_add(output->bar_pids, pid); |
390 | } | 390 | } |
391 | 391 | ||
392 | static void terminate_swaybars(list_t *pids) { | 392 | void terminate_swaybars(list_t *pids) { |
393 | int i, ret; | 393 | int i, ret; |
394 | pid_t *pid; | 394 | pid_t *pid; |
395 | for (i = 0; i < pids->length; ++i) { | 395 | for (i = 0; i < pids->length; ++i) { |
@@ -411,6 +411,16 @@ static void terminate_swaybars(list_t *pids) { | |||
411 | } | 411 | } |
412 | } | 412 | } |
413 | 413 | ||
414 | void terminate_swaybg(pid_t pid) { | ||
415 | int ret = kill(pid, SIGTERM); | ||
416 | if (ret != 0) { | ||
417 | sway_log(L_ERROR, "Unable to terminate swaybg [pid: %d]", pid); | ||
418 | } else { | ||
419 | int status; | ||
420 | waitpid(pid, &status, 0); | ||
421 | } | ||
422 | } | ||
423 | |||
414 | void load_swaybars(swayc_t *output, int output_idx) { | 424 | void load_swaybars(swayc_t *output, int output_idx) { |
415 | // Check for bars | 425 | // Check for bars |
416 | list_t *bars = create_list(); | 426 | list_t *bars = create_list(); |
@@ -496,13 +506,7 @@ void apply_output_config(struct output_config *oc, swayc_t *output) { | |||
496 | if (oc && oc->background) { | 506 | if (oc && oc->background) { |
497 | 507 | ||
498 | if (output->bg_pid != 0) { | 508 | if (output->bg_pid != 0) { |
499 | int ret = kill(output->bg_pid, SIGTERM); | 509 | terminate_swaybg(output->bg_pid); |
500 | if (ret != 0) { | ||
501 | sway_log(L_ERROR, "Unable to terminate swaybg [pid: %d]", output->bg_pid); | ||
502 | } else { | ||
503 | int status; | ||
504 | waitpid(output->bg_pid, &status, 0); | ||
505 | } | ||
506 | } | 510 | } |
507 | 511 | ||
508 | sway_log(L_DEBUG, "Setting background for output %d to %s", output_i, oc->background); | 512 | sway_log(L_DEBUG, "Setting background for output %d to %s", output_i, oc->background); |
diff --git a/sway/container.c b/sway/container.c index 395eb04d..b85d2114 100644 --- a/sway/container.c +++ b/sway/container.c | |||
@@ -61,8 +61,12 @@ static void free_swayc(swayc_t *cont) { | |||
61 | free(cont->app_id); | 61 | free(cont->app_id); |
62 | } | 62 | } |
63 | if (cont->bar_pids) { | 63 | if (cont->bar_pids) { |
64 | terminate_swaybars(cont->bar_pids); | ||
64 | free_flat_list(cont->bar_pids); | 65 | free_flat_list(cont->bar_pids); |
65 | } | 66 | } |
67 | if (cont->bg_pid != 0) { | ||
68 | terminate_swaybg(cont->bg_pid); | ||
69 | } | ||
66 | free(cont); | 70 | free(cont); |
67 | } | 71 | } |
68 | 72 | ||