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: Id3cf2711477b7d27c1955e577ec40e2f18bfe26a
Signed-off-by: Junseok, Kim <juns.kim@samsung.com>
focus_stack = eina_list_prepend(focus_stack, ec);
}
+EINTERN void
+e_client_focus_stack_append_current_focused(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_focus_defer_set(E_Client *ec)
{
E_API void e_client_intercept_hook_del(E_Client_Intercept_Hook *ch);
EINTERN void e_client_focus_stack_lower(E_Client *ec);
E_API void e_client_focus_latest_set(E_Client *ec);
+EINTERN void e_client_focus_stack_append_current_focused(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);
E_API Eina_Bool e_client_focus_track_enabled(void);
{
if (ec->exp_iconify.not_raise &&
e_client_check_above_focused(ec))
- e_client_focus_latest_set(ec);
+ e_client_focus_stack_append_current_focused(ec);
else
e_client_focus_defer_set(ec);
}