public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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 --
2019-11-20 21:21 [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
2022-02-08 19:58 Andreas Sturmlechner
2019-11-25  1:35 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