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