From: Taehyub Kim Date: Tue, 21 Feb 2023 06:16:12 +0000 (+0900) Subject: DragAndDrop : support multiwindow dnd on single process X-Git-Tag: dali_2.2.15~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F57%2F288657%2F3;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git DragAndDrop : support multiwindow dnd on single process Change-Id: Ifadcbe29b6f63420f91cd892c56d11dad5172c44 --- 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 ca895f1..1a773af 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 @@ -228,10 +228,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); @@ -343,6 +351,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); @@ -389,6 +402,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; }; /**