E_Zone *zone;
E_Client *focused_ec;
+ struct
+ {
+ struct wl_signal focused_ec_changed;
+ } events;
+
struct wl_listener zone_client_add;
struct wl_listener zone_client_remove;
struct wl_listener zone_focus_clear;
static void set_focused_ec(E_Focus_Policy_Topmost *topmost_policy, E_Client *ec)
{
atomic_store(&topmost_policy->focused_ec, ec);
+
+ wl_signal_emit_mutable(&topmost_policy->events.focused_ec_changed, ec);
}
static void
return EINA_TRUE;
}
+static void
+_focus_policy_topmost_focused_ec_changed_listener_add(E_Focus_Policy_Impl *impl, struct wl_listener *listener)
+{
+ E_Focus_Policy_Topmost *topmost_policy;
+
+ topmost_policy = (E_Focus_Policy_Topmost *)impl;
+ EINA_SAFETY_ON_NULL_RETURN(topmost_policy);
+
+ wl_signal_add(&topmost_policy->events.focused_ec_changed, listener);
+}
+
EINTERN E_Focus_Policy_Iface *
e_focus_policy_iface_topmost_new(E_Zone* zone)
{
topmost_policy->zone = zone;
+ wl_signal_init(&topmost_policy->events.focused_ec_changed);
+
policy_iface->impl = (E_Focus_Policy_Impl *)topmost_policy;
policy_iface->del = _focus_policy_topmost_del;
policy_iface->focused_ec_get = _focus_policy_topmost_focused_ec_get;
policy_iface->update = _focus_policy_topmost_update;
+ policy_iface->focused_ec_changed_listener_add = _focus_policy_topmost_focused_ec_changed_listener_add;
// zone listeners
topmost_policy->zone_client_add.notify = _focus_policy_topmost_cb_zone_client_add;