static void
_e_client_visibility_zone_calculate(E_Zone *zone)
{
- E_Client *ec;
+ E_Client *ec, *top_visible_ec = NULL;
Evas_Object *o;
Eina_Tiler *t;
Eina_Rectangle r, *_r;
if (is_intersected)
{
Eina_Bool opaque = EINA_FALSE;
+ if (!top_visible_ec) top_visible_ec = ec;
+
/* unobscured case */
if (ec->visibility.obscured == 0)
{
/* do nothing */
}
}
+
+ if ((e_config->focus_policy_ext == E_FOCUS_EXT_TOP_STACK) &&
+ (!ec->focused) && (ec == top_visible_ec) &&
+ (!ec->visibility.obscured) &&
+ ((ec->icccm.accepts_focus) || (ec->icccm.take_focus)))
+ {
+ e_client_focused_set(ec);
+ }
+
}
eina_tiler_free(t);
E_CONFIG_VAL(D, T, window_placement_policy, INT); /**/
E_CONFIG_VAL(D, T, window_grouping, INT); /**/
E_CONFIG_VAL(D, T, focus_policy, INT); /**/
+ E_CONFIG_VAL(D, T, focus_policy_ext, INT); /**/
E_CONFIG_VAL(D, T, focus_setting, INT); /**/
E_CONFIG_VAL(D, T, pass_click_on, INT); /**/
E_CONFIG_VAL(D, T, window_activehint_policy, INT); /**/
E_CONFIG_LIMIT(e_config->window_placement_policy, E_WINDOW_PLACEMENT_SMART, E_WINDOW_PLACEMENT_MANUAL);
E_CONFIG_LIMIT(e_config->window_grouping, 0, 1);
E_CONFIG_LIMIT(e_config->focus_policy, 0, 2);
+ E_CONFIG_LIMIT(e_config->focus_policy_ext, 0, 1);
E_CONFIG_LIMIT(e_config->focus_setting, 0, 3);
E_CONFIG_LIMIT(e_config->pass_click_on, 0, 1);
E_CONFIG_LIMIT(e_config->window_activehint_policy, E_ACTIVEHINT_POLICY_IGNORE, E_ACTIVEHINT_POLICY_LAST - 1);
int window_placement_policy; // GUI
int window_grouping; // GUI
int focus_policy; // GUI
+ int focus_policy_ext; // GUI
int focus_setting; // GUI
int pass_click_on; // GUI
int window_activehint_policy; // GUI