discomfitor pushed a commit to branch enlightenment-0.19.

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

commit 7bdbc9c9e4d0eb4da96642f512f267175e9756a9
Author: Mike Blumenkrantz <zm...@osg.samsung.com>
Date:   Thu Nov 12 17:17:38 2015 -0500

    improve x11 client focusing with mouse-based focus policies on mouse move
    
    in the case that a mouse move event occurs, the compositor should validate
    the event to ensure that the mouse cursor is actually over the window that
    the event claims to be from
    
    fix T2594
---
 src/bin/e_comp_x.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c
index 00c2314..81dc9cf 100644
--- a/src/bin/e_comp_x.c
+++ b/src/bin/e_comp_x.c
@@ -2266,8 +2266,22 @@ _e_comp_x_mouse_move(void *d EINA_UNUSED, int t 
EINA_UNUSED, Ecore_Event_Mouse_M
         if ((!ec) && (ev->window != ev->event_window))
           ec = _e_comp_x_client_find_by_window(ev->event_window);
         if ((!ec) || e_client_util_ignored_get(ec)) return 
ECORE_CALLBACK_RENEW;
-        if ((!ec->mouse_in) && (!ec->hidden) && e_client_util_desk_visible(ec, 
e_desk_current_get(ec->zone)))
-          e_client_mouse_in(ec, e_comp_canvas_x_root_adjust(ec->comp, 
ev->root.x), e_comp_canvas_x_root_adjust(ec->comp, ev->root.y));
+        if ((!ec->mouse_in) && evas_object_visible_get(ec->frame) && 
(!ec->desk->animate_count))
+          {
+             E_Client *tec;
+             Ecore_Window top = e_comp_top_window_at_xy_get(ec->comp, 
ev->root.x, ev->root.y);
+             int x, y;
+             if (top == ec->comp->ee_win) return ECORE_CALLBACK_RENEW;
+
+             x = e_comp_canvas_x_root_adjust(ec->comp, ev->root.x);
+             y = e_comp_canvas_x_root_adjust(ec->comp, ev->root.y);
+             for (tec = e_client_above_get(ec); tec; tec = 
e_client_above_get(tec))
+               {
+                  if (!evas_object_visible_get(tec->frame)) continue;
+                  if (E_INSIDE(x, y, tec->x, tec->y, tec->w, tec->h)) return 
ECORE_CALLBACK_RENEW;
+               }
+             e_client_mouse_in(ec, x, y);
+          }
         return ECORE_CALLBACK_RENEW;
      }
    E_COMP_X_PIXMAP_CHECK ECORE_CALLBACK_RENEW;

-- 


Reply via email to