Do not call QWidget::show/hideEvent twice
authorOliver Wolff <oliver.wolff@digia.com>
Wed, 17 Oct 2012 13:50:01 +0000 (15:50 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Thu, 8 Nov 2012 14:01:52 +0000 (15:01 +0100)
While handling events for Widgets and Windows in QWidgetWindow::event
makes sense for other events, it causes QWidget::show/hideEvent to be
called twice when handled like "the rest". Having that as one case here
seems to be the cleanest solution. Removing the call to showEvent from
QWidgetPrivate::show_helper (as proposed in the bug report) causes
autotests to fail and thus is not a viable option.

Additionally the expected result for the task221221 test for
QDoubleSpinBox was reverted to the Qt4 value as Qt4 behaviour was
restored.

Task-number: QTBUG-27199
Task-number: QTBUG-26424
Task-number: QTBUG-22565

Change-Id: I0ac42b09b1a7618de042d27aa5dd1b3d9f30f552
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Andy Shaw <andy.shaw@digia.com>
src/widgets/kernel/qwidgetwindow.cpp
tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp
tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp

index 94e851a..1cabb09 100644 (file)
@@ -205,6 +205,12 @@ bool QWidgetWindow::event(QEvent *event)
         handleContextMenuEvent(static_cast<QContextMenuEvent *>(event));
         return true;
 #endif
+
+    // Handing show events to widgets (see below) here would cause them to be triggered twice
+    case QEvent::Show:
+    case QEvent::Hide:
+        return QWindow::event(event);
+
     default:
         break;
     }
index 9b03b9b..7de3f8a 100644 (file)
@@ -3968,16 +3968,7 @@ void tst_QWidget::showHideEvent()
     if (create && !widget.testAttribute(Qt::WA_WState_Created))
         widget.create();
 
-    if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb")) {
-        QEXPECT_FAIL("window: only show", "QTBUG-26424", Continue);
-        QEXPECT_FAIL("window: show/hide", "QTBUG-26424", Continue);
-        QEXPECT_FAIL("window: show/hide/create", "QTBUG-26424", Continue);
-    }
     QCOMPARE(widget.numberOfShowEvents, expectedShowEvents);
-    if (m_platform == QStringLiteral("windows") || m_platform == QStringLiteral("xcb")) {
-        QEXPECT_FAIL("window: show/hide", "QTBUG-26424", Continue);
-        QEXPECT_FAIL("window: show/hide/create", "QTBUG-26424", Continue);
-    }
     QCOMPARE(widget.numberOfHideEvents, expectedHideEvents);
 }
 
index 12cc4e2..59f6ea4 100644 (file)
@@ -1011,7 +1011,7 @@ void tst_QDoubleSpinBox::task221221()
     QTest::keyClick(&spin, Qt::Key_1);
     spin.show();
     QVERIFY(QTest::qWaitForWindowExposed(&spin));
-    QCOMPARE(spin.text(), QLatin1String("1.00"));
+    QCOMPARE(spin.text(), QLatin1String("1"));
 }
 
 void tst_QDoubleSpinBox::task255471_decimalsValidation()
index 28068a8..4e5b82a 100644 (file)
@@ -620,7 +620,6 @@ void tst_QMenu::activeSubMenuPosition()
     // to check that submenu is to the right of the main menu too.
 #ifndef Q_OS_WINCE_WM
     QVERIFY(sub->pos().x() > main->pos().x());
-    QEXPECT_FAIL("", "QTBUG-22565", Abort);
     QCOMPARE(sub->activeAction(), subAction);
 #endif
 }