discomfitor pushed a commit to branch master.

commit 5cebe429d4a60edcf9d5bade0751cf236f0a8011
Author: zmike <zmike@sneaky.(none)>
Date:   Tue May 14 14:34:59 2013 +0900

    fix desk flip focus when switching screens with mouse focus during animation
---
 src/bin/e_desk.c | 41 +++++++++++++++--------------------------
 1 file changed, 15 insertions(+), 26 deletions(-)

diff --git a/src/bin/e_desk.c b/src/bin/e_desk.c
index 1698d1e..bffebe5 100644
--- a/src/bin/e_desk.c
+++ b/src/bin/e_desk.c
@@ -733,37 +733,26 @@ _e_desk_show_end_serious(E_Desk *desk)
 {
    E_Event_Desk_After_Show *ev;
 
-   if ((e_config->focus_policy == E_FOCUS_MOUSE) ||
-       (e_config->focus_policy == E_FOCUS_SLOPPY))
-     {
-        if (e_config->focus_last_focused_per_desktop)
-          {
-
-             if (desk->zone == e_zone_current_get(desk->zone->container))
-               e_desk_last_focused_focus(desk);
-             else
-               {
-                  /* block pointer warp if desk is not in current zone */
-                  E_Border *bd;
-
-                  nofocus = 1;
-                  bd = e_desk_last_focused_focus(desk);
-                  nofocus = 0;
-                  if (bd) e_border_focus_set(bd, 1, 1);
-               }
-          }
-     }
-   else
-     {
-        if (e_config->focus_last_focused_per_desktop)
-          e_desk_last_focused_focus(desk);
-     }
-
    ev = E_NEW(E_Event_Desk_After_Show, 1);
    ev->desk = desk;
    e_object_ref(E_OBJECT(ev->desk));
    ecore_event_add(E_EVENT_DESK_AFTER_SHOW, ev,
                    _e_desk_event_desk_after_show_free, NULL);
+
+   if (!e_config->focus_last_focused_per_desktop) return;
+   if ((e_config->focus_policy == E_FOCUS_MOUSE) ||
+       (e_config->focus_policy == E_FOCUS_SLOPPY))
+     {
+             E_Border *bd;
+             
+             bd = e_border_focused_get();
+             /* only set focus/warp pointer if currently focused window
+              * is on same screen (user hasn't switched screens during 
transition)
+              */
+             if (bd && bd->desk && (bd->desk->zone != desk->zone))
+               return;
+     }
+   e_desk_last_focused_focus(desk);
 }
 
 static void

-- 

------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d

Reply via email to