summaryrefslogtreecommitdiff
path: root/taro
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-11-26 16:37:54 -0500
committerAndrew Opalach <andrew@akon.city> 2024-11-26 16:40:13 -0500
commit2178e5f94d26b6bdefa44e56d47a9257a2e73e74 (patch)
treef36dc1c5cee2cead9b6e94922d66f30ac8a410fe /taro
parentf9eea19c5a13de915e9df49cc0260aa98b82b9f3 (diff)
downloadmauri-2178e5f94d26b6bdefa44e56d47a9257a2e73e74.tar.gz
mauri-2178e5f94d26b6bdefa44e56d47a9257a2e73e74.tar.bz2
mauri-2178e5f94d26b6bdefa44e56d47a9257a2e73e74.zip
Quit on sway exit, pin deps, refactor flake
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'taro')
-rw-r--r--taro/daemon.c43
-rw-r--r--taro/tests/notcurses_ffmpeg.c4
-rw-r--r--taro/ui.c10
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)
{
diff --git a/taro/ui.c b/taro/ui.c
index 8bf4e67..a93d2c1 100644
--- a/taro/ui.c
+++ b/taro/ui.c
@@ -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);
}