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); --
