Don't flushWindowSystemEvents in QWaylandWindow ctor.
tests/auto/gui/kernel/qbackingstore test crashed because the flush in QWaylandWindow::setWindowState invoked backing store expose event handling which in turn tried to use related (not yet created) QWaylandWindow. Change-Id: Ic9f29cc3433e6e671deb756aebe26530ebc72042 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
This commit is contained in:
parent
60fd8b1612
commit
3a2ece17c3
@ -119,7 +119,7 @@ QWaylandWindow::QWaylandWindow(QWindow *window)
|
|||||||
|
|
||||||
setWindowFlags(window->flags());
|
setWindowFlags(window->flags());
|
||||||
setGeometry(window->geometry());
|
setGeometry(window->geometry());
|
||||||
setWindowState(window->windowState());
|
setWindowStateInternal(window->windowState());
|
||||||
}
|
}
|
||||||
|
|
||||||
QWaylandWindow::~QWaylandWindow()
|
QWaylandWindow::~QWaylandWindow()
|
||||||
@ -409,31 +409,8 @@ void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orient
|
|||||||
|
|
||||||
void QWaylandWindow::setWindowState(Qt::WindowState state)
|
void QWaylandWindow::setWindowState(Qt::WindowState state)
|
||||||
{
|
{
|
||||||
if (mState == state) {
|
if (setWindowStateInternal(state))
|
||||||
return;
|
QWindowSystemInterface::flushWindowSystemEvents(); // Required for oldState to work on WindowStateChanged
|
||||||
}
|
|
||||||
|
|
||||||
// As of february 2013 QWindow::setWindowState sets the new state value after
|
|
||||||
// QPlatformWindow::setWindowState returns, so we cannot rely on QWindow::windowState
|
|
||||||
// here. We use then this mState variable.
|
|
||||||
mState = state;
|
|
||||||
createDecoration();
|
|
||||||
switch (state) {
|
|
||||||
case Qt::WindowFullScreen:
|
|
||||||
mShellSurface->setFullscreen();
|
|
||||||
break;
|
|
||||||
case Qt::WindowMaximized:
|
|
||||||
mShellSurface->setMaximized();
|
|
||||||
break;
|
|
||||||
case Qt::WindowMinimized:
|
|
||||||
mShellSurface->setMinimized();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
mShellSurface->setNormal();
|
|
||||||
}
|
|
||||||
|
|
||||||
QWindowSystemInterface::handleWindowStateChanged(window(), mState);
|
|
||||||
QWindowSystemInterface::flushWindowSystemEvents(); // Required for oldState to work on WindowStateChanged
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void QWaylandWindow::setWindowFlags(Qt::WindowFlags flags)
|
void QWaylandWindow::setWindowFlags(Qt::WindowFlags flags)
|
||||||
@ -605,4 +582,33 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool QWaylandWindow::setWindowStateInternal(Qt::WindowState state)
|
||||||
|
{
|
||||||
|
if (mState == state) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// As of february 2013 QWindow::setWindowState sets the new state value after
|
||||||
|
// QPlatformWindow::setWindowState returns, so we cannot rely on QWindow::windowState
|
||||||
|
// here. We use then this mState variable.
|
||||||
|
mState = state;
|
||||||
|
createDecoration();
|
||||||
|
switch (state) {
|
||||||
|
case Qt::WindowFullScreen:
|
||||||
|
mShellSurface->setFullscreen();
|
||||||
|
break;
|
||||||
|
case Qt::WindowMaximized:
|
||||||
|
mShellSurface->setMaximized();
|
||||||
|
break;
|
||||||
|
case Qt::WindowMinimized:
|
||||||
|
mShellSurface->setMinimized();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mShellSurface->setNormal();
|
||||||
|
}
|
||||||
|
|
||||||
|
QWindowSystemInterface::handleWindowStateChanged(window(), mState);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -204,6 +204,8 @@ protected:
|
|||||||
Qt::WindowState mState;
|
Qt::WindowState mState;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool setWindowStateInternal(Qt::WindowState flags);
|
||||||
|
|
||||||
void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice,
|
void handleMouseEventWithDecoration(QWaylandInputDevice *inputDevice,
|
||||||
ulong timestamp,
|
ulong timestamp,
|
||||||
const QPointF & local,
|
const QPointF & local,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user