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

tdf#120781: Proposed DnD operation is not always 'move'

sometimes drop target doesn't accept drops, dragged objects must not
disappear in such case

Change-Id: I5de3c6c4afc305ea98bd15c7ff55e218364e9475
Reviewed-on: https://gerrit.libreoffice.org/64338
Tested-by: Jenkins
Reviewed-by: 's avatarKatarina Behrens <Katarina.Behrens@cib.de>
üst 097da565
...@@ -57,7 +57,7 @@ public: ...@@ -57,7 +57,7 @@ public:
css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override; css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
void dragFailed(); void dragFailed();
void fire_dragEnd(); void fire_dragEnd(sal_Int8 nAction);
css::uno::Reference<css::datatransfer::XTransferable> const& GetTransferable() const css::uno::Reference<css::datatransfer::XTransferable> const& GetTransferable() const
{ {
return m_xTrans; return m_xTrans;
...@@ -72,6 +72,8 @@ class Qt5DropTarget ...@@ -72,6 +72,8 @@ class Qt5DropTarget
{ {
osl::Mutex m_aMutex; osl::Mutex m_aMutex;
Qt5Frame* m_pFrame; Qt5Frame* m_pFrame;
sal_Int8 mnDragAction;
sal_Int8 mnDropAction;
bool m_bActive; bool m_bActive;
sal_Int8 m_nDefaultActions; sal_Int8 m_nDefaultActions;
std::vector<css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>> m_aListeners; std::vector<css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>> m_aListeners;
...@@ -111,6 +113,8 @@ public: ...@@ -111,6 +113,8 @@ public:
void fire_dragEnter(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde); void fire_dragEnter(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde);
void fire_dragOver(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde); void fire_dragOver(const css::datatransfer::dnd::DropTargetDragEnterEvent& dtde);
void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde); void fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& dtde);
sal_Int8 proposedDragAction() const { return mnDragAction; }
}; };
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -86,12 +86,12 @@ void Qt5DragSource::dragFailed() ...@@ -86,12 +86,12 @@ void Qt5DragSource::dragFailed()
} }
} }
void Qt5DragSource::fire_dragEnd() void Qt5DragSource::fire_dragEnd(sal_Int8 nAction)
{ {
if (m_xListener.is()) if (m_xListener.is())
{ {
datatransfer::dnd::DragSourceDropEvent aEv; datatransfer::dnd::DragSourceDropEvent aEv;
aEv.DropAction = datatransfer::dnd::DNDConstants::ACTION_MOVE; aEv.DropAction = nAction;
aEv.DropSuccess = true; // FIXME: what if drop didn't work out? aEv.DropSuccess = true; // FIXME: what if drop didn't work out?
auto xListener = m_xListener; auto xListener = m_xListener;
m_xListener.clear(); m_xListener.clear();
...@@ -168,6 +168,9 @@ void Qt5DropTarget::initialize(const Sequence<Any>& rArguments) ...@@ -168,6 +168,9 @@ void Qt5DropTarget::initialize(const Sequence<Any>& rArguments)
static_cast<OWeakObject*>(this)); static_cast<OWeakObject*>(this));
} }
mnDragAction = datatransfer::dnd::DNDConstants::ACTION_NONE;
mnDropAction = datatransfer::dnd::DNDConstants::ACTION_NONE;
m_pFrame = reinterpret_cast<Qt5Frame*>(nFrame); m_pFrame = reinterpret_cast<Qt5Frame*>(nFrame);
m_pFrame->registerDropTarget(this); m_pFrame->registerDropTarget(this);
m_bActive = true; m_bActive = true;
...@@ -240,11 +243,30 @@ void Qt5DropTarget::fire_drop(const css::datatransfer::dnd::DropTargetDropEvent& ...@@ -240,11 +243,30 @@ void Qt5DropTarget::fire_drop(const css::datatransfer::dnd::DropTargetDropEvent&
} }
} }
void Qt5DropTarget::acceptDrag(sal_Int8 /*dragOperation*/) { return; } void Qt5DropTarget::acceptDrag(sal_Int8 dragOperation)
void Qt5DropTarget::rejectDrag() { return; } {
mnDragAction = dragOperation;
return;
}
void Qt5DropTarget::rejectDrag()
{
mnDragAction = 0;
return;
}
void Qt5DropTarget::acceptDrop(sal_Int8 dropOperation)
{
mnDropAction = dropOperation;
return;
}
void Qt5DropTarget::rejectDrop()
{
mnDropAction = 0;
return;
}
void Qt5DropTarget::acceptDrop(sal_Int8 /*dropOperation*/) { return; }
void Qt5DropTarget::rejectDrop() { return; }
void Qt5DropTarget::dropComplete(sal_Bool /*success*/) { return; } void Qt5DropTarget::dropComplete(sal_Bool /*success*/) { return; }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -1049,7 +1049,7 @@ void Qt5Frame::draggingStarted(const int x, const int y) ...@@ -1049,7 +1049,7 @@ void Qt5Frame::draggingStarted(const int x, const int y)
aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDragContext*>(m_pDropTarget); aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDragContext*>(m_pDropTarget);
aEvent.LocationX = x; aEvent.LocationX = x;
aEvent.LocationY = y; aEvent.LocationY = y;
aEvent.DropAction = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; //FIXME aEvent.DropAction = css::datatransfer::dnd::DNDConstants::ACTION_MOVE;
aEvent.SourceActions = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; aEvent.SourceActions = css::datatransfer::dnd::DNDConstants::ACTION_MOVE;
css::uno::Reference<css::datatransfer::XTransferable> xTransferable; css::uno::Reference<css::datatransfer::XTransferable> xTransferable;
...@@ -1077,7 +1077,8 @@ void Qt5Frame::dropping(const int x, const int y) ...@@ -1077,7 +1077,8 @@ void Qt5Frame::dropping(const int x, const int y)
aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDropContext*>(m_pDropTarget); aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDropContext*>(m_pDropTarget);
aEvent.LocationX = x; aEvent.LocationX = x;
aEvent.LocationY = y; aEvent.LocationY = y;
aEvent.DropAction = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; //FIXME aEvent.DropAction = m_pDropTarget->proposedDragAction()
| css::datatransfer::dnd::DNDConstants::ACTION_DEFAULT;
aEvent.SourceActions = css::datatransfer::dnd::DNDConstants::ACTION_MOVE; aEvent.SourceActions = css::datatransfer::dnd::DNDConstants::ACTION_MOVE;
css::uno::Reference<css::datatransfer::XTransferable> xTransferable; css::uno::Reference<css::datatransfer::XTransferable> xTransferable;
...@@ -1089,7 +1090,7 @@ void Qt5Frame::dropping(const int x, const int y) ...@@ -1089,7 +1090,7 @@ void Qt5Frame::dropping(const int x, const int y)
if (m_pDragSource) if (m_pDragSource)
{ {
m_pDragSource->fire_dragEnd(); m_pDragSource->fire_dragEnd(m_pDropTarget->proposedDragAction());
} }
} }
......
...@@ -197,7 +197,6 @@ void Qt5Widget::startDrag() ...@@ -197,7 +197,6 @@ void Qt5Widget::startDrag()
void Qt5Widget::dragEnterEvent(QDragEnterEvent* event) void Qt5Widget::dragEnterEvent(QDragEnterEvent* event)
{ {
SAL_WARN("vcl.qt5", "dragenterevent");
if (event->source() == this) if (event->source() == this)
event->accept(); event->accept();
} }
...@@ -205,7 +204,6 @@ void Qt5Widget::dragEnterEvent(QDragEnterEvent* event) ...@@ -205,7 +204,6 @@ void Qt5Widget::dragEnterEvent(QDragEnterEvent* event)
void Qt5Widget::dragMoveEvent(QDragMoveEvent* event) void Qt5Widget::dragMoveEvent(QDragMoveEvent* event)
{ {
QPoint point = event->pos(); QPoint point = event->pos();
SAL_WARN("vcl.qt5", "dragmoveevent");
m_pFrame->draggingStarted(point.x(), point.y()); m_pFrame->draggingStarted(point.x(), point.y());
QWidget::dragMoveEvent(event); QWidget::dragMoveEvent(event);
...@@ -214,7 +212,6 @@ void Qt5Widget::dragMoveEvent(QDragMoveEvent* event) ...@@ -214,7 +212,6 @@ void Qt5Widget::dragMoveEvent(QDragMoveEvent* event)
void Qt5Widget::dropEvent(QDropEvent* event) void Qt5Widget::dropEvent(QDropEvent* event)
{ {
QPoint point = event->pos(); QPoint point = event->pos();
SAL_WARN("vcl.qt5", "dropevent");
m_pFrame->dropping(point.x(), point.y()); m_pFrame->dropping(point.x(), point.y());
QWidget::dropEvent(event); QWidget::dropEvent(event);
......
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