aboutsummaryrefslogtreecommitdiff
path: root/swaybar
diff options
context:
space:
mode:
Diffstat (limited to 'swaybar')
-rw-r--r--swaybar/bar.c2
-rw-r--r--swaybar/status_line.c11
2 files changed, 9 insertions, 4 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c
index 15eab782..18b87e6d 100644
--- a/swaybar/bar.c
+++ b/swaybar/bar.c
@@ -172,7 +172,7 @@ bool determine_bar_visibility(struct swaybar *bar, bool moving_layer) {
if (bar->status) {
sway_log(SWAY_DEBUG, "Sending %s signal to status command",
visible ? "cont" : "stop");
- kill(bar->status->pid, visible ?
+ kill(-bar->status->pid, visible ?
bar->status->cont_signal : bar->status->stop_signal);
}
}
diff --git a/swaybar/status_line.c b/swaybar/status_line.c
index ecd91032..a97f3525 100644
--- a/swaybar/status_line.c
+++ b/swaybar/status_line.c
@@ -157,7 +157,12 @@ struct status_line *status_line_init(char *cmd) {
assert(!getenv("WAYLAND_SOCKET") && "display must be initialized before "
" starting `status-command`; WAYLAND_SOCKET should not be set");
status->pid = fork();
- if (status->pid == 0) {
+ if (status->pid < 0) {
+ sway_log_errno(SWAY_ERROR, "fork failed");
+ exit(1);
+ } else if (status->pid == 0) {
+ setpgid(0, 0);
+
dup2(pipe_read_fd[1], STDOUT_FILENO);
close(pipe_read_fd[0]);
close(pipe_read_fd[1]);
@@ -185,8 +190,8 @@ struct status_line *status_line_init(char *cmd) {
void status_line_free(struct status_line *status) {
status_line_close_fds(status);
- kill(status->pid, status->cont_signal);
- kill(status->pid, SIGTERM);
+ kill(-status->pid, status->cont_signal);
+ kill(-status->pid, SIGTERM);
waitpid(status->pid, NULL, 0);
if (status->protocol == PROTOCOL_I3BAR) {
struct i3bar_block *block, *tmp;