static Eina_Bool
_focus_policy_history_hook_cb_comp_object_show(void *data, E_Client *ec)
{
- // TODO:
+ E_Focus_Policy_History *history_policy;
+ Eina_List *focus_stack;
+ E_Client *focused_ec, *temp_ec;
+ Eina_List *l;
+
+ history_policy = (E_Focus_Policy_History *)data;
+ if (!history_policy) return EINA_TRUE;
+
+ focused_ec = history_policy->focused_ec;
+ focus_stack = history_policy->focus_stack;
+
+ if (!e_client_is_iconified_by_client(ec)||
+ e_policy_visibility_client_is_uniconic(ec))
+ {
+ if (!ec->iconic ||
+ e_policy_visibility_client_is_uniconic(ec))
+ {
+ if (ec->exp_iconify.not_raise &&
+ e_client_check_above_focused(ec))
+ {
+ //e_client_focus_stack_append_current_focused(ec);
+ focus_stack = eina_list_remove(focus_stack, ec);
+ EINA_LIST_FOREACH(focus_stack, l, temp_ec)
+ {
+ if (temp_ec != focused_ec) continue;
+
+ focus_stack = eina_list_append_relative_list(focus_stack, ec, l);
+ break;
+ }
+ focus_stack = eina_list_prepend(focus_stack, ec);
+ }
+ else
+ _e_focus_policy_history_focus_defer_unset(history_policy, ec);
+
+ }
+ }
return EINA_TRUE;
}