From 3304038d1de0bead5e67275a7a6a9885afe0332d Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Sat, 13 Aug 2022 23:36:04 +0200 Subject: [PATCH] ToggleActions: Obey "don't show text" for a particular action toolbar setting BUGS: 457322 --- part/toggleactionmenu.cpp | 15 +++++++++++++++ part/toggleactionmenu.h | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/part/toggleactionmenu.cpp b/part/toggleactionmenu.cpp index 0ccff3fb2..453c67b25 100644 --- a/part/toggleactionmenu.cpp +++ b/part/toggleactionmenu.cpp @@ -52,6 +52,7 @@ QWidget *ToggleActionMenu::createWidget(QWidget *parent) // END QToolButton hack m_buttons.append(button); + m_originalToolButtonStyle[button] = button->toolButtonStyle(); // Apply other properties to the button. updateButtons(); @@ -74,11 +75,25 @@ void ToggleActionMenu::setDefaultAction(QAction *action) updateButtons(); } +Qt::ToolButtonStyle ToggleActionMenu::styleFor(QToolButton *button) const +{ + Qt::ToolButtonStyle style = m_originalToolButtonStyle[button]; + + if (style == Qt::ToolButtonTextBesideIcon && priority() < QAction::NormalPriority) { + style = Qt::ToolButtonIconOnly; + } + + return style; +} + void ToggleActionMenu::updateButtons() { for (QToolButton *button : qAsConst(m_buttons)) { if (button) { button->setDefaultAction(this->defaultAction()); + // If *this action* is low priority we need to tell the button + // so that it hides the text + button->setToolButtonStyle(styleFor(button)); if (delayed()) { // TODO deprecated interface. button->setPopupMode(QToolButton::DelayedPopup); diff --git a/part/toggleactionmenu.h b/part/toggleactionmenu.h index 1a7c56263..54eabb976 100644 --- a/part/toggleactionmenu.h +++ b/part/toggleactionmenu.h @@ -88,6 +88,14 @@ protected: QPointer m_defaultAction; QList> m_buttons; + QHash m_originalToolButtonStyle; + + /** + * Returns the aproppriate style for @p button. + * Respects both toolbar settings and settings for this menu action. + */ + Qt::ToolButtonStyle styleFor(QToolButton *button) const; + /** * Updates the toolbar buttons by setting the current defaultAction() on them. *