_focus_policy_topmost_update(E_Focus_Policy_Impl *impl)
{
E_Focus_Policy_Topmost *topmost_policy;
+ E_Zone *zone;
+ E_Client *focusable_ec, *focused_ec;
topmost_policy = (E_Focus_Policy_Topmost *)impl;
EINA_SAFETY_ON_NULL_RETURN_VAL(topmost_policy, EINA_FALSE);
+ zone = topmost_policy->zone;
+ EINA_SAFETY_ON_NULL_RETURN_VAL(zone, EINA_FALSE);
+
+ // no need to update the focused ec when zone is not displaying
+ if (!e_zone_is_displaying(zone)) return EINA_FALSE;
+
+ // current focused ec
+ focused_ec = topmost_policy->focused_ec;
+
+ // next focusable ec
+ focusable_ec = _e_focus_policy_topmost_focusable_get();
+ if (focusable_ec == focused_ec) return EINA_TRUE;
+
+ e_client_frame_focus_set(focused_ec, EINA_FALSE);
+
+ if (focusable_ec)
+ {
+ ELOGF("FOCUS", "focus set | topmost focus calculate Zone(%d)", focusable_ec, zone->id);
+ e_client_frame_focus_set(focusable_ec, EINA_TRUE);
+ }
+ else
+ {
+ ELOGF("FOCUS", "focus unset | No focusable ec Zone(%d)", focused_ec, zone->id);
+ }
+
return EINA_TRUE;
}