discomfitor pushed a commit to branch master.

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

commit 848dec15fb4882691dd0982aab41780b65bd6ce4
Author: Mike Blumenkrantz <zm...@enlightenment.org>
Date:   Thu Nov 21 12:38:35 2013 -0500

    revise d739ed0e2ecd8eab1bdf4d30b5fd40faba4c0533 to not break changing focus 
policies
    
    thise commit added focus_policy member to E_Border as something to be used 
for setting a per-window focus policy. setting it on each window is a huge pain 
if the global policy ever changes, so it's better to use this member only as an 
override for the global policy which can be checked to see if it's been set
---
 src/bin/e_border.c |  4 ++--
 src/bin/e_border.h | 15 +++++++++++++--
 src/bin/e_focus.c  | 14 +++++++-------
 3 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/src/bin/e_border.c b/src/bin/e_border.c
index 462c8e0..40ee0cf 100644
--- a/src/bin/e_border.c
+++ b/src/bin/e_border.c
@@ -420,7 +420,7 @@ e_border_new(E_Container *con, Ecore_X_Window win, int 
first_map, int internal)
    ecore_x_window_shadow_tree_flush();
    e_object_del_func_set(E_OBJECT(bd), E_OBJECT_CLEANUP_FUNC(_e_border_del));
 
-   bd->focus_policy = e_config->focus_policy;
+   bd->focus_policy_override = E_FOCUS_LAST;
    bd->w = 1;
    bd->h = 1;
    /* FIXME: ewww - round trip */
@@ -7284,7 +7284,7 @@ _e_border_eval0(E_Border *bd)
           }
         else if (bd->client.netwm.type == ECORE_X_WINDOW_TYPE_DESKTOP)
           {
-             bd->focus_policy = E_FOCUS_CLICK;
+             bd->focus_policy_override = E_FOCUS_CLICK;
              e_focus_setup(bd);
              if (!bd->client.netwm.state.skip_pager)
                {
diff --git a/src/bin/e_border.h b/src/bin/e_border.h
index 0b28fe7..fff7499 100644
--- a/src/bin/e_border.h
+++ b/src/bin/e_border.h
@@ -46,7 +46,8 @@ typedef enum _E_Focus_Policy
 {
    E_FOCUS_CLICK,
    E_FOCUS_MOUSE,
-   E_FOCUS_SLOPPY
+   E_FOCUS_SLOPPY,
+   E_FOCUS_LAST
 } E_Focus_Policy;
 
 typedef enum _E_Urgency_Policy
@@ -667,7 +668,7 @@ struct _E_Border
    Eina_Bool                  argb;
 
    int                        tmp_input_hidden;
-   int                        focus_policy;
+   E_Focus_Policy             focus_policy_override;
 };
 
 struct _E_Border_Pending_Move_Resize
@@ -857,6 +858,16 @@ e_border_inset_height_get(const E_Border *bd)
    return bd->client_inset.t + bd->client_inset.b;
 }
 
+/* e_config not available everywhere e_border.h is used...
+static inline Eina_Bool
+e_border_focus_policy_click(const E_Border *bd)
+{
+   return ((bd->focus_policy_override == E_FOCUS_CLICK) || 
(e_config->focus_policy == E_FOCUS_CLICK));
+}
+*/
+#define e_border_focus_policy_click(bd) \
+  ((bd->focus_policy_override == E_FOCUS_CLICK) || (e_config->focus_policy == 
E_FOCUS_CLICK))
+
 /* macro for finding misuse of changed flag */
 #if 0
 # define BD_CHANGED(BD) \
diff --git a/src/bin/e_focus.c b/src/bin/e_focus.c
index 3a45779..11836fe 100644
--- a/src/bin/e_focus.c
+++ b/src/bin/e_focus.c
@@ -27,8 +27,8 @@ e_focus_idler_before(void)
 EAPI void
 e_focus_event_mouse_in(E_Border *bd)
 {
-   if ((bd->focus_policy == E_FOCUS_MOUSE) ||
-       (bd->focus_policy == E_FOCUS_SLOPPY))
+   if ((e_config->focus_policy == E_FOCUS_MOUSE) ||
+       (e_config->focus_policy == E_FOCUS_SLOPPY))
      {
         e_border_focus_set(bd, 1, 1);
      }
@@ -49,7 +49,7 @@ e_focus_event_mouse_in(E_Border *bd)
 EAPI void
 e_focus_event_mouse_out(E_Border *bd)
 {
-   if (bd->focus_policy == E_FOCUS_MOUSE)
+   if (e_config->focus_policy == E_FOCUS_MOUSE)
      {
         if (!bd->lock_focus_in)
           {
@@ -65,7 +65,7 @@ e_focus_event_mouse_down(E_Border *bd)
 {
    if (!bd->focused)
      {
-        if (bd->focus_policy == E_FOCUS_CLICK)
+        if (e_border_focus_policy_click(bd))
           e_border_focus_set(bd, 1, 1);
         else if (e_config->always_click_to_focus)
           e_border_focus_set(bd, 1, 1);
@@ -85,7 +85,7 @@ e_focus_event_mouse_up(E_Border *bd __UNUSED__)
 EAPI void
 e_focus_event_focus_in(E_Border *bd)
 {
-   if ((bd->focus_policy == E_FOCUS_CLICK) &&
+   if ((e_border_focus_policy_click(bd)) &&
        (!e_config->always_click_to_raise) &&
        (!e_config->always_click_to_focus))
      {
@@ -104,7 +104,7 @@ e_focus_event_focus_in(E_Border *bd)
 EAPI void
 e_focus_event_focus_out(E_Border *bd)
 {
-   if ((bd->focus_policy == E_FOCUS_CLICK) &&
+   if ((e_border_focus_policy_click(bd)) &&
        (!e_config->always_click_to_raise) &&
        (!e_config->always_click_to_focus))
      {
@@ -128,7 +128,7 @@ e_focus_event_focus_out(E_Border *bd)
 EAPI void
 e_focus_setup(E_Border *bd)
 {
-   if ((bd->focus_policy == E_FOCUS_CLICK) ||
+   if ((e_border_focus_policy_click(bd)) ||
        (e_config->always_click_to_raise) ||
        (e_config->always_click_to_focus))
      {

-- 


Reply via email to