From ad731e8b213ff38fed95f069a3ba79aba339925a Mon Sep 17 00:00:00 2001 From: Rafael Antognolli Date: Mon, 28 Oct 2013 14:46:40 -0200 Subject: [PATCH] Revert "change init done bindings." This reverts commit b87afd1b943b260c92f8493647b7d9cae327656e. Wrong branch, wrong commit. --- src/lib/ecore_wayland/Ecore_Wayland.h | 6 -- src/lib/ecore_wayland/ecore_wl.c | 65 +++++-------------- .../engines/wayland/ecore_evas_wayland_egl.c | 2 + .../engines/wayland/ecore_evas_wayland_shm.c | 2 + 4 files changed, 20 insertions(+), 55 deletions(-) diff --git a/src/lib/ecore_wayland/Ecore_Wayland.h b/src/lib/ecore_wayland/Ecore_Wayland.h index 15c59405e9..30545b7343 100644 --- a/src/lib/ecore_wayland/Ecore_Wayland.h +++ b/src/lib/ecore_wayland/Ecore_Wayland.h @@ -120,8 +120,6 @@ struct _Ecore_Wl_Display struct wl_list outputs; struct wl_list globals; /** @since 1.7.6 */ - Eina_Bool init_done; - struct { struct xkb_context *context; @@ -368,10 +366,6 @@ struct _Ecore_Wl_Event_Interfaces_Bound Eina_Bool compositor : 1; Eina_Bool shm : 1; Eina_Bool shell : 1; - Eina_Bool output : 1; - Eina_Bool seat : 1; - Eina_Bool data_device_manager : 1; - Eina_Bool subcompositor : 1; }; /** diff --git a/src/lib/ecore_wayland/ecore_wl.c b/src/lib/ecore_wayland/ecore_wl.c index 8766834e7e..ee614e0e4b 100644 --- a/src/lib/ecore_wayland/ecore_wl.c +++ b/src/lib/ecore_wayland/ecore_wl.c @@ -22,7 +22,6 @@ static void _ecore_wl_animator_callback(void *data, struct wl_callback *callback static Eina_Bool _ecore_wl_animator_window_add(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED, void *data, void *fdata EINA_UNUSED); static void _ecore_wl_signal_exit(void); static void _ecore_wl_signal_exit_free(void *data EINA_UNUSED, void *event); -static void _ecore_wl_init_callback(void *data, struct wl_callback *callback, uint32_t serial EINA_UNUSED); /* local variables */ static int _ecore_wl_init_count = 0; @@ -41,11 +40,6 @@ static const struct wl_callback_listener _ecore_wl_sync_listener = _ecore_wl_sync_callback }; -static const struct wl_callback_listener _ecore_wl_init_sync_listener = -{ - _ecore_wl_init_callback -}; - static const struct wl_callback_listener _ecore_wl_anim_listener = { _ecore_wl_animator_callback @@ -72,40 +66,9 @@ EAPI int ECORE_WL_EVENT_SELECTION_DATA_READY = 0; EAPI int ECORE_WL_EVENT_DATA_SOURCE_CANCELLED = 0; EAPI int ECORE_WL_EVENT_INTERFACES_BOUND = 0; -static void -_ecore_wl_init_callback(void *data, struct wl_callback *callback, uint32_t serial EINA_UNUSED) -{ - Ecore_Wl_Display *ewd = data; - Ecore_Wl_Event_Interfaces_Bound *ev; - - wl_callback_destroy(callback); - ewd->init_done = EINA_TRUE; - - if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Interfaces_Bound)))) - return; - - ev->compositor = (ewd->wl.compositor != NULL); - ev->shm = (ewd->wl.shm != NULL); - ev->shell = (ewd->wl.shell != NULL); - ev->output = (ewd->output != NULL); - ev->seat = (ewd->input != NULL); - ev->data_device_manager = (ewd->wl.data_device_manager != NULL); - ev->subcompositor = (ewd->wl.subcompositor != NULL); - - ecore_event_add(ECORE_WL_EVENT_INTERFACES_BOUND, ev, NULL, NULL); -} - -static void -_ecore_wl_init_wait(void) -{ - while (!_ecore_wl_disp->init_done) - wl_display_dispatch(_ecore_wl_disp->wl.display); -} - EAPI int ecore_wl_init(const char *name) { - struct wl_callback *callback; LOGFN(__FILE__, __LINE__, __FUNCTION__); if (++_ecore_wl_init_count != 1) return _ecore_wl_init_count; @@ -218,10 +181,6 @@ ecore_wl_init(const char *name) _ecore_wl_window_init(); _ecore_wl_events_init(); - callback = wl_display_sync(_ecore_wl_disp->wl.display); - wl_callback_add_listener(callback, &_ecore_wl_init_sync_listener, - _ecore_wl_disp); - return _ecore_wl_init_count; } @@ -253,9 +212,6 @@ EAPI struct wl_shm * ecore_wl_shm_get(void) { if (!_ecore_wl_disp) return NULL; - - _ecore_wl_init_wait(); - return _ecore_wl_disp->wl.shm; } @@ -272,9 +228,6 @@ ecore_wl_globals_get(void) { if ((!_ecore_wl_disp) || (!_ecore_wl_disp->wl.display)) return NULL; - - _ecore_wl_init_wait(); - return &(_ecore_wl_disp->globals); } @@ -283,7 +236,6 @@ ecore_wl_registry_get(void) { if ((!_ecore_wl_disp) || (!_ecore_wl_disp->wl.display)) return NULL; - return _ecore_wl_disp->wl.registry; } @@ -297,7 +249,8 @@ ecore_wl_screen_size_get(int *w, int *h) if ((!_ecore_wl_disp) || (!_ecore_wl_disp->wl.display)) return; - _ecore_wl_init_wait(); + if (!_ecore_wl_disp->output) + ecore_wl_sync(); if (!_ecore_wl_disp->output) return; @@ -592,6 +545,20 @@ _ecore_wl_cb_handle_global(void *data, struct wl_registry *registry, unsigned in ewd->wl.data_device_manager = wl_registry_bind(registry, id, &wl_data_device_manager_interface, 1); } + + if ((ewd->wl.compositor) && (ewd->wl.shm) && (ewd->wl.shell)) + { + Ecore_Wl_Event_Interfaces_Bound *ev; + + if (!(ev = calloc(1, sizeof(Ecore_Wl_Event_Interfaces_Bound)))) + return; + + ev->compositor = (ewd->wl.compositor != NULL); + ev->shm = (ewd->wl.shm != NULL); + ev->shell = (ewd->wl.shell != NULL); + + ecore_event_add(ECORE_WL_EVENT_INTERFACES_BOUND, ev, NULL, NULL); + } } static void diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c index 369d7ca561..9959c085ed 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_egl.c @@ -112,6 +112,8 @@ ecore_evas_wayland_egl_new_internal(const char *disp_name, unsigned int parent, ERR("Failed to initialize Ecore_Wayland"); return NULL; } + else if (count >= 1) + ecore_wl_display_iterate(); if (!(ee = calloc(1, sizeof(Ecore_Evas)))) { diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c index 6cf845e6ca..1e77a67c20 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_shm.c @@ -111,6 +111,8 @@ ecore_evas_wayland_shm_new_internal(const char *disp_name, unsigned int parent, ERR("Failed to initialize Ecore_Wayland"); return NULL; } + else if (count >= 1) + ecore_wl_display_iterate(); if (!(ee = calloc(1, sizeof(Ecore_Evas)))) {