diff options
author | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2019-09-16 08:16:21 +0200 |
---|---|---|
committer | Johan Klokkhammer Helsing <johan.helsing@qt.io> | 2019-09-16 08:17:12 +0200 |
commit | b4233b2f606617542c594e411640ef2867152d29 (patch) | |
tree | fc1fc95fa2df4ab21478e120feba8b34c1585db5 /src/client/qwaylandwindow.cpp | |
parent | 92768cf8d48d6fb62e1a0d124ea9cdec447df4d1 (diff) | |
parent | 382e3292aa0eb6addac84ddefeedc98c7f3b41b2 (diff) | |
download | qtwayland-b4233b2f606617542c594e411640ef2867152d29.tar.gz |
Merge remote-tracking branch 'origin/5.13' into 5.14
Conflicts:
src/client/qwaylanddatadevice.cpp
src/client/qwaylandinputcontext.cpp
src/client/qwaylandinputdevice.cpp
src/client/qwaylandwindow.cpp
src/compositor/compositor_api/compositor_api.pri
src/compositor/compositor_api/qwaylandquickitem.cpp
Change-Id: Ice0d8c7d869c9c46113d6ee6ba3adf895a71d58f
Diffstat (limited to 'src/client/qwaylandwindow.cpp')
-rw-r--r-- | src/client/qwaylandwindow.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp index 60317cda..ccf4f8da 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -201,10 +201,13 @@ void QWaylandWindow::initWindow() void QWaylandWindow::initializeWlSurface() { Q_ASSERT(!mSurface); - mSurface.reset(new QWaylandSurface(mDisplay)); - connect(mSurface.data(), &QWaylandSurface::screensChanged, - this, &QWaylandWindow::handleScreensChanged); - mSurface->m_window = this; + { + QWriteLocker lock(&mSurfaceLock); + mSurface.reset(new QWaylandSurface(mDisplay)); + connect(mSurface.data(), &QWaylandSurface::screensChanged, + this, &QWaylandWindow::handleScreensChanged); + mSurface->m_window = this; + } emit wlSurfaceCreated(); } @@ -242,6 +245,7 @@ void QWaylandWindow::reset(bool sendDestroyEvent) mSubSurfaceWindow = nullptr; if (mSurface) { emit wlSurfaceDestroyed(); + QWriteLocker lock(&mSurfaceLock); mSurface.reset(); } @@ -617,10 +621,11 @@ QMutex QWaylandWindow::mFrameSyncMutex; bool QWaylandWindow::waitForFrameSync(int timeout) { - QMutexLocker locker(&mFrameSyncMutex); if (!mWaitingForFrameCallback) return true; + QMutexLocker locker(&mFrameSyncMutex); + wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(mFrameCallback), mFrameQueue); mDisplay->dispatchQueueWhile(mFrameQueue, [&]() { return mWaitingForFrameCallback; }, timeout); @@ -1135,6 +1140,9 @@ void QWaylandWindow::requestUpdate() void QWaylandWindow::handleUpdate() { // TODO: Should sync subsurfaces avoid requesting frame callbacks? + QReadLocker lock(&mSurfaceLock); + if (!mSurface) + return; if (mFrameCallback) { wl_callback_destroy(mFrameCallback); |