bool UIManager::updateDraggingWidget(const UIWidgetPtr& draggingWidget, const Point& clickedPos) { bool accepted = false; UIWidgetPtr oldDraggingWidget = m_draggingWidget; m_draggingWidget = nullptr; if(oldDraggingWidget) { UIWidgetPtr droppedWidget; if(!clickedPos.isNull()) { auto clickedChildren = m_rootWidget->recursiveGetChildrenByPos(clickedPos); for(const UIWidgetPtr& child : clickedChildren) { if(child->onDrop(oldDraggingWidget, clickedPos)) { droppedWidget = child; break; } } } accepted = oldDraggingWidget->onDragLeave(droppedWidget, clickedPos); oldDraggingWidget->updateState(Fw::DraggingState); } if(draggingWidget) { if(draggingWidget->onDragEnter(clickedPos)) { m_draggingWidget = draggingWidget; draggingWidget->updateState(Fw::DraggingState); accepted = true; } } return accepted; }