diff options
-rw-r--r-- | src/widgets/widgets/qstatusbar.cpp | 5 | ||||
-rw-r--r-- | tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp | 27 |
2 files changed, 30 insertions, 2 deletions
diff --git a/src/widgets/widgets/qstatusbar.cpp b/src/widgets/widgets/qstatusbar.cpp index 86fd10699c..7b1d66cf0d 100644 --- a/src/widgets/widgets/qstatusbar.cpp +++ b/src/widgets/widgets/qstatusbar.cpp @@ -551,8 +551,6 @@ void QStatusBar::showMessage(const QString &message, int timeout) { Q_D(QStatusBar); - d->tempItem = message; - if (timeout > 0) { if (!d->timer) { d->timer = new QTimer(this); @@ -563,6 +561,9 @@ void QStatusBar::showMessage(const QString &message, int timeout) delete d->timer; d->timer = 0; } + if (d->tempItem == message) + return; + d->tempItem = message; hideOrShow(); } diff --git a/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp b/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp index 3bdf583153..a301d51c4c 100644 --- a/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp +++ b/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp @@ -74,6 +74,7 @@ private slots: void task194017_hiddenWidget(); void QTBUG4334_hiddenOnMaximizedWindow(); void QTBUG25492_msgtimeout(); + void messageChangedSignal(); private: QStatusBar *testWidget; @@ -95,6 +96,8 @@ void tst_QStatusBar::init() QWidget *item1 = new QWidget(testWidget); testWidget->addWidget(item1); + // currentMessage needs to be null as the code relies on this + currentMessage = QString(); } void tst_QStatusBar::cleanup() @@ -316,6 +319,30 @@ void tst_QStatusBar::QTBUG25492_msgtimeout() QCOMPARE(testWidget->currentMessage(), currentMessage); } +void tst_QStatusBar::messageChangedSignal() +{ + QVERIFY(testWidget->currentMessage().isNull()); + QVERIFY(currentMessage.isNull()); + testWidget->show(); + + QSignalSpy spy(testWidget, SIGNAL(messageChanged(QString))); + testWidget->showMessage("Ready", 0); + QCOMPARE(testWidget->currentMessage(), QString("Ready")); + QCOMPARE(testWidget->currentMessage(), currentMessage); + QCOMPARE(spy.count(), 1); + QCOMPARE(spy.takeFirst().at(0).toString(), currentMessage); + testWidget->clearMessage(); + QCOMPARE(testWidget->currentMessage(), QString()); + QCOMPARE(testWidget->currentMessage(), currentMessage); + QCOMPARE(spy.count(), 1); + QCOMPARE(spy.takeFirst().at(0).toString(), currentMessage); + testWidget->showMessage("Ready", 0); + testWidget->showMessage("Ready", 0); + QCOMPARE(testWidget->currentMessage(), QString("Ready")); + QCOMPARE(testWidget->currentMessage(), currentMessage); + QCOMPARE(spy.count(), 1); + QCOMPARE(spy.takeFirst().at(0).toString(), currentMessage); +} QTEST_MAIN(tst_QStatusBar) #include "tst_qstatusbar.moc" |