Pull in upstream fixes

This commit is contained in:
Jan Grulich 2019-07-08 09:34:45 +02:00
parent 287f373520
commit da7d4a2096
3 changed files with 85 additions and 2 deletions

View File

@ -3,7 +3,7 @@
Summary: Qt5 - Wayland platform support and QtCompositor module
Name: qt5-%{qt_module}
Version: 5.12.4
Release: 2%{?dist}
Release: 3%{?dist}
License: LGPLv3
Url: http://www.qt.io
@ -15,6 +15,8 @@ Patch0: qtwayland-fix-stuttering-when-gui-thread-is-busy.patch
Patch1: qtwayland-reset-frame-callback-timer-when-hiding-window.patch
Patch2: qtwayland-emit-wl-surfare-lifetime-signals.patch
Patch3: qtwayland-dont-send-fake-surface-created-destroyed-events.patch
Patch4: qtwayland-make-handleupdate-aware-of-exposure-changes.patch
Patch5: qtwayland-dont-crash-when-start-drag-without-dragfocus.patch
# filter qml provides
%global __provides_exclude_from ^%{_qt5_archdatadir}/qml/.*\\.so$
@ -118,7 +120,10 @@ popd
%changelog
* Thu Jun 27 2019 Jan Grulich <jgrulich@redhat.com> -5.12.4-2
* Thu Jul 02 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.3-3
- Pull in upstream fixes
* Thu Jun 27 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.4-2
- Pull in upstream fixes
* Fri Jun 14 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.4-1

View File

@ -0,0 +1,16 @@
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp
index 300c9de..11984f9 100644
--- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp
@@ -111,7 +111,10 @@ void QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon)
if (!origin)
origin = m_display->currentInputDevice()->touchFocus();
- start_drag(m_dragSource->object(), origin->object(), icon->object(), m_display->currentInputDevice()->serial());
+ if (origin)
+ start_drag(m_dragSource->object(), origin->object(), icon->object(), m_display->currentInputDevice()->serial());
+ else
+ qCDebug(lcQpaWayland) << "Couldn't start a drag because the origin window could not be found.";
}
void QWaylandDataDevice::cancelDrag()

View File

@ -0,0 +1,62 @@
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index ed0fe87..da1b6a0 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -79,6 +79,8 @@ Q_LOGGING_CATEGORY(lcWaylandBackingstore, "qt.qpa.wayland.backingstore")
QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr;
+QReadWriteLock mSurfaceLock;
+
QWaylandWindow::QWaylandWindow(QWindow *window)
: QPlatformWindow(window)
, mDisplay(waylandScreen()->display())
@@ -209,6 +211,7 @@ void QWaylandWindow::initWindow()
void QWaylandWindow::initializeWlSurface()
{
Q_ASSERT(!isInitialized());
+ QWriteLocker lock(&mSurfaceLock);
init(mDisplay->createSurface(static_cast<QtWayland::wl_surface *>(this)));
emit wlSurfaceCreated();
}
@@ -243,6 +246,7 @@ void QWaylandWindow::reset()
mSubSurfaceWindow = nullptr;
if (isInitialized()) {
emit wlSurfaceDestroyed();
+ QWriteLocker lock(&mSurfaceLock);
destroy();
}
mScreens.clear();
@@ -1138,6 +1142,10 @@ void QWaylandWindow::requestUpdate()
void QWaylandWindow::handleUpdate()
{
// TODO: Should sync subsurfaces avoid requesting frame callbacks?
+ QReadLocker lock(&mSurfaceLock);
+ if (!isInitialized()) {
+ return;
+ }
if (mFrameCallback) {
wl_callback_destroy(mFrameCallback);
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index 746a7a5..4606a7b 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -53,6 +53,8 @@
#include <QtCore/QWaitCondition>
#include <QtCore/QMutex>
+#include <QtCore/QReadWriteLock>
+
#include <QtGui/QIcon>
#include <QtCore/QVariant>
#include <QtCore/QLoggingCategory>
@@ -275,6 +277,8 @@ private:
static QMutex mFrameSyncMutex;
static QWaylandWindow *mMouseGrab;
+ QReadWriteLock mSurfaceLock;
+
friend class QWaylandSubSurface;
};