From 05a1747f000343d673898f284ca17d7f03a250a3 Mon Sep 17 00:00:00 2001 From: David Herrmann Date: Wed, 18 Jan 2012 18:09:08 +0100 Subject: [PATCH] console: take reference of compositor To switch to the new drawing subsystem we need a reference to a valid compositor object so we can retrieve the GL context. This also applies to the terminal object. Signed-off-by: David Herrmann --- src/console.c | 7 ++++++- src/console.h | 3 ++- src/terminal.c | 10 ++++++++-- src/terminal.h | 2 +- tests/test_console.c | 2 +- tests/test_terminal.c | 2 +- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/console.c b/src/console.c index a8f9a50..ce5f4f4 100644 --- a/src/console.c +++ b/src/console.c @@ -49,11 +49,13 @@ #include "console.h" #include "font.h" #include "log.h" +#include "output.h" #include "unicode.h" struct kmscon_console { size_t ref; struct kmscon_font_factory *ff; + struct kmscon_compositor *comp; /* GL texture and font */ GLuint tex; @@ -150,7 +152,7 @@ err_free: } int kmscon_console_new(struct kmscon_console **out, - struct kmscon_font_factory *ff) + struct kmscon_font_factory *ff, struct kmscon_compositor *comp) { struct kmscon_console *con; int ret; @@ -165,6 +167,7 @@ int kmscon_console_new(struct kmscon_console **out, memset(con, 0, sizeof(*con)); con->ref = 1; con->ff = ff; + con->comp = comp; log_debug("console: new console\n"); ret = kmscon_buffer_new(&con->cells, 0, 0); @@ -175,6 +178,7 @@ int kmscon_console_new(struct kmscon_console **out, con->cells_y = kmscon_buffer_get_height(con->cells); kmscon_font_factory_ref(con->ff); + kmscon_compositor_ref(con->comp); *out = con; return 0; @@ -207,6 +211,7 @@ void kmscon_console_unref(struct kmscon_console *con) kmscon_console_free_res(con); kmscon_font_unref(con->font); kmscon_buffer_unref(con->cells); + kmscon_compositor_unref(con->comp); kmscon_font_factory_unref(con->ff); free(con); log_debug("console: destroying console\n"); diff --git a/src/console.h b/src/console.h index b91c625..0b5373e 100644 --- a/src/console.h +++ b/src/console.h @@ -38,6 +38,7 @@ #include #include #include "font.h" +#include "output.h" #include "unicode.h" struct kmscon_buffer; @@ -66,7 +67,7 @@ void kmscon_buffer_rotate(struct kmscon_buffer *buf); /* console objects */ int kmscon_console_new(struct kmscon_console **out, - struct kmscon_font_factory *ff); + struct kmscon_font_factory *ff, struct kmscon_compositor *comp); void kmscon_console_ref(struct kmscon_console *con); void kmscon_console_unref(struct kmscon_console *con); diff --git a/src/terminal.c b/src/terminal.c index ec61bfd..d12c65a 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -40,6 +40,7 @@ #include "eloop.h" #include "font.h" #include "log.h" +#include "output.h" #include "terminal.h" #include "unicode.h" #include "vte.h" @@ -52,6 +53,7 @@ struct term_out { struct kmscon_terminal { unsigned long ref; struct kmscon_eloop *eloop; + struct kmscon_compositor *comp; struct term_out *outputs; unsigned int max_height; @@ -118,7 +120,7 @@ static void print_help(struct kmscon_terminal *term) } int kmscon_terminal_new(struct kmscon_terminal **out, - struct kmscon_font_factory *ff) + struct kmscon_font_factory *ff, struct kmscon_compositor *comp) { struct kmscon_terminal *term; int ret; @@ -134,12 +136,13 @@ int kmscon_terminal_new(struct kmscon_terminal **out, memset(term, 0, sizeof(*term)); term->ref = 1; + term->comp = comp; ret = kmscon_idle_new(&term->redraw); if (ret) goto err_free; - ret = kmscon_console_new(&term->console, ff); + ret = kmscon_console_new(&term->console, ff, comp); if (ret) goto err_idle; @@ -149,7 +152,9 @@ int kmscon_terminal_new(struct kmscon_terminal **out, kmscon_vte_bind(term->vte, term->console); print_help(term); + kmscon_compositor_ref(term->comp); *out = term; + return 0; err_con: @@ -181,6 +186,7 @@ void kmscon_terminal_unref(struct kmscon_terminal *term) kmscon_vte_unref(term->vte); kmscon_console_unref(term->console); kmscon_terminal_disconnect_eloop(term); + kmscon_compositor_unref(term->comp); free(term); log_debug("terminal: destroying terminal object\n"); } diff --git a/src/terminal.h b/src/terminal.h index 0168b5f..6b2f3fe 100644 --- a/src/terminal.h +++ b/src/terminal.h @@ -42,7 +42,7 @@ struct kmscon_terminal; int kmscon_terminal_new(struct kmscon_terminal **out, - struct kmscon_font_factory *ff); + struct kmscon_font_factory *ff, struct kmscon_compositor *comp); void kmscon_terminal_ref(struct kmscon_terminal *term); void kmscon_terminal_unref(struct kmscon_terminal *term); diff --git a/tests/test_console.c b/tests/test_console.c index 9e72499..2221214 100644 --- a/tests/test_console.c +++ b/tests/test_console.c @@ -297,7 +297,7 @@ static int setup_eloop(struct console *con) if (ret) goto err_loop; - ret = kmscon_console_new(&con->con, con->ff); + ret = kmscon_console_new(&con->con, con->ff, con->comp); if (ret) goto err_loop; diff --git a/tests/test_terminal.c b/tests/test_terminal.c index 48d30ba..969f1ec 100644 --- a/tests/test_terminal.c +++ b/tests/test_terminal.c @@ -182,7 +182,7 @@ static int setup_app(struct app *app) if (ret) goto err_loop; - ret = kmscon_terminal_new(&app->term, app->ff); + ret = kmscon_terminal_new(&app->term, app->ff, app->comp); if (ret) goto err_loop;