From: Taekyun Kim Date: Wed, 5 Aug 2015 08:41:27 +0000 (+0900) Subject: pepper: Replace object destroy listener with new event listener X-Git-Tag: accepted/tizen/mobile/20151221.050925~34^2~246 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=76dc5928ac018b0880f17490eb8316fb8ab734af;p=platform%2Fcore%2Fuifw%2Fpepper.git pepper: Replace object destroy listener with new event listener Change-Id: Ib384300eee4c9be4876a2cda014fc7322129dfe6 --- diff --git a/src/lib/desktop-shell/desktop-shell-internal.h b/src/lib/desktop-shell/desktop-shell-internal.h index 52ceb0b..4d1e1f3 100644 --- a/src/lib/desktop-shell/desktop-shell-internal.h +++ b/src/lib/desktop-shell/desktop-shell-internal.h @@ -22,9 +22,9 @@ struct desktop_shell struct wl_list shell_surface_list; /* TODO: */ - struct wl_listener seat_create_listener; - struct wl_listener output_create_listener; - struct wl_listener output_change_listener; + pepper_event_listener_t seat_create_listener; + pepper_event_listener_t output_create_listener; + pepper_event_listener_t output_change_listener; }; struct shell_client @@ -124,8 +124,8 @@ struct shell_surface pepper_bool_t ack_configure; /* Listeners */ - struct wl_listener surface_destroy_listener; - struct wl_listener surface_commit_listener; + pepper_event_listener_t surface_destroy_listener; + pepper_event_listener_t surface_commit_listener; struct wl_list link; /* link */ }; diff --git a/src/lib/desktop-shell/shell-surface.c b/src/lib/desktop-shell/shell-surface.c index d0f4fbf..bb81846 100644 --- a/src/lib/desktop-shell/shell-surface.c +++ b/src/lib/desktop-shell/shell-surface.c @@ -14,37 +14,37 @@ remove_ping_timer(shell_client_t *shell_client) static void shsurf_stop_listen_commit_event(shell_surface_t *shsurf) { - wl_list_remove(&shsurf->surface_commit_listener.link); - wl_list_init(&shsurf->surface_commit_listener.link); + pepper_event_listener_remove(&shsurf->surface_commit_listener); } -static void -handle_surface_commit(struct wl_listener *listener, void *data) +static pepper_bool_t +handle_surface_commit(pepper_event_listener_t *listener, + pepper_object_t *surface, uint32_t id, void *info) { - shell_surface_t *shsurf = - pepper_container_of(listener, shell_surface_t, surface_commit_listener); + shell_surface_t *shsurf = listener->data; if (!shsurf->mapped && shsurf->ack_configure && shsurf->shell_surface_map) shsurf->shell_surface_map(shsurf); + + return PEPPER_TRUE; } static void shsurf_start_listen_commit_event(shell_surface_t *shsurf) { - shsurf->surface_commit_listener.notify = handle_surface_commit; - wl_list_init(&shsurf->surface_commit_listener.link); - /* TODO: Need new API: pepper_surface_add_commit_listener() */ + pepper_object_add_event_listener((pepper_object_t *)shsurf->surface, + &shsurf->surface_commit_listener, + PEPPER_EVENT_SURFACE_COMMIT, 0); } -static void -handle_surface_destroy(struct wl_listener *listener, void *data) +static pepper_bool_t +handle_surface_destroy(pepper_event_listener_t *listener, + pepper_object_t *surface, uint32_t id, void *info) { shell_surface_t *child, *tmp; - shell_surface_t *shsurf = - pepper_container_of(listener, shell_surface_t, surface_destroy_listener); - - wl_list_remove(&shsurf->surface_destroy_listener.link); + shell_surface_t *shsurf = listener->data; + pepper_event_listener_remove(&shsurf->surface_destroy_listener); shsurf_stop_listen_commit_event(shsurf); if (shsurf->resource) @@ -70,6 +70,7 @@ handle_surface_destroy(struct wl_listener *listener, void *data) pepper_view_destroy(shsurf->fullscreen.background_view); free(shsurf); + return PEPPER_TRUE; } static void @@ -195,10 +196,16 @@ shell_surface_create(shell_client_t *shell_client, pepper_surface_t *surface, wl_resource_set_implementation(shsurf->resource, implementation, shsurf, handle_resource_destroy); - shsurf->surface_destroy_listener.notify = handle_surface_destroy; - pepper_object_add_destroy_listener((pepper_object_t *)surface, &shsurf->surface_destroy_listener); + shsurf->surface_destroy_listener.callback = handle_surface_destroy; + shsurf->surface_destroy_listener.data = shsurf; + pepper_object_add_event_listener((pepper_object_t *)surface, + &shsurf->surface_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); shell_surface_set_type(shsurf, SHELL_SURFACE_TYPE_NONE); + + shsurf->surface_commit_listener.callback = handle_surface_commit; + shsurf->surface_commit_listener.data = shsurf; shsurf_start_listen_commit_event(shsurf); /* Set shell_surface_t to pepper_surface_t */ diff --git a/src/lib/pepper/object.c b/src/lib/pepper/object.c index c1221c9..33767a8 100644 --- a/src/lib/pepper/object.c +++ b/src/lib/pepper/object.c @@ -32,7 +32,6 @@ pepper_object_alloc(pepper_object_type_t type, size_t size) return NULL; object->type = type; - wl_signal_init(&object->destroy_signal); object->user_data_map = pepper_map_create(5, user_data_hash, user_data_key_length, user_data_key_compare); @@ -48,7 +47,7 @@ pepper_object_alloc(pepper_object_type_t type, size_t size) void pepper_object_fini(pepper_object_t *object) { - wl_signal_emit(&object->destroy_signal, (void *)object); + pepper_object_emit_event(object, PEPPER_EVENT_OBJECT_DESTROY, NULL); pepper_map_destroy(object->user_data_map); } @@ -71,12 +70,6 @@ pepper_object_get_user_data(pepper_object_t *object, const void *key) return pepper_map_get(object->user_data_map, key); } -PEPPER_API void -pepper_object_add_destroy_listener(pepper_object_t *object, struct wl_listener *listener) -{ - wl_signal_add(&object->destroy_signal, listener); -} - static void insert_listener(pepper_object_t *object, pepper_event_listener_t *listener) { @@ -104,8 +97,9 @@ pepper_event_listener_init(pepper_event_listener_t *listener) } PEPPER_API void -pepper_event_listener_insert(pepper_event_listener_t *listener, - pepper_object_t *object, uint32_t id, int priority) +pepper_object_add_event_listener(pepper_object_t *object, + pepper_event_listener_t *listener, + uint32_t id, int priority) { listener->object = object; listener->id = id; diff --git a/src/lib/pepper/pepper-internal.h b/src/lib/pepper/pepper-internal.h index 54170a4..f8c2a9f 100644 --- a/src/lib/pepper/pepper-internal.h +++ b/src/lib/pepper/pepper-internal.h @@ -20,7 +20,6 @@ typedef struct pepper_data_offer pepper_data_offer_t; struct pepper_object { pepper_object_type_t type; - struct wl_signal destroy_signal; pepper_map_t *user_data_map; pepper_list_t event_listener_list; }; @@ -107,20 +106,20 @@ pepper_buffer_from_resource(struct wl_resource *resource); struct pepper_surface_state { - pepper_buffer_t *buffer; - int32_t x; - int32_t y; - pepper_bool_t newly_attached; + pepper_buffer_t *buffer; + int32_t x; + int32_t y; + pepper_bool_t newly_attached; - int32_t transform; - int32_t scale; + int32_t transform; + int32_t scale; - pixman_region32_t damage_region; - pixman_region32_t opaque_region; - pixman_region32_t input_region; + pixman_region32_t damage_region; + pixman_region32_t opaque_region; + pixman_region32_t input_region; - struct wl_list frame_callbacks; - struct wl_listener buffer_destroy_listener; + struct wl_list frame_callbacks; + pepper_event_listener_t buffer_destroy_listener; }; struct pepper_surface @@ -310,7 +309,7 @@ struct pepper_plane_entry pepper_render_item_t base; pepper_plane_t *plane; - struct wl_listener plane_destroy_listener; + pepper_event_listener_t plane_destroy_listener; pepper_bool_t need_damage; pepper_list_t link; @@ -353,7 +352,7 @@ struct pepper_view /* Content. */ pepper_surface_t *surface; pepper_list_t surface_link; - struct wl_listener surface_destroy_listener; + pepper_event_listener_t surface_destroy_listener; /* Output info. */ uint32_t output_overlap; diff --git a/src/lib/pepper/pepper.h b/src/lib/pepper/pepper.h index 5175c7b..d24509d 100644 --- a/src/lib/pepper/pepper.h +++ b/src/lib/pepper/pepper.h @@ -201,8 +201,9 @@ PEPPER_API void pepper_event_listener_init(pepper_event_listener_t *listener); PEPPER_API void -pepper_event_listener_insert(pepper_event_listener_t *listener, - pepper_object_t *object, uint32_t id, int priority); +pepper_object_add_event_listener(pepper_object_t *object, + pepper_event_listener_t *listener, + uint32_t id, int priority); PEPPER_API void pepper_event_listener_remove(pepper_event_listener_t *listener); diff --git a/src/lib/pepper/surface.c b/src/lib/pepper/surface.c index 9b521c4..6c133ac 100644 --- a/src/lib/pepper/surface.c +++ b/src/lib/pepper/surface.c @@ -1,12 +1,12 @@ #include "pepper-internal.h" -static void -buffer_destroy_handler(struct wl_listener *listener, void *data) +static pepper_bool_t +buffer_destroy_handler(pepper_event_listener_t *listener, + pepper_object_t *object, uint32_t id, void *info) { - pepper_surface_state_t *state = - pepper_container_of(listener, pepper_surface_state_t, buffer_destroy_listener); - + pepper_surface_state_t *state = listener->data; state->buffer = NULL; + return PEPPER_TRUE; } static void @@ -23,7 +23,8 @@ pepper_surface_state_init(pepper_surface_state_t *state) pixman_region32_init(&state->input_region); wl_list_init(&state->frame_callbacks); - state->buffer_destroy_listener.notify = buffer_destroy_handler; + state->buffer_destroy_listener.callback = buffer_destroy_handler; + state->buffer_destroy_listener.data = state; } static void @@ -76,7 +77,7 @@ surface_attach(struct wl_client *client, return; if (surface->pending.buffer) - wl_list_remove(&surface->pending.buffer_destroy_listener.link); + pepper_event_listener_remove(&surface->pending.buffer_destroy_listener); surface->pending.buffer = buffer; surface->pending.x = x; @@ -84,7 +85,10 @@ surface_attach(struct wl_client *client, surface->pending.newly_attached = PEPPER_TRUE; if (buffer) - pepper_object_add_destroy_listener(&buffer->base, &surface->pending.buffer_destroy_listener); + { + pepper_object_add_event_listener(&buffer->base, &surface->pending.buffer_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); + } } static void @@ -355,7 +359,7 @@ pepper_surface_commit(pepper_surface_t *surface) { if (surface->pending.buffer) { - wl_list_remove(&surface->pending.buffer_destroy_listener.link); + pepper_event_listener_remove(&surface->pending.buffer_destroy_listener); pepper_buffer_reference(surface->pending.buffer); } diff --git a/src/lib/pepper/view.c b/src/lib/pepper/view.c index 1826604..8e8da82 100644 --- a/src/lib/pepper/view.c +++ b/src/lib/pepper/view.c @@ -69,12 +69,14 @@ pepper_view_surface_damage(pepper_view_t *view) } } -static void -view_handle_surface_destroy(struct wl_listener *listener, void *data) +static pepper_bool_t +view_handle_surface_destroy(pepper_event_listener_t *listener, + pepper_object_t *object, uint32_t id, void *info) { - pepper_view_t *view = pepper_container_of(listener, pepper_view_t, surface_destroy_listener); + pepper_view_t *view = listener->data; PEPPER_ASSERT(view->surface != NULL); pepper_view_destroy(view); + return PEPPER_TRUE; } static pepper_list_t * @@ -100,8 +102,9 @@ view_insert(pepper_view_t *view, pepper_list_t *pos, pepper_bool_t subtree) return pos; } -static void -view_handle_plane_destroy(struct wl_listener *listener, void *data); +static pepper_bool_t +view_handle_plane_destroy(pepper_event_listener_t *listener, + pepper_object_t *object, uint32_t id, void *info); static void plane_entry_set_plane(pepper_plane_entry_t *entry, pepper_plane_t *plane) @@ -113,7 +116,7 @@ plane_entry_set_plane(pepper_plane_entry_t *entry, pepper_plane_t *plane) { view_damage_below((pepper_view_t *)entry->base.view); entry->plane = NULL; - wl_list_remove(&entry->plane_destroy_listener.link); + pepper_event_listener_remove(&entry->plane_destroy_listener); pixman_region32_fini(&entry->base.visible_region); } @@ -121,21 +124,24 @@ plane_entry_set_plane(pepper_plane_entry_t *entry, pepper_plane_t *plane) if (entry->plane) { - entry->plane_destroy_listener.notify = view_handle_plane_destroy; - pepper_object_add_destroy_listener(&plane->base, &entry->plane_destroy_listener); + entry->plane_destroy_listener.callback = view_handle_plane_destroy; + entry->plane_destroy_listener.data = entry; + pepper_object_add_event_listener(&plane->base, + &entry->plane_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); pixman_region32_init(&entry->base.visible_region); entry->need_damage = PEPPER_TRUE; } } -static void -view_handle_plane_destroy(struct wl_listener *listener, void *data) +static pepper_bool_t +view_handle_plane_destroy(pepper_event_listener_t *listener, + pepper_object_t *object, uint32_t id, void *info) { - pepper_plane_entry_t *entry = - pepper_container_of(listener, pepper_plane_entry_t, plane_destroy_listener); - + pepper_plane_entry_t *entry = listener->data; PEPPER_ASSERT(entry->plane != NULL); plane_entry_set_plane(entry, NULL); + return PEPPER_TRUE; } void @@ -296,8 +302,11 @@ pepper_compositor_add_surface_view(pepper_compositor_t *compositor, pepper_surfa view->surface = surface; view->surface_link.item = view; pepper_list_insert(&surface->view_list, &view->surface_link); - view->surface_destroy_listener.notify = view_handle_surface_destroy; - pepper_object_add_destroy_listener(&surface->base, &view->surface_destroy_listener); + + view->surface_destroy_listener.callback = view_handle_surface_destroy; + view->surface_destroy_listener.data = view; + pepper_object_add_event_listener(&surface->base, &view->surface_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); return view; } @@ -329,7 +338,7 @@ pepper_view_destroy(pepper_view_t *view) if (view->surface) { pepper_list_remove(&view->surface_link, NULL); - wl_list_remove(&view->surface_destroy_listener.link); + pepper_event_listener_remove(&view->surface_destroy_listener); } pixman_region32_fini(&view->opaque_region); diff --git a/src/lib/render/gl-renderer.c b/src/lib/render/gl-renderer.c index e53cd9e..00e0575 100644 --- a/src/lib/render/gl-renderer.c +++ b/src/lib/render/gl-renderer.c @@ -116,8 +116,8 @@ struct gl_surface_state int pitch; } shm; - struct wl_listener buffer_destroy_listener; - struct wl_listener surface_destroy_listener; + pepper_event_listener_t buffer_destroy_listener; + pepper_event_listener_t surface_destroy_listener; }; static pepper_bool_t @@ -171,29 +171,33 @@ surface_state_release_buffer(gl_surface_state_t *state) pepper_buffer_unreference(state->buffer); state->buffer = NULL; - wl_list_remove(&state->buffer_destroy_listener.link); + pepper_event_listener_remove(&state->buffer_destroy_listener); } } -static void -surface_state_handle_surface_destroy(struct wl_listener *listener, void *data) +static pepper_bool_t +surface_state_handle_surface_destroy(pepper_event_listener_t *listener, + pepper_object_t *object, + uint32_t id, + void *info) { - gl_surface_state_t *state = - pepper_container_of(listener, gl_surface_state_t, surface_destroy_listener); - + gl_surface_state_t *state = listener->data; surface_state_release_buffer(state); - wl_list_remove(&state->surface_destroy_listener.link); + pepper_event_listener_remove(&state->surface_destroy_listener); pepper_object_set_user_data((pepper_object_t *)state->surface, state->renderer, NULL, NULL); free(state); + return PEPPER_TRUE; } -static void -surface_state_handle_buffer_destroy(struct wl_listener *listener, void *data) +static pepper_bool_t +surface_state_handle_buffer_destroy(pepper_event_listener_t *listener, + pepper_object_t *object, + uint32_t id, + void *info) { - gl_surface_state_t *state = - pepper_container_of(listener, gl_surface_state_t, buffer_destroy_listener); - + gl_surface_state_t *state = listener->data; surface_state_release_buffer(state); + return PEPPER_TRUE; } static gl_surface_state_t * @@ -208,11 +212,17 @@ get_surface_state(pepper_renderer_t *renderer, pepper_surface_t *surface) return NULL; state->surface = surface; - state->buffer_destroy_listener.notify = surface_state_handle_buffer_destroy; - state->surface_destroy_listener.notify = surface_state_handle_surface_destroy; - pepper_object_add_destroy_listener((pepper_object_t *)surface, - &state->surface_destroy_listener); + state->buffer_destroy_listener.callback = surface_state_handle_buffer_destroy; + state->buffer_destroy_listener.data = state; + + state->surface_destroy_listener.callback = surface_state_handle_surface_destroy; + state->surface_destroy_listener.data = state; + + pepper_object_add_event_listener((pepper_object_t *)surface, + &state->surface_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); + pepper_object_set_user_data((pepper_object_t *)surface, renderer, state, NULL); } @@ -429,12 +439,13 @@ done: if (state->buffer) { pepper_buffer_unreference(state->buffer); - wl_list_remove(&state->buffer_destroy_listener.link); + pepper_event_listener_remove(&state->buffer_destroy_listener); } /* Set new buffer. */ state->buffer = buffer; - pepper_object_add_destroy_listener((pepper_object_t *)buffer, &state->buffer_destroy_listener); + pepper_object_add_event_listener((pepper_object_t *)buffer, &state->buffer_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); /* Output buffer size info. */ *w = state->buffer_width; diff --git a/src/lib/render/pixman-renderer.c b/src/lib/render/pixman-renderer.c index 1ba61c6..ab9fa09 100644 --- a/src/lib/render/pixman-renderer.c +++ b/src/lib/render/pixman-renderer.c @@ -26,8 +26,8 @@ struct pixman_surface_state int buffer_width, buffer_height; pixman_image_t *image; - struct wl_listener buffer_destroy_listener; - struct wl_listener surface_destroy_listener; + pepper_event_listener_t buffer_destroy_listener; + pepper_event_listener_t surface_destroy_listener; }; static void @@ -52,29 +52,35 @@ surface_state_release_buffer(pixman_surface_state_t *state) pepper_buffer_unreference(state->buffer); state->buffer = NULL; - wl_list_remove(&state->buffer_destroy_listener.link); + pepper_event_listener_remove(&state->buffer_destroy_listener); } } -static void -surface_state_handle_surface_destroy(struct wl_listener *listener, void *data) +static pepper_bool_t +surface_state_handle_surface_destroy(pepper_event_listener_t *listener, + pepper_object_t *object, + uint32_t id, + void *info) { - pixman_surface_state_t *state = - pepper_container_of(listener, pixman_surface_state_t, surface_destroy_listener); + pixman_surface_state_t *state = listener->data; surface_state_release_buffer(state); - wl_list_remove(&state->surface_destroy_listener.link); + pepper_event_listener_remove(&state->surface_destroy_listener); pepper_object_set_user_data((pepper_object_t *)state->surface, state->renderer, NULL, NULL); free(state); + + return PEPPER_TRUE; } -static void -surface_state_handle_buffer_destroy(struct wl_listener *listener, void *data) +static pepper_bool_t +surface_state_handle_buffer_destroy(pepper_event_listener_t *listener, + pepper_object_t *object, + uint32_t id, + void *info) { - pixman_surface_state_t *state = - pepper_container_of(listener, pixman_surface_state_t, buffer_destroy_listener); - + pixman_surface_state_t *state = listener->data; surface_state_release_buffer(state); + return PEPPER_TRUE; } static pixman_surface_state_t * @@ -89,11 +95,17 @@ get_surface_state(pepper_renderer_t *renderer, pepper_surface_t *surface) return NULL; state->surface = surface; - state->buffer_destroy_listener.notify = surface_state_handle_buffer_destroy; - state->surface_destroy_listener.notify = surface_state_handle_surface_destroy; - pepper_object_add_destroy_listener((pepper_object_t *)surface, - &state->surface_destroy_listener); + state->buffer_destroy_listener.callback = surface_state_handle_buffer_destroy; + state->buffer_destroy_listener.data = state; + + state->surface_destroy_listener.callback = surface_state_handle_surface_destroy; + state->surface_destroy_listener.data = state; + + pepper_object_add_event_listener((pepper_object_t *)surface, + &state->surface_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); + pepper_object_set_user_data((pepper_object_t *)surface, renderer, state, NULL); } @@ -173,12 +185,13 @@ done: if (state->buffer) { pepper_buffer_unreference(state->buffer); - wl_list_remove(&state->buffer_destroy_listener.link); + pepper_event_listener_remove(&state->buffer_destroy_listener); } /* Set new buffer. */ state->buffer = buffer; - pepper_object_add_destroy_listener((pepper_object_t *)buffer, &state->buffer_destroy_listener); + pepper_object_add_event_listener((pepper_object_t *)buffer, &state->buffer_destroy_listener, + PEPPER_EVENT_OBJECT_DESTROY, 0); /* Output buffer size info. */ *w = state->buffer_width;