#endif
struct wl_signal delete_request;
+ struct wl_signal kill_request;
} events;
Eina_Bool hide_by_request;
#endif
wl_signal_init(&priv->events.delete_request);
+ wl_signal_init(&priv->events.kill_request);
e_object_data_set(E_OBJECT(ec), priv);
_e_client_cb_kill_timer, ec);
}
else
- evas_object_smart_callback_call(ec->frame, "kill_request", NULL);
+ wl_signal_emit(&PRI(ec)->events.kill_request, ec);
}
////////////////////////////////////////////
}
EINTERN void
+e_client_kill_request_listener_add(E_Client *ec, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.kill_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);
//#endif
EINTERN void e_client_delete_request_listener_add(E_Client *ec, struct wl_listener *listener);
+EINTERN void e_client_kill_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);
}
static void
-_e_comp_wl_evas_cb_kill_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));
- 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();
-}
-
-static void
_e_comp_wl_evas_cb_ping(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_IN, EVAS_CALLBACK_PRIORITY_AFTER, _e_comp_wl_evas_cb_focus_in, 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, "kill_request", _e_comp_wl_evas_cb_kill_request, ec);
-
/* setup ping callback */
evas_object_smart_callback_add(ec->frame, "ping", _e_comp_wl_evas_cb_ping, ec);
evas_object_smart_callback_add(ec->frame, "color_set", _e_comp_wl_evas_cb_color_set, ec);
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, "kill_request", _e_comp_wl_evas_cb_kill_request);
-
evas_object_smart_callback_del(ec->frame, "ping", _e_comp_wl_evas_cb_ping);
evas_object_smart_callback_del(ec->frame, "color_set", _e_comp_wl_evas_cb_color_set);
struct wl_listener client_unmaximize;
struct wl_listener client_activate_done;
struct wl_listener delete_request;
+ struct wl_listener kill_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->kill_request.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);
}
static void
+_desk_area_cb_client_kill_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, kill_request);
+ eda = eda_client->eda;
+ ec = eda_client->ec;
+
+ ELOGF("EDA", "CLIENT KILL REQUEST. eda:%p", ec, eda);
+
+ 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();
+}
+
+static void
_desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data)
{
E_Desk_Area_Private_Client *eda_client;
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);
+ eda_client->kill_request.notify = _desk_area_cb_client_kill_request;
+ e_client_kill_request_listener_add(ec, &eda_client->kill_request);
// e_comp_object listeners
eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower;