Kaydet (Commit) 829c1d83 authored tarafından Katarina Behrens's avatar Katarina Behrens Kaydeden (comit) Michael Weghorn

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>
(cherry picked from commit 3ac46abd)
Reviewed-on: https://gerrit.libreoffice.org/65151Reviewed-by: 's avatarMichael Weghorn <m.weghorn@posteo.de>
üst 517af5bb
......@@ -57,7 +57,7 @@ public:
css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
void dragFailed();
void fire_dragEnd();
void fire_dragEnd(sal_Int8 nAction);
css::uno::Reference<css::datatransfer::XTransferable> const& GetTransferable() const
{
return m_xTrans;
......@@ -72,6 +72,8 @@ class Qt5DropTarget
{
osl::Mutex m_aMutex;
Qt5Frame* m_pFrame;
sal_Int8 mnDragAction;
sal_Int8 mnDropAction;
bool m_bActive;
sal_Int8 m_nDefaultActions;
std::vector<css::uno::Reference<css::datatransfer::dnd::XDropTargetListener>> m_aListeners;
......@@ -111,6 +113,8 @@ public:
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);
sal_Int8 proposedDragAction() const { return mnDragAction; }
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -86,12 +86,12 @@ void Qt5DragSource::dragFailed()
}
}
void Qt5DragSource::fire_dragEnd()
void Qt5DragSource::fire_dragEnd(sal_Int8 nAction)
{
if (m_xListener.is())
{
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?
auto xListener = m_xListener;
m_xListener.clear();
......@@ -168,6 +168,9 @@ void Qt5DropTarget::initialize(const Sequence<Any>& rArguments)
static_cast<OWeakObject*>(this));
}
mnDragAction = datatransfer::dnd::DNDConstants::ACTION_NONE;
mnDropAction = datatransfer::dnd::DNDConstants::ACTION_NONE;
m_pFrame = reinterpret_cast<Qt5Frame*>(nFrame);
m_pFrame->registerDropTarget(this);
m_bActive = true;
......@@ -240,11 +243,30 @@ void Qt5DropTarget::fire_drop(const css::datatransfer::dnd::DropTargetDropEvent&
}
}
void Qt5DropTarget::acceptDrag(sal_Int8 /*dragOperation*/) { return; }
void Qt5DropTarget::rejectDrag() { return; }
void Qt5DropTarget::acceptDrag(sal_Int8 dragOperation)
{
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; }
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -1049,7 +1049,7 @@ void Qt5Frame::draggingStarted(const int x, const int y)
aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDragContext*>(m_pDropTarget);
aEvent.LocationX = x;
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;
css::uno::Reference<css::datatransfer::XTransferable> xTransferable;
......@@ -1077,7 +1077,8 @@ void Qt5Frame::dropping(const int x, const int y)
aEvent.Context = static_cast<css::datatransfer::dnd::XDropTargetDropContext*>(m_pDropTarget);
aEvent.LocationX = x;
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;
css::uno::Reference<css::datatransfer::XTransferable> xTransferable;
......@@ -1089,7 +1090,7 @@ void Qt5Frame::dropping(const int x, const int y)
if (m_pDragSource)
{
m_pDragSource->fire_dragEnd();
m_pDragSource->fire_dragEnd(m_pDropTarget->proposedDragAction());
}
}
......
......@@ -197,7 +197,6 @@ void Qt5Widget::startDrag()
void Qt5Widget::dragEnterEvent(QDragEnterEvent* event)
{
SAL_WARN("vcl.qt5", "dragenterevent");
if (event->source() == this)
event->accept();
}
......@@ -205,7 +204,6 @@ void Qt5Widget::dragEnterEvent(QDragEnterEvent* event)
void Qt5Widget::dragMoveEvent(QDragMoveEvent* event)
{
QPoint point = event->pos();
SAL_WARN("vcl.qt5", "dragmoveevent");
m_pFrame->draggingStarted(point.x(), point.y());
QWidget::dragMoveEvent(event);
......@@ -214,7 +212,6 @@ void Qt5Widget::dragMoveEvent(QDragMoveEvent* event)
void Qt5Widget::dropEvent(QDropEvent* event)
{
QPoint point = event->pos();
SAL_WARN("vcl.qt5", "dropevent");
m_pFrame->dropping(point.x(), point.y());
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