1
0
mirror of https://git.savannah.gnu.org/git/guix.git synced 2026-04-06 21:20:33 +02:00
Files
guix/gnu/packages/patches/qtwayland-5.15.18-0030-use-wl_surface.damage_buffer-on-the-client-side.patch
Danny Milosavljevic 9d24fa2837 gnu: qtwayland@5: Add patches from KDE Qt5 Patch Collection.
The KDE Qt5 Patch Collection (kde/5.15 branch) maintains backported fixes
for Qt 5.15 that were not backported by Qt upstream.  This includes a fix
for QTBUG-103391: a fatal Wayland protocol error when a QDialog's
maximumWidth is less than the minimum width required by its contents.
Qt's Wayland backend sent set_min_size and set_max_size without ensuring
max >= min, violating the xdg-shell protocol.

* gnu/packages/patches/qtwayland-5.15.18-0001-client-announce-an-output-after-receiving-more-compl.patch,
gnu/packages/patches/qtwayland-5.15.18-0002-fix-issue-with-repeated-window-size-changes.patch,
gnu/packages/patches/qtwayland-5.15.18-0003-client-connect-drags-being-accepted-to-updating-the-.patch,
gnu/packages/patches/qtwayland-5.15.18-0004-client-disconnect-registry-listener-on-destruction.patch,
gnu/packages/patches/qtwayland-5.15.18-0005-client-set-xdgshell-size-hints-before-the-first-comm.patch,
gnu/packages/patches/qtwayland-5.15.18-0006-fix-build.patch,
gnu/packages/patches/qtwayland-5.15.18-0007-fix-remove-listener.patch,
gnu/packages/patches/qtwayland-5.15.18-0008-hook-up-querykeyboardmodifers.patch,
gnu/packages/patches/qtwayland-5.15.18-0009-correctly-detect-if-image-format-is-supported-by-qim.patch,
gnu/packages/patches/qtwayland-5.15.18-0010-client-don-t-always-recreate-frame-callbacks.patch,
gnu/packages/patches/qtwayland-5.15.18-0011-client-always-destroy-frame-callback-in-the-actual-c.patch,
gnu/packages/patches/qtwayland-5.15.18-0012-wayland-client-use-wl_keyboard-to-determine-active-s.patch,
gnu/packages/patches/qtwayland-5.15.18-0013-client-do-not-empty-clipboard-when-a-new-popup-windo.patch,
gnu/packages/patches/qtwayland-5.15.18-0014-client-implement-datadevicev3.patch,
gnu/packages/patches/qtwayland-5.15.18-0015-client-delay-deletion-of-qdrag-object-until-after-we.patch,
gnu/packages/patches/qtwayland-5.15.18-0016-client-avoid-processing-of-events-when-showing-windo.patch,
gnu/packages/patches/qtwayland-5.15.18-0017-handle-registry_global-out-of-constructor.patch,
gnu/packages/patches/qtwayland-5.15.18-0018-connect-flushrequest-after-forceroundtrip.patch,
gnu/packages/patches/qtwayland-5.15.18-0019-move-the-wayland-socket-polling-to-a-separate-event-.patch,
gnu/packages/patches/qtwayland-5.15.18-0020-client-remove-mwaitingforupdatedelivery.patch,
gnu/packages/patches/qtwayland-5.15.18-0021-client-simplify-round-trip-behavior.patch,
gnu/packages/patches/qtwayland-5.15.18-0022-client-fix-opaque-region-setter.patch,
gnu/packages/patches/qtwayland-5.15.18-0023-use-proper-dependencies-in-compile-tests.patch,
gnu/packages/patches/qtwayland-5.15.18-0024-revert-client-remove-mwaitingforupdatedelivery.patch,
gnu/packages/patches/qtwayland-5.15.18-0025-fix-race-condition-on-mwaitingforupdatedelivery.patch,
gnu/packages/patches/qtwayland-5.15.18-0026-use-poll-2-when-reading-from-clipboard.patch,
gnu/packages/patches/qtwayland-5.15.18-0027-reduce-memory-leakage.patch,
gnu/packages/patches/qtwayland-5.15.18-0028-only-close-popup-in-the-the-hierchary.patch,
gnu/packages/patches/qtwayland-5.15.18-0029-check-pointer-for-null-before-use-in-assert.patch,
gnu/packages/patches/qtwayland-5.15.18-0030-use-wl_surface.damage_buffer-on-the-client-side.patch,
gnu/packages/patches/qtwayland-5.15.18-0031-client-clear-focus-on-touch-cancel.patch,
gnu/packages/patches/qtwayland-5.15.18-0032-guard-mresizedirty-by-the-correctmutex.patch,
gnu/packages/patches/qtwayland-5.15.18-0033-fix-compile-tests.patch,
gnu/packages/patches/qtwayland-5.15.18-0034-call-finishdrag-in-qwaylanddatadevice-dragsourcecanc.patch,
gnu/packages/patches/qtwayland-5.15.18-0035-hold-surface-read-lock-throughout-qwaylandeglwindow-.patch,
gnu/packages/patches/qtwayland-5.15.18-0036-keep-toplevel-windows-in-the-top-left-corner-of-the-.patch,
gnu/packages/patches/qtwayland-5.15.18-0037-client-add-f_seal_shrink-seal-to-shm-backing-file.patch,
gnu/packages/patches/qtwayland-5.15.18-0038-client-call-wl_output_release-upon-qwaylandscreen-de.patch,
gnu/packages/patches/qtwayland-5.15.18-0039-client-bump-wl_output-version.patch,
gnu/packages/patches/qtwayland-5.15.18-0040-fix-frame-sync-related-to-unprotected-multithread-ac.patch,
gnu/packages/patches/qtwayland-5.15.18-0041-client-handle-zwp_primary_selection_device_manager_v.patch,
gnu/packages/patches/qtwayland-5.15.18-0042-fixes-the-build-on-centos.patch,
gnu/packages/patches/qtwayland-5.15.18-0043-client-avoid-protocol-error-with-invalid-min-max-siz.patch,
gnu/packages/patches/qtwayland-5.15.18-0044-client-fix-handling-of-qt-blankcursor.patch,
gnu/packages/patches/qtwayland-5.15.18-0045-client-force-a-roundtrip-when-an-xdgoutput-is-not-re.patch,
gnu/packages/patches/qtwayland-5.15.18-0046-destroy-frame-queue-before-display.patch,
gnu/packages/patches/qtwayland-5.15.18-0047-client-fix-crash-on-dnd-updates-after-client-facing-.patch,
gnu/packages/patches/qtwayland-5.15.18-0048-convert-cursor-bitmap-to-supported-format.patch,
gnu/packages/patches/qtwayland-5.15.18-0049-replace-scale-with-devicepixelratio-for-non-integer-.patch,
gnu/packages/patches/qtwayland-5.15.18-0050-client-fix-buffer-damage.patch,
gnu/packages/patches/qtwayland-5.15.18-0051-client-commit-the-initial-surface-state-explicitly.patch,
gnu/packages/patches/qtwayland-5.15.18-0052-tests-fix-tst_xdgshell-minmaxsize.patch,
gnu/packages/patches/qtwayland-5.15.18-0053-client-remove-some-surface-commits.patch,
gnu/packages/patches/qtwayland-5.15.18-0054-client-avoid-locking-resizing-in-qwaylandshmbackings.patch,
gnu/packages/patches/qtwayland-5.15.18-0055-bradient-use-qwaylandwindow-actual-window-title.patch: New files.
* gnu/packages/patches/qtwayland-dont-recreate-callbacks.patch,
gnu/packages/patches/qtwayland-cleanup-callbacks.patch: Delete files,
superseded by KDE patches 0010 and 0011.
* gnu/local.mk (dist_patch_DATA): Register new patches, remove old ones.
* gnu/packages/qt.scm (qtwayland-5)[source]: Replace old patches with KDE
Qt5 Patch Collection.
[arguments]<:phases>{disable-failing-tests}: Skip tst_xdgshell::minMaxSize()
test; patch 0053 removed the synchronous surface commit from
propagateSizeHints(), so the test's immediate check of the committed value
no longer works.

Fixes: guix/guix#6397
Change-Id: Ia9e890c2943c47287f73654d1654e06ba775b6f6
2026-02-16 11:40:38 +01:00

132 lines
5.7 KiB
Diff

From 30a03bf1e3d79e9ae2ba236499bb1844a4af2bc1 Mon Sep 17 00:00:00 2001
From: Paul Olav Tvete <paul.tvete@qt.io>
Date: Mon, 6 Jul 2020 14:37:35 +0200
Subject: [PATCH 30/55] Use wl_surface.damage_buffer on the client side
Prefer the newer, recommended damage_buffer when the compositor
supports it.
Fixes: QTBUG-74929
Change-Id: I9107966910b616a666931404a7b41bfac14c22c0
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit 314fd6db51277224cdc799b039ef79db1101f5cd)
---
src/client/qwaylanddisplay.cpp | 2 +-
src/client/qwaylandwindow.cpp | 16 +++++++++++++---
tests/auto/client/shared/coreprotocol.h | 2 +-
tests/auto/client/shared_old/mockcompositor.cpp | 2 +-
tests/auto/client/shared_old/mocksurface.cpp | 10 ++++++++++
tests/auto/client/shared_old/mocksurface.h | 2 ++
6 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 4a331a4c..f23c459d 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -493,7 +493,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
if (interface == QStringLiteral("wl_output")) {
mWaitingScreens << new QWaylandScreen(this, version, id);
} else if (interface == QStringLiteral("wl_compositor")) {
- mCompositorVersion = qMin((int)version, 3);
+ mCompositorVersion = qMin((int)version, 4);
mCompositor.init(registry, id, mCompositorVersion);
} else if (interface == QStringLiteral("wl_shm")) {
mShm.reset(new QWaylandShm(this, version, id));
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index d98a70e4..60665394 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -563,7 +563,11 @@ void QWaylandWindow::damage(const QRect &rect)
if (mSurface == nullptr)
return;
- mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
+ const int s = scale();
+ if (mDisplay->compositorVersion() >= 4)
+ mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height());
+ else
+ mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
}
void QWaylandWindow::safeCommit(QWaylandBuffer *buffer, const QRegion &damage)
@@ -599,8 +603,14 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
return;
attachOffset(buffer);
- for (const QRect &rect: damage)
- mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
+ if (mDisplay->compositorVersion() >= 4) {
+ const int s = scale();
+ for (const QRect &rect: damage)
+ mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height());
+ } else {
+ for (const QRect &rect: damage)
+ mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
+ }
Q_ASSERT(!buffer->committed());
buffer->setCommitted();
mSurface->commit();
diff --git a/tests/auto/client/shared/coreprotocol.h b/tests/auto/client/shared/coreprotocol.h
index a1af137a..296dbf47 100644
--- a/tests/auto/client/shared/coreprotocol.h
+++ b/tests/auto/client/shared/coreprotocol.h
@@ -158,7 +158,7 @@ class WlCompositor : public Global, public QtWaylandServer::wl_compositor
{
Q_OBJECT
public:
- explicit WlCompositor(CoreCompositor *compositor, int version = 3)
+ explicit WlCompositor(CoreCompositor *compositor, int version = 4)
: QtWaylandServer::wl_compositor(compositor->m_display, version)
, m_compositor(compositor)
{}
diff --git a/tests/auto/client/shared_old/mockcompositor.cpp b/tests/auto/client/shared_old/mockcompositor.cpp
index a415cbf5..b1d3d07d 100644
--- a/tests/auto/client/shared_old/mockcompositor.cpp
+++ b/tests/auto/client/shared_old/mockcompositor.cpp
@@ -342,7 +342,7 @@ Compositor::Compositor(MockCompositor *mockCompositor)
exit(EXIT_FAILURE);
}
- wl_global_create(m_display, &wl_compositor_interface, 1, this, bindCompositor);
+ wl_global_create(m_display, &wl_compositor_interface, 4, this, bindCompositor);
m_data_device_manager.reset(new DataDeviceManager(this, m_display));
diff --git a/tests/auto/client/shared_old/mocksurface.cpp b/tests/auto/client/shared_old/mocksurface.cpp
index e9df5f90..c3246e4a 100644
--- a/tests/auto/client/shared_old/mocksurface.cpp
+++ b/tests/auto/client/shared_old/mocksurface.cpp
@@ -125,6 +125,16 @@ void Surface::surface_damage(Resource *resource,
Q_UNUSED(height);
}
+void Surface::surface_damage_buffer(Resource *resource,
+ int32_t x, int32_t y, int32_t width, int32_t height)
+{
+ Q_UNUSED(resource);
+ Q_UNUSED(x);
+ Q_UNUSED(y);
+ Q_UNUSED(width);
+ Q_UNUSED(height);
+}
+
void Surface::surface_frame(Resource *resource,
uint32_t callback)
{
diff --git a/tests/auto/client/shared_old/mocksurface.h b/tests/auto/client/shared_old/mocksurface.h
index 949dc23d..d176837e 100644
--- a/tests/auto/client/shared_old/mocksurface.h
+++ b/tests/auto/client/shared_old/mocksurface.h
@@ -65,6 +65,8 @@ protected:
struct wl_resource *buffer, int x, int y) override;
void surface_damage(Resource *resource,
int32_t x, int32_t y, int32_t width, int32_t height) override;
+ void surface_damage_buffer(Resource *resource,
+ int32_t x, int32_t y, int32_t width, int32_t height) override;
void surface_frame(Resource *resource,
uint32_t callback) override;
void surface_commit(Resource *resource) override;
--
2.52.0