diff options
Diffstat (limited to 'taro')
| -rw-r--r-- | taro/daemon.c | 43 | ||||
| -rw-r--r-- | taro/tests/notcurses_ffmpeg.c | 4 | ||||
| -rw-r--r-- | taro/ui.c | 10 |
3 files changed, 36 insertions, 21 deletions
diff --git a/taro/daemon.c b/taro/daemon.c index d325271..3eec7e1 100644 --- a/taro/daemon.c +++ b/taro/daemon.c @@ -121,15 +121,14 @@ static pid_t exec_or_exit(char *args[]) static void maybe_kill_wallpaper(struct monitor *monitor) { - if (monitor->pid == -1) return; - - if (monitor->paused) { - signal_monitor(monitor, SIGCONT); - monitor->paused = false; + if (monitor->pid != -1) { + if (monitor->paused) { + signal_monitor(monitor, SIGCONT); + monitor->paused = false; + } + signal_monitor(monitor, SIGTERM); + monitor->pid = -1; } - - signal_monitor(monitor, SIGTERM); - monitor->pid = -1; } static bool run_wallpaper(struct daemon *dmon, struct monitor *monitor) @@ -355,8 +354,13 @@ static void ipc_poll_callback(void *userdata, s32 revents) al_log_info("tarod", "connected to sway ipc socket"); dmon->ipc_connected = true; } - dmon->out.index += aki_socket_write(&dmon->ipc_socket, dmon->out.buf + dmon->out.index, - dmon->out.size - dmon->out.index); + ssize_t ret = aki_socket_write(&dmon->ipc_socket, + dmon->out.buf + dmon->out.index, dmon->out.size - dmon->out.index); + if (ret <= 0) { + aki_signal_send(&dmon->quit_signal); + return; + } + dmon->out.index += ret; if (dmon->out.index == dmon->out.size) { aki_poll_stop(&dmon->ipc_poll); aki_poll_set(&dmon->ipc_poll, aki_socket_get_fd(&dmon->ipc_socket), AKI_POLL_READ); @@ -366,16 +370,26 @@ static void ipc_poll_callback(void *userdata, s32 revents) if (revents & AKI_POLL_READ) { if (dmon->ipc.index < SWAY_IPC_HEADER_LENGTH) { - dmon->ipc.index += aki_socket_read(&dmon->ipc_socket, dmon->ipc.buf + dmon->ipc.index, - SWAY_IPC_HEADER_LENGTH - dmon->ipc.index); + ssize_t ret = aki_socket_read(&dmon->ipc_socket, + dmon->ipc.buf + dmon->ipc.index, SWAY_IPC_HEADER_LENGTH - dmon->ipc.index); + if (ret <= 0) { + aki_signal_send(&dmon->quit_signal); + return; + } + dmon->ipc.index += ret; } if (dmon->ipc.index == SWAY_IPC_HEADER_LENGTH && !dmon->ipc.size) { dmon->ipc.size = *((s32 *)&dmon->ipc.buf[6]) + SWAY_IPC_HEADER_LENGTH; ensure_ipc_buf_size(dmon, dmon->ipc.size); } if (dmon->ipc.size) { - dmon->ipc.index += aki_socket_read(&dmon->ipc_socket, dmon->ipc.buf + dmon->ipc.index, - dmon->ipc.size - dmon->ipc.index); + ssize_t ret = aki_socket_read(&dmon->ipc_socket, + dmon->ipc.buf + dmon->ipc.index, dmon->ipc.size - dmon->ipc.index); + if (ret <= 0) { + aki_signal_send(&dmon->quit_signal); + return; + } + dmon->ipc.index += ret; if (dmon->ipc.index == dmon->ipc.size) { ipc_handle_response(dmon, dmon->ipc.buf + SWAY_IPC_HEADER_LENGTH, dmon->ipc.size - SWAY_IPC_HEADER_LENGTH); @@ -399,6 +413,7 @@ static void quit_signal_callback(void *userdata) struct monitor *monitor; al_array_foreach(dmon->monitors, i, monitor) { aki_fs_event_stop(&monitor->selection_event); + maybe_kill_wallpaper(monitor); } aki_fs_event_stop(&dmon->conf_event); if (!dmon->ipc_errored) { diff --git a/taro/tests/notcurses_ffmpeg.c b/taro/tests/notcurses_ffmpeg.c index 1a9f44d..dd798c9 100644 --- a/taro/tests/notcurses_ffmpeg.c +++ b/taro/tests/notcurses_ffmpeg.c @@ -1,7 +1,7 @@ -#include <notcurses/notcurses.h> -#include <notcurses/nckeys.h> #include <al/types.h> #include <aki/common.h> +#include <notcurses/notcurses.h> +#include <notcurses/nckeys.h> s32 main(void) { @@ -1,11 +1,11 @@ -#include <notcurses/notcurses.h> -#include <notcurses/nckeys.h> #include <al/log.h> #include <al/lib.h> #include <al/random.h> #include <aki/common.h> #include <aki/event_loop.h> #include <aki/timer.h> +#include <notcurses/notcurses.h> +#include <notcurses/nckeys.h> #include "db.h" #include "file_ext.h" @@ -716,7 +716,7 @@ void draw_monitors(struct ui *u, struct monitors *m) } else if (i == (u32)m->set_monitor) { ncplane_set_bg_palindex(u->mp, 7); ncplane_set_fg_palindex(u->mp, 0); - m->flash -= AL_MAX(TIMER_UPDATE_BASE * (u->delay / 1000000.f), 0.001f); + m->flash -= MAX(TIMER_UPDATE_BASE * (u->delay / 1000000.f), 0.001f); } else { ncplane_set_fg_default(u->mp); ncplane_set_bg_default(u->mp); @@ -829,7 +829,7 @@ void draw_grid_tiles(struct ui *u, struct grid *g, bool update_text) set_tile_highlight(t, 8, 0); } else if (index == g->set_index && g->set_index >= 0) { set_tile_highlight(t, 7, 0); - g->flash -= AL_MAX(TIMER_UPDATE_BASE * (u->delay / 1000000.f), 0.001f); + g->flash -= MAX(TIMER_UPDATE_BASE * (u->delay / 1000000.f), 0.001f); } else { ncplane_set_fg_default(t->p); ncplane_set_bg_default(t->p); @@ -1154,7 +1154,7 @@ static void timer_callback(void *userdata, struct aki_timer *timer) draw_grid_tiles(u, &u->g, true); draw_info(u, &u->n, true); } else { - u->text_update -= AL_MAX(TIMER_UPDATE_BASE * (u->delay / 1000000.f), 0.001f); + u->text_update -= MAX(TIMER_UPDATE_BASE * (u->delay / 1000000.f), 0.001f); draw_grid_tiles(u, &u->g, false); draw_info(u, &u->n, false); } |