import qt5-qtwayland-5.15.2-1.el8
This commit is contained in:
parent
8d1c44cf04
commit
67b89ec584
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
||||
SOURCES/qtwayland-everywhere-src-5.12.5.tar.xz
|
||||
SOURCES/qtwayland-everywhere-src-5.15.2.tar.xz
|
||||
|
@ -1 +1 @@
|
||||
73ba627ea857598e733721a5a74ef1ff01e88d0b SOURCES/qtwayland-everywhere-src-5.12.5.tar.xz
|
||||
b547a38762ca6ef6d14545b4d51aabbcf06cc17e SOURCES/qtwayland-everywhere-src-5.15.2.tar.xz
|
||||
|
@ -1,33 +0,0 @@
|
||||
diff --git a/src/client/qwaylandshmbackingstore.cpp b/src/client/qwaylandshmbackingstore.cpp
|
||||
index 3fe2ce80..6d660e64 100644
|
||||
--- a/src/client/qwaylandshmbackingstore.cpp
|
||||
+++ b/src/client/qwaylandshmbackingstore.cpp
|
||||
@@ -289,11 +289,13 @@ void QWaylandShmBackingStore::resize(const QSize &size)
|
||||
buffer = getBuffer(sizeWithMargins);
|
||||
}
|
||||
|
||||
- qsizetype oldSize = mBackBuffer ? mBackBuffer->image()->sizeInBytes() : 0;
|
||||
+ qsizetype oldSizeInBytes = mBackBuffer ? mBackBuffer->image()->sizeInBytes() : 0;
|
||||
+ qsizetype newSizeInBytes = buffer->image()->sizeInBytes();
|
||||
+
|
||||
// mBackBuffer may have been deleted here but if so it means its size was different so we wouldn't copy it anyway
|
||||
- if (mBackBuffer != buffer && oldSize == buffer->image()->sizeInBytes()) {
|
||||
- memcpy(buffer->image()->bits(), mBackBuffer->image()->constBits(), buffer->image()->sizeInBytes());
|
||||
- }
|
||||
+ if (mBackBuffer != buffer && oldSizeInBytes == newSizeInBytes)
|
||||
+ memcpy(buffer->image()->bits(), mBackBuffer->image()->constBits(), newSizeInBytes);
|
||||
+
|
||||
mBackBuffer = buffer;
|
||||
// ensure the new buffer is at the beginning of the list so next time getBuffer() will pick
|
||||
// it if possible
|
||||
@@ -302,8 +304,9 @@ void QWaylandShmBackingStore::resize(const QSize &size)
|
||||
mBuffers.prepend(buffer);
|
||||
}
|
||||
|
||||
- if (windowDecoration() && window()->isVisible())
|
||||
+ if (windowDecoration() && window()->isVisible() && oldSizeInBytes != newSizeInBytes) {
|
||||
windowDecoration()->update();
|
||||
+ }
|
||||
}
|
||||
|
||||
QImage *QWaylandShmBackingStore::entireSurface() const
|
@ -1,127 +0,0 @@
|
||||
From 9f5b96225885f927727a57b6123d8550d6c373bb Mon Sep 17 00:00:00 2001
|
||||
From: Johan Klokkhammer Helsing <johan.helsing@qt.io>
|
||||
Date: Tue, 15 Oct 2019 09:51:43 +0200
|
||||
Subject: [PATCH] Client: Fix 100ms freeze when applications do not swap after deliverUpdateRequest
|
||||
|
||||
[ChangeLog][QPA plugin] Fixed a 100 ms freeze that would occur if applications
|
||||
did not draw after receiving a deliverUpdateRequest().
|
||||
|
||||
QtQuick does this at the start of animations. This should get rid of those
|
||||
backingstore warnings (and also remove a 100ms freeze before animations start
|
||||
in those instances).
|
||||
|
||||
Fixes: QTBUG-76813
|
||||
Change-Id: Id366bf4a14f402fa44530ae46e7b66d9988c14f6
|
||||
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
|
||||
Reviewed-by: John Brooks <john.brooks@qt.io>
|
||||
---
|
||||
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index ae26ba0..8d34afd 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -1105,25 +1105,6 @@
|
||||
|
||||
void QWaylandWindow::timerEvent(QTimerEvent *event)
|
||||
{
|
||||
- if (event->timerId() == mFallbackUpdateTimerId) {
|
||||
- killTimer(mFallbackUpdateTimerId);
|
||||
- mFallbackUpdateTimerId = -1;
|
||||
- qCDebug(lcWaylandBackingstore) << "mFallbackUpdateTimer timed out";
|
||||
-
|
||||
- if (!isExposed()) {
|
||||
- qCDebug(lcWaylandBackingstore) << "Fallback update timer: Window not exposed,"
|
||||
- << "not delivering update request.";
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
- if (mWaitingForUpdate && hasPendingUpdateRequest() && !mWaitingForFrameCallback) {
|
||||
- qCWarning(lcWaylandBackingstore) << "Delivering update request through fallback timer,"
|
||||
- << "may not be in sync with display";
|
||||
- deliverUpdateRequest();
|
||||
- }
|
||||
- }
|
||||
-
|
||||
-
|
||||
if (mFrameCallbackTimerId.testAndSetOrdered(event->timerId(), -1)) {
|
||||
killTimer(event->timerId());
|
||||
qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed";
|
||||
@@ -1135,6 +1116,7 @@
|
||||
|
||||
void QWaylandWindow::requestUpdate()
|
||||
{
|
||||
+ qCDebug(lcWaylandBackingstore) << "requestUpdate";
|
||||
Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA
|
||||
|
||||
// If we have a frame callback all is good and will be taken care of there
|
||||
@@ -1142,20 +1124,17 @@
|
||||
return;
|
||||
|
||||
// If we've already called deliverUpdateRequest(), but haven't seen any attach+commit/swap yet
|
||||
- if (mWaitingForUpdate) {
|
||||
- // Ideally, we should just have returned here, but we're not guaranteed that the client
|
||||
- // will actually update, so start this timer to deliver another request update after a while
|
||||
- // *IF* the client doesn't update.
|
||||
- int fallbackTimeout = 100;
|
||||
- mFallbackUpdateTimerId = startTimer(fallbackTimeout);
|
||||
- return;
|
||||
- }
|
||||
+ // This is a somewhat redundant behavior and might indicate a bug in the calling code, so log
|
||||
+ // here so we can get this information when debugging update/frame callback issues.
|
||||
+ // Continue as nothing happened, though.
|
||||
+ if (mWaitingForUpdate)
|
||||
+ qCDebug(lcWaylandBackingstore) << "requestUpdate called twice without committing anything";
|
||||
|
||||
// Some applications (such as Qt Quick) depend on updates being delivered asynchronously,
|
||||
// so use invokeMethod to delay the delivery a bit.
|
||||
QMetaObject::invokeMethod(this, [this] {
|
||||
// Things might have changed in the meantime
|
||||
- if (hasPendingUpdateRequest() && !mWaitingForUpdate && !mWaitingForFrameCallback)
|
||||
+ if (hasPendingUpdateRequest() && !mWaitingForFrameCallback)
|
||||
deliverUpdateRequest();
|
||||
}, Qt::QueuedConnection);
|
||||
}
|
||||
@@ -1165,6 +1144,7 @@
|
||||
// Can be called from the render thread (without locking anything) so make sure to not make races in this method.
|
||||
void QWaylandWindow::handleUpdate()
|
||||
{
|
||||
+ qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread();
|
||||
// TODO: Should sync subsurfaces avoid requesting frame callbacks?
|
||||
QReadLocker lock(&mSurfaceLock);
|
||||
if (!isInitialized())
|
||||
@@ -1175,15 +1155,6 @@
|
||||
mFrameCallback = nullptr;
|
||||
}
|
||||
|
||||
- if (mFallbackUpdateTimerId != -1) {
|
||||
- // Ideally, we would stop the fallback timer here, but since we're on another thread,
|
||||
- // it's not allowed. Instead we set mFallbackUpdateTimer to -1 here, so we'll just
|
||||
- // ignore it if it times out before it's cleaned up by the invokeMethod call.
|
||||
- int id = mFallbackUpdateTimerId;
|
||||
- mFallbackUpdateTimerId = -1;
|
||||
- QMetaObject::invokeMethod(this, [this, id] { killTimer(id); }, Qt::QueuedConnection);
|
||||
- }
|
||||
-
|
||||
mFrameCallback = frame();
|
||||
wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this);
|
||||
mWaitingForFrameCallback = true;
|
||||
@@ -1203,6 +1174,7 @@
|
||||
|
||||
void QWaylandWindow::deliverUpdateRequest()
|
||||
{
|
||||
+ qCDebug(lcWaylandBackingstore) << "deliverUpdateRequest";
|
||||
mWaitingForUpdate = true;
|
||||
QPlatformWindow::deliverUpdateRequest();
|
||||
}
|
||||
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
|
||||
index b03d92e..e4a1124 100644
|
||||
--- a/src/client/qwaylandwindow_p.h
|
||||
+++ b/src/client/qwaylandwindow_p.h
|
||||
@@ -232,7 +232,6 @@
|
||||
|
||||
// True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer
|
||||
bool mWaitingForUpdate = false;
|
||||
- int mFallbackUpdateTimerId = -1; // Started when waiting for app to commit
|
||||
|
||||
QMutex mResizeLock;
|
||||
bool mWaitingToApplyConfigure = false;
|
@ -0,0 +1,54 @@
|
||||
From 14d066c61025e548227ccd8d655e80ffa31fa15e Mon Sep 17 00:00:00 2001
|
||||
From: Jaeyoon Jung <jaeyoon.jung@lge.com>
|
||||
Date: Mon, 15 Feb 2021 08:31:06 +0900
|
||||
Subject: [PATCH] Fix issue with repeated window size changes
|
||||
|
||||
Check if the new window size is different from the size requested
|
||||
previously before calling wl_egl_window_resize. It addresses the issue
|
||||
where repeated setGeometry calls between two sizes might not work as
|
||||
expected. The problem occurs when wl_egl_window_get_attached_size does
|
||||
not get the same size that was requested by the previous setGeometry
|
||||
call. If the returned size happened to match the new size instead,
|
||||
we would mistakenly skip the resize.
|
||||
|
||||
Change-Id: Iafe4a91cc707f854b9099b6109b6be1423d7bd29
|
||||
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
---
|
||||
.../client/wayland-egl/qwaylandeglwindow.cpp | 4 +++-
|
||||
.../client/wayland-egl/qwaylandeglwindow.h | 1 +
|
||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
|
||||
index 1e8dc06f7..355aca864 100644
|
||||
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
|
||||
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
|
||||
@@ -131,14 +131,16 @@ void QWaylandEglWindow::updateSurface(bool create)
|
||||
if (!disableResizeCheck) {
|
||||
wl_egl_window_get_attached_size(m_waylandEglWindow, ¤t_width, ¤t_height);
|
||||
}
|
||||
- if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height())) {
|
||||
+ if (disableResizeCheck || (current_width != sizeWithMargins.width() || current_height != sizeWithMargins.height()) || m_requestedSize != sizeWithMargins) {
|
||||
wl_egl_window_resize(m_waylandEglWindow, sizeWithMargins.width(), sizeWithMargins.height(), mOffset.x(), mOffset.y());
|
||||
+ m_requestedSize = sizeWithMargins;
|
||||
mOffset = QPoint();
|
||||
|
||||
m_resize = true;
|
||||
}
|
||||
} else if (create && wlSurface()) {
|
||||
m_waylandEglWindow = wl_egl_window_create(wlSurface(), sizeWithMargins.width(), sizeWithMargins.height());
|
||||
+ m_requestedSize = sizeWithMargins;
|
||||
}
|
||||
|
||||
if (!m_eglSurface && m_waylandEglWindow && create) {
|
||||
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
|
||||
index 5b1f4d56f..0079dfef8 100644
|
||||
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
|
||||
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
|
||||
@@ -88,6 +88,7 @@ class QWaylandEglWindow : public QWaylandWindow
|
||||
mutable QOpenGLFramebufferObject *m_contentFBO = nullptr;
|
||||
|
||||
QSurfaceFormat m_format;
|
||||
+ QSize m_requestedSize;
|
||||
};
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
From 14cf9f0e45c7617d787eba8d81bf9fd1cd66754b Mon Sep 17 00:00:00 2001
|
||||
From: Jan Grulich <jgrulich@redhat.com>
|
||||
Date: Thu, 11 Feb 2021 15:12:32 +0100
|
||||
Subject: [PATCH] Get correct decoration margins region
|
||||
|
||||
Size we use to calculate margins region already contains size including
|
||||
margins. This resulted into bigger region and not properly damaging
|
||||
region we need to update.
|
||||
|
||||
Pick-to: 5.15
|
||||
Change-Id: Id1b7f4cd2a7b894b82db09c5af2b2d1f1f43fa2a
|
||||
---
|
||||
|
||||
diff --git a/src/client/qwaylandabstractdecoration.cpp b/src/client/qwaylandabstractdecoration.cpp
|
||||
index 87dd6ce..b6ee43c 100644
|
||||
--- a/src/client/qwaylandabstractdecoration.cpp
|
||||
+++ b/src/client/qwaylandabstractdecoration.cpp
|
||||
@@ -108,11 +108,11 @@
|
||||
static QRegion marginsRegion(const QSize &size, const QMargins &margins)
|
||||
{
|
||||
QRegion r;
|
||||
- const int widthWithMargins = margins.left() + size.width() + margins.right();
|
||||
- r += QRect(0, 0, widthWithMargins, margins.top()); // top
|
||||
- r += QRect(0, size.height()+margins.top(), widthWithMargins, margins.bottom()); //bottom
|
||||
+
|
||||
+ r += QRect(0, 0, size.width(), margins.top()); // top
|
||||
+ r += QRect(0, size.height()-margins.bottom(), size.width(), margins.bottom()); //bottom
|
||||
r += QRect(0, margins.top(), margins.left(), size.height()); //left
|
||||
- r += QRect(size.width()+margins.left(), margins.top(), margins.right(), size.height()); // right
|
||||
+ r += QRect(size.width()-margins.left(), margins.top(), margins.right(), size.height()-margins.top()); // right
|
||||
return r;
|
||||
}
|
||||
|
@ -0,0 +1,32 @@
|
||||
From e5c272423d1bba2825086b82fd97499237a6fa4b Mon Sep 17 00:00:00 2001
|
||||
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
|
||||
Date: Fri, 30 Oct 2020 16:55:30 +0200
|
||||
Subject: [PATCH] Scanner: Avoid accessing dangling pointers in destroy_func()
|
||||
|
||||
Usually, the object associated with the resource gets destroyed in the
|
||||
destroy_resource() function.
|
||||
|
||||
Therefore, we need to double-check that the object is still alive before
|
||||
trying to reset its m_resource.
|
||||
|
||||
Change-Id: I26408228f58919db17eb29584a1cbd4a9427d25c
|
||||
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
(cherry picked from commit 735164b5c2a2637a8d53a8803a2401e4ef477ff0)
|
||||
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||
---
|
||||
|
||||
diff --git a/src/qtwaylandscanner/qtwaylandscanner.cpp b/src/qtwaylandscanner/qtwaylandscanner.cpp
|
||||
index 1d635f0..e2f87bb 100644
|
||||
--- a/src/qtwaylandscanner/qtwaylandscanner.cpp
|
||||
+++ b/src/qtwaylandscanner/qtwaylandscanner.cpp
|
||||
@@ -814,7 +814,9 @@
|
||||
printf(" if (Q_LIKELY(that)) {\n");
|
||||
printf(" that->m_resource_map.remove(resource->client(), resource);\n");
|
||||
printf(" that->%s_destroy_resource(resource);\n", interfaceNameStripped);
|
||||
- printf(" if (that->m_resource == resource)\n");
|
||||
+ printf("\n");
|
||||
+ printf(" that = resource->%s_object;\n", interfaceNameStripped);
|
||||
+ printf(" if (that && that->m_resource == resource)\n");
|
||||
printf(" that->m_resource = nullptr;\n");
|
||||
printf(" }\n");
|
||||
printf(" delete resource;\n");
|
@ -0,0 +1,94 @@
|
||||
From b36a345d727eab37ee4ec4c2dc4674d5971c81d8 Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Mon, 14 Sep 2020 17:08:39 +0100
|
||||
Subject: [PATCH] Client: Send exposeEvent to parent on subsurface position
|
||||
changes
|
||||
|
||||
When a subsurface is moved, we need the parent window to commit to apply
|
||||
that move. Ideally we want this in sync with any potential rendering on
|
||||
the parent window.
|
||||
|
||||
Currently the code calls requestUpdate() which acts more like a frame
|
||||
callback; it will only do something if the main QWindow considers itself
|
||||
dirty.
|
||||
|
||||
We want to force a repaint, which is semantically more similar to an
|
||||
ExposeEvent.
|
||||
|
||||
Fixes: QTBUG-86177
|
||||
Pick-to: 5.15
|
||||
Change-Id: I30bdfa357beee860ce2b00a256eaea6d040dd55c
|
||||
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
---
|
||||
src/client/qwaylandwindow.cpp | 7 ++++-
|
||||
tests/auto/client/surface/tst_surface.cpp | 33 +++++++++++++++++++----
|
||||
2 files changed, 34 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index 3e26384..3cf1326 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -339,7 +339,12 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect)
|
||||
if (mSubSurfaceWindow) {
|
||||
QMargins m = QPlatformWindow::parent()->frameMargins();
|
||||
mSubSurfaceWindow->set_position(rect.x() + m.left(), rect.y() + m.top());
|
||||
- mSubSurfaceWindow->parent()->window()->requestUpdate();
|
||||
+
|
||||
+ QWaylandWindow *parentWindow = mSubSurfaceWindow->parent();
|
||||
+ if (parentWindow && parentWindow->isExposed()) {
|
||||
+ QRect parentExposeGeometry(QPoint(), parentWindow->geometry().size());
|
||||
+ parentWindow->sendExposeEvent(parentExposeGeometry);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/tests/auto/client/surface/tst_surface.cpp b/tests/auto/client/surface/tst_surface.cpp
|
||||
index b8a65f1..95e4e60 100644
|
||||
--- a/tests/auto/client/surface/tst_surface.cpp
|
||||
+++ b/tests/auto/client/surface/tst_surface.cpp
|
||||
@@ -167,17 +167,40 @@ void tst_surface::negotiateShmFormat()
|
||||
void tst_surface::createSubsurface()
|
||||
{
|
||||
QRasterWindow window;
|
||||
- window.resize(64, 64);
|
||||
- window.show();
|
||||
- QCOMPOSITOR_TRY_VERIFY(xdgToplevel());
|
||||
- exec([=] { xdgToplevel()->sendCompleteConfigure(); });
|
||||
- QCOMPOSITOR_TRY_VERIFY(xdgSurface()->m_committedConfigureSerial);
|
||||
+ window.setObjectName("main");
|
||||
+ window.resize(200, 200);
|
||||
|
||||
QRasterWindow subWindow;
|
||||
+ subWindow.setObjectName("subwindow");
|
||||
subWindow.setParent(&window);
|
||||
subWindow.resize(64, 64);
|
||||
+
|
||||
+ window.show();
|
||||
subWindow.show();
|
||||
+
|
||||
QCOMPOSITOR_TRY_VERIFY(subSurface());
|
||||
+ QCOMPOSITOR_TRY_VERIFY(xdgToplevel());
|
||||
+ exec([=] { xdgToplevel()->sendCompleteConfigure(); });
|
||||
+ QCOMPOSITOR_TRY_VERIFY(xdgSurface()->m_committedConfigureSerial);
|
||||
+
|
||||
+ const Surface *mainSurface = exec([=] {return surface(0);});
|
||||
+ const Surface *childSurface = exec([=] {return surface(1);});
|
||||
+ QSignalSpy mainSurfaceCommitSpy(mainSurface, &Surface::commit);
|
||||
+ QSignalSpy childSurfaceCommitSpy(childSurface, &Surface::commit);
|
||||
+
|
||||
+ // Move subsurface. The parent should redraw and commit
|
||||
+ subWindow.setGeometry(100, 100, 64, 64);
|
||||
+ // the toplevel should commit to indicate the subsurface moved
|
||||
+ QCOMPOSITOR_TRY_COMPARE(mainSurfaceCommitSpy.count(), 1);
|
||||
+ mainSurfaceCommitSpy.clear();
|
||||
+ childSurfaceCommitSpy.clear();
|
||||
+
|
||||
+ // Move and resize the subSurface. The parent should redraw and commit
|
||||
+ // The child should also redraw
|
||||
+ subWindow.setGeometry(50, 50, 80, 80);
|
||||
+ QCOMPOSITOR_TRY_COMPARE(mainSurfaceCommitSpy.count(), 1);
|
||||
+ QCOMPOSITOR_TRY_COMPARE(childSurfaceCommitSpy.count(), 1);
|
||||
+
|
||||
}
|
||||
|
||||
// Used to cause a crash in libwayland (QTBUG-79674)
|
@ -0,0 +1,38 @@
|
||||
From 2555663c9f59b93f5fcc5d3ead233bee280e36f8 Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Mon, 16 Nov 2020 14:57:36 +0000
|
||||
Subject: [PATCH] Client: Send set_window_geometry only once configured
|
||||
|
||||
The geometry only makes sense when a buffer exists, our currently send
|
||||
value is somewhat meaningless, but till now harmless.
|
||||
|
||||
A specification clarification implies that it is an error if the
|
||||
calculated effective window geometry is null, rather than just checking
|
||||
the sent value. This is the case if set_window_geometry is sent before a
|
||||
buffer is attached.
|
||||
|
||||
On our first configure call we enter resizeFromApplyConfigure which will
|
||||
hit this path and send the initial state.
|
||||
|
||||
Pick-to: 5.15
|
||||
Pick-to: 6.1
|
||||
Pick-to: 6.0
|
||||
Change-Id: Ib57ebe8b64210eae86e79dfdd6b5cb8a986b020b
|
||||
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
|
||||
---
|
||||
src/client/qwaylandwindow.cpp | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index 3e26384..80e9ffc 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -362,7 +362,7 @@ void QWaylandWindow::setGeometry(const QRect &rect)
|
||||
if (isExposed() && !mInResizeFromApplyConfigure && exposeGeometry != mLastExposeGeometry)
|
||||
sendExposeEvent(exposeGeometry);
|
||||
|
||||
- if (mShellSurface)
|
||||
+ if (mShellSurface && isExposed())
|
||||
mShellSurface->setWindowGeometry(windowContentGeometry());
|
||||
|
||||
if (isOpaque() && mMask.isEmpty())
|
@ -0,0 +1,38 @@
|
||||
From f915e53eaa596654ee1b9726a4767a1cba11336f Mon Sep 17 00:00:00 2001
|
||||
From: Aleix Pol <aleixpol@kde.org>
|
||||
Date: Mon, 23 Nov 2020 20:07:02 +0100
|
||||
Subject: [PATCH] xdgshell: Tell the compositor the screen we're expecting to
|
||||
fill
|
||||
|
||||
The xdgshell protocol allows us to tell the output to fill. This makes
|
||||
it possible to use fullscreen confidently on systems with multiple
|
||||
screens knowing that our windows won't be overlapping one another by
|
||||
calling setScreen accordingly before QWindow::showFullScreen.
|
||||
|
||||
Pick-to: 6.1 6.0 5.15
|
||||
Change-Id: I757854c3698639472f3a25ef298ddcca031e1ed5
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
---
|
||||
.../shellintegration/xdg-shell/qwaylandxdgshell.cpp | 9 ++++++---
|
||||
1 file changed, 6 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
index b7253de2b..af8bd9264 100644
|
||||
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
@@ -178,9 +178,12 @@ void QWaylandXdgSurface::Toplevel::requestWindowStates(Qt::WindowStates states)
|
||||
}
|
||||
|
||||
if (changedStates & Qt::WindowFullScreen) {
|
||||
- if (states & Qt::WindowFullScreen)
|
||||
- set_fullscreen(nullptr);
|
||||
- else
|
||||
+ if (states & Qt::WindowFullScreen) {
|
||||
+ auto screen = m_xdgSurface->window()->waylandScreen();
|
||||
+ if (screen) {
|
||||
+ set_fullscreen(screen->output());
|
||||
+ }
|
||||
+ } else
|
||||
unset_fullscreen();
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
From 1e0862acdc2e6ccf77bf3a1436b877d3af5e5fe7 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Grulich <jgrulich@redhat.com>
|
||||
Date: Wed, 10 Feb 2021 17:11:27 +0100
|
||||
Subject: [PATCH] Translate opaque area with frame margins
|
||||
|
||||
The opaque area doesn't take window decorations into account, which may
|
||||
result into possible graphical artefacts.
|
||||
|
||||
Pick-to: 5.15
|
||||
Change-Id: I1606e8256e7e204dad927931eb1221b576e227fd
|
||||
---
|
||||
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index 04c2dbd..b29edfa 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -1242,12 +1242,14 @@
|
||||
|
||||
void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea)
|
||||
{
|
||||
- if (opaqueArea == mOpaqueArea || !mSurface)
|
||||
+ const QRegion translatedOpaqueArea = opaqueArea.translated(frameMargins().left(), frameMargins().top());
|
||||
+
|
||||
+ if (translatedOpaqueArea == mOpaqueArea || !mSurface)
|
||||
return;
|
||||
|
||||
- mOpaqueArea = opaqueArea;
|
||||
+ mOpaqueArea = translatedOpaqueArea;
|
||||
|
||||
- struct ::wl_region *region = mDisplay->createRegion(opaqueArea);
|
||||
+ struct ::wl_region *region = mDisplay->createRegion(translatedOpaqueArea);
|
||||
mSurface->set_opaque_region(region);
|
||||
wl_region_destroy(region);
|
||||
}
|
@ -1,39 +0,0 @@
|
||||
diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp
|
||||
index 97e0203c..5bee160a 100644
|
||||
--- a/src/client/qwaylandintegration.cpp
|
||||
+++ b/src/client/qwaylandintegration.cpp
|
||||
@@ -99,20 +99,26 @@ public:
|
||||
|
||||
if (QGuiApplication::desktopSettingsAware()) {
|
||||
const QByteArray desktopEnvironment = QGuiApplicationPrivate::platformIntegration()->services()->desktopEnvironment();
|
||||
-
|
||||
+ QList<QByteArray> gtkBasedEnvironments;
|
||||
+ gtkBasedEnvironments << "GNOME"
|
||||
+ << "X-CINNAMON"
|
||||
+ << "UNITY"
|
||||
+ << "MATE"
|
||||
+ << "XFCE"
|
||||
+ << "LXDE";
|
||||
if (desktopEnvironment == QByteArrayLiteral("KDE")) {
|
||||
#if QT_CONFIG(settings)
|
||||
result.push_back(QStringLiteral("kde"));
|
||||
#endif
|
||||
- } else if (!desktopEnvironment.isEmpty() &&
|
||||
- desktopEnvironment != QByteArrayLiteral("UNKNOWN") &&
|
||||
- desktopEnvironment != QByteArrayLiteral("GNOME") &&
|
||||
- desktopEnvironment != QByteArrayLiteral("UNITY") &&
|
||||
- desktopEnvironment != QByteArrayLiteral("MATE") &&
|
||||
- desktopEnvironment != QByteArrayLiteral("XFCE") &&
|
||||
- desktopEnvironment != QByteArrayLiteral("LXDE"))
|
||||
+ } else if (gtkBasedEnvironments.contains(desktopEnvironment)) {
|
||||
+ // prefer the GTK3 theme implementation with native dialogs etc.
|
||||
+ result.push_back(QStringLiteral("gtk3"));
|
||||
+ // fallback to the generic Gnome theme if loading the GTK3 theme fails
|
||||
+ result.push_back(QLatin1String(QGnomeTheme::name));
|
||||
+ } else if (!desktopEnvironment.isEmpty() && desktopEnvironment != QByteArrayLiteral("UNKNOWN")) {
|
||||
// Ignore X11 desktop environments
|
||||
result.push_back(QString::fromLocal8Bit(desktopEnvironment.toLower()));
|
||||
+ }
|
||||
}
|
||||
|
||||
if (result.isEmpty())
|
@ -4,7 +4,7 @@
|
||||
|
||||
Summary: Qt5 - Wayland platform support and QtCompositor module
|
||||
Name: qt5-%{qt_module}
|
||||
Version: 5.12.5
|
||||
Version: 5.15.2
|
||||
Release: 1%{?dist}
|
||||
|
||||
License: LGPLv3
|
||||
@ -12,13 +12,13 @@ Url: http://www.qt.io
|
||||
%global majmin %(echo %{version} | cut -d. -f1-2)
|
||||
Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-src-%{version}.tar.xz
|
||||
|
||||
Patch0: qtwayland-do-not-redraw-decorations-everytime.patch
|
||||
Patch1: qtwayland-fix-100ms-freeze-when-apps-dont-swap-after-deliverupdaterequest.patch
|
||||
|
||||
# Upstreamable patches
|
||||
# https://fedoraproject.org/wiki/Changes/Qt_Wayland_By_Default_On_Gnome
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1732129
|
||||
Patch50: qtwayland-use-gnome-platform-theme-on-gnome-based-desktops.patch
|
||||
Patch0: qtwayland-scanner-avoid-accessing-dangling-pointers-in-destroy-func.patch
|
||||
Patch1: qtwayland-fix-issue-with-repeated-window-size-changes.patch
|
||||
Patch2: qtwayland-get-correct-margins-decoration-region.patch
|
||||
Patch3: qtwayland-send-exposeevent-to-parent-on-subsurface-position.patch
|
||||
Patch4: qtwayland-send-set-window-geometry-only-once-configured.patch
|
||||
Patch5: qtwayland-tell-compositor-screen-we-are-expecting-to-fill.patch
|
||||
Patch6: qtwayland-translate-opaque-area-for-decorations.patch
|
||||
|
||||
# filter qml provides
|
||||
%global __provides_exclude_from ^%{_qt5_archdatadir}/qml/.*\\.so$
|
||||
@ -41,6 +41,8 @@ BuildRequires: pkgconfig(xcomposite)
|
||||
BuildRequires: pkgconfig(xrender)
|
||||
BuildRequires: pkgconfig(libudev)
|
||||
BuildRequires: pkgconfig(libinput)
|
||||
BuildRequires: libXext-devel
|
||||
BuildRequires: tree
|
||||
|
||||
%description
|
||||
%{summary}.
|
||||
@ -149,6 +151,10 @@ popd
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Apr 06 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-1
|
||||
- 5.15.2
|
||||
Resolves: bz#1930058
|
||||
|
||||
* Mon Nov 18 2019 Jan Grulich <jgrulich@redhat.com> - 5.12.5-1
|
||||
- 5.12.5
|
||||
Resolves: bz#1733154
|
||||
|
Loading…
Reference in New Issue
Block a user