diff options
Diffstat (limited to 'src/term.c')
-rw-r--r-- | src/term.c | 70 |
1 files changed, 30 insertions, 40 deletions
@@ -9,26 +9,18 @@ #include "pty-unix.h" #include "window-xlib.h" -static void runes_term_init_loop(RunesTerm *t, RunesLoop *loop); - -void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[]) +RunesTerm *runes_term_new(int argc, char *argv[], RunesWindowBackendGlobal *wg) { + RunesTerm *t; int width, height; - t->config = calloc(1, sizeof(RunesConfig)); - runes_config_init(t->config, argc, argv); - - t->display = calloc(1, sizeof(RunesDisplay)); - runes_display_init(t->display, t->config->font_name); - - t->w = calloc(1, sizeof(RunesWindowBackend)); - runes_window_backend_init(t->w); - - t->pty = calloc(1, sizeof(RunesPtyBackend)); - runes_pty_backend_init(t->pty); + t = calloc(1, sizeof(RunesTerm)); - t->scr = calloc(1, sizeof(VT100Screen)); - vt100_screen_init(t->scr); + t->config = runes_config_new(argc, argv); + t->display = runes_display_new(t->config->font_name); + t->w = runes_window_backend_new(wg); + t->pty = runes_pty_backend_new(); + t->scr = vt100_screen_new(t->config->default_cols, t->config->default_rows); vt100_screen_set_scrollback_length(t->scr, t->config->scrollback_length); runes_window_backend_create_window(t, argc, argv); @@ -38,22 +30,14 @@ void runes_term_init(RunesTerm *t, RunesLoop *loop, int argc, char *argv[]) runes_window_backend_get_size(t, &width, &height); runes_term_set_window_size(t, width, height); - t->loop = loop; - runes_term_init_loop(t, loop); + return t; } -void runes_term_refcnt_inc(RunesTerm *t) +void runes_term_register_with_loop(RunesTerm *t, RunesLoop *loop) { - t->refcnt++; -} - -void runes_term_refcnt_dec(RunesTerm *t) -{ - t->refcnt--; - if (t->refcnt <= 0) { - runes_term_cleanup(t); - free(t); - } + t->loop = loop; + runes_window_backend_init_loop(t, loop); + runes_pty_backend_init_loop(t, loop); } void runes_term_set_window_size(RunesTerm *t, int xpixel, int ypixel) @@ -64,20 +48,26 @@ void runes_term_set_window_size(RunesTerm *t, int xpixel, int ypixel) vt100_screen_set_window_size(t->scr, row, col); } -void runes_term_cleanup(RunesTerm *t) +void runes_term_refcnt_inc(RunesTerm *t) { - vt100_screen_cleanup(t->scr); - free(t->scr); - - runes_display_cleanup(t->display); - free(t->display); + t->refcnt++; +} - runes_config_cleanup(t->config); - free(t->config); +void runes_term_refcnt_dec(RunesTerm *t) +{ + t->refcnt--; + if (t->refcnt <= 0) { + runes_term_delete(t); + } } -static void runes_term_init_loop(RunesTerm *t, RunesLoop *loop) +void runes_term_delete(RunesTerm *t) { - runes_window_backend_init_loop(t, loop); - runes_pty_backend_init_loop(t, loop); + vt100_screen_delete(t->scr); + runes_pty_backend_delete(t->pty); + runes_window_backend_delete(t->w); + runes_display_delete(t->display); + runes_config_delete(t->config); + + free(t); } |