summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-01-04 12:26:03 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-03-18 17:29:28 +0100
commitc27066962bba7247677c9e169a1afd55ead87e26 (patch)
treeee5c935210899a286a8127e261221c2e786f9f42
parentcd737605fbdf99b398723ac9f535ca707f96dda8 (diff)
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 <jaroslaw.kobus@qt.io>
-rw-r--r--src/designer/src/lib/shared/qdesigner_toolbar.cpp44
-rw-r--r--src/designer/src/lib/shared/qdesigner_toolbar_p.h2
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<QContextMenuEvent*>(event));
+ handled = handleContextMenuEvent(static_cast<QContextMenuEvent*>(event));
+ break;
case QEvent::DragEnter:
case QEvent::DragMove:
- return handleDragEnterMoveEvent(static_cast<QDragMoveEvent *>(event));
+ handled = handleDragEnterMoveEvent(static_cast<QDragMoveEvent *>(event));
+ break;
case QEvent::DragLeave:
- return handleDragLeaveEvent(static_cast<QDragLeaveEvent *>(event));
+ handled = handleDragLeaveEvent(static_cast<QDragLeaveEvent *>(event));
+ break;
case QEvent::Drop:
- return handleDropEvent(static_cast<QDropEvent *>(event));
+ handled = handleDropEvent(static_cast<QDropEvent *>(event));
+ break;
case QEvent::MouseButtonPress:
- return handleMousePressEvent(static_cast<QMouseEvent*>(event));
+ handled = handleMousePressEvent(static_cast<QMouseEvent*>(event));
+ break;
case QEvent::MouseButtonRelease:
- return handleMouseReleaseEvent(static_cast<QMouseEvent*>(event));
+ handled = handleMouseReleaseEvent(static_cast<QMouseEvent*>(event));
+ break;
case QEvent::MouseMove:
- return handleMouseMoveEvent(static_cast<QMouseEvent*>(event));
+ handled = handleMouseMoveEvent(static_cast<QMouseEvent*>(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;