diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-06-14 16:28:19 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2017-06-26 08:00:23 +0000 |
commit | 6634c424f8ca0e3aed2898507d5f9f4b774c4602 (patch) | |
tree | fcf180a7b05885650e4f4aadde8dff68f434888f /src | |
parent | 5c6210e3452f78cab2f58887e747eb5cb2501f70 (diff) |
Restrict QStyleHints::showShortcutsInContextMenus() to context menus
Amends c2c3452ba5b4c32d0c2d5df9193bf89986623ab5.
Task-number: QTBUG-49435
Task-number: QTBUG-61181
Change-Id: I4de9dcb45a86fc2db07185a4a499a511fb1a1567
Reviewed-by: J-P Nurmi <jpnurmi@qt.io>
Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/widgets/qmenu.cpp | 10 | ||||
-rw-r--r-- | src/widgets/widgets/qmenu_p.h | 2 |
2 files changed, 10 insertions, 2 deletions
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp index 955d445b24..bdcc4afff3 100644 --- a/src/widgets/widgets/qmenu.cpp +++ b/src/widgets/widgets/qmenu.cpp @@ -297,6 +297,11 @@ QVector<QPointer<QWidget> > QMenuPrivate::calcCausedStack() const return ret; } +bool QMenuPrivate::isContextMenu() const +{ + return qobject_cast<const QMenuBar *>(topCausedWidget()) == nullptr; +} + void QMenuPrivate::updateActionRects() const { Q_Q(const QMenu); @@ -352,6 +357,7 @@ void QMenuPrivate::updateActionRects(const QRect &screen) const //calculate size QFontMetrics qfm = q->fontMetrics(); bool previousWasSeparator = true; // this is true to allow removing the leading separators + const bool contextMenu = isContextMenu(); for(int i = 0; i <= lastVisibleAction; i++) { QAction *action = actions.at(i); const bool isSection = action->isSeparator() && (!action->text().isEmpty() || !action->icon().isNull()); @@ -383,7 +389,7 @@ void QMenuPrivate::updateActionRects(const QRect &screen) const tabWidth = qMax(int(tabWidth), qfm.width(s.mid(t+1))); s = s.left(t); #ifndef QT_NO_SHORTCUT - } else if (action->isShortcutVisibleInContextMenu()) { + } else if (action->isShortcutVisibleInContextMenu() || !contextMenu) { QKeySequence seq = action->shortcut(); if (!seq.isEmpty()) tabWidth = qMax(int(tabWidth), qfm.width(seq.toString(QKeySequence::NativeText))); @@ -1513,7 +1519,7 @@ void QMenu::initStyleOption(QStyleOptionMenuItem *option, const QAction *action) option->icon = action->icon(); QString textAndAccel = action->text(); #ifndef QT_NO_SHORTCUT - if (action->isShortcutVisibleInContextMenu() + if ((action->isShortcutVisibleInContextMenu() || !d->isContextMenu()) && textAndAccel.indexOf(QLatin1Char('\t')) == -1) { QKeySequence seq = action->shortcut(); if (!seq.isEmpty()) diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h index 2f04fac3c0..a48d41c140 100644 --- a/src/widgets/widgets/qmenu_p.h +++ b/src/widgets/widgets/qmenu_p.h @@ -307,6 +307,8 @@ public: static QMenuPrivate *get(QMenu *m) { return m->d_func(); } int scrollerHeight() const; + bool isContextMenu() const; + //item calculations mutable uint itemsDirty : 1; mutable uint maxIconWidth, tabWidth; |