Kaydet (Commit) a261016b authored tarafından Katarina Behrens's avatar Katarina Behrens

Make repeated drag'n'drop possible

Change-Id: If87ceeb8ddc4b2aada8ea0c963385a291622fef6
Reviewed-on: https://gerrit.libreoffice.org/61932Reviewed-by: 's avatarKatarina Behrens <Katarina.Behrens@cib.de>
Tested-by: 's avatarKatarina Behrens <Katarina.Behrens@cib.de>
üst c324644a
......@@ -57,6 +57,7 @@ public:
css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
void dragFailed();
void fire_dragEnd();
css::uno::Reference<css::datatransfer::XTransferable> const& GetTransferable() const
{
return m_xTrans;
......@@ -108,6 +109,7 @@ public:
css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
void fire_dragEnter(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde);
void fire_dragOver(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde);
void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde);
};
......
......@@ -86,6 +86,19 @@ void Qt5DragSource::dragFailed()
}
}
void Qt5DragSource::fire_dragEnd()
{
if (m_xListener.is())
{
datatransfer::dnd::DragSourceDropEvent aEv;
aEv.DropAction = datatransfer::dnd::DNDConstants::ACTION_MOVE;
aEv.DropSuccess = true; // FIXME: what if drop didn't work out?
auto xListener = m_xListener;
m_xListener.clear();
xListener->dragDropEnd(aEv);
}
}
OUString SAL_CALL Qt5DragSource::getImplementationName()
{
return OUString("com.sun.star.datatransfer.dnd.VclQt5DragSource");
......@@ -201,6 +214,19 @@ void Qt5DropTarget::fire_dragEnter(const css::datatransfer::dnd::DropTargetDragE
}
}
void Qt5DropTarget::fire_dragOver(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde)
{
osl::ClearableGuard<::osl::Mutex> aGuard(m_aMutex);
std::vector<css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>> aListeners(
m_aListeners);
aGuard.clear();
for (auto const& listener : aListeners)
{
listener->dragOver(dtde);
}
}
void Qt5DropTarget::fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde)
{
osl::ClearableGuard<osl::Mutex> aGuard(m_aMutex);
......
......@@ -899,6 +899,8 @@ void Qt5Frame::draggingStarted(const int x, const int y)
m_pDropTarget->fire_dragEnter(aEvent);
m_bInDrag = true;
}
else
m_pDropTarget->fire_dragOver(aEvent);
}
void Qt5Frame::dropping(const int x, const int y)
......@@ -918,6 +920,12 @@ void Qt5Frame::dropping(const int x, const int y)
aEvent.Transferable = xTransferable;
m_pDropTarget->fire_drop(aEvent);
m_bInDrag = false;
if (m_pDragSource)
{
m_pDragSource->fire_dragEnd();
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment