Revert "Ensure Qt::WA_Mapped is set in case of obscured native windows."

Qt::WA_Mapped maps (sic) to windowHandle()->isExposed(), and we set/update
it in QWidgetWindow::handleExposeEvent(). Setting it directly in show_sys
shortcuts QPA and assumes showing a window is synchronous on all platforms,
resulting in trying to flush the widget backingstore when the window was
not exposed yet (due to discardSyncRequest starting to return false).

This reverts commit 829b1d13b2.

Change-Id: I0bd700d4939bc69ba184d8586435b68ec3dd72fb
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
This commit is contained in:
Tor Arne Vestbø 2013-11-21 14:43:40 +01:00 committed by The Qt Project
parent 8259e45c1e
commit 773610cc45
4 changed files with 1 additions and 37 deletions

View File

@ -510,9 +510,9 @@ void QWidgetPrivate::show_sys()
QWindow *window = q->windowHandle();
q->setAttribute(Qt::WA_Mapped);
if (q->testAttribute(Qt::WA_DontShowOnScreen)) {
invalidateBuffer(q->rect());
q->setAttribute(Qt::WA_Mapped);
if (q->isWindow() && q->windowModality() != Qt::NonModal && window) {
// add our window to the modal window list
QGuiApplicationPrivate::showModalWindow(window);

View File

@ -713,10 +713,6 @@ void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event
break;
}
// Note that widgetState == m_widget->data->window_state when triggered by QWidget::setWindowState().
if (!(widgetState & Qt::WindowMinimized))
m_widget->setAttribute(Qt::WA_Mapped);
// Sent event if the state changed (that is, it is not triggered by
// QWidget::setWindowState(), which also sends an event to the widget).
if (widgetState != int(m_widget->data->window_state)) {

View File

@ -7192,10 +7192,6 @@ void tst_QWidget::hideOpaqueChildWhileHidden()
#if !defined(Q_OS_WINCE)
void tst_QWidget::updateWhileMinimized()
{
#ifdef Q_OS_UNIX
if (qgetenv("XDG_CURRENT_DESKTOP").contains("Unity"))
QSKIP("This test fails on Unity."); // Minimized windows are not unmapped for some reason.
#endif // Q_OS_UNIX
UpdateWidget widget;
// Filter out activation change and focus events to avoid update() calls in QWidget.
widget.updateOnActivationChangeAndFocusIn = false;

View File

@ -91,8 +91,6 @@ private slots:
void tst_showWithoutActivating();
void tst_paintEventOnSecondShow();
void obscuredNativeMapped();
#ifndef QT_NO_DRAGANDDROP
void tst_dnd();
#endif
@ -370,32 +368,6 @@ void tst_QWidget_window::tst_paintEventOnSecondShow()
QTRY_VERIFY(w.paintEventReceived);
}
// QTBUG-33520, a toplevel fully obscured by native children should still receive Qt::WA_Mapped
void tst_QWidget_window::obscuredNativeMapped()
{
enum { size = 200 };
QWidget topLevel;
topLevel.setWindowFlags(Qt::FramelessWindowHint);
QWidget *child = new QWidget(&topLevel);
child->resize(size, size);
topLevel.resize(size, size);
topLevel.move(QGuiApplication::primaryScreen()->availableGeometry().center() - QPoint(size /2 , size / 2));
child->winId();
topLevel.show();
QTRY_VERIFY(topLevel.testAttribute(Qt::WA_Mapped));
#if defined(Q_OS_MAC)
QSKIP("This test fails on Mac."); // Minimized windows are not unmapped for some reason.
#elif defined(Q_OS_UNIX)
if (qgetenv("XDG_CURRENT_DESKTOP").contains("Unity"))
QSKIP("This test fails on Unity."); // Minimized windows are not unmapped for some reason.
#endif // Q_OS_UNIX
topLevel.setWindowState(Qt::WindowMinimized);
QTRY_VERIFY(!topLevel.testAttribute(Qt::WA_Mapped));
topLevel.setWindowState(Qt::WindowNoState);
QTRY_VERIFY(topLevel.testAttribute(Qt::WA_Mapped));
}
#ifndef QT_NO_DRAGANDDROP
/* DnD test for QWidgetWindow (handleDrag*Event() functions).