Do not call QWidget::show/hideEvent twice

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>
bb10
Oliver Wolff 2012-10-17 15:50:01 +02:00 committed by The Qt Project
parent a6f49a4223
commit d2e5c7787e
4 changed files with 7 additions and 11 deletions

View 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;
}

View 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);
}

View 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()

View 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
}