There is a bug that latest focused window can't take focus.
When two or more windows are fully obscured by 24bit color fullsize window, the above window disappears then one of window(A) take focus and the other window set latest focused window(B).
In this situation, another window showing and hide, then below latest focused window(A) has lose focus and the other window(B) takes focus.
For solve the problem, if the window can't take when showing, that the windows focus_stack sets right behind of existing focused window.
Change-Id: Ib5da9166c17841024d86d4eb3214308827f9eacf
focus_stack = eina_list_prepend(focus_stack, ec);
}
+EINTERN void
+e_client_focus_second_set(E_Client *ec)
+{
+ Eina_List *l = NULL;
+ E_Client *temp_ec = NULL;
+
+ if (!ec) CRI("ACK");
+ if (focus_track_frozen > 0) return;
+
+ focus_stack = eina_list_remove(focus_stack, ec);
+
+ EINA_LIST_FOREACH(focus_stack, l, temp_ec)
+ {
+ if (temp_ec != focused) continue;
+
+ focus_stack = eina_list_append_relative_list(focus_stack, ec, l);
+ return;
+ }
+
+ focus_stack = eina_list_prepend(focus_stack, ec);
+ return;
+}
+
E_API void
e_client_raise_latest_set(E_Client *ec)
{
E_API E_Client_Intercept_Hook *e_client_intercept_hook_add(E_Client_Intercept_Hook_Point hookpoint, E_Client_Intercept_Hook_Cb func, const void *data);
E_API void e_client_intercept_hook_del(E_Client_Intercept_Hook *ch);
E_API void e_client_focus_latest_set(E_Client *ec);
+EINTERN void e_client_focus_second_set(E_Client *ec);
E_API void e_client_raise_latest_set(E_Client *ec);
E_API void e_client_focus_defer_set(E_Client *ec);
E_API void e_client_focus_defer_unset(E_Client *ec);
{
if (cw->ec->exp_iconify.not_raise &&
e_client_check_above_focused(cw->ec))
- e_client_focus_latest_set(cw->ec);
+ e_client_focus_second_set(cw->ec);
else
e_client_focus_defer_set(cw->ec);
}