diff options
Diffstat (limited to 'src/widgets/widgets/qmenubar.cpp')
-rw-r--r-- | src/widgets/widgets/qmenubar.cpp | 55 |
1 files changed, 47 insertions, 8 deletions
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp index 6dfbb7c8a1..b0a75288e8 100644 --- a/src/widgets/widgets/qmenubar.cpp +++ b/src/widgets/widgets/qmenubar.cpp @@ -62,6 +62,7 @@ #include <qpa/qplatformtheme.h> #include "private/qguiapplication_p.h" #include "qpa/qplatformintegration.h" +#include <private/qdesktopwidget_p.h> #include "qmenu_p.h" #include "qmenubar_p.h" @@ -74,8 +75,8 @@ class QMenuBarExtension : public QToolButton public: explicit QMenuBarExtension(QWidget *parent); - QSize sizeHint() const Q_DECL_OVERRIDE; - void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE; + QSize sizeHint() const override; + void paintEvent(QPaintEvent *) override; }; QMenuBarExtension::QMenuBarExtension(QWidget *parent) @@ -321,7 +322,7 @@ void QMenuBarPrivate::popupAction(QAction *action, bool activateFirst) QSize popup_size = activeMenu->sizeHint(); //we put the popup menu on the screen containing the bottom-center of the action rect - QRect screenRect = QApplication::desktop()->screenGeometry(pos + QPoint(adjustedActionRect.width() / 2, 0)); + QRect screenRect = QDesktopWidgetPrivate::screenGeometry(pos + QPoint(adjustedActionRect.width() / 2, 0)); pos = QPoint(qMax(pos.x(), screenRect.x()), qMax(pos.y(), screenRect.y())); const bool fitUp = (q->mapToGlobal(adjustedActionRect.topLeft()).y() >= popup_size.height()); @@ -780,6 +781,40 @@ QAction *QMenuBar::addAction(const QString &text, const QObject *receiver, const } /*! + \fn template<typename Obj, typename PointerToMemberFunctionOrFunctor> QAction *QMenuBar::addAction(const QString &text, const Obj *receiver, PointerToMemberFunctionOrFunctor method) + + \since 5.11 + + \overload + + This convenience function creates a new action with the given \a + text. The action's triggered() signal is connected to the + \a method of the \a receiver. The function adds the newly created + action to the menu's list of actions and returns it. + + QMenuBar takes ownership of the returned QAction. + + \sa QWidget::addAction(), QWidget::actions() +*/ + +/*! + \fn template<typename Functor> QAction *QMenuBar::addAction(const QString &text, Functor functor) + + \since 5.11 + + \overload + + This convenience function creates a new action with the given \a + text. The action's triggered() signal is connected to the + \a functor. The function adds the newly created + action to the menu's list of actions and returns it. + + QMenuBar takes ownership of the returned QAction. + + \sa QWidget::addAction(), QWidget::actions() +*/ + +/*! Appends a new QMenu with \a title to the menu bar. The menu bar takes ownership of the menu. Returns the new menu. @@ -1045,6 +1080,10 @@ void QMenuBar::mouseReleaseEvent(QMouseEvent *e) d->mouseDown = false; QAction *action = d->actionAt(e->pos()); + + // do noting if the action is hidden + if (!d->isVisible(action)) + return; if((d->closePopupMode && action == d->currentAction) || !action || !action->menu()) { //we set the current action before activating //so that we let the leave event set the current back to 0 @@ -1330,7 +1369,7 @@ void QMenuBarPrivate::handleReparent() //Note: if parent is reparented, then window may change even if parent doesn't. // We need to install an avent filter on each parent up to the parent that is // also a window (for shortcuts) - QWidget *newWindow = newParent ? newParent->window() : Q_NULLPTR; + QWidget *newWindow = newParent ? newParent->window() : nullptr; QVector<QPointer<QWidget> > newParents; // Remove event filters on ex-parents, keep them on still-parents @@ -1505,7 +1544,7 @@ bool QMenuBar::eventFilter(QObject *object, QEvent *event) d->setKeyboardMode(!d->keyboardState); } } - // fall through + Q_FALLTHROUGH(); case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: @@ -1573,7 +1612,7 @@ QSize QMenuBar::minimumSizeHint() const int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this); int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this); if(as_gui_menubar) { - int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width(); + int w = parentWidget() ? parentWidget()->width() : QDesktopWidgetPrivate::width(); d->calcActionRects(w - (2 * fw), 0); for (int i = 0; ret.isNull() && i < d->actions.count(); ++i) ret = d->actionRects.at(i).size(); @@ -1625,7 +1664,7 @@ QSize QMenuBar::sizeHint() const int fw = style()->pixelMetric(QStyle::PM_MenuBarPanelWidth, 0, this); int spaceBelowMenuBar = style()->styleHint(QStyle::SH_MainWindow_SpaceBelowMenuBar, 0, this); if(as_gui_menubar) { - const int w = parentWidget() ? parentWidget()->width() : QApplication::desktop()->width(); + const int w = parentWidget() ? parentWidget()->width() : QDesktopWidgetPrivate::width(); d->calcActionRects(w - (2 * fw), 0); for (int i = 0; i < d->actionRects.count(); ++i) { const QRect &actionRect = d->actionRects.at(i); @@ -1709,7 +1748,7 @@ void QMenuBarPrivate::_q_internalShortcutActivated(int id) QAction *act = actions.at(id); if (act && act->menu()) { if (QPlatformMenu *platformMenu = act->menu()->platformMenu()) { - platformMenu->showPopup(q->windowHandle(), actionRects.at(id), Q_NULLPTR); + platformMenu->showPopup(q->windowHandle(), actionRects.at(id), nullptr); return; } } |