void Menu::mouseReleaseEvent(QMouseEvent* e) { QAction* qact = actionAt(e->pos()); Action* act = qobject_cast<Action*> (qact); if (qact && qact->menu()) { Menu* m = qobject_cast<Menu*> (qact->menu()); if (!m) { QMenu::mouseReleaseEvent(e); return; } if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) { closeAllMenus(); emit menuMiddleClicked(m); } } if (!act) { QMenu::mouseReleaseEvent(e); return; } if (e->button() == Qt::LeftButton && e->modifiers() == Qt::NoModifier) { closeAllMenus(); act->trigger(); e->accept(); } else if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) { closeAllMenus(); act->triggerMiddleClick(); e->accept(); } }
void Menu::mouseReleaseEvent(QMouseEvent* e) { QAction* qact = activeAction(); Action* act = qobject_cast<Action*> (qact); if (qact && qact->menu()) { Menu* m = qobject_cast<Menu*> (qact->menu()); if (!m) { QMenu::mouseReleaseEvent(e); return; } if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) { closeAllMenus(); emit menuMiddleClicked(m); } } if (!act) { QMenu::mouseReleaseEvent(e); return; } if ((e->button() == Qt::LeftButton || e->button() == Qt::RightButton) && e->modifiers() == Qt::NoModifier) { closeAllMenus(); act->trigger(); e->accept(); } else if (e->button() == Qt::MiddleButton || (e->button() == Qt::LeftButton && e->modifiers() == Qt::ControlModifier)) { if ((e->button() == Qt::MiddleButton && m_closeOnMiddleClick) || e->button() != Qt::MiddleButton) { closeAllMenus(); } act->emitCtrlTriggered(); e->accept(); } else if (e->button() == Qt::LeftButton && e->modifiers() == Qt::ShiftModifier) { closeAllMenus(); act->emitShiftTriggered(); e->accept(); } }