static void
_focus_policy_history_focus_stack_latest_set(E_Focus_Policy_History *history_policy, E_Client *ec)
{
- Eina_List *focus_stack;
-
- focus_stack = history_policy->focus_stack;
-
- focus_stack = eina_list_remove(focus_stack, ec);
- focus_stack = eina_list_prepend(focus_stack, ec);
+ history_policy->focus_stack = eina_list_remove(history_policy->focus_stack, ec);
+ history_policy->focus_stack = eina_list_prepend(history_policy->focus_stack, ec);
}
static void
{
Eina_List *l = NULL;
E_Client *ec2 = NULL;
- Eina_List *focus_stack;
-
- focus_stack = history_policy->focus_stack;
- focus_stack = eina_list_remove(focus_stack, ec);
+ history_policy->focus_stack = eina_list_remove(history_policy->focus_stack, ec);
- EINA_LIST_REVERSE_FOREACH(focus_stack, l, ec2)
+ EINA_LIST_REVERSE_FOREACH(history_policy->focus_stack, l, ec2)
{
if (ec2 == NULL) continue;
if (ec2->layer < ec->layer) continue;
- focus_stack = eina_list_append_relative_list(focus_stack, ec, l);
+ history_policy->focus_stack = eina_list_append_relative_list(history_policy->focus_stack, ec, l);
return;
}
- focus_stack = eina_list_prepend(focus_stack, ec);
-
- return;
+ history_policy->focus_stack = eina_list_prepend(history_policy->focus_stack, ec);
}
static void
-_focus_policy_history_focus_focus_defer_set(E_Focus_Policy_History *history_policy, E_Client *ec)
+_e_focus_policy_history_focus_focus_defer_set(E_Focus_Policy_History *history_policy, E_Client *ec)
{
- Eina_List *defer_focus_stack;
-
- defer_focus_stack = history_policy->defer_focus_stack;
+ ELOGF("FOCUS", "focus defer set", ec);
- defer_focus_stack = eina_list_remove(defer_focus_stack, ec);
- defer_focus_stack = eina_list_prepend(defer_focus_stack, ec);
+ history_policy->defer_focus_stack = eina_list_remove(history_policy->defer_focus_stack, ec);
+ history_policy->defer_focus_stack = eina_list_prepend(history_policy->defer_focus_stack, ec);
}
static void
_e_focus_policy_history_focus_defer_unset(E_Focus_Policy_History *history_policy, E_Client *ec)
{
- Eina_List *defer_focus_stack;
-
ELOGF("FOCUS", "focus defer unset", ec);
- defer_focus_stack = history_policy->defer_focus_stack;
- defer_focus_stack = eina_list_remove(defer_focus_stack, ec);
+ history_policy->defer_focus_stack = eina_list_remove(history_policy->defer_focus_stack, ec);
}
static void
E_Client *ec = NULL, *defer_ec = NULL;
Eina_Bool find_rel = EINA_FALSE;
Eina_Bool inserted = EINA_FALSE;
- Eina_List *focus_stack, *defer_focus_stack;
E_Client *focused_ec;
focused_ec = history_policy->focused_ec;
- focus_stack = history_policy->focus_stack;
- defer_focus_stack = history_policy->defer_focus_stack;
- if (!focus_stack)
+ if (!history_policy->focus_stack)
{
- focus_stack = eina_list_merge(focus_stack, defer_focus_stack);
+ history_policy->focus_stack = eina_list_merge(history_policy->focus_stack, history_policy->defer_focus_stack);
goto end;
}
E_CLIENT_FOREACH(defer_ec)
{
- if (!eina_list_data_find(defer_focus_stack, defer_ec)) continue;
+ if (!eina_list_data_find(history_policy->defer_focus_stack, defer_ec)) continue;
find_rel = EINA_FALSE;
inserted = EINA_FALSE;
- focus_stack = eina_list_remove(focus_stack, defer_ec);
+ history_policy->focus_stack = eina_list_remove(history_policy->focus_stack, defer_ec);
- EINA_LIST_FOREACH(focus_stack, l, ec)
+ EINA_LIST_FOREACH(history_policy->focus_stack, l, ec)
{
if (ec == NULL) continue;
if (ec->layer > defer_ec->layer) continue;
- focus_stack = eina_list_prepend_relative_list(focus_stack, defer_ec, l);
+ history_policy->focus_stack = eina_list_prepend_relative_list(history_policy->focus_stack, defer_ec, l);
inserted = EINA_TRUE;
break;
}
if (!inserted)
- focus_stack = eina_list_append(focus_stack, defer_ec);
+ history_policy->focus_stack = eina_list_append(history_policy->focus_stack, defer_ec);
}
end:
- defer_focus_stack = eina_list_free(defer_focus_stack);
-
- return;
+ history_policy->defer_focus_stack = eina_list_free(history_policy->defer_focus_stack);
}
static E_Client *
Eina_List *l = NULL;
Eina_Bool child_deferred;
E_Zone *zone;
- Eina_List *defer_focus_stack;
- defer_focus_stack = history_policy->defer_focus_stack;
zone = history_policy->zone;
focused_ec = history_policy->focused_ec;
E_CLIENT_REVERSE_FOREACH(ec)
{
- if (!eina_list_data_find(defer_focus_stack, ec)) continue;
+ if (!eina_list_data_find(history_policy->defer_focus_stack, ec)) continue;
if (e_object_is_del(E_OBJECT(ec))) continue;
if (e_client_util_ignored_get(ec)) continue;
{
if (e_client_transient_policy_get(cec) == E_TRANSIENT_BELOW) continue;
if (!(cec->icccm.accepts_focus || cec->icccm.take_focus)) continue;
- if (eina_list_data_find(defer_focus_stack, cec))
+ if (eina_list_data_find(history_policy->defer_focus_stack, cec))
{
child_deferred = EINA_TRUE;
break;
static Eina_Bool
_e_focus_policy_history_focus_can_take_by_vis_obscured(E_Focus_Policy_History *history_policy, E_Client *ec)
{
- Eina_List *defer_focus_stack;
-
- defer_focus_stack = history_policy->defer_focus_stack;
-
switch (ec->visibility.obscured)
{
case E_VISIBILITY_UNKNOWN:
return EINA_FALSE;
if (!evas_object_visible_get(ec->frame) &&
- !eina_list_data_find(defer_focus_stack, ec))
+ !eina_list_data_find(history_policy->defer_focus_stack, ec))
return EINA_FALSE;
break;
{
Eina_List *l = NULL;
E_Client *temp_ec = NULL;
- Eina_List *focus_stack;
// call the intercept hook of the revert focus
if (e_client_intercept_hook_focus_revert_call(ec))
return NULL;
- focus_stack = history_policy->focus_stack;
-
- EINA_LIST_FOREACH(focus_stack, l, temp_ec)
+ EINA_LIST_FOREACH(history_policy->focus_stack, l, temp_ec)
{
if (_e_focus_policy_history_focus_can_take(history_policy, temp_ec))
return temp_ec;
history_policy = (E_Focus_Policy_History *)data;
if (!history_policy) return;
- ELOGF("FOCUS", "focus defer set", ec);
+ ELOGF("FOCUS", "focus defer set callback. e_client_focus_defer_set is called.", ec);
- //ELOGF("FOCUS", "focus defer set", ec);
- _focus_policy_history_focus_focus_defer_set(history_policy, ec);
+ _e_focus_policy_history_focus_focus_defer_set(history_policy, ec);
}
static void
if (!history_policy) return;
//ELOGF("FOCUS", "focus latest set", ec);
+
_focus_policy_history_focus_stack_latest_set(history_policy, ec);
}
{
if (!e_policy_visibility_client_is_uniconic(ec))
{
- _focus_policy_history_focus_focus_defer_set(history_policy, ec);
+ _e_focus_policy_history_focus_focus_defer_set(history_policy, focus_ec);
_focus_policy_history_focus_stack_latest_set(history_policy, focus_ec);
}
else
}
else
{
- _focus_policy_history_focus_focus_defer_set(history_policy, ec);
+ _e_focus_policy_history_focus_focus_defer_set(history_policy, focus_ec);
_focus_policy_history_focus_stack_latest_set(history_policy, focus_ec);
}
}
_focus_policy_history_hook_cb_client_eval_end(void *data, E_Client *ec)
{
E_Focus_Policy_History *history_policy;
- Eina_List *focus_stack;
E_Client *focused_ec;
history_policy = (E_Focus_Policy_History *)data;
if (!history_policy) return;
- focus_stack = history_policy->focus_stack;
focused_ec = history_policy->focused_ec;
if ((!ec->input_only) && (!ec->iconic) &&
/* focus window by default when it is the only one on desk */
E_Client *ec2 = NULL;
Eina_List *l;
- EINA_LIST_FOREACH(focus_stack, l, ec2)
+ EINA_LIST_FOREACH(history_policy->focus_stack, l, ec2)
{
if (ec == ec2) continue;
if ((!ec2->iconic) && (ec2->visible) &&
return EINA_TRUE;
}
+static void
+_e_focus_policy_history_focus_stack_append_current_focused(E_Focus_Policy_History *history_policy, E_Client *ec)
+{
+ Eina_List *l = NULL;
+ E_Client *focused_ec, *temp_ec = NULL;
+
+ 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;
+
+ history_policy->focus_stack = eina_list_append_relative_list(history_policy->focus_stack, ec, l);
+ return;
+ }
+
+ history_policy->focus_stack = eina_list_prepend(history_policy->focus_stack, ec);
+}
+
static Eina_Bool
_focus_policy_history_hook_cb_comp_object_show(void *data, E_Client *ec)
{
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->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);
- }
+ _e_focus_policy_history_focus_stack_append_current_focused(history_policy, ec);
else
- _e_focus_policy_history_focus_defer_unset(history_policy, ec);
-
+ _e_focus_policy_history_focus_focus_defer_set(history_policy, ec);
}
}
if (history_policy->focused_ec != ec) return EINA_TRUE;
- /* ensure focus-out */
- ELOGF("FOCUS", "focus unset | comp_object_hide ", ec);
- e_client_frame_focus_set(ec, EINA_FALSE);
- _e_focus_policy_history_focus_defer_unset(history_policy, ec);
+ if (ec->focused)
+ {
+ /* ensure focus-out */
+ ELOGF("FOCUS", "focus unset | comp_object_hide ", ec);
+ e_client_frame_focus_set(ec, EINA_FALSE);
+ _e_focus_policy_history_focus_defer_unset(history_policy, ec);
+ }
return EINA_TRUE;
}
E_Focus_Policy_History *history_policy;
E_Client *ec;
const Eina_List *l;
- Eina_List *focus_stack;
history_policy = (E_Focus_Policy_History *)data;
if (!history_policy) return;
if (e_config->focus_policy == E_FOCUS_MOUSE) return;
- focus_stack = history_policy->focus_stack;
-
- EINA_LIST_FOREACH(focus_stack, l, ec)
+ EINA_LIST_FOREACH(history_policy->focus_stack, l, ec)
if (ec->desk && ec->desk->visible && (!ec->iconic))
{
g_mutex_lock(&e_comp->input_key_grabs_mutex);
E_Zone *zone;
E_Client *defered_focus_ec, *reverted_focus_ec = NULL;
E_Client *focused_ec, *old_focused_ec = NULL;
- Eina_List *focus_stack;
history_policy = (E_Focus_Policy_History *)impl;
EINA_SAFETY_ON_NULL_RETURN_VAL(history_policy, EINA_FALSE);
// current focused ec
focused_ec = history_policy->focused_ec;
- focus_stack = history_policy->focus_stack;
-
if ((!focused_ec) ||
- (focused_ec != eina_list_data_get(focus_stack)) ||
+ (focused_ec != eina_list_data_get(history_policy->focus_stack)) ||
(!_e_focus_policy_history_focus_can_take(history_policy, focused_ec)))
{
reverted_focus_ec = _focus_policy_history_focusable_get(history_policy, focused_ec);