e_comp_wl: set reference point when the wl_surface commit of the drag window 37/295437/2 accepted/tizen/unified/20230710.013140
authorJunseok Kim <juns.kim@samsung.com>
Thu, 6 Apr 2023 06:20:57 +0000 (15:20 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 7 Jul 2023 07:28:06 +0000 (07:28 +0000)
Change-Id: Id23809217567f1d4c5871b1f47165543601ea84f

src/bin/e_comp_wl.c
src/bin/e_comp_wl_data.c

index 0574acd..f22657a 100644 (file)
@@ -2532,6 +2532,7 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mou
      {
         struct wl_resource *res;
         int x, y;
+        int drag_x, drag_y;
         E_Client *ec = NULL;
         E_Client *legacy_target = e_comp_wl->selection.target;
         int device_id = e_comp_wl_data_current_device_id_get();
@@ -2563,7 +2564,11 @@ _e_comp_wl_cb_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mou
         y = ev->y - ec->client.y;
 
         if (e_comp_wl->drag_client)
-          evas_object_move(e_comp_wl->drag_client->frame, ev->x, ev->y);
+          {
+             drag_x = ev->x + e_comp_wl->drag->dx;
+             drag_y = ev->y + e_comp_wl->drag->dy;
+             evas_object_move(e_comp_wl->drag_client->frame, drag_x, drag_y);
+          }
 
         wl_data_device_send_motion(res, ev->timestamp, wl_fixed_from_int(x), wl_fixed_from_int(y));
      }
@@ -2963,31 +2968,27 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
    if ((state->new_attach) ||
        (state->buffer_viewport.changed))
      {
-        if ((cdata->shell.surface) &&
-            (cdata->shell.configure))
+        if ((e_comp_wl->drag) &&
+            (e_comp_wl->drag_client) &&
+            (e_comp_wl->drag_client == ec))
+          {
+             e_drag_reference_point_set(e_comp_wl->drag, state->sx, state->sy);
+
+             e_drag_move(e_comp_wl->drag,
+                         e_comp_wl->drag->x,
+                         e_comp_wl->drag->y);
+
+             e_drag_resize(e_comp_wl->drag,
+                           state->bw, state->bh);
+          }
+        else if ((cdata->shell.surface) &&
+                 (cdata->shell.configure))
           {
              e_comp_wl_commit_sync_configure(ec);
           }
-        else
+        else if (!e_client_video_hw_composition_check(ec))
           {
-             if ((e_comp_wl->drag) &&
-                 (e_comp_wl->drag_client) &&
-                 (e_comp_wl->drag_client == ec))
-               {
-                  e_comp_wl->drag->dx -= state->sx;
-                  e_comp_wl->drag->dy -= state->sy;
-
-                  e_drag_move(e_comp_wl->drag,
-                              e_comp_wl->drag->x + state->sx,
-                              e_comp_wl->drag->y + state->sy);
-
-                  e_drag_resize(e_comp_wl->drag,
-                                state->bw, state->bh);
-               }
-             else if (!e_client_video_hw_composition_check(ec))
-               {
-                  e_client_util_move_resize_without_frame(ec, x, y, ec->w, ec->h);
-               }
+             e_client_util_move_resize_without_frame(ec, x, y, ec->w, ec->h);
           }
 
         if (ec->new_client)
index c7fa0cc..57eb5cb 100644 (file)
@@ -754,12 +754,12 @@ _e_comp_wl_data_device_cb_drag_start(struct wl_client *client, struct wl_resourc
      }
 
    evas_pointer_canvas_xy_get(e_comp->evas, &x, &y);
-   e_comp_wl->drag = e_drag_new(x, y,
-                                           NULL, 0, NULL, 0, NULL, _e_comp_wl_data_device_drag_finished);
+   e_comp_wl->drag = e_drag_new(x, y, NULL, 0, NULL, 0, NULL, _e_comp_wl_data_device_drag_finished);
    e_comp_wl->drag->button_mask = evas_pointer_button_down_mask_get(e_comp->evas);
    if (drag_icon_ec)
      {
         e_drag_object_set(e_comp_wl->drag, drag_icon_ec->frame);
+        e_drag_reference_point_set(e_comp_wl->drag, drag_icon_ec->x, drag_icon_ec->y);
         e_drag_resize(e_comp_wl->drag, drag_icon_ec->w, drag_icon_ec->h);
      }
    e_drag_start(e_comp_wl->drag, x, y);