diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2018-06-01 10:04:24 +0300 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2018-06-05 09:23:40 +0000 |
commit | fa2a23a0a72bc5868e3e0edbc430ae913ff59f93 (patch) | |
tree | 9ba3bff6355f324617e64d8be9b1d89424cfe446 | |
parent | d312eebfa14ef72cfb3ddfdea5f4bf517050649d (diff) |
Cancel DnD when Escape key is pressed
When pressing Escape key while DnD is active, it is cancelled
Task-number: QT3DS-1842
Change-Id: I74fd371844617757fcdc22603cf4cf5605fe1c33
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
3 files changed, 30 insertions, 2 deletions
diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp index c1ca8e9b..8cc97d85 100644 --- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp +++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineGraphicsScene.cpp @@ -289,6 +289,10 @@ void TimelineGraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *event) event->accept(); return; } + + if (m_widgetTimeline->blockMousePress()) + return; + if (!m_widgetTimeline->isFullReconstructPending() && event->button() == Qt::LeftButton) { resetMousePressParams(); m_pressPos = event->scenePos(); @@ -679,9 +683,11 @@ void TimelineGraphicsScene::keyPressEvent(QKeyEvent *keyEvent) && (qApp->focusObject() == m_widgetTimeline->viewTreeContent() && !focusItem())) { keyEvent->accept(); return; - } - if (keyEvent->key() == Qt::Key_Delete && !m_rowMover->isActive()) + } else if (keyEvent->key() == Qt::Key_Escape && m_rowMover->isActive()) { + m_rowMover->end(); + } else if (keyEvent->key() == Qt::Key_Delete && !m_rowMover->isActive()) { g_StudioApp.DeleteSelectedObject(); // Despite the name, this deletes objects and keyframes + } QGraphicsScene::keyPressEvent(keyEvent); } diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp index a320599c..716a9677 100644 --- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp +++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.cpp @@ -858,6 +858,25 @@ bool TimelineWidget::OnMouseHover(CPt inPoint, Qt::KeyboardModifiers inFlags) return true; } + +void TimelineWidget::OnMouseMove(CPt inPoint, Qt::KeyboardModifiers inFlags) +{ + Q_UNUSED(inFlags) + + if (inPoint.x == -1 && inPoint.y == -1) { // drag leave + // upon cancelling a DnD, the mouse press event fires, this bool is to prevent that + m_blockMousePress = true; + QTimer::singleShot(500, [this]() { + m_blockMousePress = false; + }); + } +} + +bool TimelineWidget::blockMousePress() const +{ + return m_blockMousePress; +} + void TimelineWidget::OnMouseOut(CPt inPoint, Qt::KeyboardModifiers inFlags) { } diff --git a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h index d7b22925..efb19c8b 100644 --- a/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h +++ b/src/Authoring/Studio/Palettes/TimelineGraphicsView/TimelineWidget.h @@ -75,6 +75,7 @@ public: void setSelectedTimeBarsColor(const QColor &color, bool preview); void enableDnD(bool b = true); bool dndActive() const; + bool blockMousePress() const; // Presentation Change Listener void OnNewPresentation() override; @@ -92,6 +93,7 @@ public: CDropTarget *FindDropCandidate(CPt &inMousePoint, Qt::KeyboardModifiers inFlags, EStudioObjectType objectType) override; bool OnMouseHover(CPt inPoint, Qt::KeyboardModifiers inFlags) override; + void OnMouseMove(CPt inPoint, Qt::KeyboardModifiers inFlags) override; void OnMouseOut(CPt inPoint, Qt::KeyboardModifiers inFlags) override; void OnMouseUp(CPt inPoint, Qt::KeyboardModifiers inFlags) override; CPt GetPreferredSize() override; @@ -159,6 +161,7 @@ private: QHash<int, int> m_moveMap; QTimer m_asyncUpdateTimer; bool m_fullReconstruct = false; + bool m_blockMousePress = false; CClientDataModelBridge *m_bridge = nullptr; IBreadCrumbProvider *m_BreadCrumbProvider = nullptr; |