From f91f09e8d9f6dc559e9417592cc55593a0e36f8d Mon Sep 17 00:00:00 2001 From: Taehyub Kim Date: Tue, 21 Feb 2023 15:17:41 +0900 Subject: [PATCH] DragAndDrop : support multiwindow dnd on single process Change-Id: Ia5ddf32770aaabf13cd381af4c42f68347705044 --- .../tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp | 18 ++++++++++++++++++ .../tizen-wayland/drag-and-drop-impl-ecore-wl2.h | 1 + 2 files changed, 19 insertions(+) diff --git a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp index b6654e6..476715b 100644 --- a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp +++ b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.cpp @@ -223,10 +223,18 @@ bool DragAndDropEcoreWl::AddListener(Dali::Actor target, Dali::DragAndDrop::Drag } } + auto parent = Dali::DevelWindow::Get(target); + Ecore_Wl2_Window* parentWindow = AnyCast(parent.GetNativeHandle()); + if(parentWindow == nullptr) + { + return false; + } + DropTarget targetData; targetData.target = target; targetData.callback = callback; targetData.inside = false; + targetData.parentWindowId = ecore_wl2_window_id_get(parentWindow); mDropTargets.push_back(targetData); @@ -330,6 +338,11 @@ bool DragAndDropEcoreWl::CalculateDragEvent(void* event) for(std::size_t i = 0; i < mDropTargets.size(); i++) { + if(ev->win != mDropTargets[i].parentWindowId) + { + continue; + } + Vector2 position = mDropTargets[i].target.GetProperty(Dali::Actor::Property::POSITION); Vector2 size = mDropTargets[i].target.GetProperty(Dali::Actor::Property::SIZE); bool currentInside = IsIntersection(ev->x, ev->y, position.x, position.y, size.width, size.height); @@ -376,6 +389,11 @@ bool DragAndDropEcoreWl::CalculateViewRegion(void* event) for(std::size_t i = 0; i < mDropTargets.size(); i++) { + if(ev->win != mDropTargets[i].parentWindowId) + { + continue; + } + Vector2 position = mDropTargets[i].target.GetProperty(Dali::Actor::Property::POSITION); Vector2 size = mDropTargets[i].target.GetProperty(Dali::Actor::Property::SIZE); // If the drop position is in the target object region, request drop data to the source object diff --git a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h index 162c3d0..0b1b286 100644 --- a/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h +++ b/dali/internal/drag-and-drop/tizen-wayland/drag-and-drop-impl-ecore-wl2.h @@ -35,6 +35,7 @@ struct DropTarget Dali::Actor target; Dali::DragAndDrop::DragAndDropFunction callback; bool inside; + int parentWindowId; }; /** -- 2.7.4