* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2018-02-07 14:17 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2018-02-07 14:17 UTC (permalink / raw
To: gentoo-commits
commit: 4421b5d072f2f5d4a7694a0e40306e198927ec34
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 7 11:28:34 2018 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Wed Feb 7 14:17:18 2018 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=4421b5d0
dev-qt/qtwayland: Don't recreate hidden egl surfaces
Fixing a runtime crash that affects many users.
Patch taken from 5.9 branch (fixed in 5.9.5).
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=381630
Qt-Bug: https://bugreports.qt.io/browse/QTBUG-65553
See also: https://codereview.qt-project.org/#/c/210552/
Tested-by: Andrius Štikonas <andrius <AT> stikonas.eu>
Package-Manager: Portage-2.3.24, Repoman-2.3.6
.../files/qtwayland-5.9.4-qquickwindow-crash.patch | 109 +++++++++++++++++++++
dev-qt/qtwayland/qtwayland-5.9.4-r1.ebuild | 41 ++++++++
2 files changed, 150 insertions(+)
diff --git a/dev-qt/qtwayland/files/qtwayland-5.9.4-qquickwindow-crash.patch b/dev-qt/qtwayland/files/qtwayland-5.9.4-qquickwindow-crash.patch
new file mode 100644
index 00000000000..40f2a6dff4e
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.9.4-qquickwindow-crash.patch
@@ -0,0 +1,109 @@
+From bf09c7a1493c01a65ee0f110b37a04e653edc08e Mon Sep 17 00:00:00 2001
+From: David Edmundson <davidedmundson@kde.org>
+Date: Wed, 3 Jan 2018 19:18:42 +0000
+Subject: [PATCH] Don't recreate hidden egl surfaces
+
+QWaylandEglWindow deletes surfaces when a window changes from hidden to
+visible, presumably as a result of us not having a valid wl_surface
+object. By extension it doesn't make sense to create a surface whilst a
+window is still hidden.
+
+This fixes a crash where a QQuickWindow hides and then is destroyed. In
+QQuickWindow destruction we have to create a valid context in order to
+delete any textures/assets owned by the scene graph; as the wl_surface
+has gone this causes an error in the EGL libs when we create an EGL
+surface.
+
+Task-number: QTBUG-65553
+Change-Id: I9b37a86326bf2cd7737c4e839c1aa8c74cf08116
+Reviewed-by: Johan Helsing <johan.helsing@qt.io>
+---
+ .../client/wayland-egl/qwaylandglcontext.cpp | 2 +-
+ tests/auto/client/client/tst_client.cpp | 37 ++++++++++++++++++++++
+ 2 files changed, 38 insertions(+), 1 deletion(-)
+
+diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+index 2a9e39e..f4dd6f4 100644
+--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
++++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+@@ -407,7 +407,7 @@ bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface)
+ window->createDecoration();
+
+ if (eglSurface == EGL_NO_SURFACE) {
+- window->updateSurface(true);
++ window->updateSurface(window->isExposed());
+ eglSurface = window->eglSurface();
+ }
+
+diff --git a/tests/auto/client/client/tst_client.cpp b/tests/auto/client/client/tst_client.cpp
+index 3897bd3..aed601d 100644
+--- a/tests/auto/client/client/tst_client.cpp
++++ b/tests/auto/client/client/tst_client.cpp
+@@ -35,6 +35,8 @@
+ #include <QMimeData>
+ #include <QPixmap>
+ #include <QDrag>
++#include <QWindow>
++#include <QOpenGLWindow>
+
+ #include <QtTest/QtTest>
+ #include <QtWaylandClient/private/qwaylandintegration_p.h>
+@@ -112,6 +114,25 @@ public:
+ QPoint mousePressPos;
+ };
+
++class TestGlWindow : public QOpenGLWindow
++{
++ Q_OBJECT
++
++public:
++ TestGlWindow();
++
++protected:
++ void paintGL() override;
++};
++
++TestGlWindow::TestGlWindow()
++{}
++
++void TestGlWindow::paintGL()
++{
++ glClear(GL_COLOR_BUFFER_BIT);
++}
++
+ class tst_WaylandClient : public QObject
+ {
+ Q_OBJECT
+@@ -149,6 +170,7 @@ private slots:
+ void dontCrashOnMultipleCommits();
+ void hiddenTransientParent();
+ void hiddenPopupParent();
++ void glWindow();
+
+ private:
+ MockCompositor *compositor;
+@@ -409,6 +431,21 @@ void tst_WaylandClient::hiddenPopupParent()
+ QTRY_VERIFY(compositor->surface());
+ }
+
++void tst_WaylandClient::glWindow()
++{
++ QSKIP("Skipping GL tests, as not supported by all CI systems: See https://bugreports.qt.io/browse/QTBUG-65802");
++
++ QScopedPointer<TestGlWindow> testWindow(new TestGlWindow);
++ testWindow->show();
++ QSharedPointer<MockSurface> surface;
++ QTRY_VERIFY(surface = compositor->surface());
++
++ //confirm we don't crash when we delete an already hidden GL window
++ //QTBUG-65553
++ testWindow->setVisible(false);
++ QTRY_VERIFY(!compositor->surface());
++}
++
+ int main(int argc, char **argv)
+ {
+ setenv("XDG_RUNTIME_DIR", ".", 1);
+--
+2.7.4
+
diff --git a/dev-qt/qtwayland/qtwayland-5.9.4-r1.ebuild b/dev-qt/qtwayland/qtwayland-5.9.4-r1.ebuild
new file mode 100644
index 00000000000..16a5d921047
--- /dev/null
+++ b/dev-qt/qtwayland/qtwayland-5.9.4-r1.ebuild
@@ -0,0 +1,41 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+inherit qt5-build
+
+DESCRIPTION="Wayland platform plugin for Qt"
+
+if [[ ${QT5_BUILD_TYPE} == release ]]; then
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~x86"
+fi
+
+IUSE="+libinput xcomposite"
+
+DEPEND="
+ >=dev-libs/wayland-1.6.0
+ ~dev-qt/qtcore-${PV}
+ ~dev-qt/qtdeclarative-${PV}
+ ~dev-qt/qtgui-${PV}[egl,libinput?]
+ media-libs/mesa[egl]
+ >=x11-libs/libxkbcommon-0.2.0
+ xcomposite? (
+ x11-libs/libX11
+ x11-libs/libXcomposite
+ )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=( "${FILESDIR}/${P}-qquickwindow-crash.patch" ) # 5.9 branch
+
+src_prepare() {
+ qt_use_disable_config libinput xkbcommon-evdev \
+ src/client/client.pro \
+ src/compositor/wayland_wrapper/wayland_wrapper.pri \
+ src/plugins/shellintegration/ivi-shell/ivi-shell.pro \
+ tests/auto/compositor/compositor/compositor.pro
+
+ use xcomposite || rm -r config.tests/xcomposite || die
+
+ qt5-build_src_prepare
+}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2019-07-20 8:52 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2019-07-20 8:52 UTC (permalink / raw
To: gentoo-commits
commit: 1a7c2d8589db7205b8fe7f907e2cb15b277953d5
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 19 16:15:38 2019 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Sat Jul 20 08:50:02 2019 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=1a7c2d85
dev-qt/qtwayland: Various upstream regression fixes
See also: https://mail.kde.org/pipermail/kde-distro-packagers/2019-July/000379
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
Package-Manager: Portage-2.3.66, Repoman-2.3.11
...ke-handleupdate-aware-of-exposure-changes.patch | 82 +++++++++++++
...t-no-fake-surfacecreated-destroyed-events.patch | 92 ++++++++++++++
...t-frame-callback-timer-when-window-hiding.patch | 39 ++++++
....12.4-fix-stuttering-when-gui-thread-busy.patch | 133 +++++++++++++++++++++
dev-qt/qtwayland/qtwayland-5.12.4-r1.ebuild | 50 ++++++++
5 files changed, 396 insertions(+)
diff --git a/dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch
new file mode 100644
index 00000000000..6aacad2a942
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-make-handleupdate-aware-of-exposure-changes.patch
@@ -0,0 +1,82 @@
+From b13b595dc4f4fe6bdca7b69a21fd934ee233e149 Mon Sep 17 00:00:00 2001
+From: David Edmundson <davidedmundson@kde.org>
+Date: Sun, 23 Jun 2019 14:48:30 +0200
+Subject: [PATCH] Client: Make handleUpdate aware of exposure changes
+
+The wl_surface can be destroyed whilst a render is happening. Calling
+wl_surface::frame after the window is reset can crash as wl_surface is
+null.
+
+Change-Id: I139a9b234cb6acba81d6c1d5fa58629904a25053
+---
+ src/client/qwaylandwindow.cpp | 10 +++++++++-
+ src/client/qwaylandwindow_p.h | 4 ++++
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 5ea0dce1e..7e7a4929c 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())
+@@ -210,6 +212,7 @@ void QWaylandWindow::initWindow()
+
+ void QWaylandWindow::initializeWlSurface()
+ {
++ QWriteLocker lock(&mSurfaceLock);
+ init(mDisplay->createSurface(static_cast<QtWayland::wl_surface *>(this)));
+ }
+
+@@ -245,8 +248,10 @@ void QWaylandWindow::reset(bool sendDestroyEvent)
+ mShellSurface = nullptr;
+ delete mSubSurfaceWindow;
+ mSubSurfaceWindow = nullptr;
+- if (isInitialized())
++ if (isInitialized()) {
++ QWriteLocker lock(&mSurfaceLock);
+ destroy();
++ }
+ mScreens.clear();
+
+ if (mFrameCallback) {
+@@ -1145,6 +1150,9 @@ 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 e8c9d5684..d3706442f 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>
+@@ -271,6 +273,8 @@ private:
+ static QMutex mFrameSyncMutex;
+ static QWaylandWindow *mMouseGrab;
+
++ QReadWriteLock mSurfaceLock;
++
+ friend class QWaylandSubSurface;
+ };
+
+--
+2.16.3
diff --git a/dev-qt/qtwayland/files/qtwayland-5.12.4-client-no-fake-surfacecreated-destroyed-events.patch b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-no-fake-surfacecreated-destroyed-events.patch
new file mode 100644
index 00000000000..c358e0f72de
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-no-fake-surfacecreated-destroyed-events.patch
@@ -0,0 +1,92 @@
+From e6edc73942a76e57e7ac745217092333480f2c64 Mon Sep 17 00:00:00 2001
+From: David Edmundson <davidedmundson@kde.org>
+Date: Sun, 23 Jun 2019 15:09:51 +0200
+Subject: [PATCH] Client: Don't send fake SurfaceCreated/Destroyed events
+
+QPlatformSurface relates to the backing store. Not the wl_surface.
+They are emitted by QPlatformWindow.
+
+Due to a previously incorrect usage by KDE developers it was faked to
+emit the events when the wl_surface is created/hidden to keep behavior.
+
+With QtBase a9246c7132a2c8864d3ae6cebd260bb9ee711fcb this now causes an
+issue as now QWidgets react to this event in a breaking way.
+
+Change-Id: I2f003bc9da85f032a0053677fd281152099fc9eb
+---
+ .../wayland/custom-extension/client-common/customextension.cpp | 9 +++++++--
+ src/client/qwaylandwindow.cpp | 10 ++--------
+ src/client/qwaylandwindow_p.h | 2 +-
+ 3 files changed, 10 insertions(+), 11 deletions(-)
+
+diff --git a/examples/wayland/custom-extension/client-common/customextension.cpp b/examples/wayland/custom-extension/client-common/customextension.cpp
+index aa0cb58a4..16f18fd7a 100644
+--- a/examples/wayland/custom-extension/client-common/customextension.cpp
++++ b/examples/wayland/custom-extension/client-common/customextension.cpp
+@@ -81,8 +81,13 @@ QWindow *CustomExtension::windowForSurface(struct ::wl_surface *surface)
+
+ bool CustomExtension::eventFilter(QObject *object, QEvent *event)
+ {
+- if (event->type() == QEvent::PlatformSurface
+- && static_cast<QPlatformSurfaceEvent*>(event)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceCreated) {
++ if (event->type() == QEvent::Expose) {
++ auto ee = static_cast<QExposeEvent*>(event);
++
++ if ((ee->region().isNull())) {
++ return false;
++ }
++
+ QWindow *window = qobject_cast<QWindow*>(object);
+ Q_ASSERT(window);
+ window->removeEventFilter(this);
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index ca7c8495c..a6331621d 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -93,7 +93,7 @@ QWaylandWindow::~QWaylandWindow()
+ delete mWindowDecoration;
+
+ if (isInitialized())
+- reset(false);
++ reset();
+
+ const QWindow *parent = window();
+ foreach (QWindow *w, QGuiApplication::topLevelWindows()) {
+@@ -119,8 +119,6 @@ void QWaylandWindow::initWindow()
+
+ if (!isInitialized()) {
+ initializeWlSurface();
+- QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceCreated);
+- QGuiApplication::sendEvent(window(), &e);
+ }
+
+ if (shouldCreateSubSurface()) {
+@@ -227,12 +225,8 @@ bool QWaylandWindow::shouldCreateSubSurface() const
+ return QPlatformWindow::parent() != nullptr;
+ }
+
+-void QWaylandWindow::reset(bool sendDestroyEvent)
++void QWaylandWindow::reset()
+ {
+- if (isInitialized() && sendDestroyEvent) {
+- QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed);
+- QGuiApplication::sendEvent(window(), &e);
+- }
+ delete mShellSurface;
+ mShellSurface = nullptr;
+ delete mSubSurfaceWindow;
+diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
+index 121ad8219..ba69fd9dc 100644
+--- a/src/client/qwaylandwindow_p.h
++++ b/src/client/qwaylandwindow_p.h
+@@ -263,7 +263,7 @@ private:
+ void initializeWlSurface();
+ bool shouldCreateShellSurface() const;
+ bool shouldCreateSubSurface() const;
+- void reset(bool sendDestroyEvent = true);
++ void reset();
+ void sendExposeEvent(const QRect &rect);
+ static void closePopups(QWaylandWindow *parent);
+ QWaylandScreen *calculateScreenFromSurfaceEvents() const;
+--
+2.16.3
diff --git a/dev-qt/qtwayland/files/qtwayland-5.12.4-client-reset-frame-callback-timer-when-window-hiding.patch b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-reset-frame-callback-timer-when-window-hiding.patch
new file mode 100644
index 00000000000..8d437824341
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.12.4-client-reset-frame-callback-timer-when-window-hiding.patch
@@ -0,0 +1,39 @@
+From a4e6f88f50d1a1dd56df77ce8b07b98aceb20ddc Mon Sep 17 00:00:00 2001
+From: David Edmundson <davidedmundson@kde.org>
+Date: Sun, 23 Jun 2019 13:25:16 +0200
+Subject: [PATCH] Client: Reset frame callback timer when hiding a window
+
+If we hide a window whilst a compositor has a pending frame to show,
+it's possible the compositor will not render the frame and not return
+the callback.
+
+If this happens on the next window expose we can be left with
+mFrameCallbackTimedOut still true causing isExposed() to remain false
+and us to not send the next buffer when we later show the window again.
+
+Change-Id: I507410415d1a930fd5fa736412055e68fdf6c1d3
+Reviewed-by: Johan Helsing <johan.helsing@qt.io>
+---
+ src/client/qwaylandwindow.cpp | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 7c8ecadaa..2b243bc44 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -254,6 +254,13 @@ void QWaylandWindow::reset(bool sendDestroyEvent)
+ mFrameCallback = nullptr;
+ }
+
++ int timerId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1);
++ if (timerId != -1) {
++ killTimer(timerId);
++ }
++ mWaitingForFrameCallback = false;
++ mFrameCallbackTimedOut = false;
++
+ mMask = QRegion();
+ mQueuedBuffer = nullptr;
+ }
+--
+2.16.3
diff --git a/dev-qt/qtwayland/files/qtwayland-5.12.4-fix-stuttering-when-gui-thread-busy.patch b/dev-qt/qtwayland/files/qtwayland-5.12.4-fix-stuttering-when-gui-thread-busy.patch
new file mode 100644
index 00000000000..794fb127529
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.12.4-fix-stuttering-when-gui-thread-busy.patch
@@ -0,0 +1,133 @@
+From ec9057081f1094fbfeb11449bc533997731e4079 Mon Sep 17 00:00:00 2001
+From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
+Date: Wed, 19 Jun 2019 14:05:22 +0200
+Subject: [PATCH] Client: Fix stuttering when the GUI thread is busy
+
+When we did invokeMethod for handling the frame callbacks, we had to wait for
+the GUI thread to finish whatever it's doing before we would stop blocking.
+
+Fix it by clearing the frame callback timer and stop blocking immediately,
+while delaying the rest of the work until it can be run on the other thread.
+
+Fixes: QTBUG-76397
+Change-Id: I343e4feac4838926b4fa2ccac2948988bc6c3bb7
+Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
+---
+ src/client/qwaylandwindow.cpp | 59 +++++++++++++++++++++++--------------------
+ src/client/qwaylandwindow_p.h | 2 +-
+ 2 files changed, 32 insertions(+), 29 deletions(-)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index cecdbda92..7c8ecadaa 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -610,29 +610,34 @@ const wl_callback_listener QWaylandWindow::callbackListener = {
+ Q_UNUSED(callback);
+ Q_UNUSED(time);
+ auto *window = static_cast<QWaylandWindow*>(data);
+- if (window->thread() != QThread::currentThread())
+- QMetaObject::invokeMethod(window, [=] { window->handleFrameCallback(); }, Qt::QueuedConnection);
+- else
+- window->handleFrameCallback();
++ window->handleFrameCallback();
+ }
+ };
+
+ void QWaylandWindow::handleFrameCallback()
+ {
+- bool wasExposed = isExposed();
++ // Stop the timer and stop waiting immediately
++ int timerId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1);
++ mWaitingForFrameCallback = false;
+
+- if (mFrameCallbackTimerId != -1) {
+- killTimer(mFrameCallbackTimerId);
+- mFrameCallbackTimerId = -1;
+- }
++ // The rest can wait until we can run it on the correct thread
++ auto doHandleExpose = [this, timerId]() {
++ if (timerId != -1)
++ killTimer(timerId);
+
+- mWaitingForFrameCallback = false;
+- mFrameCallbackTimedOut = false;
++ bool wasExposed = isExposed();
++ mFrameCallbackTimedOut = false;
++ if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed?
++ sendExposeEvent(QRect(QPoint(), geometry().size()));
++ if (wasExposed && hasPendingUpdateRequest())
++ deliverUpdateRequest();
++ };
+
+- if (!wasExposed && isExposed())
+- sendExposeEvent(QRect(QPoint(), geometry().size()));
+- if (wasExposed && hasPendingUpdateRequest())
+- deliverUpdateRequest();
++ if (thread() != QThread::currentThread()) {
++ QMetaObject::invokeMethod(this, doHandleExpose);
++ } else {
++ doHandleExpose();
++ }
+ }
+
+ QMutex QWaylandWindow::mFrameSyncMutex;
+@@ -654,11 +659,11 @@ bool QWaylandWindow::waitForFrameSync(int timeout)
+ }
+
+ // Stop current frame timer if any, can't use killTimer directly, because we might be on a diffent thread
+- if (mFrameCallbackTimerId != -1) {
+- int id = mFrameCallbackTimerId;
+- mFrameCallbackTimerId = -1;
+- QMetaObject::invokeMethod(this, [=] { killTimer(id); }, Qt::QueuedConnection);
+- }
++ // Ordered semantics is needed to avoid stopping the timer twice and not miss it when it's
++ // started by other writes
++ int fcbId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1);
++ if (fcbId != -1)
++ QMetaObject::invokeMethod(this, [=] { killTimer(fcbId); }, Qt::QueuedConnection);
+
+ return !mWaitingForFrameCallback;
+ }
+@@ -1090,9 +1095,9 @@ void QWaylandWindow::timerEvent(QTimerEvent *event)
+ }
+ }
+
+- if (event->timerId() == mFrameCallbackTimerId) {
+- killTimer(mFrameCallbackTimerId);
+- mFrameCallbackTimerId = -1;
++
++ if (mFrameCallbackTimerId.testAndSetOrdered(event->timerId(), -1)) {
++ killTimer(event->timerId());
+ qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed";
+ mFrameCallbackTimedOut = true;
+ mWaitingForUpdate = false;
+@@ -1154,11 +1159,9 @@ void QWaylandWindow::handleUpdate()
+ mWaitingForUpdate = false;
+
+ // Stop current frame timer if any, can't use killTimer directly, see comment above.
+- if (mFrameCallbackTimerId != -1) {
+- int id = mFrameCallbackTimerId;
+- mFrameCallbackTimerId = -1;
+- QMetaObject::invokeMethod(this, [=] { killTimer(id); }, Qt::QueuedConnection);
+- }
++ int fcbId = mFrameCallbackTimerId.fetchAndStoreOrdered(-1);
++ if (fcbId != -1)
++ QMetaObject::invokeMethod(this, [=] { killTimer(fcbId); }, Qt::QueuedConnection);
+
+ // Start a timer for handling the case when the compositor stops sending frame callbacks.
+ QMetaObject::invokeMethod(this, [=] { // Again; can't do it directly
+diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
+index c47123dc9..e8c9d5684 100644
+--- a/src/client/qwaylandwindow_p.h
++++ b/src/client/qwaylandwindow_p.h
+@@ -216,7 +216,7 @@ protected:
+ WId mWindowId;
+ bool mWaitingForFrameCallback = false;
+ bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out
+- int mFrameCallbackTimerId = -1; // Started on commit, reset on frame callback
++ QAtomicInt mFrameCallbackTimerId = -1; // Started on commit, reset on frame callback
+ struct ::wl_callback *mFrameCallback = nullptr;
+ struct ::wl_event_queue *mFrameQueue = nullptr;
+ QWaitCondition mFrameSyncWait;
+--
+2.16.3
diff --git a/dev-qt/qtwayland/qtwayland-5.12.4-r1.ebuild b/dev-qt/qtwayland/qtwayland-5.12.4-r1.ebuild
new file mode 100644
index 00000000000..6bc4d61f211
--- /dev/null
+++ b/dev-qt/qtwayland/qtwayland-5.12.4-r1.ebuild
@@ -0,0 +1,50 @@
+# Copyright 1999-2019 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+inherit qt5-build
+
+DESCRIPTION="Wayland platform plugin for Qt"
+
+if [[ ${QT5_BUILD_TYPE} == release ]]; then
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~x86"
+fi
+
+IUSE="+libinput xcomposite"
+
+DEPEND="
+ >=dev-libs/wayland-1.6.0
+ ~dev-qt/qtcore-${PV}
+ ~dev-qt/qtdeclarative-${PV}
+ ~dev-qt/qtgui-${PV}[egl,libinput=]
+ media-libs/mesa[egl]
+ >=x11-libs/libxkbcommon-0.2.0
+ xcomposite? (
+ x11-libs/libX11
+ x11-libs/libXcomposite
+ )
+"
+RDEPEND="${DEPEND}"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-client-no-fake-surfacecreated-destroyed-events.patch
+ "${FILESDIR}"/${P}-fix-stuttering-when-gui-thread-busy.patch
+ "${FILESDIR}"/${P}-client-reset-frame-callback-timer-when-window-hiding.patch
+ "${FILESDIR}"/${P}-client-make-handleupdate-aware-of-exposure-changes.patch
+)
+
+src_prepare() {
+ qt_use_disable_config libinput xkbcommon-evdev \
+ src/client/client.pro \
+ src/compositor/wayland_wrapper/wayland_wrapper.pri \
+ src/plugins/shellintegration/ivi-shell/ivi-shell.pro \
+ src/plugins/shellintegration/wl-shell/wl-shell.pro \
+ src/plugins/shellintegration/xdg-shell/xdg-shell.pro \
+ src/plugins/shellintegration/xdg-shell-v5/xdg-shell-v5.pro \
+ src/plugins/shellintegration/xdg-shell-v6/xdg-shell-v6.pro \
+ tests/auto/compositor/compositor/compositor.pro
+
+ use xcomposite || rm -r config.tests/xcomposite || die
+
+ qt5-build_src_prepare
+}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2019-11-20 21:21 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2019-11-20 21:21 UTC (permalink / raw
To: gentoo-commits
commit: 3ea3863bbb23502f530f9f22e1053439891053b9
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sat Nov 16 12:32:26 2019 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Wed Nov 20 21:20:41 2019 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3ea3863b
dev-qt/qtwayland: Fix crash when showing a window with hidden parent
Package-Manager: Portage-2.3.79, Repoman-2.3.17
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
.../files/qtwayland-5.13.2-fix-crash.patch | 55 ++++++++++++++++++++++
dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild | 1 +
2 files changed, 56 insertions(+)
diff --git a/dev-qt/qtwayland/files/qtwayland-5.13.2-fix-crash.patch b/dev-qt/qtwayland/files/qtwayland-5.13.2-fix-crash.patch
new file mode 100644
index 00000000000..b4e78684bb6
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.13.2-fix-crash.patch
@@ -0,0 +1,55 @@
+From 962b9be7992cef672cb6307af5653c97382c334f Mon Sep 17 00:00:00 2001
+From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
+Date: Fri, 1 Nov 2019 11:24:26 +0100
+Subject: [PATCH] Client: Fix crash when showing a child window with a hidden
+ parent
+
+[ChangeLog][QPA plugin] Fixed a crash when showing a window with a hidden
+parent.
+
+Now we just avoid creating the subsurface, so nothing is shown. Seems to be
+the same behavior as on xcb.
+
+Fixes: QTBUG-79674
+Change-Id: Ia46fcd9a0da5aad4704816a41515cb1e128ac65f
+Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
+---
+ src/client/qwaylanddisplay.cpp | 4 ++++
+ src/client/qwaylandwindow.cpp | 7 ++++---
+ 2 files changed, 8 insertions(+), 3 deletions(-)
+
+diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
+index 78524f6fc..27e38ccf7 100644
+--- a/src/client/qwaylanddisplay.cpp
++++ b/src/client/qwaylanddisplay.cpp
+@@ -109,6 +109,10 @@ struct ::wl_region *QWaylandDisplay::createRegion(const QRegion &qregion)
+ return nullptr;
+ }
+
++ // Make sure we don't pass NULL surfaces to libwayland (crashes)
++ Q_ASSERT(parent->object());
++ Q_ASSERT(window->object());
++
+ return mSubCompositor->get_subsurface(window->object(), parent->object());
+ }
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 8d34afd1f..7098568b4 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -124,9 +124,10 @@ void QWaylandWindow::initWindow()
+ if (shouldCreateSubSurface()) {
+ Q_ASSERT(!mSubSurfaceWindow);
+
+- QWaylandWindow *p = static_cast<QWaylandWindow *>(QPlatformWindow::parent());
+- if (::wl_subsurface *ss = mDisplay->createSubSurface(this, p)) {
+- mSubSurfaceWindow = new QWaylandSubSurface(this, p, ss);
++ auto *parent = static_cast<QWaylandWindow *>(QPlatformWindow::parent());
++ if (parent->object()) {
++ if (::wl_subsurface *subsurface = mDisplay->createSubSurface(this, parent))
++ mSubSurfaceWindow = new QWaylandSubSurface(this, parent, subsurface);
+ }
+ } else if (shouldCreateShellSurface()) {
+ Q_ASSERT(!mShellSurface);
+--
+2.16.3
diff --git a/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild b/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild
index 23b38b6f8d7..7c452ff8e0b 100644
--- a/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild
+++ b/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild
@@ -28,6 +28,7 @@ RDEPEND="${DEPEND}"
PATCHES=(
"${FILESDIR}/${P}-fix-touch-ignored.patch" # QTBUG-79744
+ "${FILESDIR}/${P}-fix-crash.patch" # QTBUG-79674
)
src_prepare() {
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2019-11-25 1:35 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2019-11-25 1:35 UTC (permalink / raw
To: gentoo-commits
commit: aaed88e77bdfa5a236a9fd7a89084394598ab0a5
Author: Jimi Huotari <chiitoo <AT> gentoo <DOT> org>
AuthorDate: Sun Nov 24 23:19:55 2019 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Mon Nov 25 01:35:28 2019 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=aaed88e7
dev-qt/qtwayland: fix build with >=media-libs/mesa-19.3.0_rc4
See also: https://bugreports.qt.io/browse/QTBUG-79709
Reported-by: Ostashevskyi Viktor <ostash <AT> ostash.kiev.ua>
Closes: https://bugs.gentoo.org/699190
Package-Manager: Portage-2.3.79, Repoman-2.3.18
Signed-off-by: Jimi Huotari <chiitoo <AT> gentoo.org>
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
.../qtwayland-5.13.2-fix-linuxdmabuf-build.patch | 29 ++++++++++++++++++++++
dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild | 2 ++
2 files changed, 31 insertions(+)
diff --git a/dev-qt/qtwayland/files/qtwayland-5.13.2-fix-linuxdmabuf-build.patch b/dev-qt/qtwayland/files/qtwayland-5.13.2-fix-linuxdmabuf-build.patch
new file mode 100644
index 00000000000..f9b6b657118
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.13.2-fix-linuxdmabuf-build.patch
@@ -0,0 +1,29 @@
+From 23ea5504200ff5f7e40bd264280a78db09c1bc5b Mon Sep 17 00:00:00 2001
+From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
+Date: Fri, 8 Nov 2019 13:58:04 +0100
+Subject: [PATCH] WIP: Fix compilation of linuxdmabuf compositor plugin
+
+WIP, because I'm not sure if this is the way to go, but it fixes
+compilation on my machine.
+
+Fixes: QTBUG-79709
+Change-Id: I3190ef56e0e162636efea440dff7e760cf11fcd0
+---
+ .../compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h b/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
+index 2abc2ce6b..d1f4a3039 100644
+--- a/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
++++ b/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
+@@ -53,6 +53,7 @@
+
+ #include <EGL/egl.h>
+ #include <EGL/eglext.h>
++#include <EGL/eglmesaext.h>
+
+ // compatibility with libdrm <= 2.4.74
+ #ifndef DRM_FORMAT_RESERVED
+--
+2.16.3
+
diff --git a/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild b/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild
index 7c452ff8e0b..5cc773676a7 100644
--- a/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild
+++ b/dev-qt/qtwayland/qtwayland-5.13.2-r1.ebuild
@@ -29,6 +29,8 @@ RDEPEND="${DEPEND}"
PATCHES=(
"${FILESDIR}/${P}-fix-touch-ignored.patch" # QTBUG-79744
"${FILESDIR}/${P}-fix-crash.patch" # QTBUG-79674
+ # Pending upstream:
+ "${FILESDIR}/${P}-fix-linuxdmabuf-build.patch" # bug 699190, QTBUG-79709
)
src_prepare() {
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2022-02-08 19:58 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2022-02-08 19:58 UTC (permalink / raw
To: gentoo-commits
commit: dd788798d12a04fb9c052c5df2d111a052e07ab0
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 8 19:55:08 2022 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue Feb 8 19:58:29 2022 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=dd788798
dev-qt/qtwayland: Add upstream-pending fixes in advance
- client: Gracefully handle shutdown and window hiding
- Use proper dependencies in compile tests
- Client: Remove mWaitingForUpdateDelivery
- Wayland mutex fixes
See also:
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/23
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/33
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/35
https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/34
KDE-bug: https://bugs.kde.org/show_bug.cgi?id=449163
QTBUG: https://bugreports.qt.io/browse/QTBUG-91264
QTBUG: https://bugreports.qt.io/browse/QTBUG-90037
QTBUG: https://bugreports.qt.io/browse/QTBUG-100475
Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
dev-qt/qtwayland/Manifest | 1 +
.../qtwayland-5.15.2-QTBUG-90037-QTBUG-91264.patch | 131 +++++++++++++++++++++
.../files/qtwayland-5.15.2-fix-qmake-deps.patch | 126 ++++++++++++++++++++
.../files/qtwayland-5.15.2-fixup-mutexes.patch | 87 ++++++++++++++
.../qtwayland-5.15.2-guard-mResizeDirty.patch | 37 ++++++
...d-5.15.2-remove-mWaitingForUpdateDelivery.patch | 79 +++++++++++++
dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild | 52 ++++++++
7 files changed, 513 insertions(+)
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index b5b66bd5c2dd..2ff54b09a0bf 100644
--- a/dev-qt/qtwayland/Manifest
+++ b/dev-qt/qtwayland/Manifest
@@ -1,2 +1,3 @@
DIST qtwayland-5.15.2-4644d51f.tar.gz 831697 BLAKE2B c3d60416ef71030018918ec5157122e2585d270d5aa1a74d66874a33f14f0c4ac85da5a1dd7bfb422a1090f79e5d2c08763c68fe724416b34bad16f945d1740c SHA512 e350396e9bdfa6f0fda938af74c722792d50473eb3d786442ba11919e7801f0cd8d045916c8e49d8a63ffd966376cb74e7cc1c3d4d1732e71061fb8343a497d3
DIST qtwayland-5.15.2-867540b9.tar.gz 830061 BLAKE2B b831288d6a3e671631b4df00eb1edb72e35128f3ed5a73983b3e15193f554fddcd0337deb832d44b795d2e37f0601fe35b8b0fcb5986bcc44154d172f3a54193 SHA512 b834802811d9f65559ef5e7468189b53c666e390aa09edeb490e5fee2dece13082b11da0f8b5924b89f7dc8e1eba375a485940f4dfbf0445f3d1e96033e33f24
+DIST qtwayland-5.15.2-ce2caf49.tar.gz 831808 BLAKE2B af7006f3ce5bb262710c5405f20107239140afe5c7f2b8b10ac834b7e41076a274adbf34152cba3fed19538f653f70faffb1255e622b8607d34f5a4695603461 SHA512 8eaf58da68311b072f5d0192444dafc5819971807682bb85f2316c10e4e64a735a95b05a0a5c1e4a66542702281deb364a6470f6bd0ea042818edb5a9b0396fb
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-QTBUG-90037-QTBUG-91264.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-QTBUG-90037-QTBUG-91264.patch
new file mode 100644
index 000000000000..8bffa3e08b3e
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-QTBUG-90037-QTBUG-91264.patch
@@ -0,0 +1,131 @@
+From d7b34dbf072236cdfb3b64e5ad26d1ff29dfec5f Mon Sep 17 00:00:00 2001
+From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
+Date: Thu, 22 Apr 2021 08:42:33 +0200
+Subject: client: Gracefully handle shutdown and window hiding
+
+When a window is hidden or destroyed, the render thread may already
+be rendering. We need to properly read-lock the surface pointer
+when it is in use and exit when it becomes null.
+
+Note that there is also a potential crash in the Mesa GL driver
+where it keeps a proxy to the wl_surface, so if we delete this
+while we are still rendering, it can crash inside the driver.
+This is not addressed by this patch, and has not been reproduced
+on any other drivers so far.
+
+[ChangeLog][Client] Fixed a crash that could happen when hiding
+or closing windows while Qt Quick was actively rendering on
+a different thread.
+
+Pick-to: 6.0 6.1 5.15
+Fixes: QTBUG-91264
+Fixes: QTBUG-90037
+Task-number: QTBUG-92249
+Change-Id: I029b123b83c58740321e8b90a463ced748d8bcf4
+Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
+Reviewed-by: David Edmundson <davidedmundson@kde.org>
+(cherry picked from commit b19b0fbaf775e8b8eda1e03c265a5393d618c6c0)
+---
+ src/client/qwaylandwindow.cpp | 17 ++++++++++++++++-
+ src/client/qwaylandwindow_p.h | 2 +-
+ .../client/wayland-egl/qwaylandglcontext.cpp | 1 -
+ 3 files changed, 17 insertions(+), 3 deletions(-)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 494911b3..0d849b57 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -414,6 +414,7 @@ void QWaylandWindow::closePopups(QWaylandWindow *parent)
+
+ QPlatformScreen *QWaylandWindow::calculateScreenFromSurfaceEvents() const
+ {
++ QReadLocker lock(&mSurfaceLock);
+ if (mSurface) {
+ if (auto *screen = mSurface->oldestEnteredScreen())
+ return screen;
+@@ -552,6 +553,10 @@ void QWaylandWindow::sendRecursiveExposeEvent()
+
+ void QWaylandWindow::attach(QWaylandBuffer *buffer, int x, int y)
+ {
++ QReadLocker locker(&mSurfaceLock);
++ if (mSurface == nullptr)
++ return;
++
+ if (buffer) {
+ Q_ASSERT(!buffer->committed());
+ handleUpdate();
+@@ -571,6 +576,10 @@ void QWaylandWindow::attachOffset(QWaylandBuffer *buffer)
+
+ void QWaylandWindow::damage(const QRect &rect)
+ {
++ QReadLocker locker(&mSurfaceLock);
++ if (mSurface == nullptr)
++ return;
++
+ const int s = scale();
+ if (mDisplay->compositorVersion() >= 4)
+ mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height());
+@@ -605,6 +614,8 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
+ qCDebug(lcWaylandBackingstore) << "Buffer already committed, ignoring.";
+ return;
+ }
++
++ QReadLocker locker(&mSurfaceLock);
+ if (!mSurface)
+ return;
+
+@@ -624,7 +635,9 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
+
+ void QWaylandWindow::commit()
+ {
+- mSurface->commit();
++ QReadLocker locker(&mSurfaceLock);
++ if (mSurface != nullptr)
++ mSurface->commit();
+ }
+
+ const wl_callback_listener QWaylandWindow::callbackListener = {
+@@ -725,6 +738,7 @@ QPointF QWaylandWindow::mapFromWlSurface(const QPointF &surfacePosition) const
+
+ wl_surface *QWaylandWindow::wlSurface()
+ {
++ QReadLocker locker(&mSurfaceLock);
+ return mSurface ? mSurface->object() : nullptr;
+ }
+
+@@ -749,6 +763,7 @@ QWaylandScreen *QWaylandWindow::waylandScreen() const
+
+ void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orientation)
+ {
++ QReadLocker locker(&mSurfaceLock);
+ if (mDisplay->compositorVersion() < 2)
+ return;
+
+diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
+index d45980a8..54ac67a9 100644
+--- a/src/client/qwaylandwindow_p.h
++++ b/src/client/qwaylandwindow_p.h
+@@ -288,7 +288,7 @@ private:
+
+ static QWaylandWindow *mMouseGrab;
+
+- QReadWriteLock mSurfaceLock;
++ mutable QReadWriteLock mSurfaceLock;
+
+ friend class QWaylandSubSurface;
+ };
+diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+index 683fe123..8f12736d 100644
+--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
++++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+@@ -192,7 +192,6 @@ public:
+ }
+ void blit(QWaylandEglWindow *window)
+ {
+- Q_ASSERT(window->wlSurface());
+ QOpenGLTextureCache *cache = QOpenGLTextureCache::cacheForContext(m_context->context());
+
+ QSize surfaceSize = window->surfaceSize();
+--
+2.35.0
+
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-fix-qmake-deps.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-fix-qmake-deps.patch
new file mode 100644
index 000000000000..e0c18228ed0f
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-fix-qmake-deps.patch
@@ -0,0 +1,126 @@
+From 3b72261b8b06397a532a40e41103c6b7a44e3ab5 Mon Sep 17 00:00:00 2001
+From: Fabian Vogt <fabian@ritter-vogt.de>
+Date: Fri, 4 Feb 2022 11:07:36 +0100
+Subject: [PATCH] Use proper dependencies in compile tests
+
+Use the dependencies as found by the "libraries" section instead of relying
+on them being available in the default location (e.g. "-ldrm").
+
+Additionally, VK_USE_PLATFORM_WAYLAND_KHR requires <wayland-client.h>, so
+add the wayland-client dependency.
+
+This fixes those tests if e.g. wayland-client headers need to be found through
+pkgconfig.
+
+This part of the code changed completely in Qt 6, so this is a totally
+different patch and not a cherry-pick of 5fc2e1915c3a
+("CMake: Fix qtwayland feature detection").
+
+Fixes: QTBUG-100475
+---
+ src/client/configure.json | 8 ++++----
+ src/compositor/configure.json | 34 +++++++++++++++++++++++++++++-----
+ 2 files changed, 33 insertions(+), 9 deletions(-)
+
+diff --git a/src/client/configure.json b/src/client/configure.json
+index 2f424580..29222357 100644
+--- a/src/client/configure.json
++++ b/src/client/configure.json
+@@ -149,8 +149,7 @@
+ "#endif"
+ ]
+ },
+- "libs": "-ldrm",
+- "use": "egl"
++ "use": "drm egl"
+ },
+ "vulkan-server-buffer": {
+ "label": "Vulkan Buffer Sharing",
+@@ -168,7 +167,8 @@
+ "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;",
+ "return 0;"
+ ]
+- }
++ },
++ "use": "wayland-client"
+ },
+ "egl_1_5-wayland": {
+ "label": "EGL 1.5 with Wayland Platform",
+@@ -183,7 +183,7 @@
+ "eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);"
+ ]
+ },
+- "use": "egl"
++ "use": "egl wayland-client"
+ }
+ },
+
+diff --git a/src/compositor/configure.json b/src/compositor/configure.json
+index bcfd5215..da95d07b 100644
+--- a/src/compositor/configure.json
++++ b/src/compositor/configure.json
+@@ -7,6 +7,31 @@
+ "testDir": "../../config.tests",
+
+ "libraries": {
++ "wayland-client": {
++ "label": "Wayland client library",
++ "headers": "wayland-version.h",
++ "test": {
++ "main": [
++ "#if WAYLAND_VERSION_MAJOR < 1",
++ "# error Wayland 1.8.0 or higher required",
++ "#endif",
++ "#if WAYLAND_VERSION_MAJOR == 1",
++ "# if WAYLAND_VERSION_MINOR < 8",
++ "# error Wayland 1.8.0 or higher required",
++ "# endif",
++ "# if WAYLAND_VERSION_MINOR == 8",
++ "# if WAYLAND_VERSION_MICRO < 0",
++ "# error Wayland 1.8.0 or higher required",
++ "# endif",
++ "# endif",
++ "#endif"
++ ]
++ },
++ "sources": [
++ { "type": "pkgConfig", "args": "wayland-client" },
++ "-lwayland-client"
++ ]
++ },
+ "wayland-server": {
+ "label": "wayland-server",
+ "headers": "wayland-version.h",
+@@ -151,8 +176,7 @@
+ "#endif"
+ ]
+ },
+- "libs": "-ldrm",
+- "use": "egl"
++ "use": "drm egl"
+ },
+ "dmabuf-client-buffer": {
+ "label": "Linux Client dma-buf Buffer Sharing",
+@@ -176,8 +200,7 @@
+ "return 0;"
+ ]
+ },
+- "libs": "-ldrm",
+- "use": "egl"
++ "use": "drm egl"
+ },
+ "vulkan-server-buffer": {
+ "label": "Vulkan Buffer Sharing",
+@@ -195,7 +218,8 @@
+ "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;",
+ "return 0;"
+ ]
+- }
++ },
++ "use": "wayland-client"
+ }
+ },
+
+--
+GitLab
+
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-fixup-mutexes.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-fixup-mutexes.patch
new file mode 100644
index 000000000000..b861cebe60ac
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-fixup-mutexes.patch
@@ -0,0 +1,87 @@
+From bf4335b1ea9b179076cbd7a1c2e8cfa9538b1dc1 Mon Sep 17 00:00:00 2001
+From: David Edmundson <davidedmundson@kde.org>
+Date: Thu, 3 Feb 2022 14:27:08 +0000
+Subject: [PATCH] Fix up mutexes for frame callbacks
+
+Everything related to frame callback timings is used by potentially 3
+threads. Access needs guarding.
+
+Change-Id: I9f22390c175d9f2f63d31b1ebf0cdc0b830be937
+---
+ src/client/qwaylandwindow.cpp | 14 +++++++++-----
+ src/client/qwaylandwindow_p.h | 10 +++++++---
+ 2 files changed, 16 insertions(+), 8 deletions(-)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 7aee362a..72e0e601 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -256,8 +256,12 @@ void QWaylandWindow::reset()
+ mFrameCallback = nullptr;
+ }
+
+- mFrameCallbackElapsedTimer.invalidate();
+- mWaitingForFrameCallback = false;
++ {
++ QMutexLocker locker(&mFrameSyncMutex);
++ mFrameCallbackElapsedTimer.invalidate();
++ mWaitingForFrameCallback = false;
++ }
++
+ mFrameCallbackTimedOut = false;
+
+ mMask = QRegion();
+@@ -1142,6 +1146,7 @@ QVariant QWaylandWindow::property(const QString &name, const QVariant &defaultVa
+
+ void QWaylandWindow::timerEvent(QTimerEvent *event)
+ {
++ QMutexLocker locker(&mFrameSyncMutex);
+ if (event->timerId() != mFrameCallbackCheckIntervalTimerId)
+ return;
+
+@@ -1200,15 +1205,14 @@ void QWaylandWindow::handleUpdate()
+ {
+ qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread();
+
+- if (mWaitingForFrameCallback)
+- return;
+-
+ // TODO: Should sync subsurfaces avoid requesting frame callbacks?
+ QReadLocker lock(&mSurfaceLock);
+ if (!mSurface)
+ return;
+
+ QMutexLocker locker(&mFrameSyncMutex);
++ if (mWaitingForFrameCallback)
++ return;
+
+ struct ::wl_surface *wrappedSurface = reinterpret_cast<struct ::wl_surface *>(wl_proxy_create_wrapper(mSurface->object()));
+ wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrappedSurface), mDisplay->frameEventQueue());
+diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
+index 3ff68ccb..025d7917 100644
+--- a/src/client/qwaylandwindow_p.h
++++ b/src/client/qwaylandwindow_p.h
+@@ -226,13 +226,17 @@ protected:
+ Qt::MouseButtons mMousePressedInContentArea = Qt::NoButton;
+
+ WId mWindowId;
++
++ // The following are used by the main thread the render thread and the event frame thread
++ // Access should be guarded by mFrameSyncMutex
++ QMutex mFrameSyncMutex;
++ QWaitCondition mFrameSyncWait;
+ bool mWaitingForFrameCallback = false;
+- bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out
+ int mFrameCallbackCheckIntervalTimerId = -1;
+ QElapsedTimer mFrameCallbackElapsedTimer;
++
++ bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out
+ struct ::wl_callback *mFrameCallback = nullptr;
+- QMutex mFrameSyncMutex;
+- QWaitCondition mFrameSyncWait;
+
+ // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer
+ bool mWaitingForUpdate = false;
+--
+GitLab
+
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-guard-mResizeDirty.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-guard-mResizeDirty.patch
new file mode 100644
index 000000000000..c2e377cff054
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-guard-mResizeDirty.patch
@@ -0,0 +1,37 @@
+From 2e2042aa18efd1389a140a5d0028d8359bd455a7 Mon Sep 17 00:00:00 2001
+From: David Edmundson <davidedmundson@kde.org>
+Date: Thu, 3 Feb 2022 19:42:33 +0000
+Subject: [PATCH] Guard mResizeDirty by the correctMutex
+
+mResizeDirty is used in the GUI thread in setCanResize which can be
+called from the GUI thread. It is queried and set whilst the resizeLock
+is held. We need to guard our usage.
+
+Change-Id: I5f8dcf8aa2cb2c4bb6274103df1da9e3e268605a
+---
+ src/client/qwaylandwindow.cpp | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 949374b1..7aee362a 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -357,11 +357,12 @@ void QWaylandWindow::setGeometry(const QRect &rect)
+ if (mWindowDecoration)
+ mWindowDecoration->update();
+
+- if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize)
++ if (mResizeAfterSwap && windowType() == Egl && mSentInitialResize) {
++ QMutexLocker lock(&mResizeLock);
+ mResizeDirty = true;
+- else
++ } else {
+ QWindowSystemInterface::handleGeometryChange(window(), geometry());
+-
++ }
+ mSentInitialResize = true;
+ }
+ QRect exposeGeometry(QPoint(), geometry().size());
+--
+GitLab
+
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch
new file mode 100644
index 000000000000..a76b15d39cac
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch
@@ -0,0 +1,79 @@
+From 214f7ab9d3384a4123f14d9f6cd0205cf0aaa794 Mon Sep 17 00:00:00 2001
+From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
+Date: Tue, 1 Feb 2022 13:05:36 +0200
+Subject: [PATCH] Client: Remove mWaitingForUpdateDelivery
+
+Currently, mWaitingForUpdateDelivery is shared between the main thread
+(doHandleFrameCallback()) and the frame callback event thread
+(handleFrameCallback()), however the access to it is not synchronized
+between both threads. On the other hand, QWaylandWindow
+already ensures not to create a frame callback if there's already one
+pending.
+
+This change removes mWaitingForUpdateDelivery flag because it should be
+already covered by mWaitingForFrameCallback and to remove unsynchronized
+shared state between threads.
+
+Change-Id: I0e5a25d18d1e66c4d7683e7e972330c4d7cbbf38
+Reviewed-by: David Edmundson <davidedmundson@kde.org>
+(cherry picked from commit feb1a5c207c13d0bf87c0d8ad039279dbf8cee9e)
+---
+ src/client/qwaylandwindow.cpp | 29 ++++++++++++-----------------
+ src/client/qwaylandwindow_p.h | 1 -
+ 2 files changed, 12 insertions(+), 18 deletions(-)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 4c5711a0..949374b1 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -648,23 +648,18 @@ void QWaylandWindow::handleFrameCallback()
+ mFrameCallbackElapsedTimer.invalidate();
+
+ // The rest can wait until we can run it on the correct thread
+- if (!mWaitingForUpdateDelivery) {
+- auto doHandleExpose = [this]() {
+- bool wasExposed = isExposed();
+- mFrameCallbackTimedOut = false;
+- if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed?
+- sendExposeEvent(QRect(QPoint(), geometry().size()));
+- if (wasExposed && hasPendingUpdateRequest())
+- deliverUpdateRequest();
+-
+- mWaitingForUpdateDelivery = false;
+- };
+-
+- // Queued connection, to make sure we don't call handleUpdate() from inside waitForFrameSync()
+- // in the single-threaded case.
+- mWaitingForUpdateDelivery = true;
+- QMetaObject::invokeMethod(this, doHandleExpose, Qt::QueuedConnection);
+- }
++ auto doHandleExpose = [this]() {
++ bool wasExposed = isExposed();
++ mFrameCallbackTimedOut = false;
++ if (!wasExposed && isExposed()) // Did setting mFrameCallbackTimedOut make the window exposed?
++ sendExposeEvent(QRect(QPoint(), geometry().size()));
++ if (wasExposed && hasPendingUpdateRequest())
++ deliverUpdateRequest();
++ };
++
++ // Queued connection, to make sure we don't call handleUpdate() from inside waitForFrameSync()
++ // in the single-threaded case.
++ QMetaObject::invokeMethod(this, doHandleExpose, Qt::QueuedConnection);
+
+ mFrameSyncWait.notify_all();
+ }
+diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
+index d45980a8..3ff68ccb 100644
+--- a/src/client/qwaylandwindow_p.h
++++ b/src/client/qwaylandwindow_p.h
+@@ -228,7 +228,6 @@ protected:
+ WId mWindowId;
+ bool mWaitingForFrameCallback = false;
+ bool mFrameCallbackTimedOut = false; // Whether the frame callback has timed out
+- bool mWaitingForUpdateDelivery = false;
+ int mFrameCallbackCheckIntervalTimerId = -1;
+ QElapsedTimer mFrameCallbackElapsedTimer;
+ struct ::wl_callback *mFrameCallback = nullptr;
+--
+GitLab
+
diff --git a/dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild b/dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild
new file mode 100644
index 000000000000..2761a297bc7b
--- /dev/null
+++ b/dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild
@@ -0,0 +1,52 @@
+# Copyright 1999-2022 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+KDE_ORG_COMMIT=ce2caf493a1343fbd9f8e4c85baf6a61c057f242
+inherit qt5-build
+
+DESCRIPTION="Wayland platform plugin for Qt"
+
+if [[ ${QT5_BUILD_TYPE} == release ]]; then
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+SLOT=5/${QT5_PV} # bug 815646
+IUSE="vulkan X"
+
+DEPEND="
+ dev-libs/wayland
+ =dev-qt/qtcore-${QT5_PV}*:5=
+ =dev-qt/qtdeclarative-${QT5_PV}*:5=
+ =dev-qt/qtgui-${QT5_PV}*:5=[egl,libinput,vulkan=,X?]
+ media-libs/libglvnd
+ vulkan? ( dev-util/vulkan-headers )
+ X? (
+ =dev-qt/qtgui-${QT5_PV}*[-gles2-only]
+ x11-libs/libX11
+ x11-libs/libXcomposite
+ )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="
+ dev-util/wayland-scanner
+"
+
+PATCHES=(
+ "${FILESDIR}/${P}-QTBUG-90037-QTBUG-91264.patch"
+ "${FILESDIR}/${P}-fix-qmake-deps.patch"
+ "${FILESDIR}/${P}-remove-mWaitingForUpdateDelivery.patch"
+ "${FILESDIR}/${P}-guard-mResizeDirty.patch"
+ "${FILESDIR}/${P}-fixup-mutexes.patch"
+)
+
+src_configure() {
+ local myqmakeargs=(
+ --
+ $(qt_use vulkan feature-wayland-vulkan-server-buffer)
+ $(qt_use X feature-xcomposite-egl)
+ $(qt_use X feature-xcomposite-glx)
+ )
+ qt5-build_src_configure
+}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2022-02-15 10:23 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2022-02-15 10:23 UTC (permalink / raw
To: gentoo-commits
commit: 88035c952386afc72fbd21918deb8df32e1a13e7
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 15 07:10:32 2022 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue Feb 15 10:23:00 2022 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=88035c95
dev-qt/qtwayland: Bump 5.15.2-r20 in place to KDE d6a6b727
One patch was upstreamed.
Package-Manager: Portage-3.0.30, Repoman-3.0.3
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
dev-qt/qtwayland/Manifest | 2 +-
...ayland-5.15.2-simplify-roundtrip-behavior.patch | 82 ----------------------
dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild | 3 +-
3 files changed, 2 insertions(+), 85 deletions(-)
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index b81ab4d5cfd4..c5f631739822 100644
--- a/dev-qt/qtwayland/Manifest
+++ b/dev-qt/qtwayland/Manifest
@@ -1,2 +1,2 @@
DIST qtwayland-5.15.2-867540b9.tar.gz 830061 BLAKE2B b831288d6a3e671631b4df00eb1edb72e35128f3ed5a73983b3e15193f554fddcd0337deb832d44b795d2e37f0601fe35b8b0fcb5986bcc44154d172f3a54193 SHA512 b834802811d9f65559ef5e7468189b53c666e390aa09edeb490e5fee2dece13082b11da0f8b5924b89f7dc8e1eba375a485940f4dfbf0445f3d1e96033e33f24
-DIST qtwayland-5.15.2-9f66cd37.tar.gz 831912 BLAKE2B 6dd0d695ef70e453df6400b5eb9f21c585d65fcb9ede94c7f23bd6d2a65afcdaf51d400a703e507f70150213280be24aa3f4ea175c00a9ebf7a78a6752b5f1c9 SHA512 586fe1f87736ba7de67631575778cc3c1f36a76e2b97681bbb4465078a2b39e9bae5c11a552f662385298869ba31d203ef05b9a0bb40e77e242d829d3d82041b
+DIST qtwayland-5.15.2-d6a6b727.tar.gz 831439 BLAKE2B 430f7c8570f9941e80db68f63efa9669f40d045e8df8820ec8653152938078b91d8d68b76667c6c01cc83cfca3f3b0ea67b6fdee6230e04fd091dcaaed4400bc SHA512 a2314f31c979594c4bd46fe8f1ac44d3391e45e6fedef44eaac5fb8700d1b32ac992f3e9d17e2453f0311038979a2bf8fabb14ea887525e16fb210307844c71d
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.2-simplify-roundtrip-behavior.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-simplify-roundtrip-behavior.patch
deleted file mode 100644
index 2b210e849210..000000000000
--- a/dev-qt/qtwayland/files/qtwayland-5.15.2-simplify-roundtrip-behavior.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From d6a6b727832819d118199f7016c2c401663ee370 Mon Sep 17 00:00:00 2001
-From: David Edmundson <davidedmundson@kde.org>
-Date: Wed, 9 Feb 2022 17:20:48 +0000
-Subject: [PATCH] client: Simplify round trip behavior
-
-The custom event queue was removed in
-302d4ffb8549214eb4028dc3e47ec4ee4e12ffbd (2015) so the comment about not
-being able to use the inbuilt round trip method no longer applies.
-
-This fixes a real world problem. Use of a blocking round trip should not
-process non wayland events. Doing so can lead to misbehaviour client
-side as things happen out of order. The move to the event thread created
-several regressions as we now get events before the QGuiApplication is
-fully constructed.
-
-Change-Id: I650481f49a47ed1a9778c7e1bc3c48db6e8f0031
-Reviewed-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
-Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-(cherry picked from commit 62646d9122845d7bd9104b610478cebde3e769c7)
----
- src/client/qwaylanddisplay.cpp | 43 +---------------------------------
- 1 file changed, 1 insertion(+), 42 deletions(-)
-
-diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
-index 6f1bada5..86045a35 100644
---- a/src/client/qwaylanddisplay.cpp
-+++ b/src/client/qwaylanddisplay.cpp
-@@ -611,50 +611,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec()
- return 0;
- }
-
--static void
--sync_callback(void *data, struct wl_callback *callback, uint32_t serial)
--{
-- Q_UNUSED(serial)
-- bool *done = static_cast<bool *>(data);
--
-- *done = true;
--
-- // If the wl_callback done event is received after the condition check in the while loop in
-- // forceRoundTrip(), but before the call to processEvents, the call to processEvents may block
-- // forever if no more events are posted (eventhough the callback is handled in response to the
-- // aboutToBlock signal). Hence, we wake up the event dispatcher so forceRoundTrip may return.
-- // (QTBUG-64696)
-- if (auto *dispatcher = QThread::currentThread()->eventDispatcher())
-- dispatcher->wakeUp();
--
-- wl_callback_destroy(callback);
--}
--
--static const struct wl_callback_listener sync_listener = {
-- sync_callback
--};
--
- void QWaylandDisplay::forceRoundTrip()
- {
-- // wl_display_roundtrip() works on the main queue only,
-- // but we use a separate one, so basically reimplement it here
-- int ret = 0;
-- bool done = false;
-- wl_callback *callback = wl_display_sync(mDisplay);
-- wl_callback_add_listener(callback, &sync_listener, &done);
-- flushRequests();
-- if (QThread::currentThread()->eventDispatcher()) {
-- while (!done && ret >= 0) {
-- QThread::currentThread()->eventDispatcher()->processEvents(QEventLoop::WaitForMoreEvents);
-- ret = wl_display_dispatch_pending(mDisplay);
-- }
-- } else {
-- while (!done && ret >= 0)
-- ret = wl_display_dispatch(mDisplay);
-- }
--
-- if (ret == -1 && !done)
-- wl_callback_destroy(callback);
-+ wl_display_roundtrip(mDisplay);
- }
-
- bool QWaylandDisplay::supportsWindowDecoration() const
---
-GitLab
-
diff --git a/dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild b/dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild
index a4798f13a60b..715878b3b4d9 100644
--- a/dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild
+++ b/dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-KDE_ORG_COMMIT=9f66cd3784421ee5dc6538630ade0cf215f656aa
+KDE_ORG_COMMIT=d6a6b727832819d118199f7016c2c401663ee370
inherit qt5-build
DESCRIPTION="Wayland platform plugin for Qt"
@@ -36,7 +36,6 @@ BDEPEND="
PATCHES=(
"${FILESDIR}/${P}-QTBUG-90037-QTBUG-91264.patch"
"${FILESDIR}/${P}-fix-qmake-deps.patch"
- "${FILESDIR}/${P}-simplify-roundtrip-behavior.patch"
"${FILESDIR}/${P}-guard-mResizeDirty.patch"
"${FILESDIR}/${P}-fixup-mutexes.patch"
)
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2022-04-15 6:08 Sam James
0 siblings, 0 replies; 15+ messages in thread
From: Sam James @ 2022-04-15 6:08 UTC (permalink / raw
To: gentoo-commits
commit: b21c0ff832622375a6aae8b36c6a0566e6dfaf1c
Author: Denis Pronin <dannftk <AT> yandex <DOT> ru>
AuthorDate: Fri Apr 15 04:32:05 2022 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Apr 15 06:08:30 2022 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b21c0ff8
dev-qt/qtwayland: fixed building with clang (missing include)
Added qtwayland-5.15.3-clang.patch that fixes building with clang (libcxx).
Closes: https://bugs.gentoo.org/833488
Closes: https://github.com/gentoo/gentoo/pull/25030
Signed-off-by: Denis Pronin <dannftk <AT> yandex.ru>
Signed-off-by: Sam James <sam <AT> gentoo.org>
dev-qt/qtwayland/files/qtwayland-5.15.3-clang.patch | 12 ++++++++++++
dev-qt/qtwayland/qtwayland-5.15.3-r1.ebuild | 5 ++++-
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.3-clang.patch b/dev-qt/qtwayland/files/qtwayland-5.15.3-clang.patch
new file mode 100644
index 000000000000..4ad80127f516
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.3-clang.patch
@@ -0,0 +1,12 @@
+https://bugs.gentoo.org/833488
+--- a/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
++++ b/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
+@@ -44,6 +44,8 @@
+ #include <EGL/egl.h>
+ #include <EGL/eglext.h>
+
++#include <array>
++
+ // compatibility with libdrm <= 2.4.74
+ #ifndef DRM_FORMAT_RESERVED
+ #define DRM_FORMAT_RESERVED ((1ULL << 56) - 1)
diff --git a/dev-qt/qtwayland/qtwayland-5.15.3-r1.ebuild b/dev-qt/qtwayland/qtwayland-5.15.3-r1.ebuild
index 4743cce364a5..2c07d29ec9f6 100644
--- a/dev-qt/qtwayland/qtwayland-5.15.3-r1.ebuild
+++ b/dev-qt/qtwayland/qtwayland-5.15.3-r1.ebuild
@@ -33,7 +33,10 @@ BDEPEND="
dev-util/wayland-scanner
"
-PATCHES=( "${FILESDIR}/${PN}-5.15.2-QTBUG-90037-QTBUG-91264.patch" ) # upstream pending
+PATCHES=(
+ "${FILESDIR}/${PN}-5.15.2-QTBUG-90037-QTBUG-91264.patch" # upstream pending
+ "${FILESDIR}/${PN}-5.15.3-clang.patch"
+)
src_configure() {
local myqmakeargs=(
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2023-04-13 21:45 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2023-04-13 21:45 UTC (permalink / raw
To: gentoo-commits
commit: 8b3c08bdc3c5e7a2776fae61244190378dd3052e
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Thu Apr 13 21:12:22 2023 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Thu Apr 13 21:44:28 2023 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8b3c08bd
dev-qt/qtwayland: 5.15.9 version bump
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
dev-qt/qtwayland/Manifest | 2 +
...ix-mouse-stuck-in-pressed-state-after-DnD.patch | 37 ++++++++++++++++
dev-qt/qtwayland/qtwayland-5.15.9.ebuild | 51 ++++++++++++++++++++++
3 files changed, 90 insertions(+)
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index 4557bf9b1e2e..d0d8c4a259ea 100644
--- a/dev-qt/qtwayland/Manifest
+++ b/dev-qt/qtwayland/Manifest
@@ -1,3 +1,5 @@
DIST qtwayland-5.15.8-gentoo-kde-3.tar.xz 47636 BLAKE2B b57cef6d4ce70747b74062e26459e4957c8df2c1c588b00580e175982b09c8cf172968d4d0bc95576e0e76f2640188d3beef4986d33ef4b79d209bf4a4cdbb45 SHA512 bd23c644f6e957ce7c0aacbe08112deb992608f5546889f765b333fc6094e34bc7329859d66bfbdbd56ebb5d77b82958ff3fc6614780c80573e85bb96f59eae6
+DIST qtwayland-5.15.9-gentoo-kde-1.tar.xz 44312 BLAKE2B be255e0d292ce6555473d4ad92b656ea0f3bd7c0d4041f92e2ccfe1e456c984ff3d9307e3ff1ebe8da5d40b6a6c938e116856ff1c392171f3157cc734461e8a7 SHA512 bf099acf0cb21c3402f38dcec8a3b2f9411e8d307e303bb2eb772e5dc5872cbdb456a7d37628d72bcf4f258f3e8f9baa53081bf5c061d6338f7431f016c0e27b
DIST qtwayland-everywhere-opensource-src-5.15.8.tar.xz 568268 BLAKE2B b4e982015e25104b3270b48a180b5726ba85e83fd9616422422d8729dc09bc94bbeecfe2096e388eadb0930e4abfdd3b0349eba2bd1d8f742f0c74b5e72aeac5 SHA512 6c6e9dc20f98d71abd7dba54ff278bf4535e70f86bfc4e6dd46c1af7c87777f045a6aba02bba3eb786f7cf383da5fb72b03e1e6ec636c8be0cde0e4e5b7b5b2d
+DIST qtwayland-everywhere-opensource-src-5.15.9.tar.xz 567564 BLAKE2B c5a0d39cdd746e2aa6cd011ce04baa7f1f30e21c935877a684f07d5c2a0d3446e80569fa33c3fa0953b1bea86aefd64f80fda5164f3ee5648b74c2e0e8d369b9 SHA512 d108d63ceeb3b1a8905ad7f53a7271fca6a3506679d352b7290cdf8c00e1c180b6c561ee013a674002b89e23f58cfb7b909dfc5a8fdec6cece7e0a782be77978
DIST qtwayland-everywhere-src-6.4.3.tar.xz 836240 BLAKE2B 30e3a3847328006eb580d043880556e7eeadd165fd599ab3921810360e2e2dffdea23e5aea4282cdf58b8d12f1392d70840016a187f561b3cbd6f704b1d7553d SHA512 15d74d057c09a734dd10617d018f4dc54e6be4fef5dc96d6eefd6b3f47952bbdb98bc39cbc9545c7ae1a9ec87a512a72d2f019ee47210bfab8cbae0cf01e4ae4
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch b/dev-qt/qtwayland/files/qtwayland-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch
new file mode 100644
index 000000000000..abeb7f7a1e5d
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch
@@ -0,0 +1,37 @@
+From f90f19ec0155b82981046509160849f9a3aedd9b Mon Sep 17 00:00:00 2001
+From: Ilya Fedin <fedin-ilja2010@ya.ru>
+Date: Sun, 19 Mar 2023 10:20:11 +0400
+Subject: [PATCH] Client: Fix the mouse being stuck in pressed state after DnD
+
+I can still reproduce the problem using QtWidgets applications
+on KDE Plasma 5.27. Both Windows and macOS QPA have a similar quirk
+and they both send a MouseButtonRelease event rather than a MouseMove
+event.
+
+Amends f7a386eeaec8e6314c1be7de5e14e9fe3847f9ba
+
+Task-number: QTBUG-97037
+Pick-to: 6.5 6.2 5.15
+Change-Id: I864a1cb68b3660d858623f943b3958f7cafbf955
+Reviewed-by: David Edmundson <davidedmundson@kde.org>
+(cherry picked from commit e3c74961b1c7415fd94678802ad7f8173d0be4c1)
+---
+ src/client/qwaylandinputdevice.cpp | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
+index 9a0fe49d..bc05583a 100644
+--- a/src/client/qwaylandinputdevice.cpp
++++ b/src/client/qwaylandinputdevice.cpp
+@@ -845,7 +845,7 @@ void QWaylandInputDevice::Pointer::releaseButtons()
+ mButtons = Qt::NoButton;
+
+ if (auto *window = focusWindow()) {
+- MotionEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mParent->modifiers());
++ ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers());
+ window->handleMouse(mParent, e);
+ }
+ }
+--
+2.40.0
+
diff --git a/dev-qt/qtwayland/qtwayland-5.15.9.ebuild b/dev-qt/qtwayland/qtwayland-5.15.9.ebuild
new file mode 100644
index 000000000000..ef198f315ce4
--- /dev/null
+++ b/dev-qt/qtwayland/qtwayland-5.15.9.ebuild
@@ -0,0 +1,51 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} != *9999* ]]; then
+ QT5_KDEPATCHSET_REV=1
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+inherit qt5-build
+
+DESCRIPTION="Wayland platform plugin for Qt"
+
+SLOT=5/${QT5_PV} # bug 815646
+IUSE="vulkan X"
+
+DEPEND="
+ dev-libs/wayland
+ =dev-qt/qtcore-${QT5_PV}*:5=
+ =dev-qt/qtdeclarative-${QT5_PV}*:5=
+ =dev-qt/qtgui-${QT5_PV}*:5=[egl,libinput,vulkan=,X?]
+ media-libs/libglvnd
+ vulkan? ( dev-util/vulkan-headers )
+ X? (
+ =dev-qt/qtgui-${QT5_PV}*[-gles2-only]
+ x11-libs/libX11
+ x11-libs/libXcomposite
+ )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="dev-util/wayland-scanner"
+
+PATCHES=(
+ "${FILESDIR}/${P}-fix-mouse-stuck-in-pressed-state-after-DnD.patch" # QTBUG-97037
+)
+
+src_configure() {
+ local myqmakeargs=(
+ --
+ $(qt_use vulkan feature-wayland-vulkan-server-buffer)
+ $(qt_use X feature-xcomposite-egl)
+ $(qt_use X feature-xcomposite-glx)
+ )
+ qt5-build_src_configure
+}
+
+src_install() {
+ qt5-build_src_install
+ rm "${D}${QT5_BINDIR}"/qtwaylandscanner || die
+}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2023-07-14 7:29 Sam James
0 siblings, 0 replies; 15+ messages in thread
From: Sam James @ 2023-07-14 7:29 UTC (permalink / raw
To: gentoo-commits
commit: efca1f2c0288304eb5cc06500d01d9847da48dc7
Author: Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 14 07:29:04 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Fri Jul 14 07:29:41 2023 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=efca1f2c
dev-qt/qtwayland: backport use-after-free fix to 5.15.10-r1
Closes: https://bugs.gentoo.org/910315
Signed-off-by: Sam James <sam <AT> gentoo.org>
....15.10-Destroy-frame-queue-before-display.patch | 34 +++++++++++++
dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild | 57 ++++++++++++++++++++++
2 files changed, 91 insertions(+)
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.10-Destroy-frame-queue-before-display.patch b/dev-qt/qtwayland/files/qtwayland-5.15.10-Destroy-frame-queue-before-display.patch
new file mode 100644
index 000000000000..9844d25dbebf
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.10-Destroy-frame-queue-before-display.patch
@@ -0,0 +1,34 @@
+https://bugs.gentoo.org/910315
+https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/73
+
+From 3a8613b91d2239aebc73b43562f929aa71af0de5 Mon Sep 17 00:00:00 2001
+From: David Redondo <qt@david-redondo.de>
+Date: Tue, 11 Apr 2023 14:27:27 +0200
+Subject: [PATCH] Destroy frame queue before display
+
+wl_event_queue_destroy accesses the display.
+Found by running a test under valgrind.
+
+Pick-to: 6.5
+Change-Id: Ic89cbd3b6e98b4fc9561b0e63b5fab4886a1ec50
+Reviewed-by: David Edmundson <davidedmundson@kde.org>
+(cherry picked from commit a76bf824fcd1cc3789f0d3454a0423c0241d9718)
+--- a/src/client/qwaylanddisplay.cpp
++++ b/src/client/qwaylanddisplay.cpp
+@@ -379,11 +379,12 @@ QWaylandDisplay::~QWaylandDisplay(void)
+ #if QT_CONFIG(cursor)
+ qDeleteAll(mCursorThemes);
+ #endif
+- if (mDisplay)
+- wl_display_disconnect(mDisplay);
+
+ if (m_frameEventQueue)
+ wl_event_queue_destroy(m_frameEventQueue);
++
++ if (mDisplay)
++ wl_display_disconnect(mDisplay);
+ }
+
+ // Steps which is called just after constructor. This separates registry_global() out of the constructor
+--
+2.41.0
diff --git a/dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild b/dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild
new file mode 100644
index 000000000000..7240ae37c5e2
--- /dev/null
+++ b/dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild
@@ -0,0 +1,57 @@
+# Copyright 1999-2023 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+if [[ ${PV} != *9999* ]]; then
+ QT5_KDEPATCHSET_REV=1
+ KEYWORDS="~amd64 ~arm ~arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+inherit qt5-build
+
+DESCRIPTION="Wayland platform plugin for Qt"
+
+SLOT=5/${QT5_PV} # bug 815646
+IUSE="vulkan X"
+
+DEPEND="
+ dev-libs/wayland
+ =dev-qt/qtcore-${QT5_PV}*:5=
+ =dev-qt/qtdeclarative-${QT5_PV}*:5=
+ =dev-qt/qtgui-${QT5_PV}*:5=[egl,libinput,vulkan=,X?]
+ media-libs/libglvnd
+ vulkan? ( dev-util/vulkan-headers )
+ X? (
+ =dev-qt/qtgui-${QT5_PV}*[-gles2-only]
+ x11-libs/libX11
+ x11-libs/libXcomposite
+ )
+"
+RDEPEND="${DEPEND}"
+BDEPEND="dev-util/wayland-scanner"
+
+PATCHES=(
+ # QTBUG-97037, pending upstream:
+ # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/71
+ "${FILESDIR}/${PN}-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch"
+ "${FILESDIR}/${P}-send-release-button-event-on-pointer-leave.patch"
+ # bug #910315, pending upstream:
+ # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/73
+ "${FILESDIR}/${P}-Destroy-frame-queue-before-display.patch"
+)
+
+src_configure() {
+ local myqmakeargs=(
+ --
+ $(qt_use vulkan feature-wayland-vulkan-server-buffer)
+ $(qt_use X feature-xcomposite-egl)
+ $(qt_use X feature-xcomposite-glx)
+ )
+ qt5-build_src_configure
+}
+
+src_install() {
+ qt5-build_src_install
+ rm "${D}${QT5_BINDIR}"/qtwaylandscanner || die
+}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2023-08-15 19:57 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2023-08-15 19:57 UTC (permalink / raw
To: gentoo-commits
commit: f8bec888645c38ae6dd11860e827b15f50d70cc7
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Tue Aug 15 19:56:17 2023 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue Aug 15 19:56:17 2023 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=f8bec888
dev-qt/qtwayland: drop 5.15.10-r1, 5.15.10-r2
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
...end-release-button-event-on-pointer-leave.patch | 68 ----------------------
dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild | 57 ------------------
dev-qt/qtwayland/qtwayland-5.15.10-r2.ebuild | 57 ------------------
3 files changed, 182 deletions(-)
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.10-send-release-button-event-on-pointer-leave.patch b/dev-qt/qtwayland/files/qtwayland-5.15.10-send-release-button-event-on-pointer-leave.patch
deleted file mode 100644
index 1e949fc32355..000000000000
--- a/dev-qt/qtwayland/files/qtwayland-5.15.10-send-release-button-event-on-pointer-leave.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-From 90995b07d2d4dbd12b7e527a881bf9d6158e277b Mon Sep 17 00:00:00 2001
-From: Ilya Fedin <fedin-ilja2010@ya.ru>
-Date: Sun, 19 Mar 2023 10:24:59 +0400
-Subject: [PATCH] Client: Send release button event on pointer leave
-
-Fixes: QTBUG-97037
-Pick-to: 6.6 6.5 6.2 5.15
-Change-Id: I151239b276ab5aefe166f5615baf43dab428ce0c
-Reviewed-by: David Edmundson <davidedmundson@kde.org>
-(cherry picked from commit 8235fa65fe033a94e7a44322d3502f25940092ec)
----
- src/client/qwaylandinputdevice.cpp | 9 +++++++--
- src/client/qwaylandinputdevice_p.h | 1 +
- 2 files changed, 8 insertions(+), 2 deletions(-)
-
-diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
-index bc05583a..e562c7a7 100644
---- a/src/client/qwaylandinputdevice.cpp
-+++ b/src/client/qwaylandinputdevice.cpp
-@@ -688,8 +688,8 @@ public:
-
- void QWaylandInputDevice::Pointer::pointer_leave(uint32_t time, struct wl_surface *surface)
- {
-+ releaseButtons();
- invalidateFocus();
-- mButtons = Qt::NoButton;
-
- mParent->mTime = time;
-
-@@ -804,6 +804,8 @@ void QWaylandInputDevice::Pointer::pointer_button(uint32_t serial, uint32_t time
- default: return; // invalid button number (as far as Qt is concerned)
- }
-
-+ mLastButton = qt_button;
-+
- if (state)
- mButtons |= qt_button;
- else
-@@ -842,10 +844,13 @@ void QWaylandInputDevice::Pointer::invalidateFocus()
-
- void QWaylandInputDevice::Pointer::releaseButtons()
- {
-+ if (mButtons == Qt::NoButton)
-+ return;
-+
- mButtons = Qt::NoButton;
-
- if (auto *window = focusWindow()) {
-- ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers());
-+ ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mLastButton, mParent->modifiers());
- window->handleMouse(mParent, e);
- }
- }
-diff --git a/src/client/qwaylandinputdevice_p.h b/src/client/qwaylandinputdevice_p.h
-index 5795f138..bafe3db2 100644
---- a/src/client/qwaylandinputdevice_p.h
-+++ b/src/client/qwaylandinputdevice_p.h
-@@ -346,6 +346,7 @@ public:
- QPointF mSurfacePos;
- QPointF mGlobalPos;
- Qt::MouseButtons mButtons = Qt::NoButton;
-+ Qt::MouseButton mLastButton = Qt::NoButton;
- #if QT_CONFIG(cursor)
- wl_buffer *mCursorBuffer = nullptr;
- Qt::CursorShape mCursorShape = Qt::BitmapCursor;
---
-2.41.0
-
diff --git a/dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild b/dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild
deleted file mode 100644
index d724c80f99ba..000000000000
--- a/dev-qt/qtwayland/qtwayland-5.15.10-r1.ebuild
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 1999-2023 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-if [[ ${PV} != *9999* ]]; then
- QT5_KDEPATCHSET_REV=1
- KEYWORDS="amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~sparc x86"
-fi
-
-inherit qt5-build
-
-DESCRIPTION="Wayland platform plugin for Qt"
-
-SLOT=5/${QT5_PV} # bug 815646
-IUSE="vulkan X"
-
-DEPEND="
- dev-libs/wayland
- =dev-qt/qtcore-${QT5_PV}*:5=
- =dev-qt/qtdeclarative-${QT5_PV}*:5=
- =dev-qt/qtgui-${QT5_PV}*:5=[egl,libinput,vulkan=,X?]
- media-libs/libglvnd
- vulkan? ( dev-util/vulkan-headers )
- X? (
- =dev-qt/qtgui-${QT5_PV}*[-gles2-only]
- x11-libs/libX11
- x11-libs/libXcomposite
- )
-"
-RDEPEND="${DEPEND}"
-BDEPEND="dev-util/wayland-scanner"
-
-PATCHES=(
- # QTBUG-97037, pending upstream:
- # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/71
- "${FILESDIR}/${PN}-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch"
- "${FILESDIR}/${P}-send-release-button-event-on-pointer-leave.patch"
- # bug #910315, pending upstream:
- # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/73
- "${FILESDIR}/${P}-Destroy-frame-queue-before-display.patch"
-)
-
-src_configure() {
- local myqmakeargs=(
- --
- $(qt_use vulkan feature-wayland-vulkan-server-buffer)
- $(qt_use X feature-xcomposite-egl)
- $(qt_use X feature-xcomposite-glx)
- )
- qt5-build_src_configure
-}
-
-src_install() {
- qt5-build_src_install
- rm "${D}${QT5_BINDIR}"/qtwaylandscanner || die
-}
diff --git a/dev-qt/qtwayland/qtwayland-5.15.10-r2.ebuild b/dev-qt/qtwayland/qtwayland-5.15.10-r2.ebuild
deleted file mode 100644
index 7e7e512c763a..000000000000
--- a/dev-qt/qtwayland/qtwayland-5.15.10-r2.ebuild
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright 1999-2023 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-if [[ ${PV} != *9999* ]]; then
- QT5_KDEPATCHSET_REV=2
- KEYWORDS="~amd64 arm arm64 ~hppa ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
-fi
-
-inherit qt5-build
-
-DESCRIPTION="Wayland platform plugin for Qt"
-
-SLOT=5/${QT5_PV} # bug 815646
-IUSE="vulkan X"
-
-DEPEND="
- dev-libs/wayland
- =dev-qt/qtcore-${QT5_PV}*:5=
- =dev-qt/qtdeclarative-${QT5_PV}*:5=
- =dev-qt/qtgui-${QT5_PV}*:5=[egl,libinput,vulkan=,X?]
- media-libs/libglvnd
- vulkan? ( dev-util/vulkan-headers )
- X? (
- =dev-qt/qtgui-${QT5_PV}*[-gles2-only]
- x11-libs/libX11
- x11-libs/libXcomposite
- )
-"
-RDEPEND="${DEPEND}"
-BDEPEND="dev-util/wayland-scanner"
-
-PATCHES=(
- # QTBUG-97037, pending upstream:
- # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/71
- "${FILESDIR}/${PN}-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch"
- "${FILESDIR}/${P}-send-release-button-event-on-pointer-leave.patch"
- # QTBUG-95434, pending/approved upstream:
- # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/79
- "${FILESDIR}/${P}-QTBUG-95434-convert-cursor-bitmap.patch"
-)
-
-src_configure() {
- local myqmakeargs=(
- --
- $(qt_use vulkan feature-wayland-vulkan-server-buffer)
- $(qt_use X feature-xcomposite-egl)
- $(qt_use X feature-xcomposite-glx)
- )
- qt5-build_src_configure
-}
-
-src_install() {
- qt5-build_src_install
- rm "${D}${QT5_BINDIR}"/qtwaylandscanner || die
-}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2023-09-19 12:11 Andreas Sturmlechner
0 siblings, 0 replies; 15+ messages in thread
From: Andreas Sturmlechner @ 2023-09-19 12:11 UTC (permalink / raw
To: gentoo-commits
commit: 2b091db3656dee836ae6bf206ac4e84e43334030
Author: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
AuthorDate: Sun Aug 20 16:04:55 2023 +0000
Commit: Andreas Sturmlechner <asturm <AT> gentoo <DOT> org>
CommitDate: Tue Sep 19 12:11:36 2023 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=2b091db3
dev-qt/qtwayland: Use newer patchset to drop patches from FILESDIR
Signed-off-by: Andreas Sturmlechner <asturm <AT> gentoo.org>
dev-qt/qtwayland/Manifest | 1 -
...5.15.10-QTBUG-95434-convert-cursor-bitmap.patch | 66 ----------------------
...ix-mouse-stuck-in-pressed-state-after-DnD.patch | 37 ------------
dev-qt/qtwayland/qtwayland-5.15.10-r4.ebuild | 20 ++++---
4 files changed, 11 insertions(+), 113 deletions(-)
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index dddef08d8d20..0c6394eb7efc 100644
--- a/dev-qt/qtwayland/Manifest
+++ b/dev-qt/qtwayland/Manifest
@@ -1,4 +1,3 @@
-DIST qtwayland-5.15.10-gentoo-kde-2.tar.xz 43076 BLAKE2B 735ac875c0957de47f90d08931eaaaf8d53b1db0012c7d0a592c78ae78da56ffc8a1ba9bbac0577a78d4c05a92a22acef51a6afc95db54bea2d1a2a9658b67c4 SHA512 e0131bb1f2a09597a85d1d8a402bcb1d529cbc44f62e9be8dd8eba9c10007ca4f83572ca48052529b2325cdd8d886abed1f96ba4e00768e4b1c2febe1eb5ef91
DIST qtwayland-5.15.10-gentoo-kde-3.tar.xz 46984 BLAKE2B e0fa3708d1f91599d292d5c84e4285e165cfc14e6dfba420df487e33fb13fba3b19c4e722aa3c658eb6c33e775610a0d1363361a7dd7f67c1d2c275d852b9f4d SHA512 30333d9987311eeba7d970d75806a3fd3682856890b6c8bdf5048761f14c187dcaff45c9fed445a75c594772a2dd174eee39f550fcae25042bc7ab052e0743e1
DIST qtwayland-everywhere-opensource-src-5.15.10.tar.xz 568552 BLAKE2B c5cd4ed5ff78befb5bb49f9eb809562c418b2469aa0fa23728a1de46d57f42788bba3f87a54c8dda2ee0900c76b84213d1111fd86159dc5e6707f7b67ed386de SHA512 214b1fec7dfd815d148a7485f7811e623b06d172e58e4ee3167264a4e4b8f4aeec11474e574f91652a0bd3a48476a6747cad468f1e5035c49a55a96fc1400899
DIST qtwayland-everywhere-src-6.5.2.tar.xz 1059356 BLAKE2B 4708b78ff5c8e413edaa4d4400317f58dd068273a5eef7caf1500abf8afbe4e9ac405b6854691ef93265a7eeb0cfb7406024826a0b7c7ba3f8149218af67fd48 SHA512 520d109402f1d629481029a3b1eaab740e66135db4069c34651172bb2ad821b22de60e9956a96331d2f32a4522fc52c6a4ba99b474092d755760cad08c776477
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.10-QTBUG-95434-convert-cursor-bitmap.patch b/dev-qt/qtwayland/files/qtwayland-5.15.10-QTBUG-95434-convert-cursor-bitmap.patch
deleted file mode 100644
index 7b43ee3b2149..000000000000
--- a/dev-qt/qtwayland/files/qtwayland-5.15.10-QTBUG-95434-convert-cursor-bitmap.patch
+++ /dev/null
@@ -1,66 +0,0 @@
-From dd5c9e2d894ca94faaeef7dfc3cc4344a7f62640 Mon Sep 17 00:00:00 2001
-From: Michael Weghorn <m.weghorn@posteo.de>
-Date: Mon, 20 Feb 2023 14:02:23 +0100
-Subject: [PATCH] Convert cursor bitmap to supported format
-
-The 1-bit image formats QImage::Format_Mono and
-QImage::Format_MonoLSB used by cursor bitmaps don't have
-a corresponding wl_shm_format.
-
-Therefore, convert to a supported image format as necessary
-to make such bitmap cursors work on Wayland as well.
-
-Fixes: QTBUG-95434
-Change-Id: I402fd870b301ddc01075251b66f2cf7cc1923133
-Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
-(cherry picked from commit 45ec1362f8fcb5ade92f4d2d4985b1c24e78c8ba)
-
-Backport changes: Use Qt::ReturnByValue version for QCursor::mask() and QCursor::bitmap()
----
- src/client/qwaylandcursor.cpp | 23 ++++++++++++++++++++++-
- 1 file changed, 22 insertions(+), 1 deletion(-)
-
-diff --git a/src/client/qwaylandcursor.cpp b/src/client/qwaylandcursor.cpp
-index e4eca9d4e..ba76ba2d0 100644
---- a/src/client/qwaylandcursor.cpp
-+++ b/src/client/qwaylandcursor.cpp
-@@ -44,6 +44,7 @@
- #include "qwaylandshmbackingstore_p.h"
-
- #include <QtGui/QImageReader>
-+#include <QBitmap>
- #include <QDebug>
-
- #include <wayland-cursor.h>
-@@ -250,7 +251,27 @@ QWaylandCursor::QWaylandCursor(QWaylandDisplay *display)
- QSharedPointer<QWaylandBuffer> QWaylandCursor::cursorBitmapBuffer(QWaylandDisplay *display, const QCursor *cursor)
- {
- Q_ASSERT(cursor->shape() == Qt::BitmapCursor);
-- const QImage &img = cursor->pixmap().toImage();
-+
-+ const QBitmap mask = cursor->mask(Qt::ReturnByValue);
-+ QImage img;
-+ if (cursor->pixmap().isNull())
-+ img = cursor->bitmap(Qt::ReturnByValue).toImage();
-+ else
-+ img = cursor->pixmap().toImage();
-+
-+ // convert to supported format if necessary
-+ if (!display->shm()->formatSupported(img.format())) {
-+ if (mask.isNull()) {
-+ img.convertTo(QImage::Format_RGB32);
-+ } else {
-+ // preserve mask
-+ img.convertTo(QImage::Format_ARGB32);
-+ QPixmap pixmap = QPixmap::fromImage(img);
-+ pixmap.setMask(mask);
-+ img = pixmap.toImage();
-+ }
-+ }
-+
- QSharedPointer<QWaylandShmBuffer> buffer(new QWaylandShmBuffer(display, img.size(), img.format()));
- memcpy(buffer->image()->bits(), img.bits(), size_t(img.sizeInBytes()));
- return buffer;
---
-GitLab
-
diff --git a/dev-qt/qtwayland/files/qtwayland-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch b/dev-qt/qtwayland/files/qtwayland-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch
deleted file mode 100644
index abeb7f7a1e5d..000000000000
--- a/dev-qt/qtwayland/files/qtwayland-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From f90f19ec0155b82981046509160849f9a3aedd9b Mon Sep 17 00:00:00 2001
-From: Ilya Fedin <fedin-ilja2010@ya.ru>
-Date: Sun, 19 Mar 2023 10:20:11 +0400
-Subject: [PATCH] Client: Fix the mouse being stuck in pressed state after DnD
-
-I can still reproduce the problem using QtWidgets applications
-on KDE Plasma 5.27. Both Windows and macOS QPA have a similar quirk
-and they both send a MouseButtonRelease event rather than a MouseMove
-event.
-
-Amends f7a386eeaec8e6314c1be7de5e14e9fe3847f9ba
-
-Task-number: QTBUG-97037
-Pick-to: 6.5 6.2 5.15
-Change-Id: I864a1cb68b3660d858623f943b3958f7cafbf955
-Reviewed-by: David Edmundson <davidedmundson@kde.org>
-(cherry picked from commit e3c74961b1c7415fd94678802ad7f8173d0be4c1)
----
- src/client/qwaylandinputdevice.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
-index 9a0fe49d..bc05583a 100644
---- a/src/client/qwaylandinputdevice.cpp
-+++ b/src/client/qwaylandinputdevice.cpp
-@@ -845,7 +845,7 @@ void QWaylandInputDevice::Pointer::releaseButtons()
- mButtons = Qt::NoButton;
-
- if (auto *window = focusWindow()) {
-- MotionEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mParent->modifiers());
-+ ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers());
- window->handleMouse(mParent, e);
- }
- }
---
-2.40.0
-
diff --git a/dev-qt/qtwayland/qtwayland-5.15.10-r4.ebuild b/dev-qt/qtwayland/qtwayland-5.15.10-r4.ebuild
index 88b6d7321d3a..995fc3d6e37e 100644
--- a/dev-qt/qtwayland/qtwayland-5.15.10-r4.ebuild
+++ b/dev-qt/qtwayland/qtwayland-5.15.10-r4.ebuild
@@ -4,7 +4,7 @@
EAPI=8
if [[ ${PV} != *9999* ]]; then
- QT5_KDEPATCHSET_REV=2
+ QT5_KDEPATCHSET_REV=3
KEYWORDS="amd64 arm arm64 ~hppa ~loong ppc ppc64 ~riscv ~sparc x86"
fi
@@ -31,14 +31,16 @@ DEPEND="
RDEPEND="${DEPEND}"
BDEPEND="dev-util/wayland-scanner"
-PATCHES=(
- # QTBUG-97037, pending upstream:
- # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/71
- "${FILESDIR}/${PN}-5.15.9-fix-mouse-stuck-in-pressed-state-after-DnD.patch"
- # QTBUG-95434, pending/approved upstream:
- # https://invent.kde.org/qt/qt/qtwayland/-/merge_requests/79
- "${FILESDIR}/${P}-QTBUG-95434-convert-cursor-bitmap.patch"
-)
+src_prepare() {
+ # new patchset for FILESDIR cleanup, drop past -r4 rev patches
+ pushd "${WORKDIR}/${P}-gentoo-kde-${QT5_KDEPATCHSET_REV}" > /dev/null || die
+ rm 0055-Replace-scale-with-devicePixelRatio-for-non-integer-.patch \
+ 0056-Client-Fix-buffer-damage.patch \
+ 0057-client-Fix-infinite-recursion-with-text-input-v2.patch || die
+ popd > /dev/null || die
+
+ qt5-build_src_prepare
+}
src_configure() {
local myqmakeargs=(
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2024-02-14 12:24 Ionen Wolkens
0 siblings, 0 replies; 15+ messages in thread
From: Ionen Wolkens @ 2024-02-14 12:24 UTC (permalink / raw
To: gentoo-commits
commit: 011120d8fa117d6abf20558f180577c360e08b55
Author: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 14 11:07:27 2024 +0000
Commit: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Wed Feb 14 12:22:12 2024 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=011120d8
dev-qt/qtwayland: add 6.6.2
Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>
dev-qt/qtwayland/Manifest | 1 +
.../files/qtwayland-6.6.2-nvidia-threaded-gl.patch | 30 +++++++++++++
dev-qt/qtwayland/qtwayland-6.6.2.ebuild | 51 ++++++++++++++++++++++
3 files changed, 82 insertions(+)
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index 9514883c7b6a..92038f9ee118 100644
--- a/dev-qt/qtwayland/Manifest
+++ b/dev-qt/qtwayland/Manifest
@@ -1,3 +1,4 @@
DIST qtwayland-5.15.12-gentoo-kde-1.tar.xz 48548 BLAKE2B 706547b35251116550b7d838df489f770a58140b2ece34e22cf5cd13929fa801d9a057a38f66a34c47321e1c0958049774928a68f859082ad3664acee0f1bb73 SHA512 756edb0657580c3d65d6e4bb74e3ab31c326f2f25bf501c2761e8b3e538287792955c91c0e57e32d8a04c31577546481673bdd14f1abdc2aa28513edba3a670e
DIST qtwayland-everywhere-opensource-src-5.15.12.tar.xz 569180 BLAKE2B 456b02d061ef6c57237463dd7b8387e4c6353648af0475a6ff6036ab2438417ecd3c60a8f3429aa52a98e9d213c0097fa3189602657611ae3657a2a520eb8c71 SHA512 acd78018665db3d0d77a84bb80ce7dbb65a33e0e813c3308e09a27195df204029b5e580f353eae2536e6fdde249aa34411e37f4f1663f7645448d96c9df67a66
DIST qtwayland-everywhere-src-6.6.1.tar.xz 1127148 BLAKE2B 8eb11f5f7f200a6d548577089732a533318d6120a7498dcb258183b5e0fd444541e03b59e730018cab15a612f8a31dd7b51275899271d62173eb1962a70198d3 SHA512 7f6533754daad7a2804ddddcd5139608c2b8f1ef92ae8a238c1ed4fc41c8a3ee532da0b2e57266d07d4d39d1ec6c83eca487c73788a108af30035b0dae262c76
+DIST qtwayland-everywhere-src-6.6.2.tar.xz 1118996 BLAKE2B db54b7708f01a7e4e59561eb209d9c0cd79400ec477603d826061f3c2cf6683dccbbb48e73dc7b5ebe674ef7c5b438fd75eccbd4bab9191219598f526e6b395f SHA512 ed5539ac9515ba93822ee1dfdedd3ece46a51c50b23efd0fb90ead2728b651c41bec42a6e2e2caf72bda0f274940e9f00049bae42c1315e0226e4a42c708f664
diff --git a/dev-qt/qtwayland/files/qtwayland-6.6.2-nvidia-threaded-gl.patch b/dev-qt/qtwayland/files/qtwayland-6.6.2-nvidia-threaded-gl.patch
new file mode 100644
index 000000000000..f7f7607024c5
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-6.6.2-nvidia-threaded-gl.patch
@@ -0,0 +1,30 @@
+Backport from 6.6 branch which failed to make it in 6.6.2.
+
+https://bugreports.qt.io/browse/QTBUG-95817
+https://codereview.qt-project.org/c/qt/qtwayland/+/536732
+https://github.com/qt/qtwayland/commit/e4156bad6398dcbe8740041148d95ee9ed437d8b
+From: David Redondo <qt@david-redondo.de>
+Date: Wed, 31 Jan 2024 09:01:48 +0100
+Subject: [PATCH] client: Disable threaded GL on desktop NVIDIA
+
+Otherwise QtQuick windows freeze when resized.
+In order to still use threaded rendering on
+embedded platforms where resizing is not required
+we check if XDG_CURRENT_DESKTOP which should be
+set by desktop environments.
+--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp
++++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp
+@@ -92,6 +92,13 @@ void QWaylandEglClientBufferIntegration::initialize(QWaylandDisplay *display)
+ break;
+ }
+ }
++
++ // On desktop NVIDIA resizing QtQuick freezes them when using threaded rendering QTBUG-95817
++ // In order to support threaded rendering on embedded platforms where resizing is not needed
++ // we check if XDG_CURRENT_DESKTOP is set which desktop environments should set
++ if (qstrcmp(vendor, "NVIDIA") == 0 && qEnvironmentVariableIsSet("XDG_CURRENT_DESKTOP")) {
++ m_supportsThreading = false;
++ }
+ }
+
+ bool QWaylandEglClientBufferIntegration::isValid() const
diff --git a/dev-qt/qtwayland/qtwayland-6.6.2.ebuild b/dev-qt/qtwayland/qtwayland-6.6.2.ebuild
new file mode 100644
index 000000000000..26be2cc76c6e
--- /dev/null
+++ b/dev-qt/qtwayland/qtwayland-6.6.2.ebuild
@@ -0,0 +1,51 @@
+# Copyright 2021-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit qt6-build
+
+DESCRIPTION="Wayland platform plugin for Qt"
+
+if [[ ${QT6_BUILD_TYPE} == release ]]; then
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+IUSE="compositor qml vulkan"
+
+RDEPEND="
+ dev-libs/wayland
+ ~dev-qt/qtbase-${PV}:6[gui,opengl,vulkan=]
+ media-libs/libglvnd
+ x11-libs/libxkbcommon
+ compositor? (
+ qml? ( ~dev-qt/qtdeclarative-${PV}:6 )
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ vulkan? ( dev-util/vulkan-headers )
+"
+BDEPEND="dev-util/wayland-scanner"
+
+CMAKE_SKIP_TESTS=(
+ # segfaults for not-looked-into reasons, but not considered
+ # an issue given >=seatv5 exists since wayland-1.10 (2016)
+ tst_seatv4
+ # needs a compositor/opengl, skip the extra trouble
+ tst_surface
+ tst_xdgdecorationv1
+)
+
+PATCHES=(
+ "${FILESDIR}"/${P}-nvidia-threaded-gl.patch
+)
+
+src_configure() {
+ local mycmakeargs=(
+ $(cmake_use_find_package qml Qt6Quick)
+ $(qt_feature compositor wayland_server)
+ )
+
+ qt6-build_src_configure
+}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2024-04-19 7:55 Ionen Wolkens
0 siblings, 0 replies; 15+ messages in thread
From: Ionen Wolkens @ 2024-04-19 7:55 UTC (permalink / raw
To: gentoo-commits
commit: 3156cc92fb1e9e5406ab3b78a2ed58e2d32595fc
Author: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Fri Apr 19 07:25:44 2024 +0000
Commit: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Fri Apr 19 07:52:53 2024 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=3156cc92
dev-qt/qtwayland: drop 6.6.2-r1, 6.6.3
Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>
dev-qt/qtwayland/Manifest | 2 -
.../files/qtwayland-6.6.2-nvidia-threaded-gl.patch | 30 -----------
dev-qt/qtwayland/qtwayland-6.6.2-r1.ebuild | 59 ----------------------
dev-qt/qtwayland/qtwayland-6.6.3.ebuild | 55 --------------------
4 files changed, 146 deletions(-)
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index c63cb56cb998..b74c8f47c254 100644
--- a/dev-qt/qtwayland/Manifest
+++ b/dev-qt/qtwayland/Manifest
@@ -1,5 +1,3 @@
DIST qtwayland-5.15.13-gentoo-kde-1.tar.xz 48696 BLAKE2B f0e06d19e44c261bbc5ae56ad8c1ede4479d9ebaaf04272307e5547ea55c5b525d8d78aa674e773fedad1c554b56878c9ac1392a148d4c7fed50470b6bdc5404 SHA512 cb687922c666a2ce0f16578aa732f805d8bf96de3b723946dfd8a0163ea88b17dd4c1628b1c7a65128d5da84c67daa69a691d07cb7f07deb22419c995a998c5d
DIST qtwayland-everywhere-opensource-src-5.15.13.tar.xz 569152 BLAKE2B 9e6ceb514b17ba7fa99d6263d5c84edf0f39c510a080bf607ba1e68dfacc2f0f509529d5e4fd61e04ed04a922c5f82b6a5aabbf5d78e487ca5c1cc1c86d13e19 SHA512 1f5b5e911ad9026d08260e5ce15aad5c9167726ce42db85634392f1e49d545ca5bcd4e44304f1ff633ffe110712a2b5dad87de6cd89eb3b7e6c657fe260e388d
-DIST qtwayland-everywhere-src-6.6.2.tar.xz 1118996 BLAKE2B db54b7708f01a7e4e59561eb209d9c0cd79400ec477603d826061f3c2cf6683dccbbb48e73dc7b5ebe674ef7c5b438fd75eccbd4bab9191219598f526e6b395f SHA512 ed5539ac9515ba93822ee1dfdedd3ece46a51c50b23efd0fb90ead2728b651c41bec42a6e2e2caf72bda0f274940e9f00049bae42c1315e0226e4a42c708f664
-DIST qtwayland-everywhere-src-6.6.3.tar.xz 1120056 BLAKE2B e5bbdd53f0c133dcd310c5e85480abf28d005291996e1f9414292eeeab144e8a7706bdbe0ca41fd3bfb8d4a36020fe6075102a9e94bad0a85ae338497c6e69d1 SHA512 6829c9aef2b7fc37a6a94c0093d478c13742d8c2b3d2b9444b7a1dbe022bfce1f6a5665d16bebe221e93bddd964b726451b2949352877b25d65654df17a58eb1
DIST qtwayland-everywhere-src-6.7.0.tar.xz 1121748 BLAKE2B d42003056236b542a95484157bee3bf74a602882ac79dde02c74f762e3c07eec28405534df46cf5d4b8381d0f99cccfeeca10f614622bbb7b09ec81dbb6a06aa SHA512 cda0e0736f85656d05b2399970413ffc5082af4256c8b3087c3f1d06cad5ef5ad7cb8838513723569193df02cd3c3df3d5478d99464606c62c42629ef75c225f
diff --git a/dev-qt/qtwayland/files/qtwayland-6.6.2-nvidia-threaded-gl.patch b/dev-qt/qtwayland/files/qtwayland-6.6.2-nvidia-threaded-gl.patch
deleted file mode 100644
index f7f7607024c5..000000000000
--- a/dev-qt/qtwayland/files/qtwayland-6.6.2-nvidia-threaded-gl.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-Backport from 6.6 branch which failed to make it in 6.6.2.
-
-https://bugreports.qt.io/browse/QTBUG-95817
-https://codereview.qt-project.org/c/qt/qtwayland/+/536732
-https://github.com/qt/qtwayland/commit/e4156bad6398dcbe8740041148d95ee9ed437d8b
-From: David Redondo <qt@david-redondo.de>
-Date: Wed, 31 Jan 2024 09:01:48 +0100
-Subject: [PATCH] client: Disable threaded GL on desktop NVIDIA
-
-Otherwise QtQuick windows freeze when resized.
-In order to still use threaded rendering on
-embedded platforms where resizing is not required
-we check if XDG_CURRENT_DESKTOP which should be
-set by desktop environments.
---- a/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp
-+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglclientbufferintegration.cpp
-@@ -92,6 +92,13 @@ void QWaylandEglClientBufferIntegration::initialize(QWaylandDisplay *display)
- break;
- }
- }
-+
-+ // On desktop NVIDIA resizing QtQuick freezes them when using threaded rendering QTBUG-95817
-+ // In order to support threaded rendering on embedded platforms where resizing is not needed
-+ // we check if XDG_CURRENT_DESKTOP is set which desktop environments should set
-+ if (qstrcmp(vendor, "NVIDIA") == 0 && qEnvironmentVariableIsSet("XDG_CURRENT_DESKTOP")) {
-+ m_supportsThreading = false;
-+ }
- }
-
- bool QWaylandEglClientBufferIntegration::isValid() const
diff --git a/dev-qt/qtwayland/qtwayland-6.6.2-r1.ebuild b/dev-qt/qtwayland/qtwayland-6.6.2-r1.ebuild
deleted file mode 100644
index a91481138236..000000000000
--- a/dev-qt/qtwayland/qtwayland-6.6.2-r1.ebuild
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright 2021-2024 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-inherit qt6-build
-
-DESCRIPTION="Wayland platform plugin for Qt"
-
-if [[ ${QT6_BUILD_TYPE} == release ]]; then
- KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
-fi
-
-IUSE="accessibility compositor qml vulkan"
-
-RDEPEND="
- dev-libs/wayland
- ~dev-qt/qtbase-${PV}:6[accessibility=,gui,opengl,vulkan=]
- media-libs/libglvnd
- x11-libs/libxkbcommon
- compositor? (
- qml? ( ~dev-qt/qtdeclarative-${PV}:6 )
- )
-"
-DEPEND="
- ${RDEPEND}
- vulkan? ( dev-util/vulkan-headers )
-"
-BDEPEND="dev-util/wayland-scanner"
-
-CMAKE_SKIP_TESTS=(
- # segfaults for not-looked-into reasons, but not considered
- # an issue given >=seatv5 exists since wayland-1.10 (2016)
- tst_seatv4
- # needs a compositor/opengl, skip the extra trouble
- tst_surface
- tst_xdgdecorationv1
-)
-
-PATCHES=(
- "${FILESDIR}"/${P}-nvidia-threaded-gl.patch
-)
-
-src_configure() {
- local mycmakeargs=(
- $(cmake_use_find_package qml Qt6Quick)
- $(qt_feature compositor wayland_server)
- )
-
- qt6-build_src_configure
-}
-
-src_test() {
- # users' session setting may break tst_clientextension (bug #927030)
- unset DESKTOP_SESSION XDG_CURRENT_DESKTOP
- unset GNOME_DESKTOP_SESSION_ID KDE_FULL_SESSION
-
- qt6-build_src_test
-}
diff --git a/dev-qt/qtwayland/qtwayland-6.6.3.ebuild b/dev-qt/qtwayland/qtwayland-6.6.3.ebuild
deleted file mode 100644
index 5a74ea1f49f4..000000000000
--- a/dev-qt/qtwayland/qtwayland-6.6.3.ebuild
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright 2021-2024 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=8
-
-inherit qt6-build
-
-DESCRIPTION="Wayland platform plugin for Qt"
-
-if [[ ${QT6_BUILD_TYPE} == release ]]; then
- KEYWORDS="amd64 ~arm arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
-fi
-
-IUSE="accessibility compositor qml vulkan"
-
-RDEPEND="
- dev-libs/wayland
- ~dev-qt/qtbase-${PV}:6[accessibility=,gui,opengl,vulkan=]
- media-libs/libglvnd
- x11-libs/libxkbcommon
- compositor? (
- qml? ( ~dev-qt/qtdeclarative-${PV}:6 )
- )
-"
-DEPEND="
- ${RDEPEND}
- vulkan? ( dev-util/vulkan-headers )
-"
-BDEPEND="dev-util/wayland-scanner"
-
-CMAKE_SKIP_TESTS=(
- # segfaults for not-looked-into reasons, but not considered
- # an issue given >=seatv5 exists since wayland-1.10 (2016)
- tst_seatv4
- # needs a compositor/opengl, skip the extra trouble
- tst_surface
- tst_xdgdecorationv1
-)
-
-src_configure() {
- local mycmakeargs=(
- $(cmake_use_find_package qml Qt6Quick)
- $(qt_feature compositor wayland_server)
- )
-
- qt6-build_src_configure
-}
-
-src_test() {
- # users' session setting may break tst_clientextension (bug #927030)
- unset DESKTOP_SESSION XDG_CURRENT_DESKTOP
- unset GNOME_DESKTOP_SESSION_ID KDE_FULL_SESSION
-
- qt6-build_src_test
-}
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2024-07-09 14:35 Ionen Wolkens
0 siblings, 0 replies; 15+ messages in thread
From: Ionen Wolkens @ 2024-07-09 14:35 UTC (permalink / raw
To: gentoo-commits
commit: 6ee50c5f09b80ba9c8990f9fbff084dc378dc4e0
Author: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Tue Jul 9 14:29:24 2024 +0000
Commit: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Tue Jul 9 14:34:30 2024 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=6ee50c5f
dev-qt/qtwayland: backport regression fix for plasmashell
Straight-to-stable given kind of a trival+important fix and
want to avoid a double stablereq bug while 6.7.2 is still
being stabilized.
Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>
.../files/qtwayland-6.7.2-plasma-popup.patch | 25 ++++++++++++++++++++++
...land-6.7.2.ebuild => qtwayland-6.7.2-r1.ebuild} | 4 ++++
2 files changed, 29 insertions(+)
diff --git a/dev-qt/qtwayland/files/qtwayland-6.7.2-plasma-popup.patch b/dev-qt/qtwayland/files/qtwayland-6.7.2-plasma-popup.patch
new file mode 100644
index 000000000000..25c7918a5a8b
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-6.7.2-plasma-popup.patch
@@ -0,0 +1,25 @@
+Fixed in qtwayland-6.7.3
+
+https://mail.kde.org/pipermail/distributions/2024-July/001512.html
+https://invent.kde.org/qt/qt/qtwayland/-/commit/92bcb8f6b7a852c7a5d662fc34de561692a7a454
+From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
+Date: Thu, 20 Jun 2024 11:25:06 +0300
+Subject: [PATCH] Client: Ensure that guessed popup parent has a shell surface
+
+The last input window may not have a shell surface if it is a subsurface
+or that window has been just made invisible.
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -1157,8 +1157,10 @@ QWaylandWindow *QWaylandWindow::guessTransientParent() const
+ return mTopPopup;
+ }
+
+- if (window()->type() == Qt::ToolTip || window()->type() == Qt::Popup)
+- return display()->lastInputWindow();
++ if (window()->type() == Qt::ToolTip || window()->type() == Qt::Popup) {
++ if (auto lastInputWindow = display()->lastInputWindow())
++ return closestShellSurfaceWindow(lastInputWindow->window());
++ }
+
+ return nullptr;
+ }
diff --git a/dev-qt/qtwayland/qtwayland-6.7.2.ebuild b/dev-qt/qtwayland/qtwayland-6.7.2-r1.ebuild
similarity index 96%
rename from dev-qt/qtwayland/qtwayland-6.7.2.ebuild
rename to dev-qt/qtwayland/qtwayland-6.7.2-r1.ebuild
index 1d847bfe9c81..954acc3d10d2 100644
--- a/dev-qt/qtwayland/qtwayland-6.7.2.ebuild
+++ b/dev-qt/qtwayland/qtwayland-6.7.2-r1.ebuild
@@ -28,6 +28,10 @@ DEPEND="
"
BDEPEND="dev-util/wayland-scanner"
+PATCHES=(
+ "${FILESDIR}"/${P}-plasma-popup.patch
+)
+
CMAKE_SKIP_TESTS=(
# segfaults for not-looked-into reasons, but not considered
# an issue given >=seatv5 exists since wayland-1.10 (2016)
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/
@ 2024-07-12 4:34 Ionen Wolkens
0 siblings, 0 replies; 15+ messages in thread
From: Ionen Wolkens @ 2024-07-12 4:34 UTC (permalink / raw
To: gentoo-commits
commit: 7bf9c926594fa620acf118a873672d61dd98b252
Author: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Fri Jul 12 04:30:03 2024 +0000
Commit: Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Fri Jul 12 04:30:03 2024 +0000
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7bf9c926
dev-qt/qtwayland: backport more fixes to help plasma
Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>
.../files/qtwayland-6.7.2-drag-drop.patch | 67 ++++++++++++++++++++++
.../files/qtwayland-6.7.2-thread-safety.patch | 65 +++++++++++++++++++++
dev-qt/qtwayland/qtwayland-6.7.2-r2.ebuild | 67 ++++++++++++++++++++++
3 files changed, 199 insertions(+)
diff --git a/dev-qt/qtwayland/files/qtwayland-6.7.2-drag-drop.patch b/dev-qt/qtwayland/files/qtwayland-6.7.2-drag-drop.patch
new file mode 100644
index 000000000000..6141d95cb834
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-6.7.2-drag-drop.patch
@@ -0,0 +1,67 @@
+Backport from upcoming 6.7.3[1][2] for [3][4].
+
+[1] https://github.com/qt/qtwayland/commit/85ec3ae70b905ddf9e16d86c468446d74867743f
+[2] https://codereview.qt-project.org/c/qt/qtwayland/+/565408
+[3] https://bugs.kde.org/show_bug.cgi?id=482770
+[4] https://bugs.kde.org/show_bug.cgi?id=490059
+
+From: =?UTF-8?q?Niccol=C3=B2=20Venerandi?= <niccolo@venerandi.com>
+Date: Mon, 3 Jun 2024 12:19:59 +0200
+Subject: [PATCH] Emit a LeaveEvent on drag and drop start
+
+All focused windows will now receive a LeaveEvent when a drag and drop starts.
+This makes sure that the dragged element does not preserve any hover decoration
+during the drag and drop, and that other elements that happen to take place
+of the dragged elements don't become hovered too.
+--- a/src/client/qwaylanddnd.cpp
++++ b/src/client/qwaylanddnd.cpp
+@@ -29,4 +29,9 @@
+ void QWaylandDrag::startDrag()
+ {
++ // Some compositors do not send a pointer leave before starting a drag, some do.
++ // This is discussed upstream at: https://gitlab.freedesktop.org/wayland/wayland/-/issues/444
++ // For consistency between compositors we emit the leave event here, upon drag start.
++ m_display->currentInputDevice()->handleStartDrag();
++
+ QBasicDrag::startDrag();
+ QWaylandWindow *icon = static_cast<QWaylandWindow *>(shapedPixmapWindow()->handle());
+--- a/src/client/qwaylandinputdevice.cpp
++++ b/src/client/qwaylandinputdevice.cpp
+@@ -524,4 +524,10 @@
+ }
+
++void QWaylandInputDevice::handleStartDrag()
++{
++ if (mPointer)
++ mPointer->leavePointers();
++}
++
+ #if QT_CONFIG(wayland_datadevice)
+ void QWaylandInputDevice::setDataDevice(QWaylandDataDevice *device)
+@@ -880,4 +886,12 @@
+ window->handleMouse(mParent, e);
+ }
++}
++
++void QWaylandInputDevice::Pointer::leavePointers()
++{
++ if (auto *window = focusWindow()) {
++ LeaveEvent e(focusWindow(), mSurfacePos, mGlobalPos);
++ window->handleMouse(mParent, e);
++ }
+ }
+
+--- a/src/client/qwaylandinputdevice_p.h
++++ b/src/client/qwaylandinputdevice_p.h
+@@ -93,4 +93,5 @@
+ void setCursor(const QCursor *cursor, const QSharedPointer<QWaylandBuffer> &cachedBuffer = {}, int fallbackOutputScale = 1);
+ #endif
++ void handleStartDrag();
+ void handleEndDrag();
+
+@@ -321,4 +322,5 @@
+ public:
+ void releaseButtons();
++ void leavePointers();
+
+ QWaylandInputDevice *mParent = nullptr;
diff --git a/dev-qt/qtwayland/files/qtwayland-6.7.2-thread-safety.patch b/dev-qt/qtwayland/files/qtwayland-6.7.2-thread-safety.patch
new file mode 100644
index 000000000000..92be3b81d5b0
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-6.7.2-thread-safety.patch
@@ -0,0 +1,65 @@
+Backport from 6.8 branch which should later land in 6.7.3 in [1] for [2].
+
+[1] https://codereview.qt-project.org/c/qt/qtwayland/+/574983
+[2] https://bugs.kde.org/show_bug.cgi?id=489180
+
+From: David Edmundson <davidedmundson@kde.org>
+Date: Fri, 05 Jul 2024 16:13:40 +0100
+Subject: [PATCH] Client: Improve thread safety determining window size on the render thread
+
+updateSurface is called from both the render and GUI thread. We
+therefore need every property referenced to be thread safe.
+
+Rather than guarding each property we cache the buffer size whenever the
+window geometry or scale changes and put a mutex round this one
+variable.
+--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
++++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+@@ -51,4 +51,13 @@
+ void QWaylandEglWindow::ensureSize()
+ {
++ // this is always called on the main thread
++ QMargins margins = mWindowDecoration ? frameMargins() : QMargins{};
++ QRect rect = geometry();
++ QSize sizeWithMargins = (rect.size() + QSize(margins.left() + margins.right(), margins.top() + margins.bottom())) * scale();
++ {
++ QWriteLocker lock(&m_bufferSizeLock);
++ m_bufferSize = sizeWithMargins;
++ }
++
+ updateSurface(false);
+ }
+@@ -61,12 +70,15 @@
+ // Just resize the wl_egl_window, the EGLSurface will be created
+ // the next time makeCurrent is called.
+- updateSurface(false);
++ ensureSize();
+ }
+
+ void QWaylandEglWindow::updateSurface(bool create)
+ {
+- QMargins margins = mWindowDecoration ? frameMargins() : QMargins{};
+- QRect rect = geometry();
+- QSize sizeWithMargins = (rect.size() + QSize(margins.left() + margins.right(), margins.top() + margins.bottom())) * scale();
++
++ QSize sizeWithMargins;
++ {
++ QReadLocker lock(&m_bufferSizeLock);
++ sizeWithMargins = m_bufferSize;
++ }
+
+ // wl_egl_windows must have both width and height > 0
+--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow_p.h
++++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow_p.h
+@@ -61,5 +61,11 @@
+
+ QSurfaceFormat m_format;
++ // Size used in the last call to wl_egl_window_resize
+ QSize m_requestedSize;
++
++ // Size of the buffer used by QWaylandWindow
++ // This is always written to from the main thread, potentially read from the rendering thread
++ QReadWriteLock m_bufferSizeLock;
++ QSize m_bufferSize;
+ };
+
diff --git a/dev-qt/qtwayland/qtwayland-6.7.2-r2.ebuild b/dev-qt/qtwayland/qtwayland-6.7.2-r2.ebuild
new file mode 100644
index 000000000000..eab3c3a8d3a5
--- /dev/null
+++ b/dev-qt/qtwayland/qtwayland-6.7.2-r2.ebuild
@@ -0,0 +1,67 @@
+# Copyright 2021-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+inherit qt6-build
+
+DESCRIPTION="Wayland platform plugin for Qt"
+
+if [[ ${QT6_BUILD_TYPE} == release ]]; then
+ KEYWORDS="~amd64 ~arm ~arm64 ~loong ~ppc ~ppc64 ~riscv ~sparc ~x86"
+fi
+
+IUSE="accessibility compositor qml vulkan"
+
+RDEPEND="
+ dev-libs/wayland
+ ~dev-qt/qtbase-${PV}:6[accessibility=,gui,opengl,vulkan=,wayland]
+ media-libs/libglvnd
+ x11-libs/libxkbcommon
+ compositor? (
+ qml? ( ~dev-qt/qtdeclarative-${PV}:6 )
+ )
+"
+DEPEND="
+ ${RDEPEND}
+ vulkan? ( dev-util/vulkan-headers )
+"
+BDEPEND="dev-util/wayland-scanner"
+
+PATCHES=(
+ "${FILESDIR}"/${P}-plasma-popup.patch
+ "${FILESDIR}"/${P}-drag-drop.patch
+ "${FILESDIR}"/${P}-thread-safety.patch
+)
+
+CMAKE_SKIP_TESTS=(
+ # segfaults for not-looked-into reasons, but not considered
+ # an issue given >=seatv5 exists since wayland-1.10 (2016)
+ tst_seatv4
+ # needs a compositor/opengl, skip the extra trouble
+ tst_surface
+ tst_xdgdecorationv1
+ # known failing with wayland-1.23.0 (or at least with offscreen), not
+ # believed to result in critical runtime issues so skip until this is
+ # looked at upstream (https://bugreports.qt.io/browse/QTBUG-126379)
+ tst_client
+ tst_compositor
+ tst_scaling
+)
+
+src_configure() {
+ local mycmakeargs=(
+ $(cmake_use_find_package qml Qt6Quick)
+ $(qt_feature compositor wayland_server)
+ )
+
+ qt6-build_src_configure
+}
+
+src_test() {
+ # users' session setting may break tst_clientextension (bug #927030)
+ unset DESKTOP_SESSION XDG_CURRENT_DESKTOP
+ unset GNOME_DESKTOP_SESSION_ID KDE_FULL_SESSION
+
+ qt6-build_src_test
+}
^ permalink raw reply related [flat|nested] 15+ messages in thread
end of thread, other threads:[~2024-07-12 4:34 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-08 19:58 [gentoo-commits] repo/gentoo:master commit in: dev-qt/qtwayland/files/, dev-qt/qtwayland/ Andreas Sturmlechner
-- strict thread matches above, loose matches on Subject: below --
2024-07-12 4:34 Ionen Wolkens
2024-07-09 14:35 Ionen Wolkens
2024-04-19 7:55 Ionen Wolkens
2024-02-14 12:24 Ionen Wolkens
2023-09-19 12:11 Andreas Sturmlechner
2023-08-15 19:57 Andreas Sturmlechner
2023-07-14 7:29 Sam James
2023-04-13 21:45 Andreas Sturmlechner
2022-04-15 6:08 Sam James
2022-02-15 10:23 Andreas Sturmlechner
2019-11-25 1:35 Andreas Sturmlechner
2019-11-20 21:21 Andreas Sturmlechner
2019-07-20 8:52 Andreas Sturmlechner
2018-02-07 14:17 Andreas Sturmlechner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox