The focus may be changed at E_COMP_OBJECT_HOOK_LOWER callback.
Change-Id: Ib49b0c6c183d0da96c5553c5babf8723df086ec8
[E_COMP_OBJECT_HOOK_MASK_OBJECT_SET] = NULL,
[E_COMP_OBJECT_HOOK_MASK_OBJECT_UNSET] = NULL,
[E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET] = NULL,
+//#ifdef REFACTOR_FOCUS_POLICY
+ [E_COMP_OBJECT_HOOK_LOWER] = NULL,
+//#endif
};
#ifdef _F_E_COMP_OBJECT_INTERCEPT_HOOK_
(hookpoint != E_COMP_OBJECT_HOOK_RESTACK) &&
(hookpoint != E_COMP_OBJECT_HOOK_MASK_OBJECT_SET) &&
(hookpoint != E_COMP_OBJECT_HOOK_MASK_OBJECT_UNSET) &&
- (hookpoint != E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET))
+ (hookpoint != E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET)
+#ifdef REFACTOR_FOCUS_POLICY
+ && (hookpoint != E_COMP_OBJECT_HOOK_LOWER)
+#endif
+ )
{
return ret;
}
{
E_Client *ec = e_comp_object_client_get(obj);
if (ec)
+#ifdef REFACTOR_FOCUS_POLICY
+ {
+ _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_RESTACK, ec);
+ _e_comp_object_hook_call(E_COMP_OBJECT_HOOK_LOWER, ec);
+ }
+#else
_e_comp_object_hook_call(E_COMP_OBJECT_HOOK_RESTACK, ec);
+#endif
}
}
_e_comp_object_transform_obj_stack_update(obj);
end:
+#ifdef REFACTOR_FOCUS_POLICY
+ // This code executes E_COMP_OBJECT_HOOK_LOWER callback at e_focus_policy_history.c
+#else
if (!cw->ec->post_lower)
e_client_focus_stack_lower(cw->ec);
+#endif
TRACE_DS_END();
}
E_COMP_OBJECT_HOOK_MASK_OBJECT_SET,
E_COMP_OBJECT_HOOK_MASK_OBJECT_UNSET,
E_COMP_OBJECT_HOOK_RENDER_UPDATE_LOCK_SET,
+//#ifdef REFACTOR_FOCUS_POLICY
+ E_COMP_OBJECT_HOOK_LOWER,
+//#endif
E_COMP_OBJECT_HOOK_LAST,
} E_Comp_Object_Hook_Point;
GMutex focused_ec_mutex;
Eina_List *ec_hooks;
+ Eina_List *co_hooks;
};
static void
}
}
+static Eina_Bool
+_focus_policy_hook_history_cb_comp_object_lower(void *data, E_Client *ec)
+{
+ // TODO:
+
+ return EINA_TRUE;
+}
+
static void
_focus_policy_history_del(E_Focus_Policy_Impl *impl)
{
ELOGF("FOCUS", "delete history focus policy.", NULL);
+ E_FREE_LIST(history_policy->co_hooks, e_comp_object_hook_del);
E_FREE_LIST(history_policy->ec_hooks, e_client_hook_del);
g_mutex_clear(&history_policy->focused_ec_mutex);
E_LIST_HOOK_APPEND(history_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_OUT, _focus_policy_history_hook_cb_client_mouse_out, history_policy);
E_LIST_HOOK_APPEND(history_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_DOWN, _focus_policy_history_hook_cb_client_mouse_down, history_policy);
+ // e_comp_object hooks
+ E_COMP_COMP_HOOK_APPEND(history_policy->co_hooks, E_COMP_OBJECT_HOOK_LOWER, _focus_policy_hook_history_cb_comp_object_lower, history_policy);
+
return policy_iface;
fail:
GMutex focused_ec_mutex;
Eina_List *ec_hooks;
+ Eina_List *co_hooks;
};
static void
}
}
+static Eina_Bool
+_focus_policy_hook_topmost_cb_comp_object_lower(void *data, E_Client *ec)
+{
+ // TODO:
+
+ return EINA_TRUE;
+}
+
static void
_focus_policy_topmost_del(E_Focus_Policy_Impl *impl)
{
if (!topmost_policy) return;
+ E_FREE_LIST(topmost_policy->co_hooks, e_comp_object_hook_del);
E_FREE_LIST(topmost_policy->ec_hooks, e_client_hook_del);
g_mutex_clear(&topmost_policy->focused_ec_mutex);
E_LIST_HOOK_APPEND(topmost_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_OUT, _focus_policy_topmost_hook_cb_client_mouse_out, topmost_policy);
E_LIST_HOOK_APPEND(topmost_policy->ec_hooks, E_CLIENT_HOOK_MOUSE_DOWN, _focus_policy_topmost_hook_cb_client_mouse_down, topmost_policy);
+ // e_comp_object hooks
+ E_COMP_COMP_HOOK_APPEND(topmost_policy->co_hooks, E_COMP_OBJECT_HOOK_LOWER, _focus_policy_hook_topmost_cb_comp_object_lower, topmost_policy);
+
return policy_iface;
fail:
break;
case E_VIS_JOB_TYPE_LOWER:
e_client_lower(ec);
+#ifdef REFACTOR_FOCUS_POLICY
+ // This code is executed at E_COMP_OBJECT_HOOK_LOWER callback
+ // at e_focus_policy_topmost.c and at e_focus_policy_history.c
+#else
if (ec->focused)
{
if (!e_config->calc_vis_without_effect)
e_client_revert_focus(ec);
}
+#endif
break;
case E_VIS_JOB_TYPE_HIDE:
evas_object_hide(ec->frame);
e_client_lower(ec);
+#ifdef REFACTOR_FOCUS_POLICY
+ // This code is executed at E_COMP_OBJECT_HOOK_LOWER callback
+ // at e_focus_policy_topmost.c and at e_focus_policy_history.c
+#else
if (ec->focused)
{
if (!e_config->calc_vis_without_effect)
e_client_revert_focus(ec);
}
+#endif
}
static void