summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sturmlechner <asturm@gentoo.org>2022-02-09 17:03:33 +0100
committerAndreas Sturmlechner <asturm@gentoo.org>2022-02-14 22:33:28 +0100
commitc8b9160751c80e74fe1b4dbd232641005fee3601 (patch)
tree170f09a3bdf666ad89cf26197ce3307d35fffe54 /dev-qt/qtwayland
parentsys-libs/binutils-libs: Stabilize 2.37_p1-r2 amd64, #833210 (diff)
downloadgentoo-c8b9160751c80e74fe1b4dbd232641005fee3601.tar.gz
gentoo-c8b9160751c80e74fe1b4dbd232641005fee3601.tar.bz2
gentoo-c8b9160751c80e74fe1b4dbd232641005fee3601.zip
dev-qt/qtwayland: 5.15.2-r20 version bump to KDE 9f66cd37
Weng Xuetian (2): Cursor position == 0 should still show the cursor Update the preedit styling mapping Dropping one upstreamed patch, adding a newly pending one: - client: Simplify round trip behavior Package-Manager: Portage-3.0.30, Repoman-3.0.3 Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
Diffstat (limited to 'dev-qt/qtwayland')
-rw-r--r--dev-qt/qtwayland/Manifest2
-rw-r--r--dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch79
-rw-r--r--dev-qt/qtwayland/files/qtwayland-5.15.2-simplify-roundtrip-behavior.patch82
-rw-r--r--dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild (renamed from dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild)4
4 files changed, 85 insertions, 82 deletions
diff --git a/dev-qt/qtwayland/Manifest b/dev-qt/qtwayland/Manifest
index 9a2c4f0dea39..b81ab4d5cfd4 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-ce2caf49.tar.gz 831808 BLAKE2B af7006f3ce5bb262710c5405f20107239140afe5c7f2b8b10ac834b7e41076a274adbf34152cba3fed19538f653f70faffb1255e622b8607d34f5a4695603461 SHA512 8eaf58da68311b072f5d0192444dafc5819971807682bb85f2316c10e4e64a735a95b05a0a5c1e4a66542702281deb364a6470f6bd0ea042818edb5a9b0396fb
+DIST qtwayland-5.15.2-9f66cd37.tar.gz 831912 BLAKE2B 6dd0d695ef70e453df6400b5eb9f21c585d65fcb9ede94c7f23bd6d2a65afcdaf51d400a703e507f70150213280be24aa3f4ea175c00a9ebf7a78a6752b5f1c9 SHA512 586fe1f87736ba7de67631575778cc3c1f36a76e2b97681bbb4465078a2b39e9bae5c11a552f662385298869ba31d203ef05b9a0bb40e77e242d829d3d82041b
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
deleted file mode 100644
index a76b15d39cac..000000000000
--- a/dev-qt/qtwayland/files/qtwayland-5.15.2-remove-mWaitingForUpdateDelivery.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-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/files/qtwayland-5.15.2-simplify-roundtrip-behavior.patch b/dev-qt/qtwayland/files/qtwayland-5.15.2-simplify-roundtrip-behavior.patch
new file mode 100644
index 000000000000..2b210e849210
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-5.15.2-simplify-roundtrip-behavior.patch
@@ -0,0 +1,82 @@
+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-r19.ebuild b/dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild
index 2761a297bc7b..a4798f13a60b 100644
--- a/dev-qt/qtwayland/qtwayland-5.15.2-r19.ebuild
+++ b/dev-qt/qtwayland/qtwayland-5.15.2-r20.ebuild
@@ -3,7 +3,7 @@
EAPI=8
-KDE_ORG_COMMIT=ce2caf493a1343fbd9f8e4c85baf6a61c057f242
+KDE_ORG_COMMIT=9f66cd3784421ee5dc6538630ade0cf215f656aa
inherit qt5-build
DESCRIPTION="Wayland platform plugin for Qt"
@@ -36,7 +36,7 @@ BDEPEND="
PATCHES=(
"${FILESDIR}/${P}-QTBUG-90037-QTBUG-91264.patch"
"${FILESDIR}/${P}-fix-qmake-deps.patch"
- "${FILESDIR}/${P}-remove-mWaitingForUpdateDelivery.patch"
+ "${FILESDIR}/${P}-simplify-roundtrip-behavior.patch"
"${FILESDIR}/${P}-guard-mResizeDirty.patch"
"${FILESDIR}/${P}-fixup-mutexes.patch"
)