From 35c14c21ea2998cbebc3ac31240a75bbc469c24a Mon Sep 17 00:00:00 2001 From: Taekyun Kim Date: Wed, 1 Apr 2015 13:42:16 +0900 Subject: [PATCH] Output: Changed output creation/destruction functions Change-Id: I4e0d18b5f9454bff4b7b4211b3c870ea6b47d2f4 --- src/modules/wayland/pepper-wayland.h | 2 +- src/modules/wayland/wayland-output.c | 24 ++++++++++++++++++------ src/output.c | 8 ++++---- src/pepper.h | 2 +- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/modules/wayland/pepper-wayland.h b/src/modules/wayland/pepper-wayland.h index 5a9e7a1..a56d925 100644 --- a/src/modules/wayland/pepper-wayland.h +++ b/src/modules/wayland/pepper-wayland.h @@ -15,7 +15,7 @@ pepper_wayland_connect(pepper_compositor_t *compositor, const char *socket_name) PEPPER_API void pepper_wayland_destroy(pepper_wayland_t *conn); -PEPPER_API pepper_bool_t +PEPPER_API pepper_output_t * pepper_wayland_output_create(pepper_wayland_t *conn, int32_t w, int32_t h); #ifdef __cplusplus diff --git a/src/modules/wayland/wayland-output.c b/src/modules/wayland/wayland-output.c index dacfdef..915e032 100644 --- a/src/modules/wayland/wayland-output.c +++ b/src/modules/wayland/wayland-output.c @@ -148,14 +148,22 @@ static const pepper_output_interface_t wayland_output_interface = wayland_output_set_mode, }; -PEPPER_API pepper_bool_t +static void +handle_connection_destroy(struct wl_listener *listener, void *data) +{ + wayland_output_t *output = wl_container_of(listener, output, conn_destroy_listener); + wayland_output_destroy(output); +} + +PEPPER_API pepper_output_t * pepper_wayland_output_create(pepper_wayland_t *conn, int32_t w, int32_t h) { - wayland_output_t *output; + pepper_output_t *base; + wayland_output_t *output; output = pepper_calloc(1, sizeof(wayland_output_t)); if (!output) - return PEPPER_FALSE; + return NULL; output->conn = conn; @@ -171,11 +179,15 @@ pepper_wayland_output_create(pepper_wayland_t *conn, int32_t w, int32_t h) wl_shell_surface_add_listener(output->shell_surface, &shell_surface_listener, output); /* Add compositor base class output object for this output. */ - if (!pepper_compositor_add_output(conn->pepper, &wayland_output_interface, output)) + base = pepper_compositor_add_output(conn->pepper, &wayland_output_interface, output); + if (!base) { wayland_output_destroy(output); - return PEPPER_FALSE; + return NULL; } - return PEPPER_TRUE; + output->conn_destroy_listener.notify = handle_connection_destroy; + wl_signal_add(&conn->destroy_signal, &output->conn_destroy_listener); + + return base; } diff --git a/src/output.c b/src/output.c index 7804515..088b451 100644 --- a/src/output.c +++ b/src/output.c @@ -118,7 +118,7 @@ handle_mode_change(struct wl_listener *listener, void *data) output_update_mode(output); } -PEPPER_API pepper_bool_t +PEPPER_API pepper_output_t * pepper_compositor_add_output(pepper_compositor_t *compositor, const pepper_output_interface_t *interface, void *data) { @@ -126,7 +126,7 @@ pepper_compositor_add_output(pepper_compositor_t *compositor, output = pepper_calloc(1, sizeof(pepper_output_t)); if (!output) - return PEPPER_FALSE; + return NULL; wl_list_init(&output->resources); output->compositor = compositor; @@ -138,7 +138,7 @@ pepper_compositor_add_output(pepper_compositor_t *compositor, if (!output->global) { pepper_free(output); - return PEPPER_FALSE; + return NULL; } /* Create backend-side object. */ @@ -168,7 +168,7 @@ pepper_compositor_add_output(pepper_compositor_t *compositor, output->mode_change_listener.notify = handle_mode_change; interface->add_mode_change_listener(data, &output->mode_change_listener); - return PEPPER_TRUE; + return output; } PEPPER_API pepper_compositor_t * diff --git a/src/pepper.h b/src/pepper.h index 7816566..a80cf4e 100644 --- a/src/pepper.h +++ b/src/pepper.h @@ -77,7 +77,7 @@ pepper_compositor_destroy(pepper_compositor_t *compositor); PEPPER_API struct wl_display * pepper_compositor_get_display(pepper_compositor_t *compositor); -PEPPER_API pepper_bool_t +PEPPER_API pepper_output_t * pepper_compositor_add_output(pepper_compositor_t *compositor, const pepper_output_interface_t *interface, void *data); -- 2.7.4