21#include <QApplication>
29 : QMenu(title, parent)
35 return m_closeOnMiddleClick;
40 m_closeOnMiddleClick = close;
43void Menu::mouseReleaseEvent(QMouseEvent* e)
45 QAction* qact = activeAction();
46 auto* act = qobject_cast<Action*> (qact);
48 if (qact && qact->menu()) {
49 Menu* m = qobject_cast<Menu*> (qact->menu());
51 QMenu::mouseReleaseEvent(e);
55 if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) {
62 QMenu::mouseReleaseEvent(e);
66 if ((e->button() == Qt::LeftButton || e->button() == Qt::RightButton) && e->modifiers() == Qt::NoModifier) {
71 else if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) {
72 if ((e->button() == Qt::MiddleButton && m_closeOnMiddleClick) || e->button() != Qt::MiddleButton) {
75 act->emitCtrlTriggered();
78 else if (e->button() == Qt::LeftButton && e->modifiers() == Qt::ShiftModifier) {
80 act->emitShiftTriggered();
85void Menu::keyPressEvent(QKeyEvent* e)
87 if (e->key() != Qt::Key_Enter && e->key() != Qt::Key_Return) {
88 QMenu::keyPressEvent(e);
92 QAction* qact = activeAction();
93 auto* act = qobject_cast<Action*> (qact);
96 QMenu::keyPressEvent(e);
100 if (e->modifiers() == Qt::NoModifier || e->modifiers() == Qt::KeypadModifier) {
105 else if (e->modifiers() == Qt::ControlModifier) {
107 act->emitCtrlTriggered();
110 else if (e->modifiers() == Qt::ShiftModifier) {
112 act->emitShiftTriggered();
117void Menu::closeAllMenus()
123 menu = qobject_cast<QMenu*>(QApplication::activePopupWidget());
133 : QAction(text, parent)
138 : QAction(icon, text, parent)
void emitShiftTriggered()
Action(QObject *parent=nullptr)