discomfitor pushed a commit to branch enlightenment-0.21.

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

commit a47a9a73a10399fdf5a5caa5aff8493058fa06db
Author: Mike Blumenkrantz <[email protected]>
Date:   Fri Mar 17 13:17:02 2017 -0400

    use even more accurate wl callbacks for detecting ssd mouse in/out events
    
    ensure that any wl client with ssd hits the ssd mouse eventing path
---
 src/bin/e_comp_object.c | 20 +++++++++++++-------
 src/bin/e_comp_wl.c     | 34 +++++++++++++++-------------------
 2 files changed, 28 insertions(+), 26 deletions(-)

diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c
index a591286..24257b3 100644
--- a/src/bin/e_comp_object.c
+++ b/src/bin/e_comp_object.c
@@ -1017,7 +1017,7 @@ _e_comp_object_pixels_get(void *data, Evas_Object *obj)
 /////////////////////////////////////////////
 
 static void
-_e_comp_object_internal_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *event_info)
+_e_comp_object_ssd_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
 {
    E_Comp_Object *cw = data;
 
@@ -1025,7 +1025,7 @@ _e_comp_object_internal_mouse_in(void *data, Evas *e 
EINA_UNUSED, Evas_Object *o
 }
 
 static void
-_e_comp_object_internal_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *event_info)
+_e_comp_object_ssd_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
 {
    E_Comp_Object *cw = data;
 
@@ -1760,11 +1760,7 @@ _e_comp_intercept_show(void *data, Evas_Object *obj 
EINA_UNUSED)
         evas_object_name_set(cw->obj, "cw->obj");
         evas_object_image_colorspace_set(cw->obj, EVAS_COLORSPACE_ARGB8888);
         _e_comp_object_alpha_set(cw);
-        if (cw->ec->internal)
-          {
-             evas_object_event_callback_add(cw->obj, EVAS_CALLBACK_MOUSE_IN, 
_e_comp_object_internal_mouse_in, cw);
-             evas_object_event_callback_add(cw->obj, EVAS_CALLBACK_MOUSE_OUT, 
_e_comp_object_internal_mouse_out, cw);
-          }
+
 #ifdef BORDER_ZOOMAPS
         e_comp_object_zoomap_set(o, 1);
 #else
@@ -3436,6 +3432,16 @@ reshadow:
      }
    else
      cw->frame_extends = 0;
+   if (pbg && (!cw->frame_object))
+     {
+        evas_object_event_callback_del(cw->obj, EVAS_CALLBACK_MOUSE_IN, 
_e_comp_object_ssd_mouse_in);
+        evas_object_event_callback_del(cw->obj, EVAS_CALLBACK_MOUSE_OUT, 
_e_comp_object_ssd_mouse_out);
+     }
+   else
+     {
+        evas_object_event_callback_add(cw->obj, EVAS_CALLBACK_MOUSE_IN, 
_e_comp_object_ssd_mouse_in, cw);
+        evas_object_event_callback_add(cw->obj, EVAS_CALLBACK_MOUSE_OUT, 
_e_comp_object_ssd_mouse_out, cw);
+     }
    evas_object_del(pbg);
    return EINA_TRUE;
 }
diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c
index b920caa..740f911 100644
--- a/src/bin/e_comp_wl.c
+++ b/src/bin/e_comp_wl.c
@@ -237,13 +237,14 @@ _e_comp_wl_mouse_in(E_Client *ec, Evas_Event_Mouse_In *ev)
 }
 
 static void
-_e_comp_wl_evas_cb_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
+_e_comp_wl_evas_cb_mouse_in(void *data, Evas *e EINA_UNUSED, Evas_Object *obj, 
void *event_info)
 {
+   if (e_comp_object_frame_exists(obj)) return;
    _e_comp_wl_mouse_in(data, event_info);
 }
 
 static void
-_e_comp_wl_cb_internal_mouse_in(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info)
+_e_comp_wl_cb_ssd_mouse_in(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info)
 {
    _e_comp_wl_mouse_in(data, event_info);
 }
@@ -287,11 +288,12 @@ _e_comp_wl_mouse_out(E_Client *ec)
 static void
 _e_comp_wl_evas_cb_mouse_out(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info EINA_UNUSED)
 {
+   if (e_comp_object_frame_exists(obj)) return;
    _e_comp_wl_mouse_out(data);
 }
 
 static void
-_e_comp_wl_cb_internal_mouse_out(void *data, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UNUSED)
+_e_comp_wl_cb_ssd_mouse_out(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 {
    _e_comp_wl_mouse_out(data);
 }
@@ -1013,22 +1015,16 @@ _e_comp_wl_client_evas_init(E_Client *ec)
                                   _e_comp_wl_evas_cb_hide, ec);
 
    /* setup input callbacks */
-   if (ec->internal_elm_win)
-     {
-        evas_object_smart_callback_add(ec->frame, "mouse_in",
-          (Evas_Smart_Cb)_e_comp_wl_cb_internal_mouse_in, ec);
-        evas_object_smart_callback_add(ec->frame, "mouse_out",
-          (Evas_Smart_Cb)_e_comp_wl_cb_internal_mouse_out, ec);
-     }
-   else
-     {
-        evas_object_event_callback_priority_add(ec->frame, 
EVAS_CALLBACK_MOUSE_IN,
-                                                EVAS_CALLBACK_PRIORITY_AFTER,
-                                                
(Evas_Object_Event_Cb)_e_comp_wl_evas_cb_mouse_in, ec);
-        evas_object_event_callback_priority_add(ec->frame, 
EVAS_CALLBACK_MOUSE_OUT,
-                                                EVAS_CALLBACK_PRIORITY_AFTER,
-                                                
(Evas_Object_Event_Cb)_e_comp_wl_evas_cb_mouse_out, ec);
-     }
+   evas_object_smart_callback_add(ec->frame, "mouse_in",
+     (Evas_Smart_Cb)_e_comp_wl_cb_ssd_mouse_in, ec);
+   evas_object_smart_callback_add(ec->frame, "mouse_out",
+     (Evas_Smart_Cb)_e_comp_wl_cb_ssd_mouse_out, ec);
+   evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_IN,
+                                           EVAS_CALLBACK_PRIORITY_AFTER,
+                                           
(Evas_Object_Event_Cb)_e_comp_wl_evas_cb_mouse_in, ec);
+   evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_OUT,
+                                           EVAS_CALLBACK_PRIORITY_AFTER,
+                                           
(Evas_Object_Event_Cb)_e_comp_wl_evas_cb_mouse_out, ec);
    evas_object_event_callback_priority_add(ec->frame, EVAS_CALLBACK_MOUSE_MOVE,
                                            EVAS_CALLBACK_PRIORITY_AFTER,
                                            _e_comp_wl_evas_cb_mouse_move, ec);

-- 


Reply via email to