6.8.1
Resolves: RHEL-53982
This commit is contained in:
parent
491c625b9b
commit
5d3ac86409
1
.gitignore
vendored
1
.gitignore
vendored
@ -25,3 +25,4 @@
|
|||||||
/qtwayland-everywhere-src-6.6.1.tar.xz
|
/qtwayland-everywhere-src-6.6.1.tar.xz
|
||||||
/qtwayland-everywhere-src-6.7.0.tar.xz
|
/qtwayland-everywhere-src-6.7.0.tar.xz
|
||||||
/qtwayland-everywhere-src-6.7.1.tar.xz
|
/qtwayland-everywhere-src-6.7.1.tar.xz
|
||||||
|
/qtwayland-everywhere-src-6.8.1.tar.xz
|
||||||
|
@ -11,8 +11,8 @@
|
|||||||
|
|
||||||
Summary: Qt6 - Wayland platform support and QtCompositor module
|
Summary: Qt6 - Wayland platform support and QtCompositor module
|
||||||
Name: qt6-%{qt_module}
|
Name: qt6-%{qt_module}
|
||||||
Version: 6.7.1
|
Version: 6.8.1
|
||||||
Release: 4%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
Url: http://www.qt.io
|
Url: http://www.qt.io
|
||||||
@ -26,9 +26,9 @@ Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submod
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
# Upstream patches
|
# Upstream patches
|
||||||
# Backport Qt Adwaita decorations from upstream to qt6-qtwayland package
|
Patch0: qtwayland-update-wayland-xml-to-version-1.23.0.patch
|
||||||
# https://issues.redhat.com/browse/DESKTOP-883
|
Patch1: qtwayland-client-redo-management-of-tablet-proxies.patch
|
||||||
Patch0: qtwayland-add-gnome-like-csd-plugin.patch
|
Patch2: qtwayland-adwaita-improve-border-painting.patch
|
||||||
|
|
||||||
# Upstreamable patches
|
# Upstreamable patches
|
||||||
|
|
||||||
@ -43,6 +43,7 @@ BuildRequires: qt6-qtbase-static
|
|||||||
BuildRequires: qt6-qtbase-private-devel
|
BuildRequires: qt6-qtbase-private-devel
|
||||||
%{?_qt6:Requires: %{_qt6}%{?_isa} = %{_qt6_version}}
|
%{?_qt6:Requires: %{_qt6}%{?_isa} = %{_qt6_version}}
|
||||||
BuildRequires: qt6-qtdeclarative-devel
|
BuildRequires: qt6-qtdeclarative-devel
|
||||||
|
# For Adwaita decorations
|
||||||
BuildRequires: qt6-qtsvg-devel
|
BuildRequires: qt6-qtsvg-devel
|
||||||
|
|
||||||
BuildRequires: pkgconfig(xkbcommon)
|
BuildRequires: pkgconfig(xkbcommon)
|
||||||
@ -130,9 +131,14 @@ popd
|
|||||||
%files
|
%files
|
||||||
%doc README
|
%doc README
|
||||||
%license LICENSES/*
|
%license LICENSES/*
|
||||||
|
%{_qt6_archdatadir}/sbom/%{qt_module}-%{qt_version}.spdx
|
||||||
%{_qt6_libdir}/libQt6WaylandCompositor.so.6*
|
%{_qt6_libdir}/libQt6WaylandCompositor.so.6*
|
||||||
%{_qt6_libdir}/libQt6WaylandClient.so.6*
|
%{_qt6_libdir}/libQt6WaylandClient.so.6*
|
||||||
%{_qt6_libdir}/libQt6WaylandCompositor.so.6*
|
%{_qt6_libdir}/libQt6WaylandCompositor.so.6*
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorIviapplication.so.6*
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorPresentationTime.so.6*
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorWLShell.so.6*
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorXdgShell.so.6*
|
||||||
%{_qt6_libdir}/libQt6WaylandClient.so.6*
|
%{_qt6_libdir}/libQt6WaylandClient.so.6*
|
||||||
%{_qt6_libdir}/libQt6WaylandEglClientHwIntegration.so.6*
|
%{_qt6_libdir}/libQt6WaylandEglClientHwIntegration.so.6*
|
||||||
%{_qt6_libdir}/libQt6WaylandEglCompositorHwIntegration.so.6*
|
%{_qt6_libdir}/libQt6WaylandEglCompositorHwIntegration.so.6*
|
||||||
@ -150,17 +156,29 @@ popd
|
|||||||
%files devel
|
%files devel
|
||||||
%{_qt6_libexecdir}/qtwaylandscanner
|
%{_qt6_libexecdir}/qtwaylandscanner
|
||||||
%{_qt6_headerdir}/QtWaylandCompositor/
|
%{_qt6_headerdir}/QtWaylandCompositor/
|
||||||
|
%{_qt6_headerdir}/QtWaylandCompositorIviapplication/
|
||||||
|
%{_qt6_headerdir}/QtWaylandCompositorPresentationTime/
|
||||||
|
%{_qt6_headerdir}/QtWaylandCompositorWLShell/
|
||||||
|
%{_qt6_headerdir}/QtWaylandCompositorXdgShell/
|
||||||
%{_qt6_headerdir}/QtWaylandClient/
|
%{_qt6_headerdir}/QtWaylandClient/
|
||||||
%{_qt6_headerdir}/QtWaylandEglClientHwIntegration/
|
%{_qt6_headerdir}/QtWaylandEglClientHwIntegration/
|
||||||
%{_qt6_headerdir}/QtWaylandEglCompositorHwIntegration/
|
%{_qt6_headerdir}/QtWaylandEglCompositorHwIntegration/
|
||||||
%{_qt6_headerdir}/QtWlShellIntegration/
|
%{_qt6_headerdir}/QtWlShellIntegration/
|
||||||
%{_qt6_headerdir}/QtWaylandGlobal/
|
%{_qt6_headerdir}/QtWaylandGlobal/
|
||||||
%{_qt6_libdir}/libQt6WaylandCompositor.so
|
%{_qt6_libdir}/libQt6WaylandCompositor.so
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorIviapplication.so
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorPresentationTime.so
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorWLShell.so
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorXdgShell.so
|
||||||
%{_qt6_libdir}/libQt6WaylandClient.so
|
%{_qt6_libdir}/libQt6WaylandClient.so
|
||||||
%{_qt6_libdir}/libQt6WaylandEglClientHwIntegration.so
|
%{_qt6_libdir}/libQt6WaylandEglClientHwIntegration.so
|
||||||
%{_qt6_libdir}/libQt6WaylandEglCompositorHwIntegration.so
|
%{_qt6_libdir}/libQt6WaylandEglCompositorHwIntegration.so
|
||||||
%{_qt6_libdir}/libQt6WlShellIntegration.so
|
%{_qt6_libdir}/libQt6WlShellIntegration.so
|
||||||
%{_qt6_libdir}/libQt6WaylandCompositor.prl
|
%{_qt6_libdir}/libQt6WaylandCompositor.prl
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorIviapplication.prl
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorPresentationTime.prl
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorWLShell.prl
|
||||||
|
%{_qt6_libdir}/libQt6WaylandCompositorXdgShell.prl
|
||||||
%{_qt6_libdir}/libQt6WaylandClient.prl
|
%{_qt6_libdir}/libQt6WaylandClient.prl
|
||||||
%{_qt6_libdir}/libQt6WaylandEglClientHwIntegration.prl
|
%{_qt6_libdir}/libQt6WaylandEglClientHwIntegration.prl
|
||||||
%{_qt6_libdir}/libQt6WaylandEglCompositorHwIntegration.prl
|
%{_qt6_libdir}/libQt6WaylandEglCompositorHwIntegration.prl
|
||||||
@ -173,6 +191,14 @@ popd
|
|||||||
%{_qt6_libdir}/cmake/Qt6Qml/QmlPlugins/*.cmake
|
%{_qt6_libdir}/cmake/Qt6Qml/QmlPlugins/*.cmake
|
||||||
%dir %{_qt6_libdir}/cmake/Qt6WaylandCompositor/
|
%dir %{_qt6_libdir}/cmake/Qt6WaylandCompositor/
|
||||||
%{_qt6_libdir}/cmake/Qt6WaylandCompositor/
|
%{_qt6_libdir}/cmake/Qt6WaylandCompositor/
|
||||||
|
%dir %{_qt6_libdir}/cmake/Qt6WaylandCompositorIviapplication/
|
||||||
|
%{_qt6_libdir}/cmake/Qt6WaylandCompositorIviapplication/
|
||||||
|
%dir %{_qt6_libdir}/cmake/Qt6WaylandCompositorPresentationTime/
|
||||||
|
%{_qt6_libdir}/cmake/Qt6WaylandCompositorPresentationTime/
|
||||||
|
%dir %{_qt6_libdir}/cmake/Qt6WaylandCompositorWLShell/
|
||||||
|
%{_qt6_libdir}/cmake/Qt6WaylandCompositorWLShell/
|
||||||
|
%dir %{_qt6_libdir}/cmake/Qt6WaylandCompositorXdgShell/
|
||||||
|
%{_qt6_libdir}/cmake/Qt6WaylandCompositorXdgShell/
|
||||||
%dir %{_qt6_libdir}/cmake/Qt6WaylandClient/
|
%dir %{_qt6_libdir}/cmake/Qt6WaylandClient/
|
||||||
%{_qt6_libdir}/cmake/Qt6WaylandClient/
|
%{_qt6_libdir}/cmake/Qt6WaylandClient/
|
||||||
%dir %{_qt6_libdir}/cmake/Qt6WaylandScannerTools/
|
%dir %{_qt6_libdir}/cmake/Qt6WaylandScannerTools/
|
||||||
@ -201,6 +227,10 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Dec 06 2024 Jan Grulich <jgrulich@redhat.com> - 6.8.1-1
|
||||||
|
- 6.8.1
|
||||||
|
Resolves: RHEL-53982
|
||||||
|
|
||||||
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 6.7.1-4
|
* Tue Oct 29 2024 Troy Dawson <tdawson@redhat.com> - 6.7.1-4
|
||||||
- Bump release for October 2024 mass rebuild:
|
- Bump release for October 2024 mass rebuild:
|
||||||
Resolves: RHEL-64018
|
Resolves: RHEL-64018
|
||||||
|
File diff suppressed because it is too large
Load Diff
74
qtwayland-adwaita-improve-border-painting.patch
Normal file
74
qtwayland-adwaita-improve-border-painting.patch
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
From 1304ba3997951a93939b04b9ad1df1e0a0c146eb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Grulich <jgrulich@redhat.com>
|
||||||
|
Date: Tue, 19 Nov 2024 19:15:08 +0100
|
||||||
|
Subject: [PATCH] Adwaita decorations: improve border painting
|
||||||
|
|
||||||
|
This is a backport of two changes pushed to QAdwaitaDecorations upstream
|
||||||
|
that further improve painting of border around the application window.
|
||||||
|
Using the 0.5px adjustment makes the border to look better as the line
|
||||||
|
better aligns. Also the separator between window and title doesn't need
|
||||||
|
to be painted separately. Co-authored with Lorenzo Bertini.
|
||||||
|
|
||||||
|
Pick-to: 6.8
|
||||||
|
Change-Id: Ib841073884dee58e599a173c259547416d2ed8ce
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp b/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp
|
||||||
|
index 2d3575b..c32ab4a 100644
|
||||||
|
--- a/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp
|
||||||
|
+++ b/src/plugins/decorations/adwaita/qwaylandadwaitadecoration.cpp
|
||||||
|
@@ -46,7 +46,6 @@
|
||||||
|
static constexpr int ceShadowsWidth = 10;
|
||||||
|
static constexpr int ceTitlebarHeight = 38;
|
||||||
|
static constexpr int ceWindowBorderWidth = 1;
|
||||||
|
-static constexpr qreal ceTitlebarSeperatorWidth = 0.5;
|
||||||
|
|
||||||
|
static QMap<QWaylandAdwaitaDecoration::ButtonIcon, QString> buttonMap = {
|
||||||
|
{ QWaylandAdwaitaDecoration::CloseIcon, "window-close-symbolic"_L1 },
|
||||||
|
@@ -129,36 +128,29 @@
|
||||||
|
/*
|
||||||
|
* Titlebar and window border
|
||||||
|
*/
|
||||||
|
- const int titleBarWidth = surfaceRect.width() - margins().left() - margins().right();
|
||||||
|
QPainterPath path;
|
||||||
|
+ const QPointF topLeft = { margins(ShadowsOnly).left() + 0.5,
|
||||||
|
+ margins(ShadowsOnly).top() - 0.5 };
|
||||||
|
+ const int titleBarWidth = surfaceRect.width() - margins(ShadowsOnly).left()
|
||||||
|
+ - margins(ShadowsOnly).right() - 0.5;
|
||||||
|
+ const int borderRectHeight =
|
||||||
|
+ surfaceRect.height() - margins().top() - margins().bottom() + 0.5;
|
||||||
|
|
||||||
|
// Maximized or tiled won't have rounded corners
|
||||||
|
if (waylandWindow()->windowStates() & Qt::WindowMaximized
|
||||||
|
|| waylandWindow()->toplevelWindowTilingStates() != QWaylandWindow::WindowNoState)
|
||||||
|
- path.addRect(margins().left(), margins().bottom(), titleBarWidth, margins().top());
|
||||||
|
+ path.addRect(QRectF(topLeft, QSizeF(titleBarWidth, margins().top())));
|
||||||
|
else
|
||||||
|
- path.addRoundedRect(margins().left(), margins().bottom(), titleBarWidth,
|
||||||
|
- margins().top() + ceCornerRadius, ceCornerRadius, ceCornerRadius);
|
||||||
|
+ path.addRoundedRect(QRectF(topLeft, QSizeF(titleBarWidth, margins().top() + ceCornerRadius)),
|
||||||
|
+ ceCornerRadius, ceCornerRadius);
|
||||||
|
|
||||||
|
p.save();
|
||||||
|
p.setPen(color(Border));
|
||||||
|
p.fillPath(path.simplified(), color(Background));
|
||||||
|
p.drawPath(path);
|
||||||
|
- p.drawRect(margins().left(), margins().top(), titleBarWidth, surfaceRect.height() - margins().top() - margins().bottom());
|
||||||
|
+ p.drawRect(QRectF(topLeft.x(), margins().top(), titleBarWidth, borderRectHeight));
|
||||||
|
p.restore();
|
||||||
|
|
||||||
|
-
|
||||||
|
- /*
|
||||||
|
- * Titlebar separator
|
||||||
|
- */
|
||||||
|
- p.save();
|
||||||
|
- p.setPen(color(Border));
|
||||||
|
- p.drawLine(QLineF(margins().left(), margins().top() - ceTitlebarSeperatorWidth,
|
||||||
|
- surfaceRect.width() - margins().right(),
|
||||||
|
- margins().top() - ceTitlebarSeperatorWidth));
|
||||||
|
- p.restore();
|
||||||
|
-
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Window title
|
||||||
|
*/
|
260
qtwayland-client-redo-management-of-tablet-proxies.patch
Normal file
260
qtwayland-client-redo-management-of-tablet-proxies.patch
Normal file
@ -0,0 +1,260 @@
|
|||||||
|
From 24002ac6cbd01dbde4944b63c1f7c87ed2bd72b5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Redondo <qt@david-redondo.de>
|
||||||
|
Date: Fri, 22 Nov 2024 10:56:41 +0100
|
||||||
|
Subject: [PATCH] client: Redo management of tablet object proxies
|
||||||
|
|
||||||
|
Since 5af836aea3bb91a9f388e565415dc33b2fde4577 tools and pads can sometimes
|
||||||
|
be parented to tablets. When a tablet is unplugged sometimes the remove
|
||||||
|
event for the tablet can be sent before the remove events for the pad.
|
||||||
|
Deleting the tablet will also delete the pad but not the pad proxy,
|
||||||
|
resulting in a crash when the pad remove event is received.
|
||||||
|
This moves destruction of the wayland proxies which makes everything much
|
||||||
|
simpler as not every location that deletes those objects needs to call
|
||||||
|
destroy and fixes the described problem.
|
||||||
|
|
||||||
|
Change-Id: I0aaeda3d3996251e411229b5e97aa1ce0bce43ac
|
||||||
|
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||||
|
(cherry picked from commit 1f76835d1805d9b1c25c136a19c1101f19cc2259)
|
||||||
|
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
|
||||||
|
---
|
||||||
|
src/client/qwaylandtabletv2.cpp | 24 +++++----
|
||||||
|
src/client/qwaylandtabletv2_p.h | 4 +-
|
||||||
|
tests/auto/client/tabletv2/tst_tabletv2.cpp | 60 +++++++++++++++++----
|
||||||
|
3 files changed, 67 insertions(+), 21 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/client/qwaylandtabletv2.cpp b/src/client/qwaylandtabletv2.cpp
|
||||||
|
index ea2b225..67cee3b 100644
|
||||||
|
--- a/src/client/qwaylandtabletv2.cpp
|
||||||
|
+++ b/src/client/qwaylandtabletv2.cpp
|
||||||
|
@@ -187,12 +187,6 @@ QWaylandTabletSeatV2::QWaylandTabletSeatV2(QWaylandTabletManagerV2 *manager, QWa
|
||||||
|
|
||||||
|
QWaylandTabletSeatV2::~QWaylandTabletSeatV2()
|
||||||
|
{
|
||||||
|
- for (auto *tablet : m_tablets)
|
||||||
|
- tablet->destroy();
|
||||||
|
- for (auto *tool : m_tools)
|
||||||
|
- tool->destroy();
|
||||||
|
- for (auto *pad : m_pads)
|
||||||
|
- pad->destroy();
|
||||||
|
qDeleteAll(m_tablets);
|
||||||
|
qDeleteAll(m_tools);
|
||||||
|
qDeleteAll(m_deadTools);
|
||||||
|
@@ -254,6 +248,11 @@ QWaylandTabletV2::QWaylandTabletV2(::zwp_tablet_v2 *tablet, const QString &seatN
|
||||||
|
d->seatName = seatName;
|
||||||
|
}
|
||||||
|
|
||||||
|
+QWaylandTabletV2::~QWaylandTabletV2()
|
||||||
|
+{
|
||||||
|
+ destroy();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void QWaylandTabletV2::zwp_tablet_v2_name(const QString &name)
|
||||||
|
{
|
||||||
|
QPointingDevicePrivate *d = QPointingDevicePrivate::get(this);
|
||||||
|
@@ -292,7 +291,6 @@ void QWaylandTabletSeatV2::toolRemoved(QWaylandTabletToolV2 *tool)
|
||||||
|
|
||||||
|
void QWaylandTabletV2::zwp_tablet_v2_removed()
|
||||||
|
{
|
||||||
|
- destroy();
|
||||||
|
deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -316,7 +314,10 @@ QWaylandTabletToolV2::QWaylandTabletToolV2(QWaylandTabletSeatV2 *tabletSeat, ::z
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
-QWaylandTabletToolV2::~QWaylandTabletToolV2() = default;
|
||||||
|
+QWaylandTabletToolV2::~QWaylandTabletToolV2()
|
||||||
|
+{
|
||||||
|
+ destroy();
|
||||||
|
+}
|
||||||
|
|
||||||
|
void QWaylandTabletToolV2::zwp_tablet_tool_v2_type(uint32_t tool_type)
|
||||||
|
{
|
||||||
|
@@ -410,7 +411,6 @@ void QWaylandTabletToolV2::zwp_tablet_tool_v2_done()
|
||||||
|
|
||||||
|
void QWaylandTabletToolV2::zwp_tablet_tool_v2_removed()
|
||||||
|
{
|
||||||
|
- destroy();
|
||||||
|
m_tabletSeat->toolRemoved(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -602,6 +602,11 @@ QWaylandTabletPadV2::QWaylandTabletPadV2(::zwp_tablet_pad_v2 *pad)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
+QWaylandTabletPadV2::~QWaylandTabletPadV2()
|
||||||
|
+{
|
||||||
|
+ destroy();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void QWaylandTabletPadV2::zwp_tablet_pad_v2_path(const QString &path)
|
||||||
|
{
|
||||||
|
QPointingDevicePrivate *d = QPointingDevicePrivate::get(this);
|
||||||
|
@@ -621,7 +626,6 @@ void QWaylandTabletPadV2::zwp_tablet_pad_v2_done()
|
||||||
|
|
||||||
|
void QWaylandTabletPadV2::zwp_tablet_pad_v2_removed()
|
||||||
|
{
|
||||||
|
- destroy();
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/client/qwaylandtabletv2_p.h b/src/client/qwaylandtabletv2_p.h
|
||||||
|
index 94b687e..f0d7cd1 100644
|
||||||
|
--- a/src/client/qwaylandtabletv2_p.h
|
||||||
|
+++ b/src/client/qwaylandtabletv2_p.h
|
||||||
|
@@ -83,6 +83,7 @@ class Q_WAYLANDCLIENT_EXPORT QWaylandTabletV2 : public QPointingDevice, public Q
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit QWaylandTabletV2(::zwp_tablet_v2 *tablet, const QString &seatName);
|
||||||
|
+ ~QWaylandTabletV2();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// callbacks which act as setters
|
||||||
|
@@ -98,7 +99,7 @@ class Q_WAYLANDCLIENT_EXPORT QWaylandTabletToolV2 : public QPointingDevice, publ
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
QWaylandTabletToolV2(QWaylandTabletSeatV2 *tabletSeat, ::zwp_tablet_tool_v2 *tool);
|
||||||
|
- ~QWaylandTabletToolV2() override;
|
||||||
|
+ ~QWaylandTabletToolV2();
|
||||||
|
|
||||||
|
void updateCursor();
|
||||||
|
|
||||||
|
@@ -181,6 +182,7 @@ class Q_WAYLANDCLIENT_EXPORT QWaylandTabletPadV2 : public QPointingDevice, publi
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit QWaylandTabletPadV2(::zwp_tablet_pad_v2 *pad);
|
||||||
|
+ ~QWaylandTabletPadV2();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// void zwp_tablet_pad_v2_group(struct ::zwp_tablet_pad_group_v2 *pad_group) override;
|
||||||
|
diff --git a/tests/auto/client/tabletv2/tst_tabletv2.cpp b/tests/auto/client/tabletv2/tst_tabletv2.cpp
|
||||||
|
index 85df099..d5c2ccb 100644
|
||||||
|
--- a/tests/auto/client/tabletv2/tst_tabletv2.cpp
|
||||||
|
+++ b/tests/auto/client/tabletv2/tst_tabletv2.cpp
|
||||||
|
@@ -186,9 +186,9 @@ public:
|
||||||
|
QList<TabletV2 *> m_tablets;
|
||||||
|
QList<TabletV2 *> m_tabletsWaitingForDestroy;
|
||||||
|
QList<TabletToolV2 *> m_tools;
|
||||||
|
- QList<TabletToolV2 *> m_toolsWaitingForDestroy;
|
||||||
|
+ QList<TabletToolV2::Resource *> m_toolsWaitingForDestroy;
|
||||||
|
QList<TabletPadV2 *> m_pads;
|
||||||
|
- QList<TabletPadV2 *> m_padsWaitingForDestroy;
|
||||||
|
+ QList<TabletPadV2::Resource *> m_padsWaitingForDestroy;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void zwp_tablet_seat_v2_bind_resource(Resource *resource) override
|
||||||
|
@@ -274,11 +274,12 @@ void TabletV2::zwp_tablet_v2_destroy(QtWaylandServer::zwp_tablet_v2::Resource *r
|
||||||
|
|
||||||
|
void TabletToolV2::sendRemoved()
|
||||||
|
{
|
||||||
|
- for (auto *resource : resourceMap())
|
||||||
|
+ for (auto *resource : resourceMap()) {
|
||||||
|
zwp_tablet_tool_v2_send_removed(resource->handle);
|
||||||
|
+ m_tabletSeat->m_toolsWaitingForDestroy.append(resource);
|
||||||
|
+ }
|
||||||
|
bool removed = m_tabletSeat->m_tools.removeOne(this);
|
||||||
|
QVERIFY(removed);
|
||||||
|
- m_tabletSeat->m_toolsWaitingForDestroy.append(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint TabletToolV2::sendProximityIn(TabletV2 *tablet, Surface *surface)
|
||||||
|
@@ -333,26 +334,25 @@ uint TabletToolV2::sendFrame()
|
||||||
|
void TabletToolV2::zwp_tablet_tool_v2_destroy(QtWaylandServer::zwp_tablet_tool_v2::Resource *resource)
|
||||||
|
{
|
||||||
|
if (m_tabletSeat) {
|
||||||
|
- bool removed = m_tabletSeat->m_toolsWaitingForDestroy.removeOne(this);
|
||||||
|
- QVERIFY(removed);
|
||||||
|
+ m_tabletSeat->m_toolsWaitingForDestroy.removeOne(resource);
|
||||||
|
}
|
||||||
|
wl_resource_destroy(resource->handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabletPadV2::sendRemoved()
|
||||||
|
{
|
||||||
|
- for (auto *resource : resourceMap())
|
||||||
|
+ for (auto *resource : resourceMap()) {
|
||||||
|
zwp_tablet_pad_v2_send_removed(resource->handle);
|
||||||
|
+ m_tabletSeat->m_padsWaitingForDestroy.append(resource);
|
||||||
|
+ }
|
||||||
|
bool removed = m_tabletSeat->m_pads.removeOne(this);
|
||||||
|
QVERIFY(removed);
|
||||||
|
- m_tabletSeat->m_padsWaitingForDestroy.append(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TabletPadV2::zwp_tablet_pad_v2_destroy(QtWaylandServer::zwp_tablet_pad_v2::Resource *resource)
|
||||||
|
{
|
||||||
|
if (m_tabletSeat) {
|
||||||
|
- bool removed = m_tabletSeat->m_padsWaitingForDestroy.removeOne(this);
|
||||||
|
- QVERIFY(removed);
|
||||||
|
+ m_tabletSeat->m_padsWaitingForDestroy.removeOne(resource);
|
||||||
|
}
|
||||||
|
wl_resource_destroy(resource->handle);
|
||||||
|
}
|
||||||
|
@@ -405,6 +405,8 @@ private slots:
|
||||||
|
void destroysTablet();
|
||||||
|
void destroysTool();
|
||||||
|
void destroysPad();
|
||||||
|
+ void removeTabletBeforeTool();
|
||||||
|
+ void removeTabletBeforePad();
|
||||||
|
void proximityEvents();
|
||||||
|
void moveEvent();
|
||||||
|
void pointerType_data();
|
||||||
|
@@ -502,12 +504,14 @@ void tst_tabletv2::destroysTool()
|
||||||
|
{
|
||||||
|
QCOMPOSITOR_TRY_VERIFY(tabletSeat());
|
||||||
|
exec([&] {
|
||||||
|
+ tabletSeat()->addTablet();
|
||||||
|
tabletSeat()->addTool();
|
||||||
|
});
|
||||||
|
QCOMPOSITOR_TRY_VERIFY(tabletTool());
|
||||||
|
|
||||||
|
exec([&] {
|
||||||
|
tabletTool()->sendRemoved();
|
||||||
|
+ tablet()->sendRemoved();
|
||||||
|
});
|
||||||
|
|
||||||
|
QCOMPOSITOR_TRY_VERIFY(!tabletTool());
|
||||||
|
@@ -530,6 +534,42 @@ void tst_tabletv2::destroysPad()
|
||||||
|
QCOMPOSITOR_TRY_VERIFY(tabletSeat()->m_padsWaitingForDestroy.empty());
|
||||||
|
}
|
||||||
|
|
||||||
|
+void tst_tabletv2::removeTabletBeforeTool()
|
||||||
|
+{
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletSeat());
|
||||||
|
+ exec([&] {
|
||||||
|
+ tabletSeat()->addTablet();
|
||||||
|
+ tabletSeat()->addTool();
|
||||||
|
+ });
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tablet());
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletTool());
|
||||||
|
+
|
||||||
|
+ exec([&] { tablet()->sendRemoved(); });
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletSeat()->m_tabletsWaitingForDestroy.empty());
|
||||||
|
+
|
||||||
|
+ exec([&] { tabletTool()->sendRemoved(); });
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(!tabletTool());
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletSeat()->m_toolsWaitingForDestroy.empty());
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void tst_tabletv2::removeTabletBeforePad()
|
||||||
|
+{
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletSeat());
|
||||||
|
+ exec([&] {
|
||||||
|
+ tabletSeat()->addTablet();
|
||||||
|
+ tabletSeat()->addPad();
|
||||||
|
+ });
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tablet());
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletPad());
|
||||||
|
+
|
||||||
|
+ exec([&] { tablet()->sendRemoved(); });
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletSeat()->m_tabletsWaitingForDestroy.empty());
|
||||||
|
+
|
||||||
|
+ exec([&] { tabletPad()->sendRemoved(); });
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(!tabletPad());
|
||||||
|
+ QCOMPOSITOR_TRY_VERIFY(tabletSeat()->m_padsWaitingForDestroy.empty());
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void tst_tabletv2::proximityEvents()
|
||||||
|
{
|
||||||
|
ProximityFilter filter;
|
491
qtwayland-update-wayland-xml-to-version-1.23.0.patch
Normal file
491
qtwayland-update-wayland-xml-to-version-1.23.0.patch
Normal file
@ -0,0 +1,491 @@
|
|||||||
|
From c2f61bc47baacf2e6a44c6c3c4e4cbf0abfa4095 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Liang Qi <liang.qi@qt.io>
|
||||||
|
Date: Wed, 3 Jul 2024 15:06:09 +0200
|
||||||
|
Subject: Update wayland.xml to version 1.23.0
|
||||||
|
|
||||||
|
This updates only the protocol definition, implementations
|
||||||
|
will need additional commits to opt into using them.
|
||||||
|
|
||||||
|
Change-Id: I5999e6dd75dfff7d904981fb1545d58c8b38ceb0
|
||||||
|
Reviewed-by: David Edmundson <davidedmundson@kde.org>
|
||||||
|
---
|
||||||
|
src/3rdparty/protocol/wayland.xml | 215 +++++++++++++++++++++++++++-----------
|
||||||
|
1 file changed, 156 insertions(+), 59 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/3rdparty/protocol/wayland/wayland.xml b/src/3rdparty/protocol/wayland/wayland.xml
|
||||||
|
index 10e039d6e..9418c62f3 100644
|
||||||
|
--- a/src/3rdparty/protocol/wayland/wayland.xml
|
||||||
|
+++ b/src/3rdparty/protocol/wayland/wayland.xml
|
||||||
|
@@ -46,7 +46,7 @@
|
||||||
|
compositor after the callback is fired and as such the client must not
|
||||||
|
attempt to use it after that point.
|
||||||
|
|
||||||
|
- The callback_data passed in the callback is the event serial.
|
||||||
|
+ The callback_data passed in the callback is undefined and should be ignored.
|
||||||
|
</description>
|
||||||
|
<arg name="callback" type="new_id" interface="wl_callback"
|
||||||
|
summary="callback object for the sync request"/>
|
||||||
|
@@ -212,7 +212,7 @@
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
- <interface name="wl_shm_pool" version="1">
|
||||||
|
+ <interface name="wl_shm_pool" version="2">
|
||||||
|
<description summary="a shared memory pool">
|
||||||
|
The wl_shm_pool object encapsulates a piece of memory shared
|
||||||
|
between the compositor and client. Through the wl_shm_pool
|
||||||
|
@@ -262,17 +262,17 @@
|
||||||
|
created, but using the new size. This request can only be
|
||||||
|
used to make the pool bigger.
|
||||||
|
|
||||||
|
- This request only changes the amount of bytes that are mmapped
|
||||||
|
- by the server and does not touch the file corresponding to the
|
||||||
|
- file descriptor passed at creation time. It is the client's
|
||||||
|
- responsibility to ensure that the file is at least as big as
|
||||||
|
- the new pool size.
|
||||||
|
+ This request only changes the amount of bytes that are mmapped
|
||||||
|
+ by the server and does not touch the file corresponding to the
|
||||||
|
+ file descriptor passed at creation time. It is the client's
|
||||||
|
+ responsibility to ensure that the file is at least as big as
|
||||||
|
+ the new pool size.
|
||||||
|
</description>
|
||||||
|
<arg name="size" type="int" summary="new size of the pool, in bytes"/>
|
||||||
|
</request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
- <interface name="wl_shm" version="1">
|
||||||
|
+ <interface name="wl_shm" version="2">
|
||||||
|
<description summary="shared memory support">
|
||||||
|
A singleton global object that provides support for shared
|
||||||
|
memory.
|
||||||
|
@@ -419,6 +419,21 @@
|
||||||
|
<entry name="xbgr16161616" value="0x38344258" summary="[63:0] x:B:G:R 16:16:16:16 little endian"/>
|
||||||
|
<entry name="argb16161616" value="0x38345241" summary="[63:0] A:R:G:B 16:16:16:16 little endian"/>
|
||||||
|
<entry name="abgr16161616" value="0x38344241" summary="[63:0] A:B:G:R 16:16:16:16 little endian"/>
|
||||||
|
+ <entry name="c1" value="0x20203143" summary="[7:0] C0:C1:C2:C3:C4:C5:C6:C7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
|
||||||
|
+ <entry name="c2" value="0x20203243" summary="[7:0] C0:C1:C2:C3 2:2:2:2 four pixels/byte"/>
|
||||||
|
+ <entry name="c4" value="0x20203443" summary="[7:0] C0:C1 4:4 two pixels/byte"/>
|
||||||
|
+ <entry name="d1" value="0x20203144" summary="[7:0] D0:D1:D2:D3:D4:D5:D6:D7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
|
||||||
|
+ <entry name="d2" value="0x20203244" summary="[7:0] D0:D1:D2:D3 2:2:2:2 four pixels/byte"/>
|
||||||
|
+ <entry name="d4" value="0x20203444" summary="[7:0] D0:D1 4:4 two pixels/byte"/>
|
||||||
|
+ <entry name="d8" value="0x20203844" summary="[7:0] D"/>
|
||||||
|
+ <entry name="r1" value="0x20203152" summary="[7:0] R0:R1:R2:R3:R4:R5:R6:R7 1:1:1:1:1:1:1:1 eight pixels/byte"/>
|
||||||
|
+ <entry name="r2" value="0x20203252" summary="[7:0] R0:R1:R2:R3 2:2:2:2 four pixels/byte"/>
|
||||||
|
+ <entry name="r4" value="0x20203452" summary="[7:0] R0:R1 4:4 two pixels/byte"/>
|
||||||
|
+ <entry name="r10" value="0x20303152" summary="[15:0] x:R 6:10 little endian"/>
|
||||||
|
+ <entry name="r12" value="0x20323152" summary="[15:0] x:R 4:12 little endian"/>
|
||||||
|
+ <entry name="avuy8888" value="0x59555641" summary="[31:0] A:Cr:Cb:Y 8:8:8:8 little endian"/>
|
||||||
|
+ <entry name="xvuy8888" value="0x59555658" summary="[31:0] X:Cr:Cb:Y 8:8:8:8 little endian"/>
|
||||||
|
+ <entry name="p030" value="0x30333050" summary="2x2 subsampled Cr:Cb plane 10 bits per channel packed"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="create_pool">
|
||||||
|
@@ -442,6 +457,17 @@
|
||||||
|
</description>
|
||||||
|
<arg name="format" type="uint" enum="format" summary="buffer pixel format"/>
|
||||||
|
</event>
|
||||||
|
+
|
||||||
|
+ <!-- Version 2 additions -->
|
||||||
|
+
|
||||||
|
+ <request name="release" type="destructor" since="2">
|
||||||
|
+ <description summary="release the shm object">
|
||||||
|
+ Using this request a client can tell the server that it is not going to
|
||||||
|
+ use the shm object anymore.
|
||||||
|
+
|
||||||
|
+ Objects created via this interface remain unaffected.
|
||||||
|
+ </description>
|
||||||
|
+ </request>
|
||||||
|
</interface>
|
||||||
|
|
||||||
|
<interface name="wl_buffer" version="1">
|
||||||
|
@@ -453,9 +479,11 @@
|
||||||
|
client provides and updates the contents is defined by the buffer factory
|
||||||
|
interface.
|
||||||
|
|
||||||
|
- If the buffer uses a format that has an alpha channel, the alpha channel
|
||||||
|
- is assumed to be premultiplied in the color channels unless otherwise
|
||||||
|
- specified.
|
||||||
|
+ Color channels are assumed to be electrical rather than optical (in other
|
||||||
|
+ words, encoded with a transfer function) unless otherwise specified. If
|
||||||
|
+ the buffer uses a format that has an alpha channel, the alpha channel is
|
||||||
|
+ assumed to be premultiplied into the electrical color channel values
|
||||||
|
+ (after transfer function encoding) unless otherwise specified.
|
||||||
|
|
||||||
|
Note, because wl_buffer objects are created from multiple independent
|
||||||
|
factory interfaces, the wl_buffer interface is frozen at version 1.
|
||||||
|
@@ -847,6 +875,7 @@
|
||||||
|
|
||||||
|
<enum name="error">
|
||||||
|
<entry name="role" value="0" summary="given wl_surface has another role"/>
|
||||||
|
+ <entry name="used_source" value="1" summary="source has already been used"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="start_drag">
|
||||||
|
@@ -868,7 +897,7 @@
|
||||||
|
The icon surface is an optional (can be NULL) surface that
|
||||||
|
provides an icon to be moved around with the cursor. Initially,
|
||||||
|
the top-left corner of the icon surface is placed at the cursor
|
||||||
|
- hotspot, but subsequent wl_surface.attach request can move the
|
||||||
|
+ hotspot, but subsequent wl_surface.offset requests can move the
|
||||||
|
relative position. Attach requests must be confirmed with
|
||||||
|
wl_surface.commit as usual. The icon surface is given the role of
|
||||||
|
a drag-and-drop icon. If the icon surface already has another role,
|
||||||
|
@@ -876,6 +905,10 @@
|
||||||
|
|
||||||
|
The input region is ignored for wl_surfaces with the role of a
|
||||||
|
drag-and-drop icon.
|
||||||
|
+
|
||||||
|
+ The given source may not be used in any further set_selection or
|
||||||
|
+ start_drag requests. Attempting to reuse a previously-used source
|
||||||
|
+ may send a used_source error.
|
||||||
|
</description>
|
||||||
|
<arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the eventual transfer"/>
|
||||||
|
<arg name="origin" type="object" interface="wl_surface" summary="surface where the drag originates"/>
|
||||||
|
@@ -889,6 +922,10 @@
|
||||||
|
to the data from the source on behalf of the client.
|
||||||
|
|
||||||
|
To unset the selection, set the source to NULL.
|
||||||
|
+
|
||||||
|
+ The given source may not be used in any further set_selection or
|
||||||
|
+ start_drag requests. Attempting to reuse a previously-used source
|
||||||
|
+ may send a used_source error.
|
||||||
|
</description>
|
||||||
|
<arg name="source" type="object" interface="wl_data_source" allow-null="true" summary="data source for the selection"/>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the event that triggered this request"/>
|
||||||
|
@@ -1411,7 +1448,7 @@
|
||||||
|
<entry name="invalid_size" value="2" summary="buffer size is invalid"/>
|
||||||
|
<entry name="invalid_offset" value="3" summary="buffer offset is invalid"/>
|
||||||
|
<entry name="defunct_role_object" value="4"
|
||||||
|
- summary="surface was destroyed before its role object"/>
|
||||||
|
+ summary="surface was destroyed before its role object"/>
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
@@ -1440,9 +1477,9 @@
|
||||||
|
|
||||||
|
When the bound wl_surface version is 5 or higher, passing any
|
||||||
|
non-zero x or y is a protocol violation, and will result in an
|
||||||
|
- 'invalid_offset' error being raised. The x and y arguments are ignored
|
||||||
|
- and do not change the pending state. To achieve equivalent semantics,
|
||||||
|
- use wl_surface.offset.
|
||||||
|
+ 'invalid_offset' error being raised. The x and y arguments are ignored
|
||||||
|
+ and do not change the pending state. To achieve equivalent semantics,
|
||||||
|
+ use wl_surface.offset.
|
||||||
|
|
||||||
|
Surface contents are double-buffered state, see wl_surface.commit.
|
||||||
|
|
||||||
|
@@ -1479,6 +1516,13 @@
|
||||||
|
|
||||||
|
If wl_surface.attach is sent with a NULL wl_buffer, the
|
||||||
|
following wl_surface.commit will remove the surface content.
|
||||||
|
+
|
||||||
|
+ If a pending wl_buffer has been destroyed, the result is not specified.
|
||||||
|
+ Many compositors are known to remove the surface content on the following
|
||||||
|
+ wl_surface.commit, but this behaviour is not universal. Clients seeking to
|
||||||
|
+ maximise compatibility should not destroy pending buffers and should
|
||||||
|
+ ensure that they explicitly remove content from surfaces, even after
|
||||||
|
+ destroying buffers.
|
||||||
|
</description>
|
||||||
|
<arg name="buffer" type="object" interface="wl_buffer" allow-null="true"
|
||||||
|
summary="buffer of surface contents"/>
|
||||||
|
@@ -1618,16 +1662,18 @@
|
||||||
|
<description summary="commit pending surface state">
|
||||||
|
Surface state (input, opaque, and damage regions, attached buffers,
|
||||||
|
etc.) is double-buffered. Protocol requests modify the pending state,
|
||||||
|
- as opposed to the current state in use by the compositor. A commit
|
||||||
|
- request atomically applies all pending state, replacing the current
|
||||||
|
- state. After commit, the new pending state is as documented for each
|
||||||
|
- related request.
|
||||||
|
+ as opposed to the active state in use by the compositor.
|
||||||
|
|
||||||
|
- On commit, a pending wl_buffer is applied first, and all other state
|
||||||
|
- second. This means that all coordinates in double-buffered state are
|
||||||
|
- relative to the new wl_buffer coming into use, except for
|
||||||
|
- wl_surface.attach itself. If there is no pending wl_buffer, the
|
||||||
|
- coordinates are relative to the current surface contents.
|
||||||
|
+ A commit request atomically creates a content update from the pending
|
||||||
|
+ state, even if the pending state has not been touched. The content
|
||||||
|
+ update is placed in a queue until it becomes active. After commit, the
|
||||||
|
+ new pending state is as documented for each related request.
|
||||||
|
+
|
||||||
|
+ When the content update is applied, the wl_buffer is applied before all
|
||||||
|
+ other state. This means that all coordinates in double-buffered state
|
||||||
|
+ are relative to the newly attached wl_buffers, except for
|
||||||
|
+ wl_surface.attach itself. If there is no newly attached wl_buffer, the
|
||||||
|
+ coordinates are relative to the previous content update.
|
||||||
|
|
||||||
|
All requests that need a commit to become effective are documented
|
||||||
|
to affect double-buffered state.
|
||||||
|
@@ -1666,10 +1712,12 @@
|
||||||
|
|
||||||
|
<request name="set_buffer_transform" since="2">
|
||||||
|
<description summary="sets the buffer transformation">
|
||||||
|
- This request sets an optional transformation on how the compositor
|
||||||
|
- interprets the contents of the buffer attached to the surface. The
|
||||||
|
- accepted values for the transform parameter are the values for
|
||||||
|
- wl_output.transform.
|
||||||
|
+ This request sets the transformation that the client has already applied
|
||||||
|
+ to the content of the buffer. The accepted values for the transform
|
||||||
|
+ parameter are the values for wl_output.transform.
|
||||||
|
+
|
||||||
|
+ The compositor applies the inverse of this transformation whenever it
|
||||||
|
+ uses the buffer contents.
|
||||||
|
|
||||||
|
Buffer transform is double-buffered state, see wl_surface.commit.
|
||||||
|
|
||||||
|
@@ -1725,11 +1773,11 @@
|
||||||
|
a buffer that is larger (by a factor of scale in each dimension)
|
||||||
|
than the desired surface size.
|
||||||
|
|
||||||
|
- If scale is not positive the invalid_scale protocol error is
|
||||||
|
+ If scale is not greater than 0 the invalid_scale protocol error is
|
||||||
|
raised.
|
||||||
|
</description>
|
||||||
|
<arg name="scale" type="int"
|
||||||
|
- summary="positive scale for interpreting buffer contents"/>
|
||||||
|
+ summary="scale for interpreting buffer contents"/>
|
||||||
|
</request>
|
||||||
|
|
||||||
|
<!-- Version 4 additions -->
|
||||||
|
@@ -1802,10 +1850,15 @@
|
||||||
|
This event indicates the preferred buffer scale for this surface. It is
|
||||||
|
sent whenever the compositor's preference changes.
|
||||||
|
|
||||||
|
+ Before receiving this event the preferred buffer scale for this surface
|
||||||
|
+ is 1.
|
||||||
|
+
|
||||||
|
It is intended that scaling aware clients use this event to scale their
|
||||||
|
content and use wl_surface.set_buffer_scale to indicate the scale they
|
||||||
|
have rendered with. This allows clients to supply a higher detail
|
||||||
|
buffer.
|
||||||
|
+
|
||||||
|
+ The compositor shall emit a scale value greater than 0.
|
||||||
|
</description>
|
||||||
|
<arg name="factor" type="int" summary="preferred scaling factor"/>
|
||||||
|
</event>
|
||||||
|
@@ -1815,9 +1868,12 @@
|
||||||
|
This event indicates the preferred buffer transform for this surface.
|
||||||
|
It is sent whenever the compositor's preference changes.
|
||||||
|
|
||||||
|
- It is intended that transform aware clients use this event to apply the
|
||||||
|
- transform to their content and use wl_surface.set_buffer_transform to
|
||||||
|
- indicate the transform they have rendered with.
|
||||||
|
+ Before receiving this event the preferred buffer transform for this
|
||||||
|
+ surface is normal.
|
||||||
|
+
|
||||||
|
+ Applying this transformation to the surface buffer contents and using
|
||||||
|
+ wl_surface.set_buffer_transform might allow the compositor to use the
|
||||||
|
+ surface buffer more efficiently.
|
||||||
|
</description>
|
||||||
|
<arg name="transform" type="uint" enum="wl_output.transform"
|
||||||
|
summary="preferred transform"/>
|
||||||
|
@@ -1992,9 +2048,9 @@
|
||||||
|
where (x, y) are the coordinates of the pointer location, in
|
||||||
|
surface-local coordinates.
|
||||||
|
|
||||||
|
- On surface.attach requests to the pointer surface, hotspot_x
|
||||||
|
+ On wl_surface.offset requests to the pointer surface, hotspot_x
|
||||||
|
and hotspot_y are decremented by the x and y parameters
|
||||||
|
- passed to the request. Attach must be confirmed by
|
||||||
|
+ passed to the request. The offset must be applied by
|
||||||
|
wl_surface.commit as usual.
|
||||||
|
|
||||||
|
The hotspot can also be updated by passing the currently set
|
||||||
|
@@ -2248,7 +2304,7 @@
|
||||||
|
<arg name="axis" type="uint" enum="axis" summary="the axis stopped with this event"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
- <event name="axis_discrete" since="5">
|
||||||
|
+ <event name="axis_discrete" since="5" deprecated-since="8">
|
||||||
|
<description summary="axis click event">
|
||||||
|
Discrete step information for scroll and other axes.
|
||||||
|
|
||||||
|
@@ -2374,6 +2430,16 @@
|
||||||
|
<description summary="keyboard input device">
|
||||||
|
The wl_keyboard interface represents one or more keyboards
|
||||||
|
associated with a seat.
|
||||||
|
+
|
||||||
|
+ Each wl_keyboard has the following logical state:
|
||||||
|
+
|
||||||
|
+ - an active surface (possibly null),
|
||||||
|
+ - the keys currently logically down,
|
||||||
|
+ - the active modifiers,
|
||||||
|
+ - the active group.
|
||||||
|
+
|
||||||
|
+ By default, the active surface is null, the keys currently logically down
|
||||||
|
+ are empty, the active modifiers and the active group are 0.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<enum name="keymap_format">
|
||||||
|
@@ -2408,10 +2474,15 @@
|
||||||
|
|
||||||
|
The compositor must send the wl_keyboard.modifiers event after this
|
||||||
|
event.
|
||||||
|
+
|
||||||
|
+ In the wl_keyboard logical state, this event sets the active surface to
|
||||||
|
+ the surface argument and the keys currently logically down to the keys
|
||||||
|
+ in the keys argument. The compositor must not send this event if the
|
||||||
|
+ wl_keyboard already had an active surface immediately before this event.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the enter event"/>
|
||||||
|
<arg name="surface" type="object" interface="wl_surface" summary="surface gaining keyboard focus"/>
|
||||||
|
- <arg name="keys" type="array" summary="the currently pressed keys"/>
|
||||||
|
+ <arg name="keys" type="array" summary="the keys currently logically down"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<event name="leave">
|
||||||
|
@@ -2422,8 +2493,10 @@
|
||||||
|
The leave notification is sent before the enter notification
|
||||||
|
for the new focus.
|
||||||
|
|
||||||
|
- After this event client must assume that all keys, including modifiers,
|
||||||
|
- are lifted and also it must stop key repeating if there's some going on.
|
||||||
|
+ In the wl_keyboard logical state, this event resets all values to their
|
||||||
|
+ defaults. The compositor must not send this event if the active surface
|
||||||
|
+ of the wl_keyboard was not equal to the surface argument immediately
|
||||||
|
+ before this event.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the leave event"/>
|
||||||
|
<arg name="surface" type="object" interface="wl_surface" summary="surface that lost keyboard focus"/>
|
||||||
|
@@ -2448,6 +2521,15 @@
|
||||||
|
|
||||||
|
If this event produces a change in modifiers, then the resulting
|
||||||
|
wl_keyboard.modifiers event must be sent after this event.
|
||||||
|
+
|
||||||
|
+ In the wl_keyboard logical state, this event adds the key to the keys
|
||||||
|
+ currently logically down (if the state argument is pressed) or removes
|
||||||
|
+ the key from the keys currently logically down (if the state argument is
|
||||||
|
+ released). The compositor must not send this event if the wl_keyboard
|
||||||
|
+ did not have an active surface immediately before this event. The
|
||||||
|
+ compositor must not send this event if state is pressed (resp. released)
|
||||||
|
+ and the key was already logically down (resp. was not logically down)
|
||||||
|
+ immediately before this event.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the key event"/>
|
||||||
|
<arg name="time" type="uint" summary="timestamp with millisecond granularity"/>
|
||||||
|
@@ -2459,6 +2541,17 @@
|
||||||
|
<description summary="modifier and group state">
|
||||||
|
Notifies clients that the modifier and/or group state has
|
||||||
|
changed, and it should update its local state.
|
||||||
|
+
|
||||||
|
+ The compositor may send this event without a surface of the client
|
||||||
|
+ having keyboard focus, for example to tie modifier information to
|
||||||
|
+ pointer focus instead. If a modifier event with pressed modifiers is sent
|
||||||
|
+ without a prior enter event, the client can assume the modifier state is
|
||||||
|
+ valid until it receives the next wl_keyboard.modifiers event. In order to
|
||||||
|
+ reset the modifier state again, the compositor can send a
|
||||||
|
+ wl_keyboard.modifiers event with no pressed modifiers.
|
||||||
|
+
|
||||||
|
+ In the wl_keyboard logical state, this event updates the modifiers and
|
||||||
|
+ group.
|
||||||
|
</description>
|
||||||
|
<arg name="serial" type="uint" summary="serial number of the modifiers event"/>
|
||||||
|
<arg name="mods_depressed" type="uint" summary="depressed modifiers"/>
|
||||||
|
@@ -2566,6 +2659,8 @@
|
||||||
|
currently active on this client's surface. The client is
|
||||||
|
responsible for finalizing the touch points, future touch points on
|
||||||
|
this surface may reuse the touch point ID.
|
||||||
|
+
|
||||||
|
+ No frame event is required after the cancel event.
|
||||||
|
</description>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
@@ -2665,10 +2760,9 @@
|
||||||
|
</enum>
|
||||||
|
|
||||||
|
<enum name="transform">
|
||||||
|
- <description summary="transform from framebuffer to output">
|
||||||
|
- This describes the transform that a compositor will apply to a
|
||||||
|
- surface to compensate for the rotation or mirroring of an
|
||||||
|
- output device.
|
||||||
|
+ <description summary="transformation applied to buffer contents">
|
||||||
|
+ This describes transformations that clients and compositors apply to
|
||||||
|
+ buffer contents.
|
||||||
|
|
||||||
|
The flipped values correspond to an initial flip around a
|
||||||
|
vertical axis followed by rotation.
|
||||||
|
@@ -2700,6 +2794,10 @@
|
||||||
|
The geometry event will be followed by a done event (starting from
|
||||||
|
version 2).
|
||||||
|
|
||||||
|
+ Clients should use wl_surface.preferred_buffer_transform instead of the
|
||||||
|
+ transform advertised by this event to find the preferred buffer
|
||||||
|
+ transform to use for a surface.
|
||||||
|
+
|
||||||
|
Note: wl_output only advertises partial information about the output
|
||||||
|
position and identification. Some compositors, for instance those not
|
||||||
|
implementing a desktop-style output layout or those exposing virtual
|
||||||
|
@@ -2722,7 +2820,7 @@
|
||||||
|
<arg name="model" type="string"
|
||||||
|
summary="textual description of the model"/>
|
||||||
|
<arg name="transform" type="int" enum="transform"
|
||||||
|
- summary="transform that maps framebuffer to output"/>
|
||||||
|
+ summary="additional transformation applied to buffer contents during presentation"/>
|
||||||
|
</event>
|
||||||
|
|
||||||
|
<enum name="mode" bitfield="true">
|
||||||
|
@@ -2795,8 +2893,9 @@
|
||||||
|
This event contains scaling geometry information
|
||||||
|
that is not in the geometry event. It may be sent after
|
||||||
|
binding the output object or if the output scale changes
|
||||||
|
- later. If it is not sent, the client should assume a
|
||||||
|
- scale of 1.
|
||||||
|
+ later. The compositor will emit a non-zero, positive
|
||||||
|
+ value for scale. If it is not sent, the client should
|
||||||
|
+ assume a scale of 1.
|
||||||
|
|
||||||
|
A scale larger than 1 means that the compositor will
|
||||||
|
automatically scale surface buffers by this amount
|
||||||
|
@@ -2804,12 +2903,9 @@
|
||||||
|
displays where applications rendering at the native
|
||||||
|
resolution would be too small to be legible.
|
||||||
|
|
||||||
|
- It is intended that scaling aware clients track the
|
||||||
|
- current output of a surface, and if it is on a scaled
|
||||||
|
- output it should use wl_surface.set_buffer_scale with
|
||||||
|
- the scale of the output. That way the compositor can
|
||||||
|
- avoid scaling the surface, and the client can supply
|
||||||
|
- a higher detail image.
|
||||||
|
+ Clients should use wl_surface.preferred_buffer_scale
|
||||||
|
+ instead of this event to find the preferred buffer
|
||||||
|
+ scale to use for a surface.
|
||||||
|
|
||||||
|
The scale event will be followed by a done event.
|
||||||
|
</description>
|
||||||
|
@@ -3035,6 +3131,11 @@
|
||||||
|
|
||||||
|
If the parent wl_surface object is destroyed, the sub-surface is
|
||||||
|
unmapped.
|
||||||
|
+
|
||||||
|
+ A sub-surface never has the keyboard focus of any seat.
|
||||||
|
+
|
||||||
|
+ The wl_surface.offset request is ignored: clients must use set_position
|
||||||
|
+ instead to move the sub-surface.
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<request name="destroy" type="destructor">
|
||||||
|
@@ -3060,9 +3161,7 @@
|
||||||
|
surface area. Negative values are allowed.
|
||||||
|
|
||||||
|
The scheduled coordinates will take effect whenever the state of the
|
||||||
|
- parent surface is applied. When this happens depends on whether the
|
||||||
|
- parent surface is in synchronized mode or not. See
|
||||||
|
- wl_subsurface.set_sync and wl_subsurface.set_desync for details.
|
||||||
|
+ parent surface is applied.
|
||||||
|
|
||||||
|
If more than one set_position request is invoked by the client before
|
||||||
|
the commit of the parent surface, the position of a new request always
|
||||||
|
@@ -3085,9 +3184,7 @@
|
||||||
|
The z-order is double-buffered. Requests are handled in order and
|
||||||
|
applied immediately to a pending state. The final pending state is
|
||||||
|
copied to the active state the next time the state of the parent
|
||||||
|
- surface is applied. When this happens depends on whether the parent
|
||||||
|
- surface is in synchronized mode or not. See wl_subsurface.set_sync and
|
||||||
|
- wl_subsurface.set_desync for details.
|
||||||
|
+ surface is applied.
|
||||||
|
|
||||||
|
A new sub-surface is initially added as the top-most in the stack
|
||||||
|
of its siblings and parent.
|
||||||
|
--
|
||||||
|
cgit v1.2.3
|
||||||
|
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (qtwayland-everywhere-src-6.7.1.tar.xz) = 9128ecd32319fd2ca154cb3d52726c80f96e2c906f9cf80cd67a3f91a4db49a853948489ec712061c6ef2c5abe70cd850c37f947659199678ac1482c77485a76
|
SHA512 (qtwayland-everywhere-src-6.8.1.tar.xz) = 34885910532f6049cac09846aa4295e2ce82a1e6af2d3256391c835a406f0c6f679e9c94c06ca8921acf23036ccc747812631a91dc1f355ab20aafd8836e7312
|
||||||
|
Loading…
Reference in New Issue
Block a user