diff options
Diffstat (limited to 'src/gui/widgets/qtoolbutton.cpp')
-rw-r--r-- | src/gui/widgets/qtoolbutton.cpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/gui/widgets/qtoolbutton.cpp b/src/gui/widgets/qtoolbutton.cpp index 6aefc57..4ca3d62 100644 --- a/src/gui/widgets/qtoolbutton.cpp +++ b/src/gui/widgets/qtoolbutton.cpp @@ -104,10 +104,9 @@ public: #ifndef QT_NO_MENU bool QToolButtonPrivate::hasMenu() const { - Q_Q(const QToolButton); return ((defaultAction && defaultAction->menu()) || (menuAction && menuAction->menu()) - || q->actions().size() > (defaultAction ? 1 : 0)); + || actions.size() > (defaultAction ? 1 : 0)); } #endif @@ -117,7 +116,7 @@ bool QToolButtonPrivate::hasMenu() const commands or options, usually used inside a QToolBar. \ingroup basicwidgets - \mainclass + A tool button is a special button that provides quick-access to specific commands or options. As opposed to a normal command @@ -278,7 +277,7 @@ void QToolButtonPrivate::init() #endif defaultAction = 0; #ifndef QT_NO_TOOLBAR - if (qobject_cast<QToolBar*>(q->parentWidget())) + if (qobject_cast<QToolBar*>(parent)) autoRaise = true; else #endif @@ -379,7 +378,17 @@ void QToolButton::initStyleOption(QStyleOptionToolButton *option) const if (d->hasMenu()) option->features |= QStyleOptionToolButton::HasMenu; #endif - option->toolButtonStyle = d->toolButtonStyle; + if (d->toolButtonStyle == Qt::ToolButtonFollowStyle) { + option->toolButtonStyle = Qt::ToolButtonStyle(style()->styleHint(QStyle::SH_ToolButtonStyle, option, this)); + } else + option->toolButtonStyle = d->toolButtonStyle; + + if (option->toolButtonStyle == Qt::ToolButtonTextBesideIcon) { + // If the action is not prioritized, remove the text label to save space + if (d->defaultAction && d->defaultAction->priority() < QAction::NormalPriority) + option->toolButtonStyle = Qt::ToolButtonIconOnly; + } + if (d->icon.isNull() && d->arrowType == Qt::NoArrow && !forceNoText) { if (!d->text.isEmpty()) option->toolButtonStyle = Qt::ToolButtonTextOnly; @@ -477,6 +486,9 @@ QSize QToolButton::minimumSizeHint() const The default is Qt::ToolButtonIconOnly. + To have the style of toolbuttons follow the system settings (as available + in GNOME and KDE desktop environments), set this property to Qt::ToolButtonFollowStyle. + QToolButton automatically connects this slot to the relevant signal in the QMainWindow in which is resides. */ @@ -859,8 +871,7 @@ void QToolButtonPrivate::_q_buttonPressed() Q_Q(QToolButton); if (!hasMenu()) return; // no menu to show - - if (delay > 0 && popupMode == QToolButton::DelayedPopup) + if (delay > 0 && !popupTimer.isActive() && popupMode == QToolButton::DelayedPopup) popupTimer.start(delay, q); else if (delay == 0 || popupMode == QToolButton::InstantPopup) q->showMenu(); @@ -883,7 +894,6 @@ void QToolButtonPrivate::popupTimerDone() } else { actualMenu = new QMenu(q); mustDeleteActualMenu = true; - QList<QAction*> actions = q->actions(); for(int i = 0; i < actions.size(); i++) actualMenu->addAction(actions.at(i)); } @@ -891,12 +901,12 @@ void QToolButtonPrivate::popupTimerDone() q->setAutoRepeat(false); bool horizontal = true; #if !defined(QT_NO_TOOLBAR) - QToolBar *tb = qobject_cast<QToolBar*>(q->parentWidget()); + QToolBar *tb = qobject_cast<QToolBar*>(parent); if (tb && tb->orientation() == Qt::Vertical) horizontal = false; #endif QPoint p; - QRect screen = qApp->desktop()->availableGeometry(q); + QRect screen = QApplication::desktop()->availableGeometry(q); QSize sh = ((QToolButton*)(QMenu*)actualMenu)->receivers(SIGNAL(aboutToShow()))? QSize() : actualMenu->sizeHint(); QRect rect = q->rect(); if (horizontal) { |