discomfitor pushed a commit to branch master.

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

commit f6e332946c06124cf6da9e46cc22e075454448d8
Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Mar 22 16:15:15 2017 -0400

    add flag for wl clients to determine ssd mouse-in vs client mouse-in
    
    better handling for moving mouse into ssd region with xwl clients
---
 src/bin/e_comp_wl.c       |  8 ++++++++
 src/bin/e_comp_wl.h       |  1 +
 src/bin/e_comp_wl_input.c | 10 ++++++++--
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c
index 51c7624..5978379 100644
--- a/src/bin/e_comp_wl.c
+++ b/src/bin/e_comp_wl.c
@@ -240,6 +240,10 @@ _e_comp_wl_evas_cb_mouse_in(void *data, Evas *e 
EINA_UNUSED, Evas_Object *obj, v
 static void
 _e_comp_wl_cb_ssd_mouse_in(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info)
 {
+   E_Client *ec = data;
+
+   if (!e_object_is_del(data))
+     ec->comp_data->ssd_mouse_in = 1;
    _e_comp_wl_mouse_in(data, event_info);
 }
 
@@ -289,6 +293,10 @@ _e_comp_wl_evas_cb_mouse_out(void *data, Evas *e 
EINA_UNUSED, Evas_Object *obj E
 static void
 _e_comp_wl_cb_ssd_mouse_out(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 {
+   E_Client *ec = data;
+
+   if (!e_object_is_del(data))
+     ec->comp_data->ssd_mouse_in = 0;
    _e_comp_wl_mouse_out(data);
 }
 
diff --git a/src/bin/e_comp_wl.h b/src/bin/e_comp_wl.h
index 11ff33d..7725521 100644
--- a/src/bin/e_comp_wl.h
+++ b/src/bin/e_comp_wl.h
@@ -358,6 +358,7 @@ struct _E_Comp_Wl_Client_Data
    Eina_Bool buffer_commit : 1;
    Eina_Bool need_xdg6_configure : 1;
    Eina_Bool maximize_anims_disabled : 1;
+   Eina_Bool ssd_mouse_in : 1;
 };
 
 struct _E_Comp_Wl_Output
diff --git a/src/bin/e_comp_wl_input.c b/src/bin/e_comp_wl_input.c
index 41a9e25..3b8e6c1 100644
--- a/src/bin/e_comp_wl_input.c
+++ b/src/bin/e_comp_wl_input.c
@@ -76,8 +76,14 @@ _e_comp_wl_input_pointer_cb_cursor_set(struct wl_client 
*client, struct wl_resou
      }
    if (!surface_resource)
      {
-        ecore_evas_cursor_unset(e_comp->ee);
-        evas_object_hide(e_comp->pointer->o_ptr);
+        if (e_comp_object_frame_exists(ec->frame) &&
+            ec->mouse.in && (!ec->comp_data->ssd_mouse_in))
+          e_pointer_object_set(e_comp->pointer, NULL, 0, 0);
+        else
+          {
+             ecore_evas_cursor_unset(e_comp->ee);
+             evas_object_hide(e_comp->pointer->o_ptr);
+          }
         return;
      }
    ec = wl_resource_get_user_data(surface_resource);

-- 


Reply via email to