discomfitor pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=a3266d5d8996c38f7df8bbe05d0987853d9723a7
commit a3266d5d8996c38f7df8bbe05d0987853d9723a7 Author: Mike Blumenkrantz <zm...@osg.samsung.com> Date: Fri Nov 20 14:59:53 2015 -0500 ref clients while a wayland shell surface exists in the case where a client is deleted, it's possible that the shell surface may persist longer than the duration of the normal client delete cycle, so it's necessary to ensure that the client will continue to exist until the shell surface has been destroyed --- src/modules/wl_desktop_shell/e_mod_main.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/modules/wl_desktop_shell/e_mod_main.c b/src/modules/wl_desktop_shell/e_mod_main.c index b817f2b..040c427 100644 --- a/src/modules/wl_desktop_shell/e_mod_main.c +++ b/src/modules/wl_desktop_shell/e_mod_main.c @@ -98,6 +98,7 @@ _e_shell_surface_destroy(struct wl_resource *resource) /* get the client for this resource */ if ((ec = wl_resource_get_user_data(resource))) { + if (!e_object_unref(E_OBJECT(ec))) return; if (e_object_is_del(E_OBJECT(ec))) return; if (ec->comp_data) @@ -572,6 +573,8 @@ _e_shell_cb_shell_surface_get(struct wl_client *client, struct wl_resource *reso &_e_shell_surface_interface, ec, _e_shell_surface_cb_destroy); + e_object_ref(E_OBJECT(ec)); + cdata->shell.configure_send = _e_shell_surface_configure_send; cdata->shell.configure = _e_shell_surface_configure; cdata->shell.ping = _e_shell_surface_ping; @@ -1120,6 +1123,8 @@ _e_xdg_shell_cb_surface_get(struct wl_client *client, struct wl_resource *resour &_e_xdg_surface_interface, ec, _e_shell_surface_cb_destroy); + e_object_ref(E_OBJECT(ec)); + cdata->shell.configure_send = _e_xdg_shell_surface_configure_send; cdata->shell.configure = _e_xdg_shell_surface_configure; cdata->shell.ping = _e_xdg_shell_surface_ping; @@ -1207,6 +1212,8 @@ _e_xdg_shell_cb_popup_get(struct wl_client *client, struct wl_resource *resource wl_resource_set_implementation(cdata->shell.surface, &_e_xdg_popup_interface, ec, NULL); + e_object_ref(E_OBJECT(ec)); + cdata->shell.configure_send = _e_xdg_shell_surface_configure_send; cdata->shell.configure = _e_xdg_shell_surface_configure; cdata->shell.ping = _e_xdg_shell_surface_ping; --