devilhorns pushed a commit to branch master. http://git.enlightenment.org/core/enlightenment.git/commit/?id=36ff31e6b446c4a66e1a30cc775fade42187d502
commit 36ff31e6b446c4a66e1a30cc775fade42187d502 Author: Chris Michael <[email protected]> Date: Fri Oct 17 04:39:58 2014 -0400 add evas callback for delete_request and fix printf warnings for uint64_t Signed-off-by: Chris Michael <[email protected]> --- src/bin/e_comp_wl.c | 67 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 56 insertions(+), 11 deletions(-) diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 559ce1c..90aabb3 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -1,6 +1,10 @@ #define E_COMP_WL #include "e.h" +/* handle include for printing uint64_t */ +#define __STDC_FORMAT_MACROS +#include <inttypes.h> + #define COMPOSITOR_VERSION 3 #define E_COMP_WL_PIXMAP_CHECK \ @@ -397,6 +401,42 @@ _e_comp_wl_evas_cb_key_up(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj E } static void +_e_comp_wl_evas_cb_delete_request(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +{ + E_Client *ec; + + if (!(ec = data)) return; + if (ec->netwm.ping) e_client_ping(ec); + + /* FIXME !!! + * + * This is a HUGE problem for internal windows... + * + * IF we delete the client here, then we cannot reopen some internal + * dialogs (configure, etc, etc) ... + * + * BUT, if we don't handle delete_request Somehow, then the close button on + * the frame does Nothing + */ + + e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap)); + if (ec->comp_data) + { + if (ec->comp_data->reparented) + e_client_comp_hidden_set(ec, EINA_TRUE); + } + + evas_object_pass_events_set(ec->frame, EINA_TRUE); + if (ec->visible) evas_object_hide(ec->frame); + if (!ec->internal) e_object_del(E_OBJECT(ec)); + + // _e_comp_wl_focus_check(comp); + + /* TODO: Delete request send ?? + * NB: No such animal wrt wayland */ +} + +static void _e_comp_wl_client_evas_init(E_Client *ec) { evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_SHOW, @@ -422,6 +462,10 @@ _e_comp_wl_client_evas_init(E_Client *ec) evas_object_event_callback_add(ec->frame, EVAS_CALLBACK_KEY_UP, _e_comp_wl_evas_cb_key_up, ec); + /* setup delete/kill callbacks */ + evas_object_smart_callback_add(ec->frame, "delete_request", + _e_comp_wl_evas_cb_delete_request, ec); + ec->comp_data->evas_init = EINA_TRUE; } @@ -440,7 +484,8 @@ _e_comp_wl_cb_comp_object_add(void *data EINA_UNUSED, int type EINA_UNUSED, E_Ev /* check for wayland pixmap */ E_COMP_WL_PIXMAP_CHECK ECORE_CALLBACK_RENEW; - DBG("Comp Object Added For Pixmap: %llu", e_pixmap_window_get(ec->pixmap)); + DBG("Comp Object Added For Pixmap: %"PRIu64"", + e_pixmap_window_get(ec->pixmap)); /* if we have not setup evas callbacks for this client, do it */ if (!ec->comp_data->evas_init) _e_comp_wl_client_evas_init(ec); @@ -527,14 +572,14 @@ _e_comp_wl_surface_cb_attach(struct wl_client *client, struct wl_resource *resou if (!(ep = wl_resource_get_user_data(resource))) return; pixid = e_pixmap_window_get(ep); - DBG("\tSurface has Pixmap: %llu", pixid); + DBG("\tSurface has Pixmap: %"PRIu64"", pixid); /* try to find the associated e_client */ if (!(ec = e_pixmap_client_get(ep))) { if (!(ec = e_pixmap_find_client(E_PIXMAP_TYPE_WL, pixid))) { - ERR("\t\tCould not find client from pixmap %llu", pixid); + ERR("\t\tCould not find client from pixmap %"PRIu64"", pixid); return; } } @@ -621,7 +666,7 @@ _e_comp_wl_surface_cb_damage(struct wl_client *client EINA_UNUSED, struct wl_res { if (!(ec = e_pixmap_find_client(E_PIXMAP_TYPE_WL, pixid))) { - ERR("\tCould not find client from pixmap %llu", pixid); + ERR("\tCould not find client from pixmap %"PRIu64"", pixid); return; } } @@ -655,14 +700,14 @@ _e_comp_wl_surface_cb_opaque_region_set(struct wl_client *client EINA_UNUSED, st if (!(ep = wl_resource_get_user_data(resource))) return; pixid = e_pixmap_window_get(ep); - DBG("\tSurface has Pixmap: %llu", pixid); + DBG("\tSurface has Pixmap: %"PRIu64"", pixid); /* try to find the associated e_client */ if (!(ec = e_pixmap_client_get(ep))) { if (!(ec = e_pixmap_find_client(E_PIXMAP_TYPE_WL, pixid))) { - ERR("\tCould not find client from pixmap %llu", pixid); + ERR("\tCould not find client from pixmap %"PRIu64"", pixid); return; } } @@ -701,14 +746,14 @@ _e_comp_wl_surface_cb_input_region_set(struct wl_client *client EINA_UNUSED, str if (!(ep = wl_resource_get_user_data(resource))) return; pixid = e_pixmap_window_get(ep); - DBG("\tSurface has Pixmap: %llu", pixid); + DBG("\tSurface has Pixmap: %"PRIu64, pixid); /* try to find the associated e_client */ if (!(ec = e_pixmap_client_get(ep))) { if (!(ec = e_pixmap_find_client(E_PIXMAP_TYPE_WL, pixid))) { - ERR("\tCould not find client from pixmap %llu", pixid); + ERR("\tCould not find client from pixmap %"PRIu64, pixid); return; } } @@ -747,14 +792,14 @@ _e_comp_wl_surface_cb_commit(struct wl_client *client EINA_UNUSED, struct wl_res if (!(ep = wl_resource_get_user_data(resource))) return; pixid = e_pixmap_window_get(ep); - DBG("\tSurface has Pixmap: %llu", pixid); + DBG("\tSurface has Pixmap: %"PRIu64, pixid); /* try to find the associated e_client */ if (!(ec = e_pixmap_client_get(ep))) { if (!(ec = e_pixmap_find_client(E_PIXMAP_TYPE_WL, pixid))) { - ERR("\tCould not find client from pixmap %llu", pixid); + ERR("\tCould not find client from pixmap %"PRIu64, pixid); return; } } @@ -838,7 +883,7 @@ _e_comp_wl_compositor_cb_surface_create(struct wl_client *client, struct wl_reso } } - DBG("\tUsing Pixmap: %llu", wid); + DBG("\tUsing Pixmap: %"PRIu64, wid); /* set reference to pixmap so we can fetch it later */ wl_resource_set_user_data(res, ep); --
