aboutsummaryrefslogtreecommitdiffstats
path: root/src/loop.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/loop.c')
-rw-r--r--src/loop.c43
1 files changed, 22 insertions, 21 deletions
diff --git a/src/loop.c b/src/loop.c
index dc5a749..cb141d5 100644
--- a/src/loop.c
+++ b/src/loop.c
@@ -12,41 +12,43 @@ static void runes_loop_do_after_work(uv_work_t *req, int status);
static void runes_loop_timer_cb(uv_timer_t *handle);
static void runes_loop_free_handle(uv_handle_t *handle);
-void runes_loop_init(RunesTerm *t)
+void runes_loop_init(RunesLoop *loop)
{
- RunesLoop *loop = &t->loop;
-
loop->loop = uv_default_loop();
- runes_window_backend_init_loop(t);
- runes_pty_backend_init_loop(t);
}
-void runes_loop_run(RunesTerm *t)
+void runes_loop_init_term(RunesLoop *loop, RunesTerm *t)
{
- RunesLoop *loop = &t->loop;
+ t->loop = loop;
+ runes_window_backend_init_loop(t, loop);
+ runes_pty_backend_init_loop(t, loop);
+}
+void runes_loop_run(RunesLoop *loop)
+{
uv_run(loop->loop, UV_RUN_DEFAULT);
}
-void runes_loop_start_work(RunesTerm *t, void (*work_cb)(RunesTerm*),
+void runes_loop_start_work(RunesLoop *loop, RunesTerm *t,
+ void (*work_cb)(RunesTerm*),
int (*after_work_cb)(RunesTerm*))
{
void *data;
data = malloc(sizeof(RunesLoopData));
((RunesLoopData *)data)->req.data = data;
+ ((RunesLoopData *)data)->loop = loop;
((RunesLoopData *)data)->t = t;
((RunesLoopData *)data)->work_cb = work_cb;
((RunesLoopData *)data)->after_work_cb = after_work_cb;
- uv_queue_work(
- t->loop.loop, data, runes_loop_do_work, runes_loop_do_after_work);
+ uv_queue_work(loop->loop, data, runes_loop_do_work,
+ runes_loop_do_after_work);
}
-void runes_loop_timer_set(RunesTerm *t, int timeout, int repeat,
- void (*cb)(RunesTerm*))
+void runes_loop_timer_set(RunesLoop *loop, int timeout, int repeat,
+ RunesTerm *t, void (*cb)(RunesTerm*))
{
- RunesLoop *loop = &t->loop;
uv_timer_t *timer_req;
struct runes_loop_timer_data *timer_data;
@@ -59,10 +61,8 @@ void runes_loop_timer_set(RunesTerm *t, int timeout, int repeat,
uv_timer_start(timer_req, runes_loop_timer_cb, timeout, repeat);
}
-void runes_loop_cleanup(RunesTerm *t)
+void runes_loop_cleanup(RunesLoop *loop)
{
- RunesLoop *loop = &t->loop;
-
uv_loop_close(loop->loop);
}
@@ -77,15 +77,16 @@ static void runes_loop_do_work(uv_work_t *req)
static void runes_loop_do_after_work(uv_work_t *req, int status)
{
RunesLoopData *data = req->data;
+ RunesLoop *loop = data->loop;
RunesTerm *t = data->t;
- int loop = 0;
+ int should_loop = 0;
UNUSED(status);
- loop = data->after_work_cb(t);
- if (loop) {
- uv_queue_work(
- t->loop.loop, req, runes_loop_do_work, runes_loop_do_after_work);
+ should_loop = data->after_work_cb(t);
+ if (should_loop) {
+ uv_queue_work(loop->loop, req, runes_loop_do_work,
+ runes_loop_do_after_work);
}
else {
free(req);