struct wl_signal desk_prev;
struct wl_signal desk_count;
struct wl_signal client_add;
+ struct wl_signal focused_client_get;
} events;
struct wl_listener focus_focused_ec_changed;
wl_signal_init(&priv->events.desk_prev);
wl_signal_init(&priv->events.desk_count);
wl_signal_init(&priv->events.client_add);
+ wl_signal_init(&priv->events.focused_client_get);
e_object_data_set(E_OBJECT(zone), priv);
return NULL;
}
+EINTERN E_Client *
+e_zone_focused_client_get(E_Zone *zone)
+{
+ E_Client *focused_ec;
+
+ EINA_SAFETY_ON_NULL_RETURN_VAL(zone, NULL);
+
+ wl_signal_emit(&PRI(zone)->events.focused_client_get, &focused_ec);
+
+ ELOGF("ZONE", "Focused client get: %p", focused_ec, focused_ec);
+ return focused_ec;
+}
+
EINTERN void
e_zone_client_set_event_emit(E_Zone *zone, E_Client *ec)
{
wl_signal_add(&priv->events.client_add, listener);
}
+EINTERN void
+e_zone_focused_client_get_listener_add(E_Zone *zone, struct wl_listener *listener)
+{
+ API_ENTRY;
+ wl_signal_add(&priv->events.focused_client_get, listener);
+}
+
EINTERN void
e_desk_row_add(E_Zone *zone)
{
EINTERN void e_zone_client_add(E_Zone *zone, E_Client *ec);
EINTERN Eina_Bool e_zone_has_ec(E_Zone *zone, E_Client *ec);
EINTERN Eina_Bool e_zone_is_displaying(E_Zone *zone);
+EINTERN E_Client *e_zone_focused_client_get(E_Zone *zone);
EINTERN void e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count);
EINTERN void e_zone_desk_count_get(E_Zone *zone, int *x_count, int *y_count);
EINTERN void e_zone_bg_mouse_down_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_bg_mouse_up_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_zone_client_add_listener_add(E_Zone *zone, struct wl_listener *listener);
+EINTERN void e_zone_focused_client_get_listener_add(E_Zone *zone, struct wl_listener *listener);
EINTERN void e_desk_row_add(E_Zone *zone);
EINTERN void e_desk_row_remove(E_Zone *zone);
struct wl_listener desk_next;
struct wl_listener desk_prev;
struct wl_listener desk_count;
+ struct wl_listener focused_client_get;
struct
{
return;
}
+static void
+_e_policy_zone_cb_focused_client_get(struct wl_listener *listener, void *data)
+{
+ E_Policy_Zone *policy_zone;
+ E_Zone *zone;
+ E_Client *focused_ec;
+
+ policy_zone = wl_container_of(listener, policy_zone, focused_client_get);
+ zone = policy_zone->zone;
+
+ focused_ec = e_focus_focused_ec_get(zone->focus);
+ *(E_Client **)data = focused_ec;
+
+ return;
+}
+
static void
_e_zone_policy_input_thread_focused_client_set(void *data)
{
e_zone_bg_mouse_down_listener_add(zone, &policy_zone->bg_mouse_down);
policy_zone->bg_mouse_up.notify = _e_policy_zone_cb_bg_mouse_up;
e_zone_bg_mouse_up_listener_add(zone, &policy_zone->bg_mouse_up);
+ policy_zone->focused_client_get.notify = _e_policy_zone_cb_focused_client_get;
+ e_zone_focused_client_get_listener_add(zone, &policy_zone->focused_client_get);
policy_zone->desk_row_add.notify = _e_policy_zone_cb_desk_row_add;
e_zone_desk_row_add_listener_add(policy_zone->zone, &policy_zone->desk_row_add);