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 2025-05-12 16:44:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kf6-kwindowsystem (Old) and /work/SRC/openSUSE:Factory/.kf6-kwindowsystem.new.30101 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kf6-kwindowsystem" Mon May 12 16:44:52 2025 rev:15 rq:1276405 version:6.14.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kf6-kwindowsystem/kf6-kwindowsystem.changes 2025-04-15 16:47:01.669922517 +0200 +++ /work/SRC/openSUSE:Factory/.kf6-kwindowsystem.new.30101/kf6-kwindowsystem.changes 2025-05-12 16:47:52.430140032 +0200 @@ -1,0 +2,14 @@ +Sun May 4 19:05:32 UTC 2025 - Christophe Marin <christo...@krop.fr> + +- Update to 6.14.0 + * New feature release + * For more details please see: + * https://kde.org/announcements/frameworks/6/6.14.0 +- Changes since 6.13.0: + * Update dependency version to 6.14.0 + * wayland: Handle XDG Dialog when calling setMainWindow multiple times + * Wayland: Set XDG dialog modal in setMainWindow when applicable (kde#493647) + * Update version to 6.14.0 + * Remove code for no longer supported Qt versions + +------------------------------------------------------------------- Old: ---- kwindowsystem-6.13.0.tar.xz kwindowsystem-6.13.0.tar.xz.sig New: ---- kwindowsystem-6.14.0.tar.xz kwindowsystem-6.14.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kf6-kwindowsystem.spec ++++++ --- /var/tmp/diff_new_pack.GIxXfI/_old 2025-05-12 16:47:54.678234295 +0200 +++ /var/tmp/diff_new_pack.GIxXfI/_new 2025-05-12 16:47:54.690234798 +0200 @@ -19,13 +19,13 @@ %define qt6_version 6.7.0 %define rname kwindowsystem -# Full KF6 version (e.g. 6.13.0) +# Full KF6 version (e.g. 6.14.0) %{!?_kf6_version: %global _kf6_version %{version}} # Last major and minor KF6 version (e.g. 6.0) %{!?_kf6_bugfix_version: %define _kf6_bugfix_version %(echo %{_kf6_version} | awk -F. '{print $1"."$2}')} %bcond_without released Name: kf6-kwindowsystem -Version: 6.13.0 +Version: 6.14.0 Release: 0 Summary: KDE Access to window manager License: LGPL-2.1-or-later ++++++ kwindowsystem-6.13.0.tar.xz -> kwindowsystem-6.14.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-6.13.0/CMakeLists.txt new/kwindowsystem-6.14.0/CMakeLists.txt --- old/kwindowsystem-6.13.0/CMakeLists.txt 2025-04-04 16:03:51.000000000 +0200 +++ new/kwindowsystem-6.14.0/CMakeLists.txt 2025-05-02 16:26:08.000000000 +0200 @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.16) -set(KF_VERSION "6.13.0") # handled by release scripts +set(KF_VERSION "6.14.0") # handled by release scripts project(KWindowSystem VERSION ${KF_VERSION}) # ECM setup include(FeatureSummary) -find_package(ECM 6.13.0 NO_MODULE) +find_package(ECM 6.14.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) @@ -40,7 +40,7 @@ SOVERSION 6) # Dependencies -set(REQUIRED_QT_VERSION 6.6.0) +set(REQUIRED_QT_VERSION 6.7.0) find_package(Qt6Gui ${REQUIRED_QT_VERSION} CONFIG REQUIRED) if (Qt6Gui_VERSION VERSION_GREATER_EQUAL "6.10.0") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-6.13.0/autotests/kwindowinfox11test.cpp new/kwindowsystem-6.14.0/autotests/kwindowinfox11test.cpp --- old/kwindowsystem-6.13.0/autotests/kwindowinfox11test.cpp 2025-04-04 16:03:51.000000000 +0200 +++ new/kwindowsystem-6.14.0/autotests/kwindowinfox11test.cpp 2025-05-02 16:26:08.000000000 +0200 @@ -665,11 +665,7 @@ { KWindowInfo info(window->winId(), NET::Properties(), NET::WM2DesktopFileName); QVERIFY(info.valid()); -#if QT_VERSION >= QT_VERSION_CHECK(6, 6, 1) QCOMPARE(info.desktopFileName(), "kwindowinfox11test"); -#else - QCOMPARE(info.desktopFileName(), QString()); -#endif QSignalSpy spy(KX11Extras::self(), &KX11Extras::windowChanged); QVERIFY(spy.isValid()); // create a NETWinInfo to set the desktop file name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-6.13.0/src/platforms/wayland/CMakeLists.txt new/kwindowsystem-6.14.0/src/platforms/wayland/CMakeLists.txt --- old/kwindowsystem-6.13.0/src/platforms/wayland/CMakeLists.txt 2025-04-04 16:03:51.000000000 +0200 +++ new/kwindowsystem-6.14.0/src/platforms/wayland/CMakeLists.txt 2025-05-02 16:26:08.000000000 +0200 @@ -6,6 +6,7 @@ windowshadow.cpp windowsystem.cpp waylandxdgactivationv1.cpp + waylandxdgdialogv1.cpp waylandxdgforeignv2.cpp plugin.h windoweffects.h @@ -23,6 +24,8 @@ FILES ${WaylandProtocols_DATADIR}/staging/xdg-activation/xdg-activation-v1.xml ${WaylandProtocols_DATADIR}/unstable/xdg-foreign/xdg-foreign-unstable-v2.xml + ${WaylandProtocols_DATADIR}/staging/xdg-dialog/xdg-dialog-v1.xml + ${WaylandProtocols_DATADIR}/stable/xdg-shell/xdg-shell.xml ${PLASMA_WAYLAND_PROTOCOLS_DIR}/blur.xml ${PLASMA_WAYLAND_PROTOCOLS_DIR}/contrast.xml ${PLASMA_WAYLAND_PROTOCOLS_DIR}/slide.xml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-6.13.0/src/platforms/wayland/surfacehelper.h new/kwindowsystem-6.14.0/src/platforms/wayland/surfacehelper.h --- old/kwindowsystem-6.13.0/src/platforms/wayland/surfacehelper.h 2025-04-04 16:03:51.000000000 +0200 +++ new/kwindowsystem-6.14.0/src/platforms/wayland/surfacehelper.h 2025-05-02 16:26:08.000000000 +0200 @@ -14,6 +14,7 @@ #include <qpa/qplatformnativeinterface.h> struct wl_surface; +struct xdg_toplevel; inline wl_surface *surfaceForWindow(QWindow *window) { @@ -38,3 +39,17 @@ return reinterpret_cast<wl_surface *>(native->nativeResourceForWindow(QByteArrayLiteral("surface"), window)); } + +inline xdg_toplevel *xdgToplevelForWindow(QWindow *window) +{ + if (!window) { + return nullptr; + } + + QPlatformNativeInterface *native = qGuiApp->platformNativeInterface(); + if (!native) { + return nullptr; + } + + return reinterpret_cast<xdg_toplevel *>(native->nativeResourceForWindow(QByteArrayLiteral("xdg_toplevel"), window)); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-6.13.0/src/platforms/wayland/waylandxdgdialogv1.cpp new/kwindowsystem-6.14.0/src/platforms/wayland/waylandxdgdialogv1.cpp --- old/kwindowsystem-6.13.0/src/platforms/wayland/waylandxdgdialogv1.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kwindowsystem-6.14.0/src/platforms/wayland/waylandxdgdialogv1.cpp 2025-05-02 16:26:08.000000000 +0200 @@ -0,0 +1,48 @@ +/* + SPDX-FileCopyrightText: 2025 Kai Uwe Broulik <k...@broulik.de> + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +#include "waylandxdgdialogv1_p.h" + +#include <QGuiApplication> + +WaylandXdgDialogV1::WaylandXdgDialogV1(::xdg_dialog_v1 *object) + : QObject() + , QtWayland::xdg_dialog_v1(object) +{ +} + +WaylandXdgDialogV1::~WaylandXdgDialogV1() +{ + if (qGuiApp) { + destroy(); + } +} + +WaylandXdgDialogWmV1::WaylandXdgDialogWmV1() + : QWaylandClientExtensionTemplate<WaylandXdgDialogWmV1>(1) +{ + initialize(); +} + +WaylandXdgDialogWmV1::~WaylandXdgDialogWmV1() +{ + if (qGuiApp && isActive()) { + destroy(); + } +} + +WaylandXdgDialogWmV1 &WaylandXdgDialogWmV1::self() +{ + static WaylandXdgDialogWmV1 s_instance; + return s_instance; +} + +WaylandXdgDialogV1 *WaylandXdgDialogWmV1::getDialog(struct ::xdg_toplevel *toplevel) +{ + return new WaylandXdgDialogV1(get_xdg_dialog(toplevel)); +} + +#include "moc_waylandxdgdialogv1_p.cpp" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-6.13.0/src/platforms/wayland/waylandxdgdialogv1_p.h new/kwindowsystem-6.14.0/src/platforms/wayland/waylandxdgdialogv1_p.h --- old/kwindowsystem-6.13.0/src/platforms/wayland/waylandxdgdialogv1_p.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kwindowsystem-6.14.0/src/platforms/wayland/waylandxdgdialogv1_p.h 2025-05-02 16:26:08.000000000 +0200 @@ -0,0 +1,36 @@ +/* + SPDX-FileCopyrightText: 2025 Kai Uwe Broulik <k...@broulik.de> + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +#ifndef WAYLANDXDGDIALOGV1_P_H +#define WAYLANDXDGDIALOGV1_P_H + +#include "qwayland-xdg-dialog-v1.h" + +#include <QObject> +#include <QtWaylandClient/QWaylandClientExtension> + +class WaylandXdgDialogV1 : public QObject, public QtWayland::xdg_dialog_v1 +{ + Q_OBJECT +public: + explicit WaylandXdgDialogV1(::xdg_dialog_v1 *object); + ~WaylandXdgDialogV1() override; +}; + +class WaylandXdgDialogWmV1 : public QWaylandClientExtensionTemplate<WaylandXdgDialogWmV1>, public QtWayland::xdg_wm_dialog_v1 +{ +public: + ~WaylandXdgDialogWmV1() override; + + static WaylandXdgDialogWmV1 &self(); + + WaylandXdgDialogV1 *getDialog(struct ::xdg_toplevel *toplevel); + +private: + WaylandXdgDialogWmV1(); +}; + +#endif // WAYLANDXDGDIALOGV1_P_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-6.13.0/src/platforms/wayland/windowsystem.cpp new/kwindowsystem-6.14.0/src/platforms/wayland/windowsystem.cpp --- old/kwindowsystem-6.13.0/src/platforms/wayland/windowsystem.cpp 2025-04-04 16:03:51.000000000 +0200 +++ new/kwindowsystem-6.14.0/src/platforms/wayland/windowsystem.cpp 2025-05-02 16:26:08.000000000 +0200 @@ -8,6 +8,7 @@ #include "logging.h" #include "surfacehelper.h" #include "waylandxdgactivationv1_p.h" +#include "waylandxdgdialogv1_p.h" #include "waylandxdgforeignv2_p.h" #include <KWaylandExtras> @@ -16,10 +17,12 @@ #include "qwayland-plasma-window-management.h" #include <QEvent> #include <QGuiApplication> +#include <QLibraryInfo> #include <QPixmap> #include <QPoint> #include <QString> #include <QTimer> +#include <QVersionNumber> #include <QWaylandClientExtensionTemplate> #include <QWindow> #include <qpa/qplatformnativeinterface.h> @@ -284,6 +287,23 @@ connect(imported, &QObject::destroyed, waylandWindow, [waylandWindow] { waylandWindow->setProperty(c_kdeXdgForeignImportedProperty, QVariant()); }); + + // Before Qt 6.10, Qt sets XDG Dialog modal only when it has a transient parent. + if (QLibraryInfo::version() < QVersionNumber(6, 10, 0)) { + auto *oldDialog = waylandWindow->findChild<WaylandXdgDialogV1 *>(); + if (window->modality() != Qt::NonModal && !oldDialog) { + auto &xdgDialog = WaylandXdgDialogWmV1::self(); + if (xdgDialog.isActive()) { + if (auto *xdgToplevel = xdgToplevelForWindow(window)) { + auto *dialog = xdgDialog.getDialog(xdgToplevel); + dialog->set_modal(); + dialog->setParent(waylandWindow); + } + } + } else { + delete oldDialog; + } + } } #include "moc_windowsystem.cpp"