struct wl_signal get_visible_below;
struct wl_signal subsurface_stack_update;
#endif
+
+ struct wl_signal delete_request;
} events;
Eina_Bool hide_by_request;
wl_signal_init(&priv->events.subsurface_stack_update);
#endif
+ wl_signal_init(&priv->events.delete_request);
+
e_object_data_set(E_OBJECT(ec), priv);
return EINA_TRUE;
if (ec->icccm.delete_request)
{
ec->delete_requested = 1;
- evas_object_smart_callback_call(ec->frame, "delete_request", NULL);
+ wl_signal_emit(&PRI(ec)->events.delete_request, ec);
}
else if (e_config->kill_if_close_not_possible)
{
#endif
EINTERN void
+e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.delete_request, listener);
+}
+
+EINTERN void
e_client_shell_configure_send(E_Client *ec, uint32_t edges, int32_t width, int32_t height)
{
EINA_SAFETY_ON_NULL_RETURN(ec);
EINTERN void e_client_subsurface_stack_update_listener_add(E_Client *ec, struct wl_listener *listener);
//#endif
+EINTERN void e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener);
+
EINTERN struct wl_listener *e_client_destroy_listener_get(E_Client *ec, wl_notify_func_t notify);
void e_client_show(E_Client *ec);
}
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;
-
- e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap));
-
- e_object_del(E_OBJECT(ec));
-
- _e_comp_wl_focus_check();
-
- /* TODO: Delete request send ??
- * NB: No such animal wrt wayland */
-}
-
-static void
_e_comp_wl_evas_cb_kill_request(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
E_Client *ec;
evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_FOCUS_OUT, EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_focus_out, ec);
/* setup delete/kill callbacks */
- evas_object_smart_callback_add(ec->frame, "delete_request", _e_comp_wl_evas_cb_delete_request, ec);
evas_object_smart_callback_add(ec->frame, "kill_request", _e_comp_wl_evas_cb_kill_request, ec);
/* setup ping callback */
evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_IN, _e_comp_wl_evas_cb_focus_in);
evas_object_event_callback_del(ec->frame, EVAS_CALLBACK_FOCUS_OUT, _e_comp_wl_evas_cb_focus_out);
- evas_object_smart_callback_del(ec->frame, "delete_request", _e_comp_wl_evas_cb_delete_request);
evas_object_smart_callback_del(ec->frame, "kill_request", _e_comp_wl_evas_cb_kill_request);
evas_object_smart_callback_del(ec->frame, "ping", _e_comp_wl_evas_cb_ping);
#include "e_zone_intern.h"
#include "e_desk_intern.h"
#include "e_utils_intern.h"
+#include "e_comp_intern.h"
+#include "e_comp_wl_intern.h"
#include <libds-tizen/screen.h>
struct wl_listener client_maximize;
struct wl_listener client_unmaximize;
struct wl_listener client_activate_done;
+ struct wl_listener delete_request;
// comp_object listeners
struct wl_listener comp_object_raise;
wl_list_remove(&eda_client->comp_object_lower.link);
wl_list_remove(&eda_client->comp_object_raise.link);
+ wl_list_remove(&eda_client->delete_request.link);
wl_list_remove(&eda_client->client_activate_done.link);
wl_list_remove(&eda_client->client_unmaximize.link);
wl_list_remove(&eda_client->client_maximize.link);
}
static void
+_desk_area_cb_client_delete_request(struct wl_listener *listener, void *data)
+{
+ E_Desk_Area_Private_Client *eda_client;
+ E_Desk_Area *eda;
+ E_Client *ec;
+
+ eda_client = wl_container_of(listener, eda_client, delete_request);
+ eda = eda_client->eda;
+ ec = eda_client->ec;
+
+ ELOGF("EDA", "CLIENT DELETE REQUEST. eda:%p", ec, eda);
+
+ e_comp_ignore_win_del(E_PIXMAP_TYPE_WL, e_pixmap_window_get(ec->pixmap));
+
+ e_object_del(E_OBJECT(ec));
+
+ e_comp_wl_focus_check();
+
+ /* TODO: Delete request send ??
+ * NB: No such animal wrt wayland */
+}
+
+static void
_desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data)
{
E_Desk_Area_Private_Client *eda_client;
e_client_unmaximize_listener_add(ec, &eda_client->client_unmaximize);
eda_client->client_activate_done.notify = _desk_area_cb_client_activate_done;
e_client_activate_done_listener_add(ec, &eda_client->client_activate_done);
+ eda_client->delete_request.notify = _desk_area_cb_client_delete_request;
+ e_client_delete_request_listener_add(ec, &eda_client->delete_request);
// e_comp_object listeners
eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower;