EINTERN void
e_client_focused_set(E_Client *ec)
{
+#ifdef REFACTOR_FOCUS_POLICY
+ E_Client *focused_ec;
+ E_Zone *zone;
+
+ if (ec)
+ ELOGF("FOCUS", "CLIENT FOCUSED_SET : SET", ec);
+ else
+ ELOGF("FOCUS", "CLIENT FOCUSED_SET : UNSET", NULL);
+
+ zone = e_zone_current_get();
+ EINA_SAFETY_ON_NULL_RETURN(zone);
+
+ // unset the current focused_ec
+ focused_ec = e_focus_focused_ec_get(zone->focus);
+ if (ec == focused_ec) return;
+
+ TRACE_DS_BEGIN(CLIENT:FOCUSED SET);
+
+ // unset the current focused_ec if focused_ec is not being deleted
+ if (focused_ec &&
+ (e_object_ref_get(E_OBJECT(ec)) > 0) &&
+ !e_object_is_del(E_OBJECT(focused_ec)))
+ {
+ _e_client_hook_call(E_CLIENT_HOOK_FOCUS_UNSET, focused_ec);
+ _e_client_event_simple(ec, E_EVENT_CLIENT_FOCUS_OUT);
+ }
+
+ // clear the current focused_ec when ec is NULL
+ if (!ec)
+ {
+ e_zone_focus_clear(zone);
+ TRACE_DS_END();
+ return;
+ }
+
+ // set the new current focused_ec
+ _e_client_hook_call(E_CLIENT_HOOK_FOCUS_SET, ec);
+ _e_client_event_simple(ec, E_EVENT_CLIENT_FOCUS_IN);
+
+ // TODO: This is not for focus, but for Window Placement policy.
+ // Move this code to the better place.
+ if (ec->sticky && ec->desk && (!ec->desk->visible))
+ e_client_desk_set(ec, e_desk_current_get(ec->zone));
+
+ TRACE_DS_END();
+#else
E_Client *ec2, *ec_unfocus = focused;
Eina_List *l, *ll;
e_client_desk_set(ec, e_desk_current_get(ec->zone));
TRACE_DS_END();
+#endif
}
EINTERN void
// TODO:
}
+static void
+_focus_policy_history_hook_cb_client_focus_unset(void *data, E_Client *ec)
+{
+ // TODO:
+}
+
static Eina_Bool
_focus_policy_hook_history_cb_comp_object_lower(void *data, E_Client *ec)
{
E_LIST_HOOK_APPEND(history_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_OUT, _focus_policy_history_hook_cb_client_mouse_out, history_policy);
E_LIST_HOOK_APPEND(history_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_DOWN, _focus_policy_history_hook_cb_client_mouse_down, history_policy);
E_LIST_HOOK_APPEND(history_policy->ec_hooks, E_CLIENT_HOOK_FOCUS_SET, _focus_policy_history_hook_cb_client_focus_set, history_policy);
+ E_LIST_HOOK_APPEND(history_policy->ec_hooks, E_CLIENT_HOOK_FOCUS_UNSET, _focus_policy_history_hook_cb_client_focus_unset, history_policy);
// e_comp_object hooks
E_COMP_COMP_HOOK_APPEND(history_policy->co_hooks, E_COMP_OBJECT_HOOK_LOWER, _focus_policy_hook_history_cb_comp_object_lower, history_policy);
// TODO:
}
+static void
+_focus_policy_topmost_hook_cb_client_focus_unset(void *data, E_Client *ec)
+{
+ // TODO:
+}
+
static Eina_Bool
_focus_policy_hook_topmost_cb_comp_object_lower(void *data, E_Client *ec)
{
E_LIST_HOOK_APPEND(topmost_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_OUT, _focus_policy_topmost_hook_cb_client_mouse_out, topmost_policy);
E_LIST_HOOK_APPEND(topmost_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_DOWN, _focus_policy_topmost_hook_cb_client_mouse_down, topmost_policy);
E_LIST_HOOK_APPEND(topmost_policy->ec_hooks, E_CLIENT_HOOK_FOCUS_SET, _focus_policy_topmost_hook_cb_client_focus_set, topmost_policy);
+ E_LIST_HOOK_APPEND(topmost_policy->ec_hooks, E_CLIENT_HOOK_FOCUS_UNSET, _focus_policy_topmost_hook_cb_client_focus_unset, topmost_policy);
// e_comp_object hooks
E_COMP_COMP_HOOK_APPEND(topmost_policy->co_hooks, E_COMP_OBJECT_HOOK_LOWER, _focus_policy_hook_topmost_cb_comp_object_lower, topmost_policy);