From d3468dd920356c90060b062dfeeb324c3a4f75f9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 30 Jan 2014 12:44:17 -0500 Subject: [PATCH] feature: ACTIVATE_EXCLUDE window active hint policy this option causes window activation requests to only activate a window if it is on a currently visible virtual desktop, otherwise it will be set as urgent. I recall that things may have worked this way long ago... --- src/bin/e_client.h | 4 +++- src/bin/e_comp_x.c | 8 +++++++- src/bin/e_config.c | 2 +- src/modules/conf_window_manipulation/e_int_config_focus.c | 2 ++ 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/bin/e_client.h b/src/bin/e_client.h index 22ed6871b..6b9977499 100644 --- a/src/bin/e_client.h +++ b/src/bin/e_client.h @@ -73,7 +73,9 @@ typedef enum _E_Urgency_Policy { E_ACTIVEHINT_POLICY_IGNORE, E_ACTIVEHINT_POLICY_ANIMATE, - E_ACTIVEHINT_POLICY_ACTIVATE + E_ACTIVEHINT_POLICY_ACTIVATE, + E_ACTIVEHINT_POLICY_ACTIVATE_EXCLUDE, + E_ACTIVEHINT_POLICY_LAST, } E_Urgency_Policy; typedef enum _E_Focus_Setting diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 82b1f688f..0fd4238ce 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -1898,7 +1898,13 @@ _e_comp_x_message(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_Cl break; } if ((!starting) && (!ec->focused)) - e_client_activate(ec, EINA_TRUE); + { + if ((e_config->window_activehint_policy == E_ACTIVEHINT_POLICY_ACTIVATE_EXCLUDE) && + (!ec->desk->visible)) + e_client_urgent_set(ec, 1); + else + e_client_activate(ec, EINA_TRUE); + } else evas_object_raise(ec->frame); } diff --git a/src/bin/e_config.c b/src/bin/e_config.c index cf17aa0b2..3c9b1bcd5 100644 --- a/src/bin/e_config.c +++ b/src/bin/e_config.c @@ -1334,7 +1334,7 @@ e_config_load(void) E_CONFIG_LIMIT(e_config->focus_policy, 0, 2); 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, 0, 2); + E_CONFIG_LIMIT(e_config->window_activehint_policy, E_ACTIVEHINT_POLICY_IGNORE, E_ACTIVEHINT_POLICY_LAST - 1); E_CONFIG_LIMIT(e_config->always_click_to_raise, 0, 1); E_CONFIG_LIMIT(e_config->always_click_to_focus, 0, 1); E_CONFIG_LIMIT(e_config->use_auto_raise, 0, 1); diff --git a/src/modules/conf_window_manipulation/e_int_config_focus.c b/src/modules/conf_window_manipulation/e_int_config_focus.c index 89748968f..51b71621f 100644 --- a/src/modules/conf_window_manipulation/e_int_config_focus.c +++ b/src/modules/conf_window_manipulation/e_int_config_focus.c @@ -311,6 +311,8 @@ _advanced_create(E_Config_Dialog *cfd __UNUSED__, Evas *evas, E_Config_Dialog_Da e_widget_framelist_object_append(of, ob); ob = e_widget_radio_add(evas, _("Activate on hint"), E_ACTIVEHINT_POLICY_ACTIVATE, rg); e_widget_framelist_object_append(of, ob); + ob = e_widget_radio_add(evas, _("Activate if on visible desk"), E_ACTIVEHINT_POLICY_ACTIVATE_EXCLUDE, rg); + e_widget_framelist_object_append(of, ob); e_widget_toolbook_page_append(otb, NULL, _("Hints"), of, 1, 0, 1, 0, 0.5, 0.0); /* Pointer */