From: Junseok Kim Date: Thu, 30 Nov 2023 02:31:58 +0000 (+0900) Subject: e_comp_wl: Use drag pointer position as ecore event instead of seat.ptr X-Git-Tag: accepted/tizen/unified/20231204.141923~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=130ef48bdd8119a35007a6cadbff743bca0d977a;p=platform%2Fupstream%2Fenlightenment.git e_comp_wl: Use drag pointer position as ecore event instead of seat.ptr There was a bug that drag_data_enter/leave is abnormal when using input generator. The input generator generates virtual pointer as Ecore event. But the drag function uses seat.ptr to get client that under pointer. For such a reason, mismatch occured between cursor position and data_device_enter/leave. For fix this issue, use drag pointer position as the Ecore event. Change-Id: Ida46a8d61bf22fc748ed1540f0d2c47a57abb23a --- diff --git a/src/bin/e_client.c b/src/bin/e_client.c index 75e1737c67..211eac3623 100644 --- a/src/bin/e_client.c +++ b/src/bin/e_client.c @@ -1735,6 +1735,7 @@ _e_client_under_pointer_helper_ignore_client(E_Desk *desk, E_Client *client) if (e_client_util_ignored_get(client) || (!e_desk_has_ec(desk, client))) return EINA_TRUE; if (!evas_object_visible_get(client->frame)) return EINA_TRUE; if (e_policy_client_is_cursor(client)) return EINA_TRUE; + if (e_comp_wl->drag_client == client) return EINA_TRUE; return EINA_FALSE; } diff --git a/src/bin/e_comp_wl.c b/src/bin/e_comp_wl.c index 64e583aaac..a0047c7672 100644 --- a/src/bin/e_comp_wl.c +++ b/src/bin/e_comp_wl.c @@ -2541,7 +2541,7 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mou return ECORE_CALLBACK_RENEW; } - ec = e_client_input_rect_under_pointer_get(legacy_target->desk, e_comp_wl->drag_client); + ec = e_client_under_position_input_get(legacy_target->desk, ev->x, ev->y); EINA_SAFETY_ON_NULL_RETURN_VAL(ec, ECORE_CALLBACK_RENEW); struct wl_resource *surface = e_comp_wl_client_surface_get(ec); diff --git a/src/bin/e_comp_wl_data.c b/src/bin/e_comp_wl_data.c index 5ffaa4a10c..9a1e3cb7fe 100644 --- a/src/bin/e_comp_wl_data.c +++ b/src/bin/e_comp_wl_data.c @@ -970,7 +970,7 @@ _e_comp_wl_data_device_cb_drag_start(struct wl_client *client, struct wl_resourc e_drag_start(e_comp_wl->drag, x, y); desk = e_desk_current_get(e_comp_zone_find_by_ec(ec)); - ec_under_pointer = e_client_input_rect_under_pointer_get(desk, e_comp_wl->drag_client); + ec_under_pointer = e_client_under_position_input_get(desk, x, y); if (ec_under_pointer) e_comp_wl_data_device_send_enter(ec_under_pointer);