discomfitor pushed a commit to branch master.

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

commit a08ac02e820ba7fc6064f74414cfe810e775d5ed
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Mon Nov 30 16:27:04 2015 -0500

    add config option for allowing sticky windows to receive focus reverts
    
    since forever, sticky windows have not been allowed to receive focus after
    various events, eg. desk flip or window close. in some workflows, however,
    this may actually be desired behavior
    
    disabled by default
    
    fix T2837
---
 src/bin/e_client.c                                        | 2 +-
 src/bin/e_config.c                                        | 2 ++
 src/bin/e_config.h                                        | 1 +
 src/bin/e_desk.c                                          | 2 +-
 src/modules/conf_window_manipulation/e_int_config_focus.c | 9 +++++++++
 5 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/bin/e_client.c b/src/bin/e_client.c
index 28191e9..d6eb0c4 100644
--- a/src/bin/e_client.c
+++ b/src/bin/e_client.c
@@ -3579,7 +3579,7 @@ e_client_activate(E_Client *ec, Eina_Bool just_do_it)
              if (!ec->lock_user_iconify)
                e_client_uniconify(ec);
           }
-        if ((!ec->iconic) && (!ec->sticky))
+        if ((!ec->iconic) && ((!ec->sticky) || 
e_config->focus_revert_allow_sticky))
           {
              int val = e_config->focus_last_focused_per_desktop;
 
diff --git a/src/bin/e_config.c b/src/bin/e_config.c
index 80501aa..00d4207 100644
--- a/src/bin/e_config.c
+++ b/src/bin/e_config.c
@@ -525,6 +525,7 @@ _e_config_edd_init(Eina_Bool old)
    E_CONFIG_VAL(D, T, resize_info_visible, INT); /**/
    E_CONFIG_VAL(D, T, focus_last_focused_per_desktop, INT); /**/
    E_CONFIG_VAL(D, T, focus_revert_on_hide_or_close, INT); /**/
+   E_CONFIG_VAL(D, T, focus_revert_allow_sticky, INT); /**/
    E_CONFIG_VAL(D, T, pointer_slide, INT); /**/
    E_CONFIG_VAL(D, T, disable_all_pointer_warps, INT); /**/
    E_CONFIG_VAL(D, T, pointer_warp_speed, DOUBLE); /**/
@@ -1410,6 +1411,7 @@ e_config_load(void)
    E_CONFIG_LIMIT(e_config->resize_info_visible, 0, 1);
    E_CONFIG_LIMIT(e_config->focus_last_focused_per_desktop, 0, 1);
    E_CONFIG_LIMIT(e_config->focus_revert_on_hide_or_close, 0, 1);
+   E_CONFIG_LIMIT(e_config->focus_revert_allow_sticky, 0, 1);
    E_CONFIG_LIMIT(e_config->pointer_slide, 0, 1);
    E_CONFIG_LIMIT(e_config->disable_all_pointer_warps, 0, 1);
    E_CONFIG_LIMIT(e_config->pointer_warp_speed, 0.0, 1.0);
diff --git a/src/bin/e_config.h b/src/bin/e_config.h
index 2874ac7..a2f9a7a 100644
--- a/src/bin/e_config.h
+++ b/src/bin/e_config.h
@@ -161,6 +161,7 @@ struct _E_Config
    int         resize_info_visible; // GUI
    int         focus_last_focused_per_desktop; // GUI
    int         focus_revert_on_hide_or_close; // GUI
+   int         focus_revert_allow_sticky; // GUI
    int         disable_all_pointer_warps; // GUI
    int         pointer_slide; // GUI
    double      pointer_warp_speed; // GUI
diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c
index 77f157a..c7b3d5f 100644
--- a/src/bin/e_desk.c
+++ b/src/bin/e_desk.c
@@ -377,7 +377,7 @@ e_desk_last_focused_focus(E_Desk *desk)
              /* this was the window last focused in this desktop */
              if (!ec->lock_focus_out)
                {
-                  if (ec->sticky)
+                  if (ec->sticky && (!e_config->focus_revert_allow_sticky))
                     {
                        ecs = ec;
                        continue;
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 ceb84f3..f5c6f00 100644
--- a/src/modules/conf_window_manipulation/e_int_config_focus.c
+++ b/src/modules/conf_window_manipulation/e_int_config_focus.c
@@ -26,6 +26,7 @@ struct _E_Config_Dialog_Data
    int    always_click_to_focus;
    int    focus_last_focused_per_desktop;
    int    focus_revert_on_hide_or_close;
+   int    focus_revert_allow_sticky;
    int    pointer_slide;
    int    disable_all_pointer_warps;
    double pointer_warp_speed;
@@ -75,6 +76,8 @@ _fill_data(E_Config_Dialog_Data *cfdata)
      e_config->focus_last_focused_per_desktop;
    cfdata->focus_revert_on_hide_or_close =
      e_config->focus_revert_on_hide_or_close;
+   cfdata->focus_revert_allow_sticky =
+     e_config->focus_revert_allow_sticky;
    cfdata->pointer_slide = e_config->pointer_slide;
    cfdata->disable_all_pointer_warps = e_config->disable_all_pointer_warps;
    cfdata->pointer_warp_speed = e_config->pointer_warp_speed;
@@ -181,6 +184,8 @@ _advanced_apply(E_Config_Dialog *cfd EINA_UNUSED, 
E_Config_Dialog_Data *cfdata)
      cfdata->focus_last_focused_per_desktop;
    e_config->focus_revert_on_hide_or_close =
      cfdata->focus_revert_on_hide_or_close;
+   e_config->focus_revert_allow_sticky =
+     cfdata->focus_revert_allow_sticky;
    e_config->pointer_slide = cfdata->pointer_slide;
    e_config->disable_all_pointer_warps = cfdata->disable_all_pointer_warps;
    e_config->pointer_warp_speed = cfdata->pointer_warp_speed;
@@ -205,6 +210,7 @@ _advanced_check_changed(E_Config_Dialog *cfd EINA_UNUSED, 
E_Config_Dialog_Data *
           (e_config->always_click_to_focus != cfdata->always_click_to_focus) ||
           (e_config->focus_last_focused_per_desktop != 
cfdata->focus_last_focused_per_desktop) ||
           (e_config->focus_revert_on_hide_or_close != 
cfdata->focus_revert_on_hide_or_close) ||
+          (e_config->focus_revert_allow_sticky != 
cfdata->focus_revert_allow_sticky) ||
           (e_config->pointer_slide != cfdata->pointer_slide) ||
           (e_config->disable_all_pointer_warps != 
cfdata->disable_all_pointer_warps) ||
           (fabs(e_config->pointer_warp_speed - cfdata->pointer_warp_speed) > 
DBL_EPSILON) ||
@@ -361,6 +367,9 @@ _advanced_create(E_Config_Dialog *cfd EINA_UNUSED, Evas 
*evas, E_Config_Dialog_D
    ob = e_widget_check_add(evas, _("Refocus last window on desktop switch"),
                            &(cfdata->focus_last_focused_per_desktop));
    e_widget_framelist_object_append(of, ob);
+   ob = e_widget_check_add(evas, _("Allow focusing of sticky windows when 
reverting focus"),
+                           &(cfdata->focus_revert_allow_sticky));
+   e_widget_framelist_object_append(of, ob);
    ob = e_widget_check_add(evas, _("Focus last focused window on lost focus"),
                            &(cfdata->focus_revert_on_hide_or_close));
    e_widget_framelist_object_append(of, ob);

-- 


Reply via email to