File indexing completed on 2024-04-21 16:30:17
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Kai Uwe Broulik <kde@privat.broulik.de> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "middleclickactioneventfilter.h" 0008 0009 #include <QAction> 0010 #include <QEvent> 0011 #include <QMenu> 0012 #include <QMouseEvent> 0013 #include <QToolBar> 0014 0015 MiddleClickActionEventFilter::MiddleClickActionEventFilter(QObject *parent) 0016 : QObject(parent) 0017 { 0018 } 0019 0020 MiddleClickActionEventFilter::~MiddleClickActionEventFilter() = default; 0021 0022 bool MiddleClickActionEventFilter::eventFilter(QObject *watched, QEvent *event) 0023 { 0024 if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease) { 0025 QMouseEvent *me = static_cast<QMouseEvent *>(event); 0026 0027 if (me->button() == Qt::MiddleButton) { 0028 QToolBar *toolBar = qobject_cast<QToolBar *>(watched); 0029 if (toolBar) { 0030 QAction *action = toolBar->actionAt(me->pos()); 0031 if (action) { 0032 if (event->type() == QEvent::MouseButtonPress) { 0033 m_lastMiddlePressedAction = action; 0034 } else if (event->type() == QEvent::MouseButtonRelease) { 0035 if (m_lastMiddlePressedAction == action) { 0036 Q_EMIT actionMiddleClicked(action); 0037 } 0038 m_lastMiddlePressedAction = nullptr; 0039 } 0040 } 0041 } 0042 QMenu *menu = qobject_cast<QMenu *>(watched); 0043 if (menu) { 0044 QAction *action = menu->actionAt(me->pos()); 0045 if (action) { 0046 if (event->type() == QEvent::MouseButtonPress) { 0047 m_lastMiddlePressedAction = action; 0048 } else if (event->type() == QEvent::MouseButtonRelease) { 0049 if (m_lastMiddlePressedAction == action) { 0050 Q_EMIT actionMiddleClicked(action); 0051 return true; 0052 } 0053 m_lastMiddlePressedAction = nullptr; 0054 } 0055 } 0056 } 0057 } 0058 } 0059 0060 return QObject::eventFilter(watched, event); 0061 } 0062 0063 #include "moc_middleclickactioneventfilter.cpp"