Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kf6-kwindowsystem for 
openSUSE:Factory checked in at 2026-07-15 16:32:09
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-kwindowsystem (Old)
 and      /work/SRC/openSUSE:Factory/.kf6-kwindowsystem.new.1991 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kf6-kwindowsystem"

Wed Jul 15 16:32:09 2026 rev:29 rq:1365139 version:6.28.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kf6-kwindowsystem/kf6-kwindowsystem.changes      
2026-06-16 13:57:31.895530609 +0200
+++ 
/work/SRC/openSUSE:Factory/.kf6-kwindowsystem.new.1991/kf6-kwindowsystem.changes
    2026-07-15 16:42:01.411338606 +0200
@@ -1,0 +2,15 @@
+Fri Jul 10 12:16:07 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.28.0
+  * New feature release
+  * For more details please see:
+  * https://kde.org/announcements/frameworks/6/6.28.0
+- Changes since 6.27.0:
+  * platforms/xcb: Handle Xwayland restarts better
+  * platforms/xcb: Manage atoms with a shared pointer
+  * Update dependency version to 6.28.0
+  * Restore guard for null window in exportWindow (kde#521241)
+  * Provide a future based API to export a window
+  * Update version to 6.28.0
+
+-------------------------------------------------------------------

Old:
----
  kwindowsystem-6.27.0.tar.xz
  kwindowsystem-6.27.0.tar.xz.sig

New:
----
  kwindowsystem-6.28.0.tar.xz
  kwindowsystem-6.28.0.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kf6-kwindowsystem.spec ++++++
--- /var/tmp/diff_new_pack.xO7ihK/_old  2026-07-15 16:42:11.307675092 +0200
+++ /var/tmp/diff_new_pack.xO7ihK/_new  2026-07-15 16:42:11.311675228 +0200
@@ -19,11 +19,11 @@
 %define qt6_version 6.9.0
 
 %define rname kwindowsystem
-# Full KF6 version (e.g. 6.27.0)
+# Full KF6 version (e.g. 6.28.0)
 %{!?_kf6_version: %global _kf6_version %{version}}
 %bcond_without released
 Name:           kf6-kwindowsystem
-Version:        6.27.0
+Version:        6.28.0
 Release:        0
 Summary:        KDE Access to window manager
 License:        LGPL-2.1-or-later


++++++ kwindowsystem-6.27.0.tar.xz -> kwindowsystem-6.28.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/CMakeLists.txt 
new/kwindowsystem-6.28.0/CMakeLists.txt
--- old/kwindowsystem-6.27.0/CMakeLists.txt     2026-06-05 17:50:04.000000000 
+0200
+++ new/kwindowsystem-6.28.0/CMakeLists.txt     2026-07-03 13:01:22.000000000 
+0200
@@ -1,11 +1,11 @@
 cmake_minimum_required(VERSION 3.29)
 
-set(KF_VERSION "6.27.0") # handled by release scripts
+set(KF_VERSION "6.28.0") # handled by release scripts
 project(KWindowSystem VERSION ${KF_VERSION})
 
 # ECM setup
 include(FeatureSummary)
-find_package(ECM 6.27.0  NO_MODULE)
+find_package(ECM 6.28.0  NO_MODULE)
 set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake 
Modules." URL "https://commits.kde.org/extra-cmake-modules";)
 feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND 
FATAL_ON_MISSING_REQUIRED_PACKAGES)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/poqm/ia/kwindowsystem6_qt.po 
new/kwindowsystem-6.28.0/poqm/ia/kwindowsystem6_qt.po
--- old/kwindowsystem-6.27.0/poqm/ia/kwindowsystem6_qt.po       2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/poqm/ia/kwindowsystem6_qt.po       2026-07-03 
13:01:22.000000000 +0200
@@ -995,7 +995,7 @@
 #~ msgstr "Patronos"
 
 #~ msgid "Wallpapers"
-#~ msgstr "Tapetes de papiro"
+#~ msgstr "Fundos de schermo"
 
 #~ msgid "XDG Application menu (.desktop files)"
 #~ msgstr "XDG Menu de applicationes (files .desktop)"
@@ -8618,7 +8618,7 @@
 
 #~ msgid "Too many requests to server. Please try again in a few minutes."
 #~ msgstr ""
-#~ "Troppo requestas a le servitor. Pro favor prova de nove inter pauc "
+#~ "Troppo requestas a le servitor. Pro favor prova de nove inter pauco "
 #~ "minutas."
 
 #~ msgid "Unknown Open Collaboration Service API error. (%1)"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/poqm/nb/kwindowsystem6_qt.po 
new/kwindowsystem-6.28.0/poqm/nb/kwindowsystem6_qt.po
--- old/kwindowsystem-6.27.0/poqm/nb/kwindowsystem6_qt.po       2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/poqm/nb/kwindowsystem6_qt.po       2026-07-03 
13:01:22.000000000 +0200
@@ -14,7 +14,7 @@
 "POT-Creation-Date: 2014-02-28 03:44+0000\n"
 "PO-Revision-Date: 2014-04-25 15:53+0200\n"
 "Last-Translator: Bjørn Steensrud <[email protected]>\n"
-"Language-Team: Norwegian Bokmål <[email protected]>\n"
+"Language-Team: Norwegian Bokmål <[email protected]>\n"
 "Language: nb\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/poqm/nn/kwindowsystem6_qt.po 
new/kwindowsystem-6.28.0/poqm/nn/kwindowsystem6_qt.po
--- old/kwindowsystem-6.27.0/poqm/nn/kwindowsystem6_qt.po       2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/poqm/nn/kwindowsystem6_qt.po       2026-07-03 
13:01:22.000000000 +0200
@@ -11,7 +11,7 @@
 "POT-Creation-Date: 2014-02-28 03:44+0000\n"
 "PO-Revision-Date: 2015-06-03 19:20+0100\n"
 "Last-Translator: Karl Ove Hufthammer <[email protected]>\n"
-"Language-Team: Norwegian Nynorsk <[email protected]>\n"
+"Language-Team: Norwegian Nynorsk <[email protected]>\n"
 "Language: nn\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/poqm/se/kwindowsystem6_qt.po 
new/kwindowsystem-6.28.0/poqm/se/kwindowsystem6_qt.po
--- old/kwindowsystem-6.27.0/poqm/se/kwindowsystem6_qt.po       2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/poqm/se/kwindowsystem6_qt.po       2026-07-03 
13:01:22.000000000 +0200
@@ -8,7 +8,7 @@
 "POT-Creation-Date: 2014-02-28 03:44+0000\n"
 "PO-Revision-Date: 2012-05-30 23:19+0200\n"
 "Last-Translator: Børre Gaup <[email protected]>\n"
-"Language-Team: Northern Sami <[email protected]>\n"
+"Language-Team: Northern Sami <[email protected]>\n"
 "Language: se\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/src/CMakeLists.txt 
new/kwindowsystem-6.28.0/src/CMakeLists.txt
--- old/kwindowsystem-6.27.0/src/CMakeLists.txt 2026-06-05 17:50:04.000000000 
+0200
+++ new/kwindowsystem-6.28.0/src/CMakeLists.txt 2026-07-03 13:01:22.000000000 
+0200
@@ -86,7 +86,7 @@
     VERSION ${KF_VERSION}
     USE_VERSION_HEADER
     DEPRECATED_BASE_VERSION 0
-    DEPRECATION_VERSIONS 6.0 6.19
+    DEPRECATION_VERSIONS 6.0 6.19 6.28
     EXCLUDE_DEPRECATED_BEFORE_AND_AT ${EXCLUDE_DEPRECATED_BEFORE_AND_AT}
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/src/kwaylandextras.cpp 
new/kwindowsystem-6.28.0/src/kwaylandextras.cpp
--- old/kwindowsystem-6.27.0/src/kwaylandextras.cpp     2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/src/kwaylandextras.cpp     2026-07-03 
13:01:22.000000000 +0200
@@ -51,6 +51,7 @@
     return dv2->lastInputSerial(window);
 }
 
+#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(6, 28)
 void KWaylandExtras::exportWindow(QWindow *window)
 {
     if (auto dv2 = dynamic_cast<KWindowSystemPrivateV2 
*>(KWindowSystem::d_func())) {
@@ -64,6 +65,50 @@
         dv2->unexportWindow(window);
     }
 }
+#endif
+
+QFuture<QString> KWaylandExtras::exportToplevel(QWindow *window)
+{
+    if (auto dv5 = dynamic_cast<KWindowSystemPrivateV5 
*>(KWindowSystem::d_func())) {
+        return dv5->exportToplevel(window);
+    }
+#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(6, 28)
+    exportWindow(window);
+    QPromise<QString> promise;
+    promise.start();
+    auto future = promise.future();
+    auto connection = std::make_unique<QMetaObject::Connection>();
+    auto &connectionRef = *connection;
+    connectionRef =
+        connect(self(),
+                &KWaylandExtras::windowExported,
+                window,
+                [wanted = window, promise = std::move(promise), connection = 
std::move(connection)](QWindow *window, const QString &handle) mutable {
+                    if (window != wanted) {
+                        return;
+                    }
+                    promise.addResult(handle);
+                    promise.finish();
+                    QObject::disconnect(*connection);
+                });
+
+    return future;
+#else
+    return QtFuture::makeReadyValueFuture(QString());
+#endif
+}
+
+void KWaylandExtras::unexportToplevel(QWindow *window)
+{
+    if (auto dv5 = dynamic_cast<KWindowSystemPrivateV5 
*>(KWindowSystem::d_func())) {
+        dv5->unexportToplevel(window);
+    }
+#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(6, 28)
+    else {
+        unexportWindow(window);
+    }
+#endif
+}
 
 QFuture<QString> KWaylandExtras::xdgActivationToken(QWindow *window, uint32_t 
serial, const QString &appId)
 {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/src/kwaylandextras.h 
new/kwindowsystem-6.28.0/src/kwaylandextras.h
--- old/kwindowsystem-6.27.0/src/kwaylandextras.h       2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/src/kwaylandextras.h       2026-07-03 
13:01:22.000000000 +0200
@@ -49,12 +49,15 @@
      */
     Q_INVOKABLE static quint32 lastInputSerial(QWindow *window);
 
+#if KWINDOWSYSTEM_ENABLE_DEPRECATED_SINCE(6, 28)
     /*!
      * Requests to export the given \a window using xdg_foreign_v2.
      *
      * \sa windowExported
      * \since 6.0
+     * \deprecated [6.28] Use exportToplevel() instead.
      */
+    KWINDOWSYSTEM_DEPRECATED_VERSION(6, 28, "Use exportToplevel()")
     Q_INVOKABLE static void exportWindow(QWindow *window);
 
     /*!
@@ -63,8 +66,29 @@
      * Asks the compositor to revoke the handle.
      *
      * \since 6.0
+     * \deprecated [6.28] Use unexportToplevel() instead.
      */
+    KWINDOWSYSTEM_DEPRECATED_VERSION(6, 28, "Use unexportToplevel()")
     Q_INVOKABLE static void unexportWindow(QWindow *window);
+#endif
+
+    /*!
+     * Requests to export the given \a window using xdg_foreign_v2.
+     * The window must be a toplevel window and not a popup.
+     *
+     * If the export fails, an empty string will be the result of the 
operation.
+     * \since 6.28
+     */
+    static QFuture<QString> exportToplevel(QWindow *window);
+
+    /*!
+     * Unexports the \a window previously exported exportToplevel()
+     *
+     * Asks the compositor to revoke a previously exported handle for \a 
window.
+     *
+     * \since 6.28
+     */
+    Q_INVOKABLE static void unexportToplevel(QWindow *window);
 
     /*!
      * Requests an xdg_activation_v1 token for a specific window \a window 
with the given \a appId.
@@ -117,12 +141,15 @@
     KWINDOWSYSTEM_DEPRECATED_VERSION(6, 19, "Use xdgActivationToken()") void 
xdgActivationTokenArrived(int serial, const QString &token);
 #endif
 
+#if KWINDOWSYSTEM_ENABLE_DEPRECATED_SINCE(6, 28)
     /*!
      * The \a handle of the given \a window to pass to the client.
      * \sa exportWindow
      * \since 6.0
+     * \deprecated [6.28] Use exportToplevel() instead.
      */
     void windowExported(QWindow *window, const QString &handle);
+#endif
 
 private:
     KWaylandExtras();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/src/kwindowsystem_p.h 
new/kwindowsystem-6.28.0/src/kwindowsystem_p.h
--- old/kwindowsystem-6.27.0/src/kwindowsystem_p.h      2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/src/kwindowsystem_p.h      2026-07-03 
13:01:22.000000000 +0200
@@ -33,8 +33,10 @@
     virtual void setCurrentToken(const QString &token) = 0;
     virtual quint32 lastInputSerial(QWindow *window) = 0;
     virtual void setMainWindow(QWindow *window, const QString &handle) = 0;
+#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(6, 28)
     virtual void exportWindow(QWindow *window) = 0;
     virtual void unexportWindow(QWindow *window) = 0;
+#endif
 };
 
 class KWINDOWSYSTEM_EXPORT KWindowSystemPrivateV3 : public 
KWindowSystemPrivateV2
@@ -50,4 +52,11 @@
     virtual void setXdgToplevelDescription(QWindow *window, const QString 
&description) = 0;
 };
 
+class KWINDOWSYSTEM_EXPORT KWindowSystemPrivateV5 : public 
KWindowSystemPrivateV4
+{
+public:
+    virtual QFuture<QString> exportToplevel(QWindow *window) = 0;
+    virtual void unexportToplevel(QWindow *window) = 0;
+};
+
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kwindowsystem-6.27.0/src/platforms/wayland/windowsystem.cpp 
new/kwindowsystem-6.28.0/src/platforms/wayland/windowsystem.cpp
--- old/kwindowsystem-6.27.0/src/platforms/wayland/windowsystem.cpp     
2026-06-05 17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/src/platforms/wayland/windowsystem.cpp     
2026-07-03 13:01:22.000000000 +0200
@@ -132,44 +132,41 @@
     return m_windowManagement->showingDesktop;
 }
 
+#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(6, 28)
 void WindowSystem::exportWindow(QWindow *window)
 {
-    auto emitHandle = [window](const QString &handle) {
-        // Ensure that windowExported is always emitted asynchronously.
-        QMetaObject::invokeMethod(
-            window,
-            [window, handle] {
-                Q_EMIT KWaylandExtras::self()->windowExported(window, handle);
-            },
-            Qt::QueuedConnection);
-    };
-
     if (!window) {
         return;
     }
+    exportToplevel(window).then(window, [window](const QString &handle) {
+        QMetaObject::invokeMethod(KWaylandExtras::self(), 
&KWaylandExtras::windowExported, Qt::QueuedConnection, window, handle);
+    });
+}
+#endif
+
+QFuture<QString> WindowSystem::exportToplevel(QWindow *window)
+{
+    if (!window) {
+        return QtFuture::makeReadyValueFuture(QString());
+    }
 
     window->create();
 
     auto waylandWindow = 
window->nativeInterface<QNativeInterface::Private::QWaylandWindow>();
     if (!waylandWindow) {
-        emitHandle({});
-        return;
+        return QtFuture::makeReadyValueFuture(QString());
     }
 
     auto &exporter = WaylandXdgForeignExporterV2::self();
     if (!exporter.isActive()) {
-        emitHandle({});
-        return;
+        return QtFuture::makeReadyValueFuture(QString());
     }
 
-    // We want to use QObject::property(char*) and use dynamic properties on 
the object rather than
-    // call QWaylandWindow::property(QString) and send it around.
     WaylandXdgForeignExportedV2 *exported = 
waylandWindow->property(c_kdeXdgForeignExportedProperty).value<WaylandXdgForeignExportedV2
 *>();
     if (!exported) {
         if (!xdgToplevelForWindow(window)) {
             qCWarning(KWAYLAND_KWS) << window << "is not an XDG toplevel, 
cannot export";
-            emitHandle({});
-            return;
+            return QtFuture::makeReadyValueFuture(QString());
         }
 
         exported = exporter.exportToplevel(surfaceForWindow(window));
@@ -179,19 +176,32 @@
         connect(exported, &QObject::destroyed, waylandWindow, [waylandWindow] {
             waylandWindow->setProperty(c_kdeXdgForeignExportedProperty, 
QVariant());
         });
-
-        connect(exported, &WaylandXdgForeignExportedV2::handleReceived, 
window, [window](const QString &handle) {
-            Q_EMIT KWaylandExtras::self()->windowExported(window, handle);
-        });
     }
 
     if (!exported->handle().isEmpty()) {
-        emitHandle(exported->handle());
+        return QtFuture::makeReadyValueFuture(exported->handle());
     }
-}
 
+    QPromise<QString> promise;
+    promise.start();
+    auto future = promise.future();
+
+    connect(exported, &WaylandXdgForeignExportedV2::handleReceived, exported, 
[p = std::move(promise)](const QString &handle) mutable {
+        p.addResult(handle);
+        p.finish();
+    });
+
+    return future;
+}
+#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(6, 28)
 void WindowSystem::unexportWindow(QWindow *window)
 {
+    unexportToplevel(window);
+}
+#endif
+
+void WindowSystem::unexportToplevel(QWindow *window)
+{
     auto waylandWindow = window ? 
window->nativeInterface<QNativeInterface::Private::QWaylandWindow>() : nullptr;
     if (!waylandWindow) {
         return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kwindowsystem-6.27.0/src/platforms/wayland/windowsystem.h 
new/kwindowsystem-6.28.0/src/platforms/wayland/windowsystem.h
--- old/kwindowsystem-6.27.0/src/platforms/wayland/windowsystem.h       
2026-06-05 17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/src/platforms/wayland/windowsystem.h       
2026-07-03 13:01:22.000000000 +0200
@@ -12,7 +12,7 @@
 
 class WindowManagement;
 
-class WindowSystem : public QObject, public KWindowSystemPrivateV4
+class WindowSystem : public QObject, public KWindowSystemPrivateV5
 {
     Q_OBJECT
 public:
@@ -26,8 +26,12 @@
     void setCurrentToken(const QString &token) override;
     bool showingDesktop() override;
     void setShowingDesktop(bool showing) override;
+#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(6, 19)
     void exportWindow(QWindow *window) override;
     void unexportWindow(QWindow *window) override;
+#endif
+    QFuture<QString> exportToplevel(QWindow *window) override;
+    void unexportToplevel(QWindow *window) override;
     void setMainWindow(QWindow *window, const QString &handle) override;
     QFuture<QString> xdgActivationToken(QWindow *window, uint32_t serial, 
const QString &appId) override;
     void setXdgToplevelTag(QWindow *window, const QString &tag) override;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/src/platforms/xcb/netwm.cpp 
new/kwindowsystem-6.28.0/src/platforms/xcb/netwm.cpp
--- old/kwindowsystem-6.27.0/src/platforms/xcb/netwm.cpp        2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/src/platforms/xcb/netwm.cpp        2026-07-03 
13:01:22.000000000 +0200
@@ -44,23 +44,39 @@
     xcb_window_t window_group;
 };
 
-typedef QHash<xcb_connection_t *, QSharedDataPointer<Atoms>> AtomHash;
-Q_GLOBAL_STATIC(AtomHash, s_gAtomsHash)
+// These are atoms that are used in the Xorg session.
+typedef QHash<xcb_connection_t *, QSharedPointer<Atoms>> PersistentAtomHash;
+Q_GLOBAL_STATIC(PersistentAtomHash, s_gAtomsHash)
 
-static QSharedDataPointer<Atoms> atomsForConnection(xcb_connection_t *c)
+// These are atoms that are used on Wayland. It is mainly relevant for 
KWin/Wayland.
+// On Wayland, X11 connections can appear and disappear if Xwayland crashes or 
restarts.
+typedef QHash<xcb_connection_t *, QWeakPointer<Atoms>> TransientAtomHash;
+Q_GLOBAL_STATIC(TransientAtomHash, s_gTransientAtomsHash)
+
+static QSharedPointer<Atoms> atomsForConnection(xcb_connection_t *c)
 {
-    auto it = s_gAtomsHash->constFind(c);
-    if (it == s_gAtomsHash->constEnd()) {
-        QSharedDataPointer<Atoms> atom(new Atoms(c));
-        s_gAtomsHash->insert(c, atom);
-        return atom;
+    if (QX11Info::isPlatformX11()) {
+        auto it = s_gAtomsHash->constFind(c);
+        if (it == s_gAtomsHash->constEnd()) {
+            QSharedPointer<Atoms> atom(new Atoms(c));
+            s_gAtomsHash->insert(c, atom);
+            return atom;
+        }
+        return it.value();
+    } else {
+        auto &atoms = (*s_gTransientAtomsHash)[c];
+        if (atoms) {
+            return atoms;
+        }
+
+        auto ref = QSharedPointer<Atoms>::create(c);
+        atoms = ref;
+        return ref;
     }
-    return it.value();
 }
 
 Atoms::Atoms(xcb_connection_t *c)
-    : QSharedData()
-    , m_connection(c)
+    : m_connection(c)
 {
     for (int i = 0; i < KwsAtomCount; ++i) {
         m_atoms[i] = XCB_ATOM_NONE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/src/platforms/xcb/netwm_p.h 
new/kwindowsystem-6.28.0/src/platforms/xcb/netwm_p.h
--- old/kwindowsystem-6.27.0/src/platforms/xcb/netwm_p.h        2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/src/platforms/xcb/netwm_p.h        2026-07-03 
13:01:22.000000000 +0200
@@ -8,12 +8,11 @@
 #ifndef netwm_p_h
 #define netwm_p_h
 
-#include <QSharedData>
-#include <QSharedDataPointer>
+#include <QSharedPointer>
 
 #include "atoms_p.h"
 
-class Atoms : public QSharedData
+class Atoms
 {
 public:
     explicit Atoms(xcb_connection_t *c);
@@ -126,7 +125,7 @@
 
     int ref;
 
-    QSharedDataPointer<Atoms> atoms;
+    QSharedPointer<Atoms> atoms;
     xcb_atom_t atom(KwsAtom atom) const
     {
         return atoms->atom(atom);
@@ -185,7 +184,7 @@
 
     int ref;
 
-    QSharedDataPointer<Atoms> atoms;
+    QSharedPointer<Atoms> atoms;
     xcb_atom_t atom(KwsAtom atom) const
     {
         return atoms->atom(atom);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kwindowsystem-6.27.0/tests/kwaylandextrastest.cpp 
new/kwindowsystem-6.28.0/tests/kwaylandextrastest.cpp
--- old/kwindowsystem-6.27.0/tests/kwaylandextrastest.cpp       2026-06-05 
17:50:04.000000000 +0200
+++ new/kwindowsystem-6.28.0/tests/kwaylandextrastest.cpp       2026-07-03 
13:01:22.000000000 +0200
@@ -56,16 +56,7 @@
 
 void Window::exportWindow()
 {
-    connect(
-        KWaylandExtras::self(),
-        &KWaylandExtras::windowExported,
-        this,
-        [this](QWindow *window, const QString &handle) {
-            Q_UNUSED(window);
-            setExportedHandle(handle);
-        },
-        Qt::SingleShotConnection);
-    KWaylandExtras::exportWindow(windowHandle());
+    
KWaylandExtras::exportToplevel(windowHandle()).then(std::bind_front(&Window::setExportedHandle,
 this));
 }
 
 void Window::unexportWindow()

Reply via email to