From c27066962bba7247677c9e169a1afd55ead87e26 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 4 Jan 2024 12:26:03 +0100 Subject: Qt Designer: Prepare QToolBar handling for interaction with the form editor Make event filter of QToolBar more fine grained. Pick-to: 6.7 Task-number: QTBUG-120470 Change-Id: I4cb6cb0e91fb989abfa874419985adf696acf034 Reviewed-by: Jarek Kobus --- src/designer/src/lib/shared/qdesigner_toolbar.cpp | 44 +++++++++++++++-------- src/designer/src/lib/shared/qdesigner_toolbar_p.h | 2 +- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/designer/src/lib/shared/qdesigner_toolbar.cpp b/src/designer/src/lib/shared/qdesigner_toolbar.cpp index f04ba9113..a5d75d23f 100644 --- a/src/designer/src/lib/shared/qdesigner_toolbar.cpp +++ b/src/designer/src/lib/shared/qdesigner_toolbar.cpp @@ -65,6 +65,7 @@ bool ToolBarEventFilter::eventFilter (QObject *watched, QEvent *event) if (watched != m_toolBar) return QObject::eventFilter (watched, event); + bool handled = false; switch (event->type()) { case QEvent::ChildAdded: { // Children should not interact with the mouse @@ -76,24 +77,32 @@ bool ToolBarEventFilter::eventFilter (QObject *watched, QEvent *event) } break; case QEvent::ContextMenu: - return handleContextMenuEvent(static_cast(event)); + handled = handleContextMenuEvent(static_cast(event)); + break; case QEvent::DragEnter: case QEvent::DragMove: - return handleDragEnterMoveEvent(static_cast(event)); + handled = handleDragEnterMoveEvent(static_cast(event)); + break; case QEvent::DragLeave: - return handleDragLeaveEvent(static_cast(event)); + handled = handleDragLeaveEvent(static_cast(event)); + break; case QEvent::Drop: - return handleDropEvent(static_cast(event)); + handled = handleDropEvent(static_cast(event)); + break; case QEvent::MouseButtonPress: - return handleMousePressEvent(static_cast(event)); + handled = handleMousePressEvent(static_cast(event)); + break; case QEvent::MouseButtonRelease: - return handleMouseReleaseEvent(static_cast(event)); + handled = handleMouseReleaseEvent(static_cast(event)); + break; case QEvent::MouseMove: - return handleMouseMoveEvent(static_cast(event)); + handled = handleMouseMoveEvent(static_cast(event)); + break; default: break; } - return QObject::eventFilter (watched, event); + + return handled || QObject::eventFilter(watched, event); } ActionList ToolBarEventFilter::contextMenuActions(const QPoint &globalPos) @@ -250,9 +259,13 @@ bool ToolBarEventFilter::handleMousePressEvent(QMouseEvent *event) } core->propertyEditor()->setObject(m_toolBar); } - m_startPosition = m_toolBar->mapFromGlobal(event->globalPosition().toPoint()); - event->accept(); - return true; + const auto pos = m_toolBar->mapFromGlobal(event->globalPosition().toPoint()); + if (actionIndexAt(m_toolBar, pos, m_toolBar->orientation()) != -1) { + m_startPosition = pos; + event->accept(); + return true; + } + return false; } bool ToolBarEventFilter::handleMouseReleaseEvent(QMouseEvent *event) @@ -272,8 +285,8 @@ bool ToolBarEventFilter::handleMouseMoveEvent(QMouseEvent *event) return false; const QPoint pos = m_toolBar->mapFromGlobal(event->globalPosition().toPoint()); - if ((pos - m_startPosition).manhattanLength() > qApp->startDragDistance()) { - startDrag(m_startPosition, event->modifiers()); + if ((pos - m_startPosition).manhattanLength() > QApplication::startDragDistance() + && startDrag(m_startPosition, event->modifiers())) { m_startPosition = QPoint(); event->accept(); return true; @@ -355,11 +368,11 @@ bool ToolBarEventFilter::handleDropEvent(QDropEvent *event) return true; } -void ToolBarEventFilter::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers) +bool ToolBarEventFilter::startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers) { const int index = actionIndexAt(m_toolBar, pos, m_toolBar->orientation()); if (index == - 1) - return; + return false; const ActionList actions = m_toolBar->actions(); QAction *action = actions.at(index); @@ -390,6 +403,7 @@ void ToolBarEventFilter::startDrag(const QPoint &pos, Qt::KeyboardModifiers modi fw->commandHistory()->push(cmd); } } + return true; } QAction *ToolBarEventFilter::actionAt(const QToolBar *tb, const QPoint &pos) diff --git a/src/designer/src/lib/shared/qdesigner_toolbar_p.h b/src/designer/src/lib/shared/qdesigner_toolbar_p.h index 85a6fc12b..bd897ae0a 100644 --- a/src/designer/src/lib/shared/qdesigner_toolbar_p.h +++ b/src/designer/src/lib/shared/qdesigner_toolbar_p.h @@ -84,7 +84,7 @@ private: QDesignerFormWindowInterface *formWindow() const; void adjustDragIndicator(const QPoint &pos); void hideDragIndicator(); - void startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers); + bool startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers); bool withinHandleArea(const QPoint &pos) const; QToolBar *m_toolBar; -- cgit v1.2.3