From fa2a23a0a72bc5868e3e0edbc430ae913ff59f93 Mon Sep 17 00:00:00 2001 From: Mahmoud Badri Date: Fri, 1 Jun 2018 10:04:24 +0300 Subject: Cancel DnD when Escape key is pressed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When pressing Escape key while DnD is active, it is cancelled Task-number: QT3DS-1842 Change-Id: I74fd371844617757fcdc22603cf4cf5605fe1c33 Reviewed-by: Miikka Heikkinen Reviewed-by: Tomi Korpipää --- .../TimelineGraphicsView/TimelineGraphicsScene.cpp | 10 ++++++++-- .../Palettes/TimelineGraphicsView/TimelineWidget.cpp | 19 +++++++++++++++++++ .../Palettes/TimelineGraphicsView/TimelineWidget.h | 3 +++ 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 m_moveMap; QTimer m_asyncUpdateTimer; bool m_fullReconstruct = false; + bool m_blockMousePress = false; CClientDataModelBridge *m_bridge = nullptr; IBreadCrumbProvider *m_BreadCrumbProvider = nullptr; -- cgit v1.2.3