aboutsummaryrefslogtreecommitdiff
path: root/cross/src/runtime_requests.c
diff options
context:
space:
mode:
authorJosh Rahm <joshuarahm@gmail.com>2026-01-07 00:26:32 -0700
committerJosh Rahm <joshuarahm@gmail.com>2026-01-07 00:26:32 -0700
commit4847aa0b4a6f945c24e1523e729652271bbc9680 (patch)
tree9ffac8b1934153cbde6f6814277f80c337d937b1 /cross/src/runtime_requests.c
parent37e5037b68fb35276f0c426779f61aa278d5b21b (diff)
downloadmontis-4847aa0b4a6f945c24e1523e729652271bbc9680.tar.gz
montis-4847aa0b4a6f945c24e1523e729652271bbc9680.tar.bz2
montis-4847aa0b4a6f945c24e1523e729652271bbc9680.zip
[rebrand] Arken -> Ark, Plugin -> Soul, Erebor -> Cross
Diffstat (limited to 'cross/src/runtime_requests.c')
-rw-r--r--cross/src/runtime_requests.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/cross/src/runtime_requests.c b/cross/src/runtime_requests.c
new file mode 100644
index 0000000..adb2b2f
--- /dev/null
+++ b/cross/src/runtime_requests.c
@@ -0,0 +1,69 @@
+#include "util.h"
+#include "wl.h"
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+static int soul_hot_reload_same_state_action_(soul_t *soul, void *ignore)
+{
+ (void)ignore;
+ return soul_hot_reload_same_state(soul);
+}
+
+void montis_do_request_hot_reload(void *plugv)
+{
+ soul_t *soul = plugv;
+
+ size_t n = soul->n_requested_actions++;
+ if (n < MAX_QUEUED_ACTIONS) {
+ soul->requested_actions[n].action = soul_hot_reload_same_state_action_;
+ soul->requested_actions[n].arg_dtor = NULL;
+ }
+}
+
+static int soul_do_log(soul_t *soul, void *chrs)
+{
+ (void)soul;
+ char *str = chrs;
+ puts(str);
+ return 0;
+}
+
+void montis_do_request_log(void *plugv, const char *str)
+{
+ soul_t *soul = plugv;
+
+ size_t n = soul->n_requested_actions++;
+ if (n < MAX_QUEUED_ACTIONS) {
+ soul->requested_actions[n].action = soul_do_log;
+ soul->requested_actions[n].str_arg = strdup(str);
+ soul->requested_actions[n].arg_dtor = free;
+ }
+}
+
+static int arksoul_do_exit(void *plugv, int ec)
+{
+ (void)plugv;
+ exit(ec);
+ return 0;
+}
+
+void montis_do_request_exit(void *plugv, int ec)
+{
+ soul_t *soul = plugv;
+
+ size_t n = soul->n_requested_actions++;
+ if (n < MAX_QUEUED_ACTIONS) {
+ soul->requested_actions[n].action =
+ (int (*)(soul_t *, void *))arksoul_do_exit;
+ soul->requested_actions[n].int_arg = ec;
+ soul->requested_actions[n].arg_dtor = NULL;
+ }
+}
+
+void *arksoul_get_seat(void *ctx)
+{
+ struct montis_server *server = wl_container_of(ctx, server, soul);
+ return server->seat;
+}