discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=d3468dd920356c90060b062dfeeb324c3a4f75f9

commit d3468dd920356c90060b062dfeeb324c3a4f75f9
Author: Mike Blumenkrantz <[email protected]>
Date:   Thu Jan 30 12:44:17 2014 -0500

    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 22ed687..6b99774 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 82b1f68..0fd4238 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 cf17aa0..3c9b1bc 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 8974896..51b7162 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 */

-- 


Reply via email to