struct wl_signal delete_request;
struct wl_signal kill_request;
+ struct wl_signal ping;
} events;
Eina_Bool hide_by_request;
wl_signal_init(&priv->events.delete_request);
wl_signal_init(&priv->events.kill_request);
+ wl_signal_init(&priv->events.ping);
e_object_data_set(E_OBJECT(ec), priv);
EINA_SAFETY_ON_TRUE_RETURN(e_object_is_del(E_OBJECT(ec)));
ec->ping_ok = 0;
- evas_object_smart_callback_call(ec->frame, "ping", NULL);
+ wl_signal_emit(&PRI(ec)->events.ping, ec);
ec->ping = ecore_loop_time_get();
if (ec->ping_poller) ecore_poller_del(ec->ping_poller);
ec->ping_poller = ecore_poller_add(ECORE_POLLER_CORE,
}
EINTERN void
+e_client_ping_listener_add(E_Client *ec, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.ping, 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_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 void e_client_ping_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_ping(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
-{
- E_Client *ec;
-
- if (!(ec = data)) return;
-
- e_client_shell_ping(ec);
-}
-
-static void
_e_comp_wl_evas_cb_color_set(void *data, Evas_Object *obj, 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 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);
ec->comp_data->evas_init = EINA_TRUE;
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, "ping", _e_comp_wl_evas_cb_ping);
evas_object_smart_callback_del(ec->frame, "color_set", _e_comp_wl_evas_cb_color_set);
ec->comp_data->evas_init = EINA_FALSE;
struct wl_listener client_activate_done;
struct wl_listener delete_request;
struct wl_listener kill_request;
+ struct wl_listener ping;
// 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->ping.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);
}
static void
+_desk_area_cb_client_ping(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, ping);
+ eda = eda_client->eda;
+ ec = eda_client->ec;
+
+ ELOGF("EDA", "CLIENT PING. eda:%p", ec, eda);
+
+ e_client_shell_ping(ec);
+}
+
+static void
_desk_area_cb_comp_object_lower(struct wl_listener *listener, void *data)
{
E_Desk_Area_Private_Client *eda_client;
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);
+ eda_client->ping.notify = _desk_area_cb_client_ping;
+ e_client_ping_listener_add(ec, &eda_client->ping);
// e_comp_object listeners
eda_client->comp_object_lower.notify = _desk_area_cb_comp_object_lower;