diff options
Diffstat (limited to 'src/loop.c')
-rw-r--r-- | src/loop.c | 43 |
1 files changed, 22 insertions, 21 deletions
@@ -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); |