diff -Nru qtwayland-opensource-src-5.15.10/debian/changelog qtwayland-opensource-src-5.15.10/debian/changelog --- qtwayland-opensource-src-5.15.10/debian/changelog 2024-12-09 16:30:30.000000000 +0800 +++ qtwayland-opensource-src-5.15.10/debian/changelog 2025-02-27 17:25:13.000000000 +0800 @@ -1,3 +1,9 @@ +qtwayland-opensource-src (5.15.10-2ok26update1) nile; urgency=medium + + * cherry-pick form openkylin/huanghe + + -- Jie Liu <liujie01@kylinos.cn> Thu, 27 Feb 2025 17:25:13 +0800 + qtwayland-opensource-src (5.15.10-2ok26) nile; urgency=medium * Emit clipboard mode changed if datacontroldevice selection changed diff -Nru qtwayland-opensource-src-5.15.10/debian/patches/0081-update-changlog-5.15.10-2ok30.patch qtwayland-opensource-src-5.15.10/debian/patches/0081-update-changlog-5.15.10-2ok30.patch --- qtwayland-opensource-src-5.15.10/debian/patches/0081-update-changlog-5.15.10-2ok30.patch 1970-01-01 08:00:00.000000000 +0800 +++ qtwayland-opensource-src-5.15.10/debian/patches/0081-update-changlog-5.15.10-2ok30.patch 2025-02-27 17:25:13.000000000 +0800 @@ -0,0 +1,92 @@ +From: Jie Liu <liujie01@kylinos.cn> +Date: Wed, 22 Jan 2025 16:08:54 +0800 +Subject: update changlog: 5.15.10-2ok30 + +--- + src/client/qwaylandcursor.cpp | 5 +++++ + src/client/qwaylandcursor_p.h | 1 + + src/client/qwaylanddatadevice.cpp | 2 ++ + src/client/qwaylandwindow.cpp | 8 ++++++-- + src/plugins/shellintegration/ukui-shell/ukuishellsurface.cpp | 2 ++ + 5 files changed, 16 insertions(+), 2 deletions(-) + +diff --git a/src/client/qwaylandcursor.cpp b/src/client/qwaylandcursor.cpp +index e4eca9d..682d4ae 100644 +--- a/src/client/qwaylandcursor.cpp ++++ b/src/client/qwaylandcursor.cpp +@@ -286,6 +286,11 @@ void QWaylandCursor::setPos(const QPoint &pos) + qCWarning(lcQpaWayland) << "Setting cursor position is not possible on wayland"; + } + ++void QWaylandCursor::updateDragCursorPos(const QPoint &pos) ++{ ++ mLastPos = pos; ++} ++ + } // namespace QtWaylandClient + + QT_END_NAMESPACE +diff --git a/src/client/qwaylandcursor_p.h b/src/client/qwaylandcursor_p.h +index 751ffa6..a5e4231 100644 +--- a/src/client/qwaylandcursor_p.h ++++ b/src/client/qwaylandcursor_p.h +@@ -127,6 +127,7 @@ public: + void pointerEvent(const QMouseEvent &event) override; + QPoint pos() const override; + void setPos(const QPoint &pos) override; ++ void updateDragCursorPos(const QPoint &pos); + + static QSharedPointer<QWaylandBuffer> cursorBitmapBuffer(QWaylandDisplay *display, const QCursor *cursor); + +diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp +index e3e60ed..7f85aeb 100644 +--- a/src/client/qwaylanddatadevice.cpp ++++ b/src/client/qwaylanddatadevice.cpp +@@ -48,6 +48,7 @@ + #include "qwaylanddisplay_p.h" + #include "qwaylandabstractdecoration_p.h" + #include "qwaylandsurface_p.h" ++#include "qwaylandcursor_p.h" + + #include <QtCore/QMimeData> + #include <QtGui/QGuiApplication> +@@ -250,6 +251,7 @@ void QWaylandDataDevice::data_device_motion(uint32_t time, wl_fixed_t x, wl_fixe + return; + + m_dragPoint = calculateDragPosition(x, y, m_dragWindow); ++ m_display->waylandCursor()->updateDragCursorPos(m_dragWindow->mapToGlobal(m_dragPoint)); + + QMimeData *dragData = nullptr; + Qt::DropActions supportedActions; +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index bd83953..ebe1e09 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -942,8 +942,12 @@ QWaylandWindow *QWaylandWindow::transientParent() const + if (auto transientParent = closestShellSurfaceWindow(window()->transientParent())) + return transientParent; + +- if (QGuiApplication::focusWindow() && (window()->type() == Qt::ToolTip || window()->type() == Qt::Popup)) +- return closestShellSurfaceWindow(QGuiApplication::focusWindow()); ++ if (window()->type() == Qt::ToolTip || window()->type() == Qt::Popup) { ++ if (QGuiApplication::focusWindow()) ++ return closestShellSurfaceWindow(QGuiApplication::focusWindow()); ++ if (mDisplay->lastInputDevice() && mDisplay->lastInputDevice()->keyboardFocus()) ++ return closestShellSurfaceWindow(mDisplay->lastInputDevice()->keyboardFocus()->window()); ++ } + + return nullptr; + } +diff --git a/src/plugins/shellintegration/ukui-shell/ukuishellsurface.cpp b/src/plugins/shellintegration/ukui-shell/ukuishellsurface.cpp +index 594f37d..bd0dd23 100644 +--- a/src/plugins/shellintegration/ukui-shell/ukuishellsurface.cpp ++++ b/src/plugins/shellintegration/ukui-shell/ukuishellsurface.cpp +@@ -371,6 +371,8 @@ void UkuiShellSurface::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()); ++ positioner->set_constraint_adjustment(QtWayland::xdg_positioner::constraint_adjustment_slide_x ++ | QtWayland::xdg_positioner::constraint_adjustment_slide_y); + m_popup = new Popup(this, parent, positioner); + positioner->destroy(); + diff -Nru qtwayland-opensource-src-5.15.10/debian/patches/0082-update-changelog-5.15.10-2ok26update1.patch qtwayland-opensource-src-5.15.10/debian/patches/0082-update-changelog-5.15.10-2ok26update1.patch --- qtwayland-opensource-src-5.15.10/debian/patches/0082-update-changelog-5.15.10-2ok26update1.patch 1970-01-01 08:00:00.000000000 +0800 +++ qtwayland-opensource-src-5.15.10/debian/patches/0082-update-changelog-5.15.10-2ok26update1.patch 2025-02-27 17:25:13.000000000 +0800 @@ -0,0 +1,261 @@ +From: Jie Liu <liujie01@kylinos.cn> +Date: Thu, 27 Feb 2025 17:27:08 +0800 +Subject: update changelog: 5.15.10-2ok26update1 + +--- + include/QtWaylandClient/headers.pri | 2 +- + src/3rdparty/protocol/kde-primary-output-v1.xml | 22 +++++++++++++++ + src/3rdparty/protocol/qt_attribution.json | 17 ++++++++++++ + src/client/client.pro | 3 ++ + src/client/qwaylanddisplay.cpp | 3 ++ + src/client/qwaylanddisplay_p.h | 3 ++ + src/client/qwaylandprimaryoutput.cpp | 37 +++++++++++++++++++++++++ + src/client/qwaylandprimaryoutput.h | 30 ++++++++++++++++++++ + sync.profile | 2 ++ + 9 files changed, 118 insertions(+), 1 deletion(-) + create mode 100644 src/3rdparty/protocol/kde-primary-output-v1.xml + create mode 100644 src/client/qwaylandprimaryoutput.cpp + create mode 100644 src/client/qwaylandprimaryoutput.h + +diff --git a/include/QtWaylandClient/headers.pri b/include/QtWaylandClient/headers.pri +index bddf319..6840e8b 100644 +--- a/include/QtWaylandClient/headers.pri ++++ b/include/QtWaylandClient/headers.pri +@@ -3,4 +3,4 @@ SYNCQT.GENERATED_HEADER_FILES = QWaylandClientExtension QWaylandClientExtensionT + SYNCQT.PRIVATE_HEADER_FILES = qtwaylandclientglobal_p.h qwaylandabstractdecoration_p.h qwaylandbuffer_p.h qwaylandclipboard_p.h qwaylandcursor_p.h qwaylanddatadevice_p.h qwaylanddatadevicemanager_p.h qwaylanddataoffer_p.h qwaylanddatasource_p.h qwaylanddecorationfactory_p.h qwaylanddecorationplugin_p.h qwaylanddisplay_p.h qwaylanddnd_p.h qwaylandextendedsurface_p.h qwaylandinputcontext_p.h qwaylandinputdevice_p.h qwaylandintegration_p.h qwaylandnativeinterface_p.h qwaylandprimaryselectionv1_p.h qwaylandqtkey_p.h qwaylandscreen_p.h qwaylandshellsurface_p.h qwaylandshm_p.h qwaylandshmbackingstore_p.h qwaylandshmwindow_p.h qwaylandsubsurface_p.h qwaylandsurface_p.h qwaylandtabletv2_p.h qwaylandtouch_p.h qwaylandvulkaninstance_p.h qwaylandvulkanwindow_p.h qwaylandwindow_p.h qwaylandwindowmanagerintegration_p.h global/qwaylandclientextension_p.h hardwareintegration/qwaylandclientbufferintegration_p.h hardwareintegration/qwaylandclientbufferintegrationfactory_p.h hardwareintegration/qwaylandclientbufferintegrationplugin_p.h hardwareintegration/qwaylandhardwareintegration_p.h hardwareintegration/qwaylandserverbufferintegration_p.h hardwareintegration/qwaylandserverbufferintegrationfactory_p.h hardwareintegration/qwaylandserverbufferintegrationplugin_p.h inputdeviceintegration/qwaylandinputdeviceintegration_p.h inputdeviceintegration/qwaylandinputdeviceintegrationfactory_p.h inputdeviceintegration/qwaylandinputdeviceintegrationplugin_p.h shellintegration/qwaylandshellintegration_p.h shellintegration/qwaylandshellintegrationfactory_p.h shellintegration/qwaylandshellintegrationplugin_p.h + SYNCQT.QPA_HEADER_FILES = + SYNCQT.CLEAN_HEADER_FILES = qtwaylandclientglobal.h global/qwaylandclientextension.h +-SYNCQT.INJECTIONS = src/client/qwayland-hardware-integration.h:^5.15.10/QtWaylandClient/private/qwayland-hardware-integration.h src/client/qwayland-qt-windowmanager.h:^5.15.10/QtWaylandClient/private/qwayland-qt-windowmanager.h src/client/qwayland-qt-key-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-qt-key-unstable-v1.h src/client/qwayland-server-buffer-extension.h:^5.15.10/QtWaylandClient/private/qwayland-server-buffer-extension.h src/client/qwayland-surface-extension.h:^5.15.10/QtWaylandClient/private/qwayland-surface-extension.h src/client/qwayland-tablet-unstable-v2.h:^5.15.10/QtWaylandClient/private/qwayland-tablet-unstable-v2.h src/client/qwayland-text-input-unstable-v2.h:^5.15.10/QtWaylandClient/private/qwayland-text-input-unstable-v2.h src/client/qwayland-touch-extension.h:^5.15.10/QtWaylandClient/private/qwayland-touch-extension.h src/client/qwayland-wayland.h:^5.15.10/QtWaylandClient/private/qwayland-wayland.h src/client/qwayland-wp-primary-selection-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-wp-primary-selection-unstable-v1.h src/client/qwayland-xdg-output-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-xdg-output-unstable-v1.h src/client/wayland-hardware-integration-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-hardware-integration-client-protocol.h src/client/wayland-qt-windowmanager-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-qt-windowmanager-client-protocol.h src/client/wayland-qt-key-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-qt-key-unstable-v1-client-protocol.h src/client/wayland-server-buffer-extension-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-server-buffer-extension-client-protocol.h src/client/wayland-surface-extension-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-surface-extension-client-protocol.h src/client/wayland-tablet-unstable-v2-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-tablet-unstable-v2-client-protocol.h src/client/wayland-text-input-unstable-v2-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-text-input-unstable-v2-client-protocol.h src/client/wayland-touch-extension-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-touch-extension-client-protocol.h src/client/wayland-wayland-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wayland-client-protocol.h src/client/wayland-wp-primary-selection-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wp-primary-selection-unstable-v1-client-protocol.h src/client/wayland-xdg-output-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-xdg-output-unstable-v1-client-protocol.h src/client/qwayland-wlr-data-control-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-wlr-data-control-unstable-v1.h src/client/wayland-wlr-data-control-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wlr-data-control-unstable-v1-client-protocol.h src/client/qwayland-wlr-screencopy-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-wlr-screencopy-unstable-v1.h src/client/wayland-wlr-screencopy-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wlr-screencopy-unstable-v1-client-protocol.h +\ No newline at end of file ++SYNCQT.INJECTIONS = src/client/qwayland-hardware-integration.h:^5.15.10/QtWaylandClient/private/qwayland-hardware-integration.h src/client/qwayland-qt-windowmanager.h:^5.15.10/QtWaylandClient/private/qwayland-qt-windowmanager.h src/client/qwayland-qt-key-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-qt-key-unstable-v1.h src/client/qwayland-server-buffer-extension.h:^5.15.10/QtWaylandClient/private/qwayland-server-buffer-extension.h src/client/qwayland-surface-extension.h:^5.15.10/QtWaylandClient/private/qwayland-surface-extension.h src/client/qwayland-tablet-unstable-v2.h:^5.15.10/QtWaylandClient/private/qwayland-tablet-unstable-v2.h src/client/qwayland-text-input-unstable-v2.h:^5.15.10/QtWaylandClient/private/qwayland-text-input-unstable-v2.h src/client/qwayland-touch-extension.h:^5.15.10/QtWaylandClient/private/qwayland-touch-extension.h src/client/qwayland-wayland.h:^5.15.10/QtWaylandClient/private/qwayland-wayland.h src/client/qwayland-wp-primary-selection-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-wp-primary-selection-unstable-v1.h src/client/qwayland-xdg-output-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-xdg-output-unstable-v1.h src/client/wayland-hardware-integration-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-hardware-integration-client-protocol.h src/client/wayland-qt-windowmanager-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-qt-windowmanager-client-protocol.h src/client/wayland-qt-key-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-qt-key-unstable-v1-client-protocol.h src/client/wayland-server-buffer-extension-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-server-buffer-extension-client-protocol.h src/client/wayland-surface-extension-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-surface-extension-client-protocol.h src/client/wayland-tablet-unstable-v2-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-tablet-unstable-v2-client-protocol.h src/client/wayland-text-input-unstable-v2-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-text-input-unstable-v2-client-protocol.h src/client/wayland-touch-extension-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-touch-extension-client-protocol.h src/client/wayland-wayland-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wayland-client-protocol.h src/client/wayland-wp-primary-selection-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wp-primary-selection-unstable-v1-client-protocol.h src/client/wayland-xdg-output-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-xdg-output-unstable-v1-client-protocol.h src/client/qwayland-wlr-data-control-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-wlr-data-control-unstable-v1.h src/client/wayland-wlr-data-control-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wlr-data-control-unstable-v1-client-protocol.h src/client/qwayland-wlr-screencopy-unstable-v1.h:^5.15.10/QtWaylandClient/private/qwayland-wlr-screencopy-unstable-v1.h src/client/wayland-wlr-screencopy-unstable-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-wlr-screencopy-unstable-v1-client-protocol.h src/client/qwayland-kde-primary-output-v1.h:^5.15.10/QtWaylandClient/private/qwayland-kde-primary-output-v1.h src/client/wayland-kde-primary-output-v1-client-protocol.h:^5.15.10/QtWaylandClient/private/wayland-kde-primary-output-v1-client-protocol.h +\ No newline at end of file +diff --git a/src/3rdparty/protocol/kde-primary-output-v1.xml b/src/3rdparty/protocol/kde-primary-output-v1.xml +new file mode 100644 +index 0000000..7da58ee +--- /dev/null ++++ b/src/3rdparty/protocol/kde-primary-output-v1.xml +@@ -0,0 +1,22 @@ ++<?xml version="1.0" encoding="UTF-8"?> ++<protocol name="kde_primary_output_v1"> ++ <copyright><![CDATA[ ++ SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org> ++ ++ SPDX-License-Identifier: MIT-CMU ++ ]]></copyright> ++ ++<interface name="kde_primary_output_v1" version="1"> ++ <description summary="expose which is the primary display"> ++ Protocol for telling which is the primary display among the selection of enabled outputs. ++ </description> ++ ++ <event name="primary_output"> ++ <description summary="Provide the current primary output's name"> ++ Specifies which output is the primary one identified by their uuid. See kde_output_device_v2 uuid event for more information about it. ++ </description> ++ <arg name="output_name" type="string" summary="the name of the output"/> ++ </event> ++</interface> ++ ++</protocol> +diff --git a/src/3rdparty/protocol/qt_attribution.json b/src/3rdparty/protocol/qt_attribution.json +index 46318a8..569a1a7 100644 +--- a/src/3rdparty/protocol/qt_attribution.json ++++ b/src/3rdparty/protocol/qt_attribution.json +@@ -285,4 +285,21 @@ + "LicenseFile": "MIT_LICENSE.txt", + "Copyright": "Copyright © 2015 Martin Gräßlin\nCopyright © 2015 Marco Martin\n" + }, ++ ++ { ++ "Id": "kde-primary-output", ++ "Name": "KDE Primary Output Protocol", ++ "QDocModule": "qtwaylandcompositor", ++ "QtUsage": "Used in the Qt Wayland platform plugin", ++ "Files": "kde-primary-output-v1.xml", ++ ++ "Description": "Protocol for telling which is the primary display among the selection of enabled outputs", ++ "Homepage": "https://invent.kde.org/libraries/plasma-wayland-protocols/", ++ "Version": "1", ++ "DownloadLocation": "https://invent.kde.org/libraries/plasma-wayland-protocols/-/raw/master/src/protocols/kde-primary-output-v1.xml", ++ "LicenseId": "MIT", ++ "License": "MIT License", ++ "LicenseFile": "MIT_LICENSE.txt", ++ "Copyright": "Copyright © 2021 Aleix Pol Gonzalez <aleixpol@kde.org>" ++ }, + ] +diff --git a/src/client/client.pro b/src/client/client.pro +index 3311340..48b2ac8 100644 +--- a/src/client/client.pro ++++ b/src/client/client.pro +@@ -42,6 +42,7 @@ WAYLANDCLIENTSOURCES += \ + ../3rdparty/protocol/tablet-unstable-v2.xml \ + ../3rdparty/protocol/text-input-unstable-v2.xml \ + ../3rdparty/protocol/xdg-output-unstable-v1.xml \ ++ ../3rdparty/protocol/kde-primary-output-v1.xml \ + ../3rdparty/protocol/wayland.xml + + SOURCES += qwaylandintegration.cpp \ +@@ -52,6 +53,7 @@ SOURCES += qwaylandintegration.cpp \ + qwaylandwindow.cpp \ + qwaylandscreen.cpp \ + qwaylandscreencopy.cpp \ ++ qwaylandprimaryoutput.cpp \ + qwaylandshmwindow.cpp \ + qwaylandshellsurface.cpp \ + qwaylandextendedsurface.cpp \ +@@ -78,6 +80,7 @@ HEADERS += qwaylandintegration_p.h \ + qwaylandwindow_p.h \ + qwaylandscreen_p.h \ + qwaylandscreencopy_p.h \ ++ qwaylandprimaryoutput.h \ + qwaylandshmbackingstore_p.h \ + qwaylandinputdevice_p.h \ + qwaylandbuffer_p.h \ +diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp +index 7705a59..3fb953f 100644 +--- a/src/client/qwaylanddisplay.cpp ++++ b/src/client/qwaylanddisplay.cpp +@@ -51,6 +51,7 @@ + #include "qwaylanddatacontrolv1_p.h" + #endif + #include "qwaylandscreencopy_p.h" ++#include "qwaylandprimaryoutput.h" + #if QT_CONFIG(wayland_datadevice) + #include "qwaylanddatadevicemanager_p.h" + #include "qwaylanddatadevice_p.h" +@@ -558,6 +559,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin + } else { + qCWarning(lcQpaWayland) << "Screencopy is disabled by environment, set env QT_WAYLAND_USE_WLR_SCREENCOPY=1 to enable"; + } ++ } else if (interface == QLatin1String("kde_primary_output_v1")) { ++ m_primaryOutput.reset(new QWaylandPrimaryOutputV1(this, id, version)); + } + + mGlobals.append(RegistryGlobal(id, interface, version, registry)); +diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h +index 8475452..f52f9b1 100644 +--- a/src/client/qwaylanddisplay_p.h ++++ b/src/client/qwaylanddisplay_p.h +@@ -99,6 +99,7 @@ class QWaylandWindowManagerIntegration; + class QWaylandDataControlManagerV1; + #endif + class QWaylandScreenCopyManagerV1; ++class QWaylandPrimaryOutputV1; + class QWaylandDataDeviceManager; + #if QT_CONFIG(wayland_client_primary_selection) + class QWaylandPrimarySelectionDeviceManagerV1; +@@ -183,6 +184,7 @@ public: + QWaylandDataControlManagerV1 *dataControlManager() const { return m_dataControlManager.data(); } + #endif + QWaylandScreenCopyManagerV1 *screencopyManager() const { return m_screencopyManager.data(); } ++ QWaylandPrimaryOutputV1 *primaryOutput() const { return m_primaryOutput.data(); } + + struct RegistryGlobal { + uint32_t id; +@@ -282,6 +284,7 @@ private: + QScopedPointer<QWaylandDataControlManagerV1> m_dataControlManager; + #endif + QScopedPointer<QWaylandScreenCopyManagerV1> m_screencopyManager; ++ QScopedPointer<QWaylandPrimaryOutputV1> m_primaryOutput; + QSocketNotifier *mReadNotifier = nullptr; + int mFd = -1; + int mWritableNotificationFd = -1; +diff --git a/src/client/qwaylandprimaryoutput.cpp b/src/client/qwaylandprimaryoutput.cpp +new file mode 100644 +index 0000000..d694839 +--- /dev/null ++++ b/src/client/qwaylandprimaryoutput.cpp +@@ -0,0 +1,37 @@ ++// SPDX-FileCopyrightText: 2024 KylinSoft Co., Ltd. ++// ++// SPDX-License-Identifier: GPL-1.0-or-later ++ ++#include "qwaylandprimaryoutput.h" ++ ++#include "qwaylanddisplay_p.h" ++#include "qwaylandscreen_p.h" ++ ++#include <QtGui/qpa/qwindowsysteminterface.h> ++ ++#include <QScreen> ++ ++QT_BEGIN_NAMESPACE ++ ++namespace QtWaylandClient ++{ ++ ++QWaylandPrimaryOutputV1::QWaylandPrimaryOutputV1(QWaylandDisplay *display, uint id, uint version) ++ : QtWayland::kde_primary_output_v1(display->wl_registry(), id, qMin(version, uint(1))) ++ , m_display(display) ++{ ++} ++ ++void QWaylandPrimaryOutputV1::kde_primary_output_v1_primary_output(const QString &output_name) ++{ ++ const auto screens = m_display->screens(); ++ for (auto *screen : screens) { ++ if (screen->name() == output_name) { ++ QWindowSystemInterface::handlePrimaryScreenChanged(screen); ++ break; ++ } ++ } ++} ++} // namespace QtWaylandClient ++ ++QT_END_NAMESPACE +diff --git a/src/client/qwaylandprimaryoutput.h b/src/client/qwaylandprimaryoutput.h +new file mode 100644 +index 0000000..c61a6c3 +--- /dev/null ++++ b/src/client/qwaylandprimaryoutput.h +@@ -0,0 +1,30 @@ ++// SPDX-FileCopyrightText: 2024 KylinSoft Co., Ltd. ++// ++// SPDX-License-Identifier: GPL-1.0-or-later ++ ++#pragma once ++ ++#include <QtWaylandClient/private/qwayland-kde-primary-output-v1.h> ++ ++QT_BEGIN_NAMESPACE ++ ++namespace QtWaylandClient { ++ ++class QWaylandDisplay; ++ ++class QWaylandPrimaryOutputV1 : public QtWayland::kde_primary_output_v1 ++{ ++public: ++ QWaylandPrimaryOutputV1(QWaylandDisplay *display, uint id, uint version); ++ ~QWaylandPrimaryOutputV1() = default; ++ ++protected: ++ void kde_primary_output_v1_primary_output(const QString &output_name) override; ++ ++private: ++ QWaylandDisplay *m_display = nullptr; ++}; ++ ++} // namespace QtWaylandClient ++ ++QT_END_NAMESPACE +diff --git a/sync.profile b/sync.profile +index 7d9fb62..c5a4375 100644 +--- a/sync.profile ++++ b/sync.profile +@@ -31,6 +31,7 @@ + "^qwayland-wp-primary-selection-unstable-v1.h", + "^qwayland-wlr-data-control-unstable-v1.h", + "^qwayland-wlr-screencopy-unstable-v1.h", ++ "^qwayland-kde-primary-output-v1.h", + "^qwayland-xdg-output-unstable-v1.h", + "^wayland-hardware-integration-client-protocol.h", + "^wayland-qt-windowmanager-client-protocol.h", +@@ -44,6 +45,7 @@ + "^wayland-wp-primary-selection-unstable-v1-client-protocol.h", + "^wayland-wlr-data-control-unstable-v1-client-protocol.h", + "^wayland-wlr-screencopy-unstable-v1-client-protocol.h", ++ "^wayland-kde-primary-output-v1-client-protocol.h", + "^wayland-xdg-output-unstable-v1-client-protocol.h", + ], + "$basedir/src/plugins/shellintegration/xdg-shell" => [ diff -Nru qtwayland-opensource-src-5.15.10/debian/patches/series qtwayland-opensource-src-5.15.10/debian/patches/series --- qtwayland-opensource-src-5.15.10/debian/patches/series 2024-12-09 16:30:30.000000000 +0800 +++ qtwayland-opensource-src-5.15.10/debian/patches/series 2025-02-27 17:25:13.000000000 +0800 @@ -78,3 +78,5 @@ 0078-update-changelog-5.15.10-2ok24.patch 0079-Revert-wayland-tooltip.patch 0080-update-changed-5.15.10-2ok26.patch +0081-update-changlog-5.15.10-2ok30.patch +0082-update-changelog-5.15.10-2ok26update1.patch