summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/widgets/qtoolbutton.cpp9
-rw-r--r--src/widgets/widgets/qtoolbutton.h1
2 files changed, 9 insertions, 1 deletions
diff --git a/src/widgets/widgets/qtoolbutton.cpp b/src/widgets/widgets/qtoolbutton.cpp
index f866fe8bda..375eff7ae8 100644
--- a/src/widgets/widgets/qtoolbutton.cpp
+++ b/src/widgets/widgets/qtoolbutton.cpp
@@ -62,6 +62,7 @@ public:
void init();
#ifndef QT_NO_MENU
void _q_buttonPressed();
+ void _q_buttonReleased();
void popupTimerDone();
void _q_updateButtonDown();
void _q_menuTriggered(QAction *);
@@ -211,6 +212,7 @@ void QToolButtonPrivate::init()
#ifndef QT_NO_MENU
QObject::connect(q, SIGNAL(pressed()), q, SLOT(_q_buttonPressed()));
+ QObject::connect(q, SIGNAL(released()), q, SLOT(_q_buttonReleased()));
#endif
setLayoutItemMargins(QStyle::SE_ToolButtonLayoutItem);
@@ -698,12 +700,17 @@ void QToolButtonPrivate::_q_buttonPressed()
return; // no menu to show
if (popupMode == QToolButton::MenuButtonPopup)
return;
- else if (delay > 0 && !popupTimer.isActive() && popupMode == QToolButton::DelayedPopup)
+ else if (delay > 0 && popupMode == QToolButton::DelayedPopup)
popupTimer.start(delay, q);
else if (delay == 0 || popupMode == QToolButton::InstantPopup)
q->showMenu();
}
+void QToolButtonPrivate::_q_buttonReleased()
+{
+ popupTimer.stop();
+}
+
void QToolButtonPrivate::popupTimerDone()
{
Q_Q(QToolButton);
diff --git a/src/widgets/widgets/qtoolbutton.h b/src/widgets/widgets/qtoolbutton.h
index c76f58577b..d17338454d 100644
--- a/src/widgets/widgets/qtoolbutton.h
+++ b/src/widgets/widgets/qtoolbutton.h
@@ -119,6 +119,7 @@ private:
Q_DECLARE_PRIVATE(QToolButton)
#ifndef QT_NO_MENU
Q_PRIVATE_SLOT(d_func(), void _q_buttonPressed())
+ Q_PRIVATE_SLOT(d_func(), void _q_buttonReleased())
Q_PRIVATE_SLOT(d_func(), void _q_updateButtonDown())
Q_PRIVATE_SLOT(d_func(), void _q_menuTriggered(QAction*))
#endif