From 497b9c045e3a9784c93d6b89c4714c17d1c870ab Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Tue, 6 Oct 2015 13:45:02 -0500 Subject: [PATCH] ecore-wl2: cache the registry wl_get_registry() returns a new object that we must destroy, so we should cache one at connect and never call that again. Signed-off-by: Derek Foreman --- src/lib/ecore_wl2/ecore_wl2_display.c | 11 +++++------ src/lib/ecore_wl2/ecore_wl2_input.c | 3 +-- src/lib/ecore_wl2/ecore_wl2_output.c | 3 +-- src/lib/ecore_wl2/ecore_wl2_private.h | 1 + 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/lib/ecore_wl2/ecore_wl2_display.c b/src/lib/ecore_wl2/ecore_wl2_display.c index 09cf808b2f..bf4aed1873 100644 --- a/src/lib/ecore_wl2/ecore_wl2_display.c +++ b/src/lib/ecore_wl2/ecore_wl2_display.c @@ -309,7 +309,7 @@ _ecore_wl2_display_cleanup(Ecore_Wl2_Display *ewd) if (ewd->wl.compositor) wl_compositor_destroy(ewd->wl.compositor); if (ewd->wl.subcompositor) wl_subcompositor_destroy(ewd->wl.subcompositor); - wl_registry_destroy(wl_display_get_registry(ewd->wl.display)); + if (ewd->wl.registry) wl_registry_destroy(ewd->wl.registry); wl_display_flush(ewd->wl.display); } @@ -411,9 +411,8 @@ ecore_wl2_display_connect(const char *name) _cb_connect_data, ewd, NULL, NULL); ewd->idle_enterer = ecore_idle_enterer_add(_cb_connect_idle, ewd); - - wl_registry_add_listener(wl_display_get_registry(ewd->wl.display), - &_registry_listener, ewd); + ewd->wl.registry = wl_display_get_registry(ewd->wl.display); + wl_registry_add_listener(ewd->wl.registry, &_registry_listener, ewd); ewd->xkb_context = xkb_context_new(0); if (!ewd->xkb_context) goto context_err; @@ -432,7 +431,7 @@ ecore_wl2_display_connect(const char *name) context_err: ecore_main_fd_handler_del(ewd->fd_hdl); - wl_registry_destroy(wl_display_get_registry(ewd->wl.display)); + wl_registry_destroy(ewd->wl.registry); wl_display_disconnect(ewd->wl.display); connect_err: @@ -560,5 +559,5 @@ ecore_wl2_display_registry_get(Ecore_Wl2_Display *display) { EINA_SAFETY_ON_NULL_RETURN_VAL(display, NULL); - return wl_display_get_registry(display->wl.display); + return display->wl.registry; } diff --git a/src/lib/ecore_wl2/ecore_wl2_input.c b/src/lib/ecore_wl2/ecore_wl2_input.c index bee94ebc71..6ea1166ae1 100644 --- a/src/lib/ecore_wl2/ecore_wl2_input.c +++ b/src/lib/ecore_wl2/ecore_wl2_input.c @@ -1221,8 +1221,7 @@ _ecore_wl2_input_add(Ecore_Wl2_Display *display, unsigned int id) _ecore_wl2_input_cursor_setup(input); input->wl.seat = - wl_registry_bind(wl_display_get_registry(display->wl.display), - id, &wl_seat_interface, 1); + wl_registry_bind(display->wl.registry, id, &wl_seat_interface, 1); display->inputs = eina_inlist_append(display->inputs, EINA_INLIST_GET(input)); diff --git a/src/lib/ecore_wl2/ecore_wl2_output.c b/src/lib/ecore_wl2/ecore_wl2_output.c index b9bf7f9677..75e3ef9e90 100644 --- a/src/lib/ecore_wl2/ecore_wl2_output.c +++ b/src/lib/ecore_wl2/ecore_wl2_output.c @@ -67,8 +67,7 @@ _ecore_wl2_output_add(Ecore_Wl2_Display *display, unsigned int id) output->display = display; output->wl_output = - wl_registry_bind(wl_display_get_registry(display->wl.display), - id, &wl_output_interface, 2); + wl_registry_bind(display->wl.registry, id, &wl_output_interface, 2); display->outputs = eina_inlist_append(display->outputs, EINA_INLIST_GET(output)); diff --git a/src/lib/ecore_wl2/ecore_wl2_private.h b/src/lib/ecore_wl2/ecore_wl2_private.h index 6cc7ca0367..65cb4c97eb 100644 --- a/src/lib/ecore_wl2/ecore_wl2_private.h +++ b/src/lib/ecore_wl2/ecore_wl2_private.h @@ -52,6 +52,7 @@ struct _Ecore_Wl2_Display struct { struct wl_display *display; + struct wl_registry *registry; struct wl_compositor *compositor; struct wl_subcompositor *subcompositor; struct wl_data_device_manager *data_device_manager;