{
Eina_List *l = NULL;
E_Client *focused_ec, *temp_ec = NULL;
+ Eina_Bool find_focus = EINA_FALSE;
focused_ec = history_policy->focused_ec;
- history_policy->focus_stack = eina_list_remove(history_policy->focus_stack, ec);
EINA_LIST_FOREACH(history_policy->focus_stack, l, temp_ec)
{
- if (temp_ec != focused_ec) continue;
- if (temp_ec->layer > ec->layer) continue;
+ if (temp_ec == ec) return;
+ if (temp_ec == focused_ec)
+ {
+ find_focus = EINA_TRUE;
+ continue;
+ }
+ else if (find_focus)
+ {
+ if (temp_ec->layer > ec->layer) continue;
- history_policy->focus_stack = eina_list_append_relative_list(history_policy->focus_stack, ec, l);
- return;
+ history_policy->focus_stack = eina_list_remove(history_policy->focus_stack, ec);
+ history_policy->focus_stack = eina_list_prepend_relative_list(history_policy->focus_stack, ec, l);
+ return;
+ }
}
- history_policy->focus_stack = eina_list_prepend(history_policy->focus_stack, ec);
+ history_policy->focus_stack = eina_list_remove(history_policy->focus_stack, ec);
+ if (find_focus)
+ history_policy->focus_stack = eina_list_append(history_policy->focus_stack, ec);
+ else
+ history_policy->focus_stack = eina_list_prepend(history_policy->focus_stack, ec);
}
static void