5.15.4
This commit is contained in:
parent
f5e11f7f70
commit
e8b212d36d
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@
|
||||
/qtwayland-everywhere-src-5.15.1.tar.xz
|
||||
/qtwayland-everywhere-src-5.15.2.tar.xz
|
||||
/qtwayland-everywhere-opensource-src-5.15.3.tar.xz
|
||||
/qtwayland-everywhere-opensource-src-5.15.4.tar.xz
|
||||
|
@ -1,7 +1,7 @@
|
||||
From a6fb2a976ecd778e450afe89c180c8c748beb568 Mon Sep 17 00:00:00 2001
|
||||
From eca0516905c3f88aba876d18742c9102da2319db Mon Sep 17 00:00:00 2001
|
||||
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
|
||||
Date: Wed, 5 May 2021 20:49:26 +0300
|
||||
Subject: [PATCH 07/44] Client: Announce an output after receiving more
|
||||
Subject: [PATCH 01/38] Client: Announce an output after receiving more
|
||||
complete state
|
||||
|
||||
Output initialization is not atomic, meaning that the compositor may
|
||||
@ -142,5 +142,5 @@ index df1c94f2..050cfdc0 100644
|
||||
|
||||
#if QT_CONFIG(cursor)
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 610af8f0ba9de42cb22228e4e4b3fd77275e3e17 Mon Sep 17 00:00:00 2001
|
||||
From: Weng Xuetian <wengxt@gmail.com>
|
||||
Date: Tue, 9 Mar 2021 10:43:59 -0800
|
||||
Subject: [PATCH 01/44] Use qWarning and _exit() instead of qFatal for wayland
|
||||
error
|
||||
|
||||
This type of error is likely to happen upon system logout. qFatal would
|
||||
trigger sigabrt and leave unnecessary coredump on the system. Using
|
||||
qWarning here would make it consistent with xcb's io error.
|
||||
|
||||
Pick-to: 5.15 6.0 6.1
|
||||
Change-Id: I571ba007bf2453486b81837cccdbefa5f181b63d
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
---
|
||||
src/client/qwaylanddisplay.cpp | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
|
||||
index fe094f6f..f10c1f79 100644
|
||||
--- a/src/client/qwaylanddisplay.cpp
|
||||
+++ b/src/client/qwaylanddisplay.cpp
|
||||
@@ -206,10 +206,11 @@ void QWaylandDisplay::checkError() const
|
||||
int ecode = wl_display_get_error(mDisplay);
|
||||
if ((ecode == EPIPE || ecode == ECONNRESET)) {
|
||||
// special case this to provide a nicer error
|
||||
- qFatal("The Wayland connection broke. Did the Wayland compositor die?");
|
||||
+ qWarning("The Wayland connection broke. Did the Wayland compositor die?");
|
||||
} else {
|
||||
- qFatal("The Wayland connection experienced a fatal error: %s", strerror(ecode));
|
||||
+ qWarning("The Wayland connection experienced a fatal error: %s", strerror(ecode));
|
||||
}
|
||||
+ _exit(1);
|
||||
}
|
||||
|
||||
void QWaylandDisplay::flushRequests()
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From bb9288c913dc49aefc3fad03ec243809b6b21a88 Mon Sep 17 00:00:00 2001
|
||||
From 95a139413337bb92a9dbbbd95f61e52cc1f43649 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 08/44] Fix issue with repeated window size changes
|
||||
Subject: [PATCH 02/38] 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
|
||||
@ -54,5 +54,5 @@ index 5b1f4d56..0079dfef 100644
|
||||
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,40 +0,0 @@
|
||||
From d353938c1a07a803656489cada8683e31f8f1c62 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Grulich <jgrulich@redhat.com>
|
||||
Date: Wed, 10 Feb 2021 17:11:27 +0100
|
||||
Subject: [PATCH 02/44] 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 6.0 6.1
|
||||
Change-Id: I1606e8256e7e204dad927931eb1221b576e227fd
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
---
|
||||
src/client/qwaylandwindow.cpp | 8 +++++---
|
||||
1 file changed, 5 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index e875af3a..2af39977 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -1234,12 +1234,14 @@ bool QWaylandWindow::isOpaque() const
|
||||
|
||||
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);
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,97 +0,0 @@
|
||||
From 11e9bd41951ec9f229e20566f821aa39ca011352 Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Mon, 14 Sep 2020 17:08:39 +0100
|
||||
Subject: [PATCH 03/44] 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 2af39977..e96d8fe9 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -342,7 +342,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 b8a65f15..95e4e609 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)
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 82720c9d7e0a706793f9716144347171820ddf4d Mon Sep 17 00:00:00 2001
|
||||
From 4f5bef9e6e0d16bb859e7a99ef5ebfca2ac93f45 Mon Sep 17 00:00:00 2001
|
||||
From: Albert Astals Cid <albert.astals.cid@kdab.com>
|
||||
Date: Mon, 10 May 2021 14:38:49 +0200
|
||||
Subject: [PATCH 09/44] Include locale.h for setlocale/LC_CTYPE
|
||||
Subject: [PATCH 03/38] Include locale.h for setlocale/LC_CTYPE
|
||||
|
||||
Pick-to: 5.15
|
||||
Change-Id: Iced32a31a63cec71008549c1e0961d59ffc45a37
|
||||
@ -27,5 +27,5 @@ index ef5aa375..503fd735 100644
|
||||
|
||||
Q_LOGGING_CATEGORY(qLcQpaInputMethods, "qt.qpa.input.methods")
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 6b2084a4c9f87d3575fc6aec3f7454304bcc6188 Mon Sep 17 00:00:00 2001
|
||||
From 58f7e6cfb61e4f170ab7ced2e01b6222036f934d Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Tue, 9 Feb 2021 16:09:21 +0000
|
||||
Subject: [PATCH 10/44] Client: Connect drags being accepted to updating the
|
||||
Subject: [PATCH 04/38] Client: Connect drags being accepted to updating the
|
||||
source drag icon
|
||||
|
||||
Currently in a multi-process drag and drop when the other client accepts
|
||||
@ -35,5 +35,5 @@ index 19944a34..54a69c3c 100644
|
||||
start_drag(m_dragSource->object(), origin->wlSurface(), icon->wlSurface(), m_display->currentInputDevice()->serial());
|
||||
return true;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,39 +0,0 @@
|
||||
From 50a9256db8cd43665cf74cf94a293d1c05375d33 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Grulich <jgrulich@redhat.com>
|
||||
Date: Thu, 11 Feb 2021 15:12:32 +0100
|
||||
Subject: [PATCH 04/44] 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 6.0 6.1
|
||||
Change-Id: Id1b7f4cd2a7b894b82db09c5af2b2d1f1f43fa2a
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
---
|
||||
src/client/qwaylandabstractdecoration.cpp | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylandabstractdecoration.cpp b/src/client/qwaylandabstractdecoration.cpp
|
||||
index 87dd6cea..b6ee43c9 100644
|
||||
--- a/src/client/qwaylandabstractdecoration.cpp
|
||||
+++ b/src/client/qwaylandabstractdecoration.cpp
|
||||
@@ -108,11 +108,11 @@ void QWaylandAbstractDecoration::setWaylandWindow(QWaylandWindow *window)
|
||||
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;
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From a1d6aa2078b8a840469f13ae720669cb4f99291d Mon Sep 17 00:00:00 2001
|
||||
From 0b8b965626c7d02ce885187fa46fe6c69af3ede3 Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Fri, 14 May 2021 13:23:24 +0100
|
||||
Subject: [PATCH 11/44] Client: Disconnect registry listener on destruction
|
||||
Subject: [PATCH 05/38] Client: Disconnect registry listener on destruction
|
||||
|
||||
If a display outlives a QWaylandClientExtension and a new global is
|
||||
announced we end up delivering an event to a now deleted extension which
|
||||
@ -45,5 +45,5 @@ index 98272e57..5bd28398 100644
|
||||
QtWaylandClient::QWaylandIntegration *integration() const;
|
||||
int version() const;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,41 +0,0 @@
|
||||
From f408482e4364293e5ab9889854a759796436971d Mon Sep 17 00:00:00 2001
|
||||
From: Aleix Pol <aleixpol@kde.org>
|
||||
Date: Mon, 23 Nov 2020 20:07:02 +0100
|
||||
Subject: [PATCH 05/44] 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 1c762944..3a1569f7 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();
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From d9d7c73f908db351921cf016c5e079f3d13e84aa Mon Sep 17 00:00:00 2001
|
||||
From 71de867aab030a9f48bd73e4090d301da75e4102 Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Mon, 3 May 2021 23:01:53 +0100
|
||||
Subject: [PATCH 12/44] Client: Set XdgShell size hints before the first commit
|
||||
Subject: [PATCH 06/38] Client: Set XdgShell size hints before the first commit
|
||||
|
||||
propagateSizeHints is only called in QWindow we have platform window and
|
||||
minimumSizeHint is then sent. We also need to send existing hints when
|
||||
@ -54,5 +54,5 @@ index 2277bbb8..2fdd0a7c 100644
|
||||
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100));
|
||||
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000));
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,257 +0,0 @@
|
||||
From d6dd815014564f235fb972eb72d28ccca6cf3549 Mon Sep 17 00:00:00 2001
|
||||
From: Aleix Pol <aleixpol@kde.org>
|
||||
Date: Wed, 10 Mar 2021 01:09:13 +0100
|
||||
Subject: [PATCH 06/44] client: Allow QWaylandInputContext to accept composed
|
||||
key combinations
|
||||
|
||||
At the moment, we are forcing user to choose to either compose or use
|
||||
the text-input channel. This patch brings some of the QComposeInputContext
|
||||
functionality in order to let applications understand dead key
|
||||
combinations like they are supposed to.
|
||||
|
||||
Having it in QWaylandInputContext rather than in QWaylandInputDevice
|
||||
should solve the problems 3aedd01271dc4f4a13103d632df224971ab2b6df had
|
||||
with 57c4af2b18c0fb1d266b245a107fa6cb876b9d9e, because we are doing it
|
||||
in the input context rather than before. This way, if the user is
|
||||
overriding the input method (e.g. by setting QT_IM_MODULE), all the key
|
||||
strokes will still be properly forwarded to the module to use.
|
||||
|
||||
This in turn allows us to solve https://bugs.kde.org/show_bug.cgi?id=411729
|
||||
and https://bugs.kde.org/show_bug.cgi?id=405388 since we don't need to
|
||||
choose anymore between physical and virual keyboards anymore.
|
||||
|
||||
Pick-to: 5.15
|
||||
Change-Id: I8601f5d7ae21edf4b3a1191fa75877286e505588
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
---
|
||||
src/client/qwaylanddisplay_p.h | 3 -
|
||||
src/client/qwaylandinputcontext.cpp | 95 ++++++++++++++++++++++++++++-
|
||||
src/client/qwaylandinputcontext_p.h | 21 +++++++
|
||||
src/client/qwaylandinputdevice.cpp | 2 +-
|
||||
src/client/qwaylandintegration.cpp | 8 +--
|
||||
5 files changed, 119 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
|
||||
index 188e9131..3b092bc8 100644
|
||||
--- a/src/client/qwaylanddisplay_p.h
|
||||
+++ b/src/client/qwaylanddisplay_p.h
|
||||
@@ -175,8 +175,6 @@ public:
|
||||
QWaylandHardwareIntegration *hardwareIntegration() const { return mHardwareIntegration.data(); }
|
||||
QWaylandXdgOutputManagerV1 *xdgOutputManager() const { return mXdgOutputManager.data(); }
|
||||
|
||||
- bool usingInputContextFromCompositor() const { return mUsingInputContextFromCompositor; }
|
||||
-
|
||||
struct RegistryGlobal {
|
||||
uint32_t id;
|
||||
QString interface;
|
||||
@@ -282,7 +280,6 @@ private:
|
||||
QReadWriteLock m_frameQueueLock;
|
||||
|
||||
bool mClientSideInputContextRequested = !QPlatformInputContextFactory::requested().isNull();
|
||||
- bool mUsingInputContextFromCompositor = false;
|
||||
|
||||
void registry_global(uint32_t id, const QString &interface, uint32_t version) override;
|
||||
void registry_global_remove(uint32_t id) override;
|
||||
diff --git a/src/client/qwaylandinputcontext.cpp b/src/client/qwaylandinputcontext.cpp
|
||||
index e9afe05e..ef5aa375 100644
|
||||
--- a/src/client/qwaylandinputcontext.cpp
|
||||
+++ b/src/client/qwaylandinputcontext.cpp
|
||||
@@ -406,6 +406,8 @@ bool QWaylandInputContext::isValid() const
|
||||
void QWaylandInputContext::reset()
|
||||
{
|
||||
qCDebug(qLcQpaInputMethods) << Q_FUNC_INFO;
|
||||
+ if (m_composeState)
|
||||
+ xkb_compose_state_reset(m_composeState);
|
||||
|
||||
QPlatformInputContext::reset();
|
||||
|
||||
@@ -526,9 +528,14 @@ Qt::LayoutDirection QWaylandInputContext::inputDirection() const
|
||||
return textInput()->inputDirection();
|
||||
}
|
||||
|
||||
-void QWaylandInputContext::setFocusObject(QObject *)
|
||||
+void QWaylandInputContext::setFocusObject(QObject *object)
|
||||
{
|
||||
qCDebug(qLcQpaInputMethods) << Q_FUNC_INFO;
|
||||
+#if QT_CONFIG(xkbcommon)
|
||||
+ m_focusObject = object;
|
||||
+#else
|
||||
+ Q_UNUSED(object);
|
||||
+#endif
|
||||
|
||||
if (!textInput())
|
||||
return;
|
||||
@@ -561,6 +568,92 @@ QWaylandTextInput *QWaylandInputContext::textInput() const
|
||||
return mDisplay->defaultInputDevice()->textInput();
|
||||
}
|
||||
|
||||
+#if QT_CONFIG(xkbcommon)
|
||||
+
|
||||
+void QWaylandInputContext::ensureInitialized()
|
||||
+{
|
||||
+ if (m_initialized)
|
||||
+ return;
|
||||
+
|
||||
+ if (!m_XkbContext) {
|
||||
+ qCWarning(qLcQpaInputMethods) << "error: xkb context has not been set on" << metaObject()->className();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ m_initialized = true;
|
||||
+ const char *locale = setlocale(LC_CTYPE, "");
|
||||
+ if (!locale)
|
||||
+ locale = setlocale(LC_CTYPE, nullptr);
|
||||
+ qCDebug(qLcQpaInputMethods) << "detected locale (LC_CTYPE):" << locale;
|
||||
+
|
||||
+ m_composeTable = xkb_compose_table_new_from_locale(m_XkbContext, locale, XKB_COMPOSE_COMPILE_NO_FLAGS);
|
||||
+ if (m_composeTable)
|
||||
+ m_composeState = xkb_compose_state_new(m_composeTable, XKB_COMPOSE_STATE_NO_FLAGS);
|
||||
+
|
||||
+ if (!m_composeTable) {
|
||||
+ qCWarning(qLcQpaInputMethods, "failed to create compose table");
|
||||
+ return;
|
||||
+ }
|
||||
+ if (!m_composeState) {
|
||||
+ qCWarning(qLcQpaInputMethods, "failed to create compose state");
|
||||
+ return;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+bool QWaylandInputContext::filterEvent(const QEvent *event)
|
||||
+{
|
||||
+ auto keyEvent = static_cast<const QKeyEvent *>(event);
|
||||
+ if (keyEvent->type() != QEvent::KeyPress)
|
||||
+ return false;
|
||||
+
|
||||
+ if (!inputMethodAccepted())
|
||||
+ return false;
|
||||
+
|
||||
+ // lazy initialization - we don't want to do this on an app startup
|
||||
+ ensureInitialized();
|
||||
+
|
||||
+ if (!m_composeTable || !m_composeState)
|
||||
+ return false;
|
||||
+
|
||||
+ xkb_compose_state_feed(m_composeState, keyEvent->nativeVirtualKey());
|
||||
+
|
||||
+ switch (xkb_compose_state_get_status(m_composeState)) {
|
||||
+ case XKB_COMPOSE_COMPOSING:
|
||||
+ return true;
|
||||
+ case XKB_COMPOSE_CANCELLED:
|
||||
+ reset();
|
||||
+ return false;
|
||||
+ case XKB_COMPOSE_COMPOSED:
|
||||
+ {
|
||||
+ const int size = xkb_compose_state_get_utf8(m_composeState, nullptr, 0);
|
||||
+ QVarLengthArray<char, 32> buffer(size + 1);
|
||||
+ xkb_compose_state_get_utf8(m_composeState, buffer.data(), buffer.size());
|
||||
+ QString composedText = QString::fromUtf8(buffer.constData());
|
||||
+
|
||||
+ QInputMethodEvent event;
|
||||
+ event.setCommitString(composedText);
|
||||
+
|
||||
+ if (!m_focusObject && qApp)
|
||||
+ m_focusObject = qApp->focusObject();
|
||||
+
|
||||
+ if (m_focusObject)
|
||||
+ QCoreApplication::sendEvent(m_focusObject, &event);
|
||||
+ else
|
||||
+ qCWarning(qLcQpaInputMethods, "no focus object");
|
||||
+
|
||||
+ reset();
|
||||
+ return true;
|
||||
+ }
|
||||
+ case XKB_COMPOSE_NOTHING:
|
||||
+ return false;
|
||||
+ default:
|
||||
+ Q_UNREACHABLE();
|
||||
+ return false;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+#endif
|
||||
+
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
diff --git a/src/client/qwaylandinputcontext_p.h b/src/client/qwaylandinputcontext_p.h
|
||||
index 10132dfe..50db6344 100644
|
||||
--- a/src/client/qwaylandinputcontext_p.h
|
||||
+++ b/src/client/qwaylandinputcontext_p.h
|
||||
@@ -61,6 +61,10 @@
|
||||
|
||||
#include <QtWaylandClient/private/qwayland-text-input-unstable-v2.h>
|
||||
#include <qwaylandinputmethodeventbuilder_p.h>
|
||||
+#include <qtwaylandclientglobal_p.h>
|
||||
+#if QT_CONFIG(xkbcommon)
|
||||
+#include <xkbcommon/xkbcommon-compose.h>
|
||||
+#endif
|
||||
|
||||
struct wl_callback;
|
||||
struct wl_callback_listener;
|
||||
@@ -155,11 +159,28 @@ public:
|
||||
|
||||
void setFocusObject(QObject *object) override;
|
||||
|
||||
+#if QT_CONFIG(xkbcommon)
|
||||
+ bool filterEvent(const QEvent *event) override;
|
||||
+
|
||||
+ // This invokable is called from QXkbCommon::setXkbContext().
|
||||
+ Q_INVOKABLE void setXkbContext(struct xkb_context *context) { m_XkbContext = context; }
|
||||
+#endif
|
||||
+
|
||||
private:
|
||||
QWaylandTextInput *textInput() const;
|
||||
|
||||
QWaylandDisplay *mDisplay = nullptr;
|
||||
QPointer<QWindow> mCurrentWindow;
|
||||
+
|
||||
+#if QT_CONFIG(xkbcommon)
|
||||
+ void ensureInitialized();
|
||||
+
|
||||
+ bool m_initialized = false;
|
||||
+ QObject *m_focusObject = nullptr;
|
||||
+ xkb_compose_table *m_composeTable = nullptr;
|
||||
+ xkb_compose_state *m_composeState = nullptr;
|
||||
+ struct xkb_context *m_XkbContext = nullptr;
|
||||
+#endif
|
||||
};
|
||||
|
||||
}
|
||||
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
|
||||
index ed4a0eb4..ae045f4f 100644
|
||||
--- a/src/client/qwaylandinputdevice.cpp
|
||||
+++ b/src/client/qwaylandinputdevice.cpp
|
||||
@@ -1201,7 +1201,7 @@ void QWaylandInputDevice::Keyboard::handleKey(ulong timestamp, QEvent::Type type
|
||||
QPlatformInputContext *inputContext = QGuiApplicationPrivate::platformIntegration()->inputContext();
|
||||
bool filtered = false;
|
||||
|
||||
- if (inputContext && !mParent->mQDisplay->usingInputContextFromCompositor()) {
|
||||
+ if (inputContext) {
|
||||
QKeyEvent event(type, key, modifiers, nativeScanCode, nativeVirtualKey,
|
||||
nativeModifiers, text, autorepeat, count);
|
||||
event.setTimestamp(timestamp);
|
||||
diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp
|
||||
index 7ad8e05e..c53ccb78 100644
|
||||
--- a/src/client/qwaylandintegration.cpp
|
||||
+++ b/src/client/qwaylandintegration.cpp
|
||||
@@ -474,13 +474,11 @@ void QWaylandIntegration::reconfigureInputContext()
|
||||
|
||||
#if QT_CONFIG(xkbcommon)
|
||||
QXkbCommon::setXkbContext(mInputContext.data(), mDisplay->xkbContext());
|
||||
+ if (QWaylandInputContext* waylandInput = qobject_cast<QWaylandInputContext*>(mInputContext.get())) {
|
||||
+ waylandInput->setXkbContext(mDisplay->xkbContext());
|
||||
+ }
|
||||
#endif
|
||||
|
||||
- // Even if compositor-side input context handling has been requested, we fallback to
|
||||
- // client-side handling if compositor does not provide the text-input extension. This
|
||||
- // is why we need to check here which input context actually is being used.
|
||||
- mDisplay->mUsingInputContextFromCompositor = qobject_cast<QWaylandInputContext *>(mInputContext.data());
|
||||
-
|
||||
qCDebug(lcQpaWayland) << "using input method:" << inputContext()->metaObject()->className();
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 2e8e8b87d800f1ef2e0fb0a6f0818de0a8fa0951 Mon Sep 17 00:00:00 2001
|
||||
From 342e5b7d0b45db4ed6679af4b40b05b4bd96de09 Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Mon, 14 Jun 2021 12:45:37 +0100
|
||||
Subject: [PATCH 13/44] Fix build
|
||||
Subject: [PATCH 07/38] Fix build
|
||||
|
||||
1b5e43a593e917610e6245f7a272ac081c508ba4 relied on a patch that we can't
|
||||
backport.
|
||||
@ -42,5 +42,5 @@ index 69cc46a0..9091efbe 100644
|
||||
|
||||
class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 88b2e6c9728d01a9aa334026629fbb1ce85fe197 Mon Sep 17 00:00:00 2001
|
||||
From 7d6a8aa51603e39a5da5b87af2acd0433a265987 Mon Sep 17 00:00:00 2001
|
||||
From: Zhang Liang <zhanglianga@uniontech.com>
|
||||
Date: Mon, 1 Feb 2021 19:29:43 +0800
|
||||
Subject: [PATCH 14/44] Fix: remove listener
|
||||
Subject: [PATCH 08/38] Fix: remove listener
|
||||
|
||||
Add the operation for removing the listener form listener list
|
||||
|
||||
@ -29,5 +29,5 @@ index f10c1f79..e0dfe8b2 100644
|
||||
|
||||
uint32_t QWaylandDisplay::currentTimeMillisec()
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 75693b47dcac101f74f98e5902c4c6b39d407e4f Mon Sep 17 00:00:00 2001
|
||||
From bea49655add94c2ab77ec39dfe33bf6c7f5ce927 Mon Sep 17 00:00:00 2001
|
||||
From: David Redondo <qt@david-redondo.de>
|
||||
Date: Wed, 26 May 2021 14:49:40 +0200
|
||||
Subject: [PATCH 15/44] Hook up queryKeyboardModifers
|
||||
Subject: [PATCH 09/38] Hook up queryKeyboardModifers
|
||||
|
||||
Can be useful when upon enter a modifiers event is received but no key
|
||||
event so no QKeyEvent is generated.
|
||||
@ -51,5 +51,5 @@ index ff70ae25..73b80658 100644
|
||||
|
||||
QStringList themeNames() const override;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 537c5d43941d26d89ebf00f6abf7f12f9bac1caf Mon Sep 17 00:00:00 2001
|
||||
From c7022c1c0107781993b1d13e7aa11dd3f7486249 Mon Sep 17 00:00:00 2001
|
||||
From: Aleix Pol <aleixpol@kde.org>
|
||||
Date: Tue, 13 Jul 2021 13:32:15 +0200
|
||||
Subject: [PATCH 16/44] Do not update the mask if we do not have a surface
|
||||
Subject: [PATCH 10/38] Do not update the mask if we do not have a surface
|
||||
|
||||
mMask serves as a cache to remember what we've sent, the source of truth
|
||||
for the value is window()->mask().
|
||||
@ -40,5 +40,5 @@ index e96d8fe9..bd70f4af 100644
|
||||
mSurface->set_input_region(nullptr);
|
||||
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ae3ea8875b9475532e5779154e3992affe2b9a32 Mon Sep 17 00:00:00 2001
|
||||
From 83a5e079e4bdf567010abc0b7d67eff052b76249 Mon Sep 17 00:00:00 2001
|
||||
From: Jan Blackquill <uhhadd@gmail.com>
|
||||
Date: Tue, 24 Aug 2021 14:36:34 -0400
|
||||
Subject: [PATCH 17/44] Correctly detect if image format is supported by
|
||||
Subject: [PATCH 11/38] Correctly detect if image format is supported by
|
||||
QImageWriter
|
||||
|
||||
The code queries potential image formats by stripping a mimetype of its
|
||||
@ -64,5 +64,5 @@ index a5fdd34d..051a91dc 100644
|
||||
fmt = imgFmt;
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 8d673fe2edebe2c5bf338a779ef22ae212dc244a Mon Sep 17 00:00:00 2001
|
||||
From 19d0878e56094b5cced1154ce07f566f2b147e2a Mon Sep 17 00:00:00 2001
|
||||
From: Paul Olav Tvete <paul.tvete@qt.io>
|
||||
Date: Tue, 14 Sep 2021 11:56:23 +0200
|
||||
Subject: [PATCH 18/44] Wayland client: Fix crash when windows are shown/hidden
|
||||
Subject: [PATCH 12/38] Wayland client: Fix crash when windows are shown/hidden
|
||||
during drag
|
||||
|
||||
Fixes: QTBUG-87624
|
||||
@ -27,5 +27,5 @@ index 54a69c3c..bbd2d568 100644
|
||||
return; // Ignore foreign surfaces
|
||||
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From bdd2dacf2d8668b3a1f59db3c6cc859f95868eb2 Mon Sep 17 00:00:00 2001
|
||||
From abaa0b1765551533112944e624ac5989df7d7b6c Mon Sep 17 00:00:00 2001
|
||||
From: Georges Basile Stavracas Neto <gbsneto@gnome.org>
|
||||
Date: Thu, 27 May 2021 19:55:04 -0300
|
||||
Subject: [PATCH 19/44] Client: Don't always recreate frame callbacks
|
||||
Subject: [PATCH 13/38] Client: Don't always recreate frame callbacks
|
||||
|
||||
The main QWaylandWindow method that is executed when handling updates is
|
||||
QWaylandWindow::handleUpdate(). This method always, unconditionally queues
|
||||
@ -73,5 +73,5 @@ index 2fdd0a7c..e2593314 100644
|
||||
|
||||
void tst_xdgshell::popup()
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From fb0a5265ec9d83b56563769cc1b756aeca42ce65 Mon Sep 17 00:00:00 2001
|
||||
From 1428e39b6e686faf4d25ab4f8506662bcc23e6f9 Mon Sep 17 00:00:00 2001
|
||||
From: Georges Basile Stavracas Neto <gbsneto@gnome.org>
|
||||
Date: Thu, 27 May 2021 20:02:53 -0300
|
||||
Subject: [PATCH 20/44] Client: Always destroy frame callback in the actual
|
||||
Subject: [PATCH 14/38] Client: Always destroy frame callback in the actual
|
||||
callback
|
||||
|
||||
It's good hygiene to destroy all frame callbacks. Destroy the
|
||||
@ -54,5 +54,5 @@ index 85307875..c020a58f 100644
|
||||
struct ::wl_surface *wrappedSurface = reinterpret_cast<struct ::wl_surface *>(wl_proxy_create_wrapper(mSurface->object()));
|
||||
wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrappedSurface), mFrameQueue.queue);
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 1e0519c6465335dd380ad8d8209969c71eb78d48 Mon Sep 17 00:00:00 2001
|
||||
From 132be08e4d81c1e05b93f31a6e2b6a6bd65d5726 Mon Sep 17 00:00:00 2001
|
||||
From: Rodney Dawes <dobey.pwns@gmail.com>
|
||||
Date: Fri, 15 Oct 2021 12:55:33 -0400
|
||||
Subject: [PATCH 21/44] Fix the logic for decoding modifiers map in Wayland
|
||||
Subject: [PATCH 15/38] Fix the logic for decoding modifiers map in Wayland
|
||||
text input protocol
|
||||
|
||||
Correctly check for the flags in the modifiers map when we get it from
|
||||
@ -36,5 +36,5 @@ index 503fd735..e290baa2 100644
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 64e133f830ce48b6732397325b768ed9193c2cb4 Mon Sep 17 00:00:00 2001
|
||||
From f73a3ec466eb30e554f918d6d2da2c5d1b0e23bd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?M=C3=A9ven=20Car?= <meven.car@enioka.com>
|
||||
Date: Wed, 18 Aug 2021 18:28:20 +0200
|
||||
Subject: [PATCH 22/44] Wayland client: use wl_keyboard to determine active
|
||||
Subject: [PATCH 16/38] Wayland client: use wl_keyboard to determine active
|
||||
state
|
||||
|
||||
Commit f497a5bb87270174b8e0106b7eca1992d44ff15d made QWaylandDisplay
|
||||
@ -337,5 +337,5 @@ index e2593314..73d1eb9c 100644
|
||||
const QSize screenSize(640, 480);
|
||||
const uint maximizedSerial = exec([=] {
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 167a89d23d4db6f62ef8336002fe306829604a77 Mon Sep 17 00:00:00 2001
|
||||
From 83440ae9e002f0c7bdec6b54db6b382d2e28bf7d Mon Sep 17 00:00:00 2001
|
||||
From: Jan Grulich <jgrulich@redhat.com>
|
||||
Date: Fri, 16 Jul 2021 13:00:03 +0200
|
||||
Subject: [PATCH 23/44] Client: do not empty clipboard when a new popup/window
|
||||
Subject: [PATCH 17/38] Client: do not empty clipboard when a new popup/window
|
||||
is opened
|
||||
|
||||
If we open a new popup or a window within the same app we have to avoid
|
||||
@ -45,7 +45,7 @@ index 27303110..9f595af3 100644
|
||||
|
||||
const wl_callback_listener QWaylandDisplay::syncCallbackListener = {
|
||||
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
|
||||
index ae045f4f..514457e9 100644
|
||||
index 613fe862..aaec7eb8 100644
|
||||
--- a/src/client/qwaylandinputdevice.cpp
|
||||
+++ b/src/client/qwaylandinputdevice.cpp
|
||||
@@ -1300,14 +1300,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed()
|
||||
@ -64,5 +64,5 @@ index ae045f4f..514457e9 100644
|
||||
mRepeatTimer.stop();
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 5ea11ccde21448f5c61978bf52e2f3db79a7143c Mon Sep 17 00:00:00 2001
|
||||
From 1a476429c2d9034322d5b3366ce53375e484353a Mon Sep 17 00:00:00 2001
|
||||
From: Weng Xuetian <wengxt@gmail.com>
|
||||
Date: Sat, 18 Dec 2021 23:42:49 -0800
|
||||
Subject: [PATCH 24/44] Set preedit cursor when cursor equals to 0
|
||||
Subject: [PATCH 18/38] Set preedit cursor when cursor equals to 0
|
||||
|
||||
Pick-to: 6.3 6.2 5.15
|
||||
Change-Id: I832fbb22d973b36ac4ab51570fc53bc2e4c3ed58
|
||||
@ -25,5 +25,5 @@ index 526d0ef4..25be2509 100644
|
||||
} else if (m_preeditCursor > 0) {
|
||||
attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, indexFromWayland(text, m_preeditCursor), 1, QVariant()));
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 95783492ae8df7f84c3c13351df5dc114288e96e Mon Sep 17 00:00:00 2001
|
||||
From 8afae71a44d0d5a0be477863da791dd2dfe2027d Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Tue, 16 Feb 2021 09:51:47 +0000
|
||||
Subject: [PATCH 25/44] Client: Implement DataDeviceV3
|
||||
Subject: [PATCH 19/38] Client: Implement DataDeviceV3
|
||||
|
||||
DataDeviceV2 fixes a leak of DataDevice resources.
|
||||
|
||||
@ -509,5 +509,5 @@ index 1568b3b9..067410d0 100644
|
||||
class DataDeviceCompositor : public DefaultCompositor {
|
||||
public:
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 8c9e148bb0aa25cbc831e2bd931d3bd54bc0fb46 Mon Sep 17 00:00:00 2001
|
||||
From e92aff243eca4c1e30c093692dce6f7c91d7a19c Mon Sep 17 00:00:00 2001
|
||||
From: Arjen Hiemstra <ahiemstra@heimr.nl>
|
||||
Date: Thu, 18 Nov 2021 13:05:30 +0100
|
||||
Subject: [PATCH 26/44] Client: Delay deletion of QDrag object until after
|
||||
Subject: [PATCH 20/38] Client: Delay deletion of QDrag object until after
|
||||
we're done with it
|
||||
|
||||
In certain cases, most notably when performing drag and drop operations
|
||||
@ -63,5 +63,5 @@ index 747f0190..46f629ac 100644
|
||||
private:
|
||||
QWaylandDisplay *m_display = nullptr;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b736b4488dcaa1a3c6b0c6059e5b85881f74c52b Mon Sep 17 00:00:00 2001
|
||||
From 340e89575c93435abab78ac73603b405f1f05ceb Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Sun, 14 Nov 2021 13:54:19 +0000
|
||||
Subject: [PATCH 27/44] Client: Avoid processing of events when showing windows
|
||||
Subject: [PATCH 21/38] Client: Avoid processing of events when showing windows
|
||||
|
||||
The only time we want to dispatch events from the wayland socket is when
|
||||
the application is waiting for external events. Doing so at any other
|
||||
@ -34,5 +34,5 @@ index ba881cb3..1597f67e 100644
|
||||
setGeometry(windowGeometry());
|
||||
// Don't flush the events here, or else the newly visible window may start drawing, but since
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 771705eee02b4d752beee22ef5408ccbd72078cc Mon Sep 17 00:00:00 2001
|
||||
From de7afd339100cac1470f875eafc22d3ee87870bd Mon Sep 17 00:00:00 2001
|
||||
From: Elvis Lee <kwangwoong.lee@lge.com>
|
||||
Date: Thu, 18 Feb 2021 15:45:49 +0900
|
||||
Subject: [PATCH 28/44] Handle registry_global out of constructor
|
||||
Subject: [PATCH 22/38] Handle registry_global out of constructor
|
||||
|
||||
Factory functions in QWaylandDisplay::registry_global() can be overridden.
|
||||
Later, other classes instantiated in the registry_global can support
|
||||
@ -81,5 +81,5 @@ index e5e7dd42..f5632982 100644
|
||||
mDisplay->ensureScreen();
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 725c5de6bdd528d1fa03f1de5ec91585eb110d83 Mon Sep 17 00:00:00 2001
|
||||
From a5df6f67f446ed091c688336510b5da2970a0d84 Mon Sep 17 00:00:00 2001
|
||||
From: Elvis Lee <kwangwoong.lee@lge.com>
|
||||
Date: Wed, 17 Mar 2021 16:31:10 +0900
|
||||
Subject: [PATCH 29/44] Connect flushRequest after forceRoundTrip
|
||||
Subject: [PATCH 23/38] Connect flushRequest after forceRoundTrip
|
||||
|
||||
If flushRequest is connected with aboutToBlock, the flushRequest
|
||||
may consumes all events so that processEvents might be blocked in forceRoundTrip.
|
||||
@ -43,5 +43,5 @@ index f5632982..3a6fa651 100644
|
||||
mDisplay->ensureScreen();
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 91d36a2497f3289996d788c8974583bccac3c842 Mon Sep 17 00:00:00 2001
|
||||
From 967883d20e94183bd9cf6648297b9d76ba0e167e Mon Sep 17 00:00:00 2001
|
||||
From: Adrien Faveraux <af@brain-networks.fr>
|
||||
Date: Fri, 26 Nov 2021 09:18:58 +0100
|
||||
Subject: [PATCH 30/44] Move the wayland socket polling to a separate event
|
||||
Subject: [PATCH 24/38] Move the wayland socket polling to a separate event
|
||||
thread
|
||||
|
||||
New event threads is introduced which calls poll() on the wayland fd,
|
||||
@ -570,5 +570,5 @@ index e0687962..d45980a8 100644
|
||||
|
||||
// True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From ca1d9023b6d40a128faad652f02881b5805e36ba Mon Sep 17 00:00:00 2001
|
||||
From 520f58c24e0fbb33f84f329fc9879b72710c77ae Mon Sep 17 00:00:00 2001
|
||||
From: Roman Genkhel <roman.genhel@lge.com>
|
||||
Date: Thu, 12 Nov 2020 12:21:51 +0300
|
||||
Subject: [PATCH 31/44] Check pointer for null before use in ASSERT
|
||||
Subject: [PATCH 25/38] Check pointer for null before use in ASSERT
|
||||
|
||||
Task-number: QTBUG-85195
|
||||
Change-Id: I331e54f6e58aa9d536351a55223610c60b3cb414
|
||||
@ -26,5 +26,5 @@ index 7de19a74..ac01dc05 100644
|
||||
buffer->setBusy();
|
||||
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From e6b30f42f8eec2ecc10395593dbfff354acd5425 Mon Sep 17 00:00:00 2001
|
||||
From 72f64f397c72afb22df1825382e17a310517add1 Mon Sep 17 00:00:00 2001
|
||||
From: Inho Lee <inho.lee@qt.io>
|
||||
Date: Mon, 1 Nov 2021 14:23:58 +0100
|
||||
Subject: [PATCH 32/44] Do not create decorations when the shellSurface is not
|
||||
Subject: [PATCH 26/38] Do not create decorations when the shellSurface is not
|
||||
ready
|
||||
|
||||
A cases reported that client windows try to make decorations
|
||||
@ -35,5 +35,5 @@ index ac01dc05..acfe390e 100644
|
||||
|
||||
bool hadDecoration = mWindowDecoration;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 3027c9659866101c06252829d99e7597cef19a40 Mon Sep 17 00:00:00 2001
|
||||
From 6935647966b456e760745a6b2a13a04ba6543803 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 33/44] Use wl_surface.damage_buffer on the client side
|
||||
Subject: [PATCH 27/38] Use wl_surface.damage_buffer on the client side
|
||||
|
||||
Prefer the newer, recommended damage_buffer when the compositor
|
||||
supports it.
|
||||
@ -127,5 +127,5 @@ index 949dc23d..d176837e 100644
|
||||
uint32_t callback) override;
|
||||
void surface_commit(Resource *resource) override;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 297c4e075068bffe4a396b2553afc4798c97fb4c Mon Sep 17 00:00:00 2001
|
||||
From 506d0372178134f208fd08b3f6b9499fc0e14a5e Mon Sep 17 00:00:00 2001
|
||||
From: Joni Poikelin <joni.poikelin@qt.io>
|
||||
Date: Thu, 3 Feb 2022 14:01:50 +0200
|
||||
Subject: [PATCH 34/44] Fix crash if no input method module could be loaded
|
||||
Subject: [PATCH 28/38] Fix crash if no input method module could be loaded
|
||||
|
||||
Pick-to: 6.2 6.3 5.15
|
||||
Change-Id: I8f346def616606a6c5540856bd08a84ee7ed5ca2
|
||||
@ -25,5 +25,5 @@ index 3b876047..fbf00c6b 100644
|
||||
|
||||
QWaylandShellIntegration *QWaylandIntegration::createShellIntegration(const QString &integrationName)
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From a97759d032a40045551546ca17300891d4067ee4 Mon Sep 17 00:00:00 2001
|
||||
From c2e56e076f0ded39b1ab34ebf07afad2f344f53f 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 35/44] Client: Remove mWaitingForUpdateDelivery
|
||||
Subject: [PATCH 29/38] Client: Remove mWaitingForUpdateDelivery
|
||||
|
||||
Currently, mWaitingForUpdateDelivery is shared between the main thread
|
||||
(doHandleFrameCallback()) and the frame callback event thread
|
||||
@ -75,5 +75,5 @@ index d45980a8..3ff68ccb 100644
|
||||
QElapsedTimer mFrameCallbackElapsedTimer;
|
||||
struct ::wl_callback *mFrameCallback = nullptr;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From d3b794920d643fc5d722f63ad52b91e8143c0de0 Mon Sep 17 00:00:00 2001
|
||||
From 2d0bd70b55ebde2e22d0b95e8122235f90c8f9f1 Mon Sep 17 00:00:00 2001
|
||||
From: Weng Xuetian <wengxt@gmail.com>
|
||||
Date: Tue, 8 Feb 2022 07:11:25 -0800
|
||||
Subject: [PATCH 36/44] Cursor position == 0 should still show the cursor
|
||||
Subject: [PATCH 30/38] Cursor position == 0 should still show the cursor
|
||||
|
||||
Otherwise the cursor would be hidden even if preedit is empty.
|
||||
Amends 719a55be13bdadfa659a732755f280e276a894bd
|
||||
@ -31,5 +31,5 @@ index 25be2509..458d818e 100644
|
||||
}
|
||||
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 3ddd4dcb1790920ce2598ebdbe14c95bdba55005 Mon Sep 17 00:00:00 2001
|
||||
From f0f7b2bea822f73ae00fcfd4ee1679596d550a20 Mon Sep 17 00:00:00 2001
|
||||
From: Weng Xuetian <wengxt@gmail.com>
|
||||
Date: Wed, 22 Dec 2021 10:42:38 -0800
|
||||
Subject: [PATCH 37/44] Update the preedit styling mapping
|
||||
Subject: [PATCH 31/38] Update the preedit styling mapping
|
||||
|
||||
- None mapping to no style.
|
||||
- Default/Underline mapping to underline.
|
||||
@ -84,5 +84,5 @@ index 458d818e..f50ccf30 100644
|
||||
break;
|
||||
}
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 971dbf2d5be743ddeb998f7461ff3e06ccb892c4 Mon Sep 17 00:00:00 2001
|
||||
From 596ecf46bb0c2427cda2894dd2157b3f5a2cd34f Mon Sep 17 00:00:00 2001
|
||||
From: David Edmundson <davidedmundson@kde.org>
|
||||
Date: Wed, 9 Feb 2022 17:20:48 +0000
|
||||
Subject: [PATCH 38/44] client: Simplify round trip behavior
|
||||
Subject: [PATCH 32/38] client: Simplify round trip behavior
|
||||
|
||||
The custom event queue was removed in
|
||||
302d4ffb8549214eb4028dc3e47ec4ee4e12ffbd (2015) so the comment about not
|
||||
@ -78,5 +78,5 @@ index 6f1bada5..86045a35 100644
|
||||
|
||||
bool QWaylandDisplay::supportsWindowDecoration() const
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 9930ed9942d2d26211195571673bea35261ad26b Mon Sep 17 00:00:00 2001
|
||||
From f7b7b39d00ae31676fc678446d7090e7a9dd95b4 Mon Sep 17 00:00:00 2001
|
||||
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
|
||||
Date: Sat, 19 Feb 2022 17:01:04 +0200
|
||||
Subject: [PATCH 39/44] Client: Fix opaque region setter
|
||||
Subject: [PATCH 33/38] Client: Fix opaque region setter
|
||||
|
||||
The rect is in the global coordinate system, while the opaque region
|
||||
must be in the surface local coordinate system.
|
||||
@ -27,5 +27,5 @@ index 949374b1..fee2ecdd 100644
|
||||
|
||||
void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset)
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 118674630cdb5933e66a8b4415afe7c716ad4662 Mon Sep 17 00:00:00 2001
|
||||
From 6a95428357872353a20ab6dcc5f8facdb520e8dc 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 40/44] Use proper dependencies in compile tests
|
||||
Subject: [PATCH 34/38] 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").
|
||||
@ -122,5 +122,5 @@ index bcfd5215..da95d07b 100644
|
||||
},
|
||||
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From a06fde8dae162166435833fca7844e2695e8480b Mon Sep 17 00:00:00 2001
|
||||
From 169052d99391eef62c181c8b5b107280688045d1 Mon Sep 17 00:00:00 2001
|
||||
From: Liang Qi <liang.qi@qt.io>
|
||||
Date: Wed, 9 Mar 2022 10:47:42 +0100
|
||||
Subject: [PATCH 41/44] client: update button state and etc in pointer_leave()
|
||||
Subject: [PATCH 35/38] client: update button state and etc in pointer_leave()
|
||||
|
||||
The cleanup work needs to be done even the surface is null, for
|
||||
example, a window was closed in mouse press handler, then will not
|
||||
@ -18,7 +18,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
|
||||
index 514457e9..aca42cdc 100644
|
||||
index aaec7eb8..c3cc4eca 100644
|
||||
--- a/src/client/qwaylandinputdevice.cpp
|
||||
+++ b/src/client/qwaylandinputdevice.cpp
|
||||
@@ -685,6 +685,11 @@ public:
|
||||
@ -46,5 +46,5 @@ index 514457e9..aca42cdc 100644
|
||||
|
||||
class MotionEvent : public QWaylandPointerEvent
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 1acd85e8b71610141bbe5bfc804e92ddafb56505 Mon Sep 17 00:00:00 2001
|
||||
From 36756f5d1b8891465bddd31e990c81e149dce0f1 Mon Sep 17 00:00:00 2001
|
||||
From: Paul Olav Tvete <paul.tvete@qt.io>
|
||||
Date: Tue, 15 Mar 2022 15:59:15 +0100
|
||||
Subject: [PATCH 42/44] Revert "Client: Remove mWaitingForUpdateDelivery"
|
||||
Subject: [PATCH 36/38] Revert "Client: Remove mWaitingForUpdateDelivery"
|
||||
|
||||
The reverted commit introduces a severe performance regression
|
||||
when a client window is resized while a QtQuick renderthread
|
||||
@ -55,5 +55,5 @@ index 3ff68ccb..d45980a8 100644
|
||||
QElapsedTimer mFrameCallbackElapsedTimer;
|
||||
struct ::wl_callback *mFrameCallback = nullptr;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 3c9619bded58f09a85df01a4ef46474bf147b2a0 Mon Sep 17 00:00:00 2001
|
||||
From a83e65ddc9a965b25e435d136849a50f0b99c4ae Mon Sep 17 00:00:00 2001
|
||||
From: Paul Olav Tvete <paul.tvete@qt.io>
|
||||
Date: Tue, 15 Mar 2022 16:53:04 +0100
|
||||
Subject: [PATCH 43/44] Fix race condition on mWaitingForUpdateDelivery
|
||||
Subject: [PATCH 37/38] Fix race condition on mWaitingForUpdateDelivery
|
||||
|
||||
Change-Id: I0e91bda73722468b9339fc434fe04420b5e7d3da
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
@ -55,5 +55,5 @@ index d45980a8..cb9135f6 100644
|
||||
QElapsedTimer mFrameCallbackElapsedTimer;
|
||||
struct ::wl_callback *mFrameCallback = nullptr;
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From 398040301e439cc20bcd537bad7095d7eb6f285a Mon Sep 17 00:00:00 2001
|
||||
From 36659e6130ed3fc2b3f0c91423408ef5ecb7b991 Mon Sep 17 00:00:00 2001
|
||||
From: Kenneth Topp <ken@bllue.org>
|
||||
Date: Mon, 4 Apr 2022 09:36:21 -0400
|
||||
Subject: [PATCH 44/44] use poll(2) when reading from clipboard
|
||||
Subject: [PATCH 38/38] use poll(2) when reading from clipboard
|
||||
|
||||
change clipboard read away from select(2) call which can fail when
|
||||
an application has large number of open files
|
||||
@ -44,5 +44,5 @@ index c9e158cc..fe0ea8c9 100644
|
||||
} else if (ready == 0) {
|
||||
qWarning("QWaylandDataOffer: timeout reading from pipe");
|
||||
--
|
||||
2.35.1
|
||||
2.36.1
|
||||
|
@ -0,0 +1,33 @@
|
||||
From 48b9dbb4d9d508895f7568531d8f0a7e63261b75 Mon Sep 17 00:00:00 2001
|
||||
From: Liang Qi <liang.qi@qt.io>
|
||||
Date: Tue, 4 Jan 2022 12:30:36 +0100
|
||||
Subject: [PATCH] client: set_constraint_adjustment() for popups in xdg
|
||||
|
||||
See also https://cgit.freedesktop.org/wayland/wayland-protocols/tree/stable/xdg-shell/xdg-shell.xml#n234 .
|
||||
|
||||
Kudos to Greg V for his original patch in jira.
|
||||
|
||||
Fixes: QTBUG-87303
|
||||
Pick-to: 5.15 6.2 6.3
|
||||
Done-with: Greg V <greg@unrelenting.technology>
|
||||
Change-Id: I57df9aedea7cc6f0b6fa142a6fc6c3bdc98324c8
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
(cherry picked from commit 59a5fe99e1569421b920d99c5b20cdafcdcf43a9)
|
||||
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
index 1c76294..3b99c4b 100644
|
||||
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
@@ -410,6 +410,13 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent)
|
||||
positioner->set_anchor(QtWayland::xdg_positioner::anchor_top_left);
|
||||
positioner->set_gravity(QtWayland::xdg_positioner::gravity_bottom_right);
|
||||
positioner->set_size(m_window->geometry().width(), m_window->geometry().height());
|
||||
+ const QByteArray currentDesktop = qgetenv("XDG_CURRENT_DESKTOP");
|
||||
+ if (currentDesktop != QByteArray("KDE")) {
|
||||
+ positioner->set_constraint_adjustment(QtWayland::xdg_positioner::constraint_adjustment_slide_x
|
||||
+ | QtWayland::xdg_positioner::constraint_adjustment_slide_y
|
||||
+ | QtWayland::xdg_positioner::constraint_adjustment_flip_x
|
||||
+ | QtWayland::xdg_positioner::constraint_adjustment_flip_y);
|
||||
+ }
|
||||
m_popup = new Popup(this, parentXdgSurface, positioner);
|
||||
positioner->destroy();
|
||||
delete positioner;
|
@ -2,8 +2,8 @@
|
||||
|
||||
Summary: Qt5 - Wayland platform support and QtCompositor module
|
||||
Name: qt5-%{qt_module}
|
||||
Version: 5.15.3
|
||||
Release: 2%{?dist}
|
||||
Version: 5.15.4
|
||||
Release: 1%{?dist}
|
||||
|
||||
License: LGPLv3
|
||||
Url: http://www.qt.io
|
||||
@ -13,51 +13,47 @@ Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submod
|
||||
## Upstream patches
|
||||
## repo: https://invent.kde.org/qt/qt/qtwayland
|
||||
## branch: kde/5.15
|
||||
## git format-patch v5.15.3-lts-lgpl
|
||||
Patch1: 0001-Use-qWarning-and-_exit-instead-of-qFatal-for-wayland.patch
|
||||
Patch2: 0002-Translate-opaque-area-with-frame-margins.patch
|
||||
Patch3: 0003-Client-Send-exposeEvent-to-parent-on-subsurface-posi.patch
|
||||
Patch4: 0004-Get-correct-decoration-margins-region.patch
|
||||
Patch5: 0005-xdgshell-Tell-the-compositor-the-screen-we-re-expect.patch
|
||||
Patch6: 0006-client-Allow-QWaylandInputContext-to-accept-composed.patch
|
||||
Patch7: 0007-Client-Announce-an-output-after-receiving-more-compl.patch
|
||||
Patch8: 0008-Fix-issue-with-repeated-window-size-changes.patch
|
||||
Patch9: 0009-Include-locale.h-for-setlocale-LC_CTYPE.patch
|
||||
Patch10: 0010-Client-Connect-drags-being-accepted-to-updating-the-.patch
|
||||
Patch11: 0011-Client-Disconnect-registry-listener-on-destruction.patch
|
||||
Patch12: 0012-Client-Set-XdgShell-size-hints-before-the-first-comm.patch
|
||||
Patch13: 0013-Fix-build.patch
|
||||
Patch14: 0014-Fix-remove-listener.patch
|
||||
Patch15: 0015-Hook-up-queryKeyboardModifers.patch
|
||||
Patch16: 0016-Do-not-update-the-mask-if-we-do-not-have-a-surface.patch
|
||||
Patch17: 0017-Correctly-detect-if-image-format-is-supported-by-QIm.patch
|
||||
Patch18: 0018-Wayland-client-Fix-crash-when-windows-are-shown-hidd.patch
|
||||
Patch19: 0019-Client-Don-t-always-recreate-frame-callbacks.patch
|
||||
Patch20: 0020-Client-Always-destroy-frame-callback-in-the-actual-c.patch
|
||||
Patch21: 0021-Fix-the-logic-for-decoding-modifiers-map-in-Wayland-.patch
|
||||
Patch22: 0022-Wayland-client-use-wl_keyboard-to-determine-active-s.patch
|
||||
Patch23: 0023-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch
|
||||
Patch24: 0024-Set-preedit-cursor-when-cursor-equals-to-0.patch
|
||||
Patch25: 0025-Client-Implement-DataDeviceV3.patch
|
||||
Patch26: 0026-Client-Delay-deletion-of-QDrag-object-until-after-we.patch
|
||||
Patch27: 0027-Client-Avoid-processing-of-events-when-showing-windo.patch
|
||||
Patch28: 0028-Handle-registry_global-out-of-constructor.patch
|
||||
Patch29: 0029-Connect-flushRequest-after-forceRoundTrip.patch
|
||||
Patch30: 0030-Move-the-wayland-socket-polling-to-a-separate-event-.patch
|
||||
Patch31: 0031-Check-pointer-for-null-before-use-in-ASSERT.patch
|
||||
Patch32: 0032-Do-not-create-decorations-when-the-shellSurface-is-n.patch
|
||||
Patch33: 0033-Use-wl_surface.damage_buffer-on-the-client-side.patch
|
||||
Patch34: 0034-Fix-crash-if-no-input-method-module-could-be-loaded.patch
|
||||
Patch35: 0035-Client-Remove-mWaitingForUpdateDelivery.patch
|
||||
Patch36: 0036-Cursor-position-0-should-still-show-the-cursor.patch
|
||||
Patch37: 0037-Update-the-preedit-styling-mapping.patch
|
||||
Patch38: 0038-client-Simplify-round-trip-behavior.patch
|
||||
Patch39: 0039-Client-Fix-opaque-region-setter.patch
|
||||
Patch40: 0040-Use-proper-dependencies-in-compile-tests.patch
|
||||
Patch41: 0041-client-update-button-state-and-etc-in-pointer_leave.patch
|
||||
Patch42: 0042-Revert-Client-Remove-mWaitingForUpdateDelivery.patch
|
||||
Patch43: 0043-Fix-race-condition-on-mWaitingForUpdateDelivery.patch
|
||||
Patch44: 0044-use-poll-2-when-reading-from-clipboard.patch
|
||||
## git format-patch v5.15.4-lts-lgpl
|
||||
Patch1: 0001-Client-Announce-an-output-after-receiving-more-compl.patch
|
||||
Patch2: 0002-Fix-issue-with-repeated-window-size-changes.patch
|
||||
Patch3: 0003-Include-locale.h-for-setlocale-LC_CTYPE.patch
|
||||
Patch4: 0004-Client-Connect-drags-being-accepted-to-updating-the-.patch
|
||||
Patch5: 0005-Client-Disconnect-registry-listener-on-destruction.patch
|
||||
Patch6: 0006-Client-Set-XdgShell-size-hints-before-the-first-comm.patch
|
||||
Patch7: 0007-Fix-build.patch
|
||||
Patch8: 0008-Fix-remove-listener.patch
|
||||
Patch9: 0009-Hook-up-queryKeyboardModifers.patch
|
||||
Patch10: 0010-Do-not-update-the-mask-if-we-do-not-have-a-surface.patch
|
||||
Patch11: 0011-Correctly-detect-if-image-format-is-supported-by-QIm.patch
|
||||
Patch12: 0012-Wayland-client-Fix-crash-when-windows-are-shown-hidd.patch
|
||||
Patch13: 0013-Client-Don-t-always-recreate-frame-callbacks.patch
|
||||
Patch14: 0014-Client-Always-destroy-frame-callback-in-the-actual-c.patch
|
||||
Patch15: 0015-Fix-the-logic-for-decoding-modifiers-map-in-Wayland-.patch
|
||||
Patch16: 0016-Wayland-client-use-wl_keyboard-to-determine-active-s.patch
|
||||
Patch17: 0017-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch
|
||||
Patch18: 0018-Set-preedit-cursor-when-cursor-equals-to-0.patch
|
||||
Patch19: 0019-Client-Implement-DataDeviceV3.patch
|
||||
Patch20: 0020-Client-Delay-deletion-of-QDrag-object-until-after-we.patch
|
||||
Patch21: 0021-Client-Avoid-processing-of-events-when-showing-windo.patch
|
||||
Patch22: 0022-Handle-registry_global-out-of-constructor.patch
|
||||
Patch23: 0023-Connect-flushRequest-after-forceRoundTrip.patch
|
||||
Patch24: 0024-Move-the-wayland-socket-polling-to-a-separate-event-.patch
|
||||
Patch25: 0025-Check-pointer-for-null-before-use-in-ASSERT.patch
|
||||
Patch26: 0026-Do-not-create-decorations-when-the-shellSurface-is-n.patch
|
||||
Patch27: 0027-Use-wl_surface.damage_buffer-on-the-client-side.patch
|
||||
Patch28: 0028-Fix-crash-if-no-input-method-module-could-be-loaded.patch
|
||||
Patch29: 0029-Client-Remove-mWaitingForUpdateDelivery.patch
|
||||
Patch30: 0030-Cursor-position-0-should-still-show-the-cursor.patch
|
||||
Patch31: 0031-Update-the-preedit-styling-mapping.patch
|
||||
Patch32: 0032-client-Simplify-round-trip-behavior.patch
|
||||
Patch33: 0033-Client-Fix-opaque-region-setter.patch
|
||||
Patch34: 0034-Use-proper-dependencies-in-compile-tests.patch
|
||||
Patch35: 0035-client-update-button-state-and-etc-in-pointer_leave.patch
|
||||
Patch36: 0036-Revert-Client-Remove-mWaitingForUpdateDelivery.patch
|
||||
Patch37: 0037-Fix-race-condition-on-mWaitingForUpdateDelivery.patch
|
||||
Patch38: 0038-use-poll-2-when-reading-from-clipboard.patch
|
||||
|
||||
Patch50: 0050-Client-set-constraint-adjustments-for-popups-in-xdg.patch
|
||||
|
||||
# Disable for now, there is a Qt bug making this broken
|
||||
# Patch102: qtwayland-decoration-support-backports-from-qt6.patch
|
||||
@ -170,6 +166,9 @@ popd
|
||||
|
||||
|
||||
%changelog
|
||||
* Mon May 16 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.4-1
|
||||
- 5.15.4
|
||||
|
||||
* Fri Apr 15 2022 Kenneth Topp <toppk@bllue.org> - 5.15.3-2
|
||||
- Pull in latest kde/5.15 branch fixes
|
||||
|
||||
|
@ -1,166 +0,0 @@
|
||||
From d533901938a996367d7b6f87b0214f5a17098aed Mon Sep 17 00:00:00 2001
|
||||
From: Jan Grulich <jgrulich@redhat.com>
|
||||
Date: Tue, 23 Mar 2021 16:03:22 +0100
|
||||
Subject: [PATCH] Client: expose toplevel window state
|
||||
|
||||
QWaylandWindow has only basic information about window state, like if
|
||||
it's active or maximized, but it has no information about tiling, which
|
||||
can be useful for client-side decorations. We also need to bump version
|
||||
of xdg-shell protocol we support, because additional states are not in
|
||||
the version currently supported by QtWayland. It shouldn't be a problem
|
||||
to increase the version as the new version adds just these additional
|
||||
window states.
|
||||
|
||||
Change-Id: I4c46516d9c7296c69ea51a022b3bdb4ca06bef8d
|
||||
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||
---
|
||||
src/client/qwaylandwindow.cpp | 15 +++++++++++++++
|
||||
src/client/qwaylandwindow_p.h | 16 ++++++++++++++++
|
||||
.../xdg-shell/qwaylandxdgshell.cpp | 16 +++++++++++++++-
|
||||
.../xdg-shell/qwaylandxdgshell_p.h | 3 ++-
|
||||
4 files changed, 48 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index ba881cb..a1e891d 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -1089,6 +1089,16 @@ Qt::WindowStates QWaylandWindow::windowStates() const
|
||||
return mLastReportedWindowStates;
|
||||
}
|
||||
|
||||
+QWaylandWindow::ToplevelWindowTilingStates QWaylandWindow::toplevelWindowTilingStates() const
|
||||
+{
|
||||
+ return mLastReportedToplevelWindowTilingStates;
|
||||
+}
|
||||
+
|
||||
+void QWaylandWindow::handleToplevelWindowTilingStatesChanged(ToplevelWindowTilingStates states)
|
||||
+{
|
||||
+ mLastReportedToplevelWindowTilingStates = states;
|
||||
+}
|
||||
+
|
||||
void QWaylandWindow::handleWindowStatesChanged(Qt::WindowStates states)
|
||||
{
|
||||
createDecoration();
|
||||
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
|
||||
index e068796..f4e5d3d 100644
|
||||
--- a/src/client/qwaylandwindow_p.h
|
||||
+++ b/src/client/qwaylandwindow_p.h
|
||||
@@ -95,6 +95,15 @@ public:
|
||||
Vulkan
|
||||
};
|
||||
|
||||
+ enum ToplevelWindowTilingState {
|
||||
+ WindowNoState = 0,
|
||||
+ WindowTiledLeft = 1,
|
||||
+ WindowTiledRight = 2,
|
||||
+ WindowTiledTop = 4,
|
||||
+ WindowTiledBottom = 8
|
||||
+ };
|
||||
+ Q_DECLARE_FLAGS(ToplevelWindowTilingStates, ToplevelWindowTilingState)
|
||||
+
|
||||
QWaylandWindow(QWindow *window, QWaylandDisplay *display);
|
||||
~QWaylandWindow() override;
|
||||
|
||||
@@ -145,6 +154,9 @@ public:
|
||||
void handleContentOrientationChange(Qt::ScreenOrientation orientation) override;
|
||||
void setOrientationMask(Qt::ScreenOrientations mask);
|
||||
|
||||
+ ToplevelWindowTilingStates toplevelWindowTilingStates() const;
|
||||
+ void handleToplevelWindowTilingStatesChanged(ToplevelWindowTilingStates states);
|
||||
+
|
||||
void setWindowState(Qt::WindowStates states) override;
|
||||
void setWindowFlags(Qt::WindowFlags flags) override;
|
||||
void handleWindowStatesChanged(Qt::WindowStates states);
|
||||
@@ -257,6 +269,7 @@ protected:
|
||||
QRegion mMask;
|
||||
QRegion mOpaqueArea;
|
||||
Qt::WindowStates mLastReportedWindowStates = Qt::WindowNoState;
|
||||
+ ToplevelWindowTilingStates mLastReportedToplevelWindowTilingStates = WindowNoState;
|
||||
|
||||
QWaylandShmBackingStore *mBackingStore = nullptr;
|
||||
QWaylandBuffer *mQueuedBuffer = nullptr;
|
||||
@@ -293,6 +306,8 @@ private:
|
||||
friend class QWaylandSubSurface;
|
||||
};
|
||||
|
||||
+Q_DECLARE_OPERATORS_FOR_FLAGS(QWaylandWindow::ToplevelWindowTilingStates)
|
||||
+
|
||||
inline QIcon QWaylandWindow::windowIcon() const
|
||||
{
|
||||
return mWindowIcon;
|
||||
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
index d7d0ddf..2c6e84b 100644
|
||||
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
@@ -88,6 +88,7 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
|
||||
&& !m_xdgSurface->m_window->display()->isKeyboardAvailable())
|
||||
m_xdgSurface->m_window->display()->handleWindowDeactivated(m_xdgSurface->m_window);
|
||||
|
||||
+ m_xdgSurface->m_window->handleToplevelWindowTilingStatesChanged(m_toplevelStates);
|
||||
m_xdgSurface->m_window->handleWindowStatesChanged(m_pending.states);
|
||||
|
||||
if (m_pending.size.isEmpty()) {
|
||||
@@ -120,6 +121,7 @@ void QWaylandXdgSurface::Toplevel::xdg_toplevel_configure(int32_t width, int32_t
|
||||
size_t numStates = states->size / sizeof(uint32_t);
|
||||
|
||||
m_pending.states = Qt::WindowNoState;
|
||||
+ m_toplevelStates = QWaylandWindow::WindowNoState;
|
||||
|
||||
for (size_t i = 0; i < numStates; i++) {
|
||||
switch (xdgStates[i]) {
|
||||
@@ -132,6 +134,18 @@ void QWaylandXdgSurface::Toplevel::xdg_toplevel_configure(int32_t width, int32_t
|
||||
case XDG_TOPLEVEL_STATE_FULLSCREEN:
|
||||
m_pending.states |= Qt::WindowFullScreen;
|
||||
break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_LEFT:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledLeft;
|
||||
+ break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_RIGHT:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledRight;
|
||||
+ break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_TOP:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledTop;
|
||||
+ break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_BOTTOM:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledBottom;
|
||||
+ break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -451,7 +465,7 @@ void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
|
||||
}
|
||||
|
||||
QWaylandXdgShell::QWaylandXdgShell(QWaylandDisplay *display, uint32_t id, uint32_t availableVersion)
|
||||
- : QtWayland::xdg_wm_base(display->wl_registry(), id, qMin(availableVersion, 1u))
|
||||
+ : QtWayland::xdg_wm_base(display->wl_registry(), id, qMin(availableVersion, 2u))
|
||||
, m_display(display)
|
||||
{
|
||||
display->addRegistryListener(&QWaylandXdgShell::handleRegistryGlobal, this);
|
||||
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
|
||||
index 0c98be3..d791213 100644
|
||||
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
|
||||
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
|
||||
@@ -58,6 +58,7 @@
|
||||
|
||||
#include <QtWaylandClient/qtwaylandclientglobal.h>
|
||||
#include <QtWaylandClient/private/qwaylandshellsurface_p.h>
|
||||
+#include <QtWaylandClient/private/qwaylandwindow_p.h>
|
||||
|
||||
#include <QtCore/QSize>
|
||||
#include <QtGui/QRegion>
|
||||
@@ -69,7 +70,6 @@ class QWindow;
|
||||
namespace QtWaylandClient {
|
||||
|
||||
class QWaylandDisplay;
|
||||
-class QWaylandWindow;
|
||||
class QWaylandInputDevice;
|
||||
class QWaylandXdgShell;
|
||||
|
||||
@@ -123,6 +123,7 @@ private:
|
||||
QSize size = {0, 0};
|
||||
Qt::WindowStates states = Qt::WindowNoState;
|
||||
} m_pending, m_applied;
|
||||
+ QWaylandWindow::ToplevelWindowTilingStates m_toplevelStates = QWaylandWindow::WindowNoState;
|
||||
QSize m_normalSize;
|
||||
|
||||
QWaylandXdgSurface *m_xdgSurface = nullptr;
|
@ -1,234 +0,0 @@
|
||||
diff --git a/src/client/qwaylandabstractdecoration_p.h b/src/client/qwaylandabstractdecoration_p.h
|
||||
index 81c8e177..61cbde77 100644
|
||||
--- a/src/client/qwaylandabstractdecoration_p.h
|
||||
+++ b/src/client/qwaylandabstractdecoration_p.h
|
||||
@@ -82,6 +82,12 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandAbstractDecoration : public QObject
|
||||
Q_OBJECT
|
||||
Q_DECLARE_PRIVATE(QWaylandAbstractDecoration)
|
||||
public:
|
||||
+ enum MarginsType {
|
||||
+ Full,
|
||||
+ ShadowsExcluded,
|
||||
+ ShadowsOnly
|
||||
+ };
|
||||
+
|
||||
QWaylandAbstractDecoration();
|
||||
~QWaylandAbstractDecoration() override;
|
||||
|
||||
@@ -91,7 +97,8 @@ public:
|
||||
void update();
|
||||
bool isDirty() const;
|
||||
|
||||
- virtual QMargins margins() const = 0;
|
||||
+ virtual QMargins margins(MarginsType marginsType = Full) const = 0;
|
||||
+
|
||||
QWindow *window() const;
|
||||
const QImage &contentImage();
|
||||
|
||||
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
|
||||
index bd70f4af..0e819235 100644
|
||||
--- a/src/client/qwaylandwindow.cpp
|
||||
+++ b/src/client/qwaylandwindow.cpp
|
||||
@@ -380,6 +380,16 @@ void QWaylandWindow::setGeometry(const QRect &rect)
|
||||
void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset)
|
||||
{
|
||||
QMargins margins = frameMargins();
|
||||
+
|
||||
+ // Exclude shadows from margins once they are excluded from window geometry
|
||||
+ // 1) First resizeFromApplyConfigure() call will have sizeWithMargins equal to surfaceSize()
|
||||
+ // which has full margins (shadows included).
|
||||
+ // 2) Following resizeFromApplyConfigure() calls should have sizeWithMargins equal to
|
||||
+ // windowContentGeometry() which excludes shadows, therefore in this case we have to
|
||||
+ // exclude them too in order not to accidentally apply smaller size to the window.
|
||||
+ if (mWindowDecoration && (sizeWithMargins != surfaceSize()))
|
||||
+ margins = mWindowDecoration->margins(QWaylandAbstractDecoration::ShadowsExcluded);
|
||||
+
|
||||
int widthWithoutMargins = qMax(sizeWithMargins.width() - (margins.left() + margins.right()), 1);
|
||||
int heightWithoutMargins = qMax(sizeWithMargins.height() - (margins.top() + margins.bottom()), 1);
|
||||
QRect geometry(windowGeometry().topLeft(), QSize(widthWithoutMargins, heightWithoutMargins));
|
||||
@@ -690,7 +700,12 @@ QSize QWaylandWindow::surfaceSize() const
|
||||
*/
|
||||
QRect QWaylandWindow::windowContentGeometry() const
|
||||
{
|
||||
- return QRect(QPoint(), surfaceSize());
|
||||
+ QMargins shadowMargins;
|
||||
+
|
||||
+ if (mWindowDecoration)
|
||||
+ shadowMargins = mWindowDecoration->margins(QWaylandAbstractDecoration::ShadowsOnly);
|
||||
+
|
||||
+ return QRect(QPoint(shadowMargins.left(), shadowMargins.top()), surfaceSize().shrunkBy(shadowMargins));
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -1079,6 +1094,21 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab)
|
||||
return true;
|
||||
}
|
||||
|
||||
+QWaylandWindow::ToplevelWindowTilingStates QWaylandWindow::toplevelWindowTilingStates() const
|
||||
+{
|
||||
+ return mLastReportedToplevelWindowTilingStates;
|
||||
+}
|
||||
+
|
||||
+void QWaylandWindow::handleToplevelWindowTilingStatesChanged(ToplevelWindowTilingStates states)
|
||||
+{
|
||||
+ mLastReportedToplevelWindowTilingStates = states;
|
||||
+}
|
||||
+
|
||||
+Qt::WindowStates QWaylandWindow::windowStates() const
|
||||
+{
|
||||
+ return mLastReportedWindowStates;
|
||||
+}
|
||||
+
|
||||
void QWaylandWindow::handleWindowStatesChanged(Qt::WindowStates states)
|
||||
{
|
||||
createDecoration();
|
||||
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
|
||||
index 6cc1664b..93ba0623 100644
|
||||
--- a/src/client/qwaylandwindow_p.h
|
||||
+++ b/src/client/qwaylandwindow_p.h
|
||||
@@ -95,6 +95,15 @@ public:
|
||||
Vulkan
|
||||
};
|
||||
|
||||
+ enum ToplevelWindowTilingState {
|
||||
+ WindowNoState = 0,
|
||||
+ WindowTiledLeft = 1,
|
||||
+ WindowTiledRight = 2,
|
||||
+ WindowTiledTop = 4,
|
||||
+ WindowTiledBottom = 8
|
||||
+ };
|
||||
+ Q_DECLARE_FLAGS(ToplevelWindowTilingStates, ToplevelWindowTilingState)
|
||||
+
|
||||
QWaylandWindow(QWindow *window, QWaylandDisplay *display);
|
||||
~QWaylandWindow() override;
|
||||
|
||||
@@ -145,6 +154,10 @@ public:
|
||||
void handleContentOrientationChange(Qt::ScreenOrientation orientation) override;
|
||||
void setOrientationMask(Qt::ScreenOrientations mask);
|
||||
|
||||
+ ToplevelWindowTilingStates toplevelWindowTilingStates() const;
|
||||
+ void handleToplevelWindowTilingStatesChanged(ToplevelWindowTilingStates states);
|
||||
+
|
||||
+ Qt::WindowStates windowStates() const;
|
||||
void setWindowState(Qt::WindowStates states) override;
|
||||
void setWindowFlags(Qt::WindowFlags flags) override;
|
||||
void handleWindowStatesChanged(Qt::WindowStates states);
|
||||
@@ -256,6 +269,7 @@ protected:
|
||||
QRegion mMask;
|
||||
QRegion mOpaqueArea;
|
||||
Qt::WindowStates mLastReportedWindowStates = Qt::WindowNoState;
|
||||
+ ToplevelWindowTilingStates mLastReportedToplevelWindowTilingStates = WindowNoState;
|
||||
|
||||
QWaylandShmBackingStore *mBackingStore = nullptr;
|
||||
QWaylandBuffer *mQueuedBuffer = nullptr;
|
||||
@@ -292,6 +306,8 @@ private:
|
||||
friend class QWaylandSubSurface;
|
||||
};
|
||||
|
||||
+Q_DECLARE_OPERATORS_FOR_FLAGS(QWaylandWindow::ToplevelWindowTilingStates)
|
||||
+
|
||||
inline QIcon QWaylandWindow::windowIcon() const
|
||||
{
|
||||
return mWindowIcon;
|
||||
diff --git a/src/plugins/decorations/bradient/main.cpp b/src/plugins/decorations/bradient/main.cpp
|
||||
index e75fda3c..72dda67f 100644
|
||||
--- a/src/plugins/decorations/bradient/main.cpp
|
||||
+++ b/src/plugins/decorations/bradient/main.cpp
|
||||
@@ -72,7 +72,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandBradientDecoration : public QWaylandAbstra
|
||||
public:
|
||||
QWaylandBradientDecoration();
|
||||
protected:
|
||||
- QMargins margins() const override;
|
||||
+ QMargins margins(MarginsType marginsType = Full) const override;
|
||||
void paint(QPaintDevice *device) override;
|
||||
bool handleMouse(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global,Qt::MouseButtons b,Qt::KeyboardModifiers mods) override;
|
||||
bool handleTouch(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global, Qt::TouchPointState state, Qt::KeyboardModifiers mods) override;
|
||||
@@ -129,8 +129,11 @@ QRectF QWaylandBradientDecoration::minimizeButtonRect() const
|
||||
(margins().top() - BUTTON_WIDTH) / 2, BUTTON_WIDTH, BUTTON_WIDTH);
|
||||
}
|
||||
|
||||
-QMargins QWaylandBradientDecoration::margins() const
|
||||
+QMargins QWaylandBradientDecoration::margins(MarginsType marginsType) const
|
||||
{
|
||||
+ if (marginsType == ShadowsOnly)
|
||||
+ return QMargins();
|
||||
+
|
||||
return QMargins(3, 30, 3, 3);
|
||||
}
|
||||
|
||||
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
index 7d33dabd..cf7eb4e9 100644
|
||||
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
|
||||
@@ -94,6 +94,7 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
|
||||
// TODO: none of the other plugins send WindowActive either, but is it on purpose?
|
||||
Qt::WindowStates statesWithoutActive = m_pending.states & ~Qt::WindowActive;
|
||||
|
||||
+ m_xdgSurface->m_window->handleToplevelWindowTilingStatesChanged(m_toplevelStates);
|
||||
m_xdgSurface->m_window->handleWindowStatesChanged(statesWithoutActive);
|
||||
|
||||
if (m_pending.size.isEmpty()) {
|
||||
@@ -126,6 +127,7 @@ void QWaylandXdgSurface::Toplevel::xdg_toplevel_configure(int32_t width, int32_t
|
||||
size_t numStates = states->size / sizeof(uint32_t);
|
||||
|
||||
m_pending.states = Qt::WindowNoState;
|
||||
+ m_toplevelStates = QWaylandWindow::WindowNoState;
|
||||
|
||||
for (size_t i = 0; i < numStates; i++) {
|
||||
switch (xdgStates[i]) {
|
||||
@@ -138,6 +140,18 @@ void QWaylandXdgSurface::Toplevel::xdg_toplevel_configure(int32_t width, int32_t
|
||||
case XDG_TOPLEVEL_STATE_FULLSCREEN:
|
||||
m_pending.states |= Qt::WindowFullScreen;
|
||||
break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_LEFT:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledLeft;
|
||||
+ break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_RIGHT:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledRight;
|
||||
+ break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_TOP:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledTop;
|
||||
+ break;
|
||||
+ case XDG_TOPLEVEL_STATE_TILED_BOTTOM:
|
||||
+ m_toplevelStates |= QWaylandWindow::WindowTiledBottom;
|
||||
+ break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -457,7 +471,7 @@ void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
|
||||
}
|
||||
|
||||
QWaylandXdgShell::QWaylandXdgShell(QWaylandDisplay *display, uint32_t id, uint32_t availableVersion)
|
||||
- : QtWayland::xdg_wm_base(display->wl_registry(), id, qMin(availableVersion, 1u))
|
||||
+ : QtWayland::xdg_wm_base(display->wl_registry(), id, qMin(availableVersion, 2u))
|
||||
, m_display(display)
|
||||
{
|
||||
display->addRegistryListener(&QWaylandXdgShell::handleRegistryGlobal, this);
|
||||
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
|
||||
index 0c98be35..d7912132 100644
|
||||
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
|
||||
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell_p.h
|
||||
@@ -58,6 +58,7 @@
|
||||
|
||||
#include <QtWaylandClient/qtwaylandclientglobal.h>
|
||||
#include <QtWaylandClient/private/qwaylandshellsurface_p.h>
|
||||
+#include <QtWaylandClient/private/qwaylandwindow_p.h>
|
||||
|
||||
#include <QtCore/QSize>
|
||||
#include <QtGui/QRegion>
|
||||
@@ -69,7 +70,6 @@ class QWindow;
|
||||
namespace QtWaylandClient {
|
||||
|
||||
class QWaylandDisplay;
|
||||
-class QWaylandWindow;
|
||||
class QWaylandInputDevice;
|
||||
class QWaylandXdgShell;
|
||||
|
||||
@@ -123,6 +123,7 @@ private:
|
||||
QSize size = {0, 0};
|
||||
Qt::WindowStates states = Qt::WindowNoState;
|
||||
} m_pending, m_applied;
|
||||
+ QWaylandWindow::ToplevelWindowTilingStates m_toplevelStates = QWaylandWindow::WindowNoState;
|
||||
QSize m_normalSize;
|
||||
|
||||
QWaylandXdgSurface *m_xdgSurface = nullptr;
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (qtwayland-everywhere-opensource-src-5.15.3.tar.xz) = 0a9768282170709050490fb1b9daef59c21c8b5c4785f56a452d7954ffb6f016ec836022693941c99c5c10b2c3c55c75ba37fdad09dd1e0cde627f8b87b90c89
|
||||
SHA512 (qtwayland-everywhere-opensource-src-5.15.4.tar.xz) = 58ae262f7aa0455fb577a36fe9413a969398a2043160642501bac064d6fbc3280f76aa566e62b9d73c67a8c3606849b1b97bcb9b0250d26c269ec921112f40e4
|
||||
|
Loading…
Reference in New Issue
Block a user