e_comp_wl_data: Send initial drag enter to pointer under E_Client 55/298055/1
authorJunseok Kim <juns.kim@samsung.com>
Wed, 30 Aug 2023 04:30:34 +0000 (13:30 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Thu, 31 Aug 2023 00:07:52 +0000 (09:07 +0900)
The drag and drop can start by start_drag request even if the client isn't e_comp_wl->ptr.ec.
To make the logic of initial dragging and during dragging,
Send initial drag enter to pointer under E_Client instead of e_comp_wl->ptr.ec.

Change-Id: I2acdde35b50f6b45952abe8518047a6e5eb324e2

src/bin/e_comp_wl_data.c

index 866bef2..042f9bd 100644 (file)
@@ -721,6 +721,8 @@ _e_comp_wl_data_device_cb_drag_start(struct wl_client *client, struct wl_resourc
    Eina_List *l;
    struct wl_resource *res;
    E_Client *drag_icon_ec = NULL, *ec = NULL;
+   E_Client *ec_under_pointer = NULL;
+   E_Desk *desk;
    int x, y;
 
    DBG("Data Device Drag Start");
@@ -780,8 +782,12 @@ _e_comp_wl_data_device_cb_drag_start(struct wl_client *client, struct wl_resourc
         e_drag_resize(e_comp_wl->drag, drag_icon_ec->w, drag_icon_ec->h);
      }
    e_drag_start(e_comp_wl->drag, x, y);
-   if (e_comp_wl->ptr.ec)
-     e_comp_wl_data_device_send_enter(e_comp_wl->ptr.ec);
+
+   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);
+   if (ec_under_pointer)
+     e_comp_wl_data_device_send_enter(ec_under_pointer);
+
    e_comp_canvas_feed_mouse_up(0);
 
    e_comp_wl_data_current_device_id_set(-1);