Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kwindowsystem for openSUSE:Factory checked in at 2022-02-24 18:19:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kwindowsystem (Old) and /work/SRC/openSUSE:Factory/.kwindowsystem.new.1958 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kwindowsystem" Thu Feb 24 18:19:57 2022 rev:103 rq:954285 version:5.91.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kwindowsystem/kwindowsystem.changes 2022-01-11 21:19:43.388977968 +0100 +++ /work/SRC/openSUSE:Factory/.kwindowsystem.new.1958/kwindowsystem.changes 2022-02-24 18:22:25.938674668 +0100 @@ -1,0 +2,18 @@ +Sun Feb 6 10:17:16 UTC 2022 - Christophe Giboudeaux <christo...@krop.fr> + +- Update to 5.91.0 + * New feature release + * For more details please see: + * https://kde.org/announcements/frameworks/5/5.91.0 +- Changes since 5.90.0: + * Check executables exist in PATH before passing them to QProcess + * fix typo + * install plugins in kf<version> + * Fix doxygen docs for requestXdgActivationToken + * Add CI qt6 support + * Avoid XKeycodeToKeysym in KKeyServer::initializeMods (kde#426684) + * Remove placeholder wayland platform plugin + * [kwindowinfo] Add support for reading _GTK_APPLICATION_ID + * Add KWindowSystem::updateStartupId(QWindow *window) + +------------------------------------------------------------------- Old: ---- kwindowsystem-5.90.0.tar.xz kwindowsystem-5.90.0.tar.xz.sig New: ---- kwindowsystem-5.91.0.tar.xz kwindowsystem-5.91.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kwindowsystem.spec ++++++ --- /var/tmp/diff_new_pack.YOrwKP/_old 2022-02-24 18:22:26.494674520 +0100 +++ /var/tmp/diff_new_pack.YOrwKP/_new 2022-02-24 18:22:26.498674519 +0100 @@ -17,14 +17,14 @@ %define lname libKF5WindowSystem5 -%define _tar_path 5.90 +%define _tar_path 5.91 # Full KF5 version (e.g. 5.33.0) %{!?_kf5_version: %global _kf5_version %{version}} # Last major and minor KF5 version (e.g. 5.33) %{!?_kf5_bugfix_version: %define _kf5_bugfix_version %(echo %{_kf5_version} | awk -F. '{print $1"."$2}')} %bcond_without released Name: kwindowsystem -Version: 5.90.0 +Version: 5.91.0 Release: 0 Summary: KDE Access to window manager License: LGPL-2.1-or-later @@ -120,7 +120,6 @@ %{_kf5_debugdir}/kwindowsystem.categories %{_kf5_debugdir}/*.renamecategories %{_kf5_libdir}/libKF5WindowSystem.so.* -%{_kf5_plugindir}/kf5/kwindowsystem/KF5WindowSystemWaylandPlugin.so %{_kf5_plugindir}/kf5/kwindowsystem/KF5WindowSystemX11Plugin.so %files devel ++++++ kwindowsystem-5.90.0.tar.xz -> kwindowsystem-5.91.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/.gitlab-ci.yml new/kwindowsystem-5.91.0/.gitlab-ci.yml --- old/kwindowsystem-5.90.0/.gitlab-ci.yml 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/.gitlab-ci.yml 2022-02-05 22:30:50.000000000 +0100 @@ -5,3 +5,4 @@ - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/android.yml - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml + - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/CMakeLists.txt new/kwindowsystem-5.91.0/CMakeLists.txt --- old/kwindowsystem-5.90.0/CMakeLists.txt 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/CMakeLists.txt 2022-02-05 22:30:50.000000000 +0100 @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.16) -set(KF_VERSION "5.90.0") # handled by release scripts +set(KF_VERSION "5.91.0") # handled by release scripts project(KWindowSystem VERSION ${KF_VERSION}) # ECM setup include(FeatureSummary) -find_package(ECM 5.90.0 NO_MODULE) +find_package(ECM 5.91.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) @@ -117,7 +117,7 @@ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kwindowsystem_version.h - DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF} COMPONENT Devel ) + DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF}/KWindowSystem COMPONENT Devel ) feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/autotests/kwindowsystem_platform_wayland_test.cpp new/kwindowsystem-5.91.0/autotests/kwindowsystem_platform_wayland_test.cpp --- old/kwindowsystem-5.90.0/autotests/kwindowsystem_platform_wayland_test.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/autotests/kwindowsystem_platform_wayland_test.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -7,6 +7,7 @@ #include <QFileSystemWatcher> #include <QProcess> #include <QSignalSpy> +#include <QStandardPaths> #include <QTest> class TestKWindowsystemPlatformWayland : public QObject @@ -24,9 +25,12 @@ void TestKWindowsystemPlatformWayland::initTestCase() { + const QString westonExec = QStandardPaths::findExecutable(QStringLiteral("weston")); + QVERIFY(!westonExec.isEmpty()); + // start Weston m_westonProcess.reset(new QProcess); - m_westonProcess->setProgram(QStringLiteral("weston")); + m_westonProcess->setProgram(westonExec); m_westonProcess->setArguments(QStringList({QStringLiteral("--socket=kwindowsystem-platform-wayland-0"), QStringLiteral("--backend=headless-backend.so")})); m_westonProcess->start(); if (!m_westonProcess->waitForStarted()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/autotests/netrootinfotestwm.cpp new/kwindowsystem-5.91.0/autotests/netrootinfotestwm.cpp --- old/kwindowsystem-5.90.0/autotests/netrootinfotestwm.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/autotests/netrootinfotestwm.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -5,9 +5,12 @@ */ #include "nettesthelper.h" -#include <QProcess> #include <netwm.h> + +#include <QProcess> +#include <QStandardPaths> #include <qtest_widgets.h> + // system #include <unistd.h> @@ -82,11 +85,14 @@ m_connection = nullptr; m_supportWindow = XCB_WINDOW_NONE; // start Xvfb + const QString xfvbExec = QStandardPaths::findExecutable(QStringLiteral("Xvfb")); + QVERIFY(!xfvbExec.isEmpty()); + m_xvfb.reset(new QProcess); // use pipe to pass fd to Xvfb to get back the display id int pipeFds[2]; QVERIFY(pipe(pipeFds) == 0); - m_xvfb->start(QStringLiteral("Xvfb"), QStringList{QStringLiteral("-displayfd"), QString::number(pipeFds[1])}); + m_xvfb->start(xfvbExec, QStringList{QStringLiteral("-displayfd"), QString::number(pipeFds[1])}); QVERIFY(m_xvfb->waitForStarted()); QCOMPARE(m_xvfb->state(), QProcess::Running); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/autotests/netwininfotestclient.cpp new/kwindowsystem-5.91.0/autotests/netwininfotestclient.cpp --- old/kwindowsystem-5.90.0/autotests/netwininfotestclient.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/autotests/netwininfotestclient.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -5,9 +5,12 @@ */ #include "nettesthelper.h" -#include <QProcess> #include <netwm.h> + +#include <QProcess> +#include <QStandardPaths> #include <qtest_widgets.h> + // system #include <unistd.h> @@ -123,6 +126,10 @@ m_connection = nullptr; m_rootWindow = XCB_WINDOW_NONE; m_testWindow = XCB_WINDOW_NONE; + + const QString xfvbExec = QStandardPaths::findExecutable(QStringLiteral("Xvfb")); + QVERIFY(!xfvbExec.isEmpty()); + // start Xvfb m_xvfb.reset(new QProcess); // use pipe to pass fd to Xvfb to get back the display id diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/autotests/netwininfotestwm.cpp new/kwindowsystem-5.91.0/autotests/netwininfotestwm.cpp --- old/kwindowsystem-5.90.0/autotests/netwininfotestwm.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/autotests/netwininfotestwm.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -5,9 +5,12 @@ */ #include "nettesthelper.h" -#include <QProcess> #include <netwm.h> + +#include <QProcess> +#include <QStandardPaths> #include <qtest_widgets.h> + // system #include <unistd.h> @@ -105,6 +108,10 @@ m_connection = nullptr; m_rootWindow = XCB_WINDOW_NONE; m_testWindow = XCB_WINDOW_NONE; + + const QString xfvbExec = QStandardPaths::findExecutable(QStringLiteral("Xvfb")); + QVERIFY(!xfvbExec.isEmpty()); + // start Xvfb m_xvfb.reset(new QProcess); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/po/nb/kwindowsystem5_qt.po new/kwindowsystem-5.91.0/po/nb/kwindowsystem5_qt.po --- old/kwindowsystem-5.90.0/po/nb/kwindowsystem5_qt.po 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/po/nb/kwindowsystem5_qt.po 2022-02-05 22:30:50.000000000 +0100 @@ -27,7 +27,7 @@ "X-Qt-Contexts: true\n" #: platforms/osx/kwindowsystem.cpp:571 platforms/windows/kwindowsystem.cpp:626 -#: platforms/xcb/kwindowsystem.cpp:995 +#: platforms/xcb/kwindowsystem.cpp:1002 #, qt-format msgctxt "KWindowSystem|" msgid "Desktop %1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/po/nn/kwindowsystem5_qt.po new/kwindowsystem-5.91.0/po/nn/kwindowsystem5_qt.po --- old/kwindowsystem-5.90.0/po/nn/kwindowsystem5_qt.po 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/po/nn/kwindowsystem5_qt.po 2022-02-05 22:30:50.000000000 +0100 @@ -24,7 +24,7 @@ "X-Qt-Contexts: true\n" #: platforms/osx/kwindowsystem.cpp:571 platforms/windows/kwindowsystem.cpp:626 -#: platforms/xcb/kwindowsystem.cpp:995 +#: platforms/xcb/kwindowsystem.cpp:1002 #, qt-format msgctxt "KWindowSystem|" msgid "Desktop %1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/po/se/kwindowsystem5_qt.po new/kwindowsystem-5.91.0/po/se/kwindowsystem5_qt.po --- old/kwindowsystem-5.90.0/po/se/kwindowsystem5_qt.po 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/po/se/kwindowsystem5_qt.po 2022-02-05 22:30:50.000000000 +0100 @@ -21,7 +21,7 @@ "X-Qt-Contexts: true\n" #: platforms/osx/kwindowsystem.cpp:571 platforms/windows/kwindowsystem.cpp:626 -#: platforms/xcb/kwindowsystem.cpp:995 +#: platforms/xcb/kwindowsystem.cpp:1002 #, fuzzy, qt-format msgctxt "KWindowSystem|" msgid "Desktop %1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/po/zh_CN/kwindowsystem5_qt.po new/kwindowsystem-5.91.0/po/zh_CN/kwindowsystem5_qt.po --- old/kwindowsystem-5.90.0/po/zh_CN/kwindowsystem5_qt.po 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/po/zh_CN/kwindowsystem5_qt.po 2022-02-05 22:30:50.000000000 +0100 @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: kdeorg\n" -"PO-Revision-Date: 2021-12-22 14:06\n" +"PO-Revision-Date: 2022-01-08 15:23\n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/CMakeLists.txt new/kwindowsystem-5.91.0/src/CMakeLists.txt --- old/kwindowsystem-5.90.0/src/CMakeLists.txt 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/CMakeLists.txt 2022-02-05 22:30:50.000000000 +0100 @@ -14,7 +14,6 @@ kwindowinfo.cpp kwindowshadow.cpp kwindowsystem.cpp - platforms/wayland/kwindowsystem.cpp pluginwrapper.cpp kwindowsystemplugininterface.cpp ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/config-kwindowsystem.h.cmake new/kwindowsystem-5.91.0/src/config-kwindowsystem.h.cmake --- old/kwindowsystem-5.90.0/src/config-kwindowsystem.h.cmake 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/config-kwindowsystem.h.cmake 2022-02-05 22:30:50.000000000 +0100 @@ -7,4 +7,4 @@ #cmakedefine01 KWINDOWSYSTEM_HAVE_XFIXES /* Path to xcb plugin */ -#define XCB_PLUGIN_PATH "${KDE_INSTALL_FULL_PLUGINDIR}/kf5/kwindowsystem/KF5WindowSystemX11Plugin.so" +#define XCB_PLUGIN_PATH "${KDE_INSTALL_FULL_PLUGINDIR}/kf${QT_MAJOR_VERSION}/kwindowsystem/KF5WindowSystemX11Plugin.so" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/kstartupinfo.cpp new/kwindowsystem-5.91.0/src/kstartupinfo.cpp --- old/kwindowsystem-5.90.0/src/kstartupinfo.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/kstartupinfo.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -62,8 +62,9 @@ #include <kxmessages.h> #endif +#if KWINDOWSYSTEM_HAVE_X11 static const char NET_STARTUP_MSG[] = "_NET_STARTUP_INFO"; -static const char NET_STARTUP_WINDOW[] = "_NET_STARTUP_ID"; +#endif // DESKTOP_STARTUP_ID is used also in kinit/wrapper.c , // kdesu in both kdelibs and kdebase and who knows where else static const char NET_STARTUP_ENV[] = "DESKTOP_STARTUP_ID"; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/kwindowinfo.cpp new/kwindowsystem-5.91.0/src/kwindowinfo.cpp --- old/kwindowsystem-5.90.0/src/kwindowinfo.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/kwindowinfo.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -24,6 +24,9 @@ KWindowInfoPrivateDesktopFileNameExtension::KWindowInfoPrivateDesktopFileNameExtension() = default; KWindowInfoPrivateDesktopFileNameExtension::~KWindowInfoPrivateDesktopFileNameExtension() = default; +KWindowInfoPrivateGtkApplicationIdExtension::KWindowInfoPrivateGtkApplicationIdExtension() = default; +KWindowInfoPrivateGtkApplicationIdExtension::~KWindowInfoPrivateGtkApplicationIdExtension() = default; + KWindowInfoPrivatePidExtension::KWindowInfoPrivatePidExtension() = default; KWindowInfoPrivatePidExtension::~KWindowInfoPrivatePidExtension() = default; @@ -38,6 +41,7 @@ NET::Properties properties; NET::Properties2 properties2; KWindowInfoPrivateDesktopFileNameExtension *desktopFileNameExtension; + KWindowInfoPrivateGtkApplicationIdExtension *gtkApplicationIdExtension; KWindowInfoPrivatePidExtension *pidExtension; KWindowInfoPrivateAppMenuExtension *appMenuExtension; }; @@ -47,6 +51,7 @@ , properties(properties) , properties2(properties2) , desktopFileNameExtension(nullptr) + , gtkApplicationIdExtension(nullptr) , pidExtension(nullptr) , appMenuExtension(nullptr) { @@ -76,6 +81,16 @@ d->desktopFileNameExtension = extension; } +KWindowInfoPrivateGtkApplicationIdExtension *KWindowInfoPrivate::gtkApplicationIdExtension() const +{ + return d->gtkApplicationIdExtension; +} + +void KWindowInfoPrivate::installGtkApplicationIdExtension(KWindowInfoPrivateGtkApplicationIdExtension *extension) +{ + d->gtkApplicationIdExtension = extension; +} + KWindowInfoPrivatePidExtension *KWindowInfoPrivate::pidExtension() const { return d->pidExtension; @@ -409,6 +424,14 @@ } return QByteArray(); } + +QByteArray KWindowInfo::gtkApplicationId() const +{ + if (auto extension = d->gtkApplicationIdExtension()) { + return extension->gtkApplicationId(); + } + return QByteArray(); +} QByteArray KWindowInfo::applicationMenuServiceName() const { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/kwindowinfo.h new/kwindowsystem-5.91.0/src/kwindowinfo.h --- old/kwindowsystem-5.90.0/src/kwindowinfo.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/kwindowinfo.h 2022-02-05 22:30:50.000000000 +0100 @@ -557,6 +557,25 @@ QByteArray desktopFileName() const; /** + * Returns the GTK application id of the window if present. + * + * This is comparable to desktopFileName. + * + * Requires NET::WM2GTKApplicationId passed as properties2 parameter to the constructor. + * + * @code + * QWidget *window = new QWidget(nullptr); + * window->show(); + * KWindowInfo info(window->winId(), 0, NET::WM2GTKApplicationId); + * if (info.valid()) + * info.gtkApplicationId(); + * @endcode + * + * @since 5.91 + **/ + QByteArray gtkApplicationId() const; + + /** * Returns the process ID of the window's application if present. * * Requires NET::WMPid passed as properties parameter to the constructor. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/kwindowinfo_p.h new/kwindowsystem-5.91.0/src/kwindowinfo_p.h --- old/kwindowsystem-5.90.0/src/kwindowinfo_p.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/kwindowinfo_p.h 2022-02-05 22:30:50.000000000 +0100 @@ -18,6 +18,7 @@ #include <QWidgetList> //For WId class KWindowInfoPrivateDesktopFileNameExtension; +class KWindowInfoPrivateGtkApplicationIdExtension; class KWindowInfoPrivatePidExtension; class KWindowInfoPrivateAppMenuExtension; @@ -55,6 +56,7 @@ virtual bool actionSupported(NET::Action action) const = 0; KWindowInfoPrivateDesktopFileNameExtension *desktopFileNameExtension() const; + KWindowInfoPrivateGtkApplicationIdExtension *gtkApplicationIdExtension() const; KWindowInfoPrivatePidExtension *pidExtension() const; KWindowInfoPrivateAppMenuExtension *appMenuExtension() const; @@ -64,6 +66,7 @@ KWindowInfoPrivate(WId window, NET::Properties properties, NET::Properties2 properties2); void installDesktopFileNameExtension(KWindowInfoPrivateDesktopFileNameExtension *extension); + void installGtkApplicationIdExtension(KWindowInfoPrivateGtkApplicationIdExtension *extension); void installPidExtension(KWindowInfoPrivatePidExtension *extension); void installAppMenuExtension(KWindowInfoPrivateAppMenuExtension *extension); @@ -83,6 +86,17 @@ explicit KWindowInfoPrivateDesktopFileNameExtension(); }; +class KWINDOWSYSTEM_EXPORT KWindowInfoPrivateGtkApplicationIdExtension +{ +public: + virtual ~KWindowInfoPrivateGtkApplicationIdExtension(); + + virtual QByteArray gtkApplicationId() const = 0; + +protected: + explicit KWindowInfoPrivateGtkApplicationIdExtension(); +}; + class KWINDOWSYSTEM_EXPORT KWindowInfoPrivatePidExtension { public: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/kwindowsystem.cpp new/kwindowsystem-5.91.0/src/kwindowsystem.cpp --- old/kwindowsystem-5.90.0/src/kwindowsystem.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/kwindowsystem.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -4,6 +4,7 @@ SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ #include "kwindowsystem.h" +#include "kstartupinfo.h" #include "kwindowsystem_dummy_p.h" #include "kwindowsystemplugininterface_p.h" #include "pluginwrapper_p.h" @@ -19,6 +20,11 @@ #endif #include <QWindow> #if KWINDOWSYSTEM_HAVE_X11 +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +#include <private/qtx11extras_p.h> +#else +#include <QX11Info> +#endif #endif // QPoint and QSize all have handy / operators which are useful for scaling, positions and sizes for high DPI support @@ -106,7 +112,7 @@ bool KWindowSystemPrivateDummy::compositingActive() { - return false; + return KWindowSystem::isPlatformWayland(); } int KWindowSystemPrivateDummy::currentDesktop() @@ -781,6 +787,30 @@ return platform() == Platform::Wayland; } +void KWindowSystem::updateStartupId(QWindow *window) +{ + // clang-format off + // TODO: move to a new KWindowSystemPrivate interface +#if KWINDOWSYSTEM_HAVE_X11 + if (isPlatformX11()) { + const QByteArray startupId = QX11Info::nextStartupId(); + if (!startupId.isEmpty()) { + KStartupInfo::setNewStartupId(window, startupId); + } + } else +#else + Q_UNUSED(window); +#endif + if (isPlatformWayland()) { + const QString token = qEnvironmentVariable("XDG_ACTIVATION_TOKEN"); + if (!token.isEmpty()) { + setCurrentXdgActivationToken(token); + qunsetenv("XDG_ACTIVATION_TOKEN"); + } + } + // clang-format on +} + void KWindowSystem::requestXdgActivationToken(QWindow *win, uint32_t serial, const QString &app_id) { Q_D(KWindowSystem); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/kwindowsystem.h new/kwindowsystem-5.91.0/src/kwindowsystem.h --- old/kwindowsystem-5.90.0/src/kwindowsystem.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/kwindowsystem.h 2022-02-05 22:30:50.000000000 +0100 @@ -640,6 +640,25 @@ static QPoint constrainViewportRelativePosition(const QPoint &pos); /** + * Updates the platform-specific startup id, if any. + * + * This method is to be called when a running application instance + * is reused for handling the request to start this application. + * A typical use would be in the handler of the KDBusService activation signal. + * + * For X11, this updates the id for the Startup Notification protocol, + * taking the id from QX11Info::nextStartupId(), if not empty. + * For Wayland, this updates the token for the XDG Activation protocol, + * taking the token from the "XDG_ACTIVATION_TOKEN" environment variable + * and then unsetting it, if not empty. + * + * @param window the main window (needed by X11 platform) + * + * @since 5.91 + */ + static void updateStartupId(QWindow *window); + + /** * Enum describing the windowing system platform used by the QGuiApplication. * @see platform * @since 5.25 @@ -687,9 +706,9 @@ /** * Requests an xdg_activation_v1 token for a specific window. * - * @p win window in behalf this request is made - * @p serial of the event that triggered the request - * @p app_id identifier of the application that we are launching + * @param win window in behalf this request is made + * @param serial of the event that triggered the request + * @param app_id identifier of the application that we are launching * * @see currentSerial * @since 5.83 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/netwm_def.h new/kwindowsystem-5.91.0/src/netwm_def.h --- old/kwindowsystem-5.90.0/src/netwm_def.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/netwm_def.h 2022-02-05 22:30:50.000000000 +0100 @@ -781,6 +781,7 @@ @li WM2OpaqueRegion @li WM2DesktopFileName the base name of the desktop file name or the full path to the desktop file @li WM2GTKFrameExtents extents of the shadow drawn by the client + @li WM2GTKApplicationId _GTK_APPLICATION_ID @see Properties2 **/ @@ -816,6 +817,7 @@ WM2GTKFrameExtents = 1u << 27, // NOT STANDARD @since 5.65 WM2AppMenuServiceName = 1u << 28, // NOT STANDARD @since 5.69 WM2AppMenuObjectPath = 1u << 29, // NOT STANDARD @since 5.69 + WM2GTKApplicationId = 1u << 30, // NOT STANDARD @since 5.91 WM2AllProperties = ~0u, }; /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/CMakeLists.txt new/kwindowsystem-5.91.0/src/platforms/CMakeLists.txt --- old/kwindowsystem-5.90.0/src/platforms/CMakeLists.txt 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/CMakeLists.txt 2022-02-05 22:30:50.000000000 +0100 @@ -1,7 +1,6 @@ if(APPLE) add_subdirectory(osx) endif() -add_subdirectory(wayland) if(WIN32) add_subdirectory(windows) endif() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/wayland/CMakeLists.txt new/kwindowsystem-5.91.0/src/platforms/wayland/CMakeLists.txt --- old/kwindowsystem-5.90.0/src/platforms/wayland/CMakeLists.txt 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/wayland/CMakeLists.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -add_library(KF5WindowSystemWaylandPlugin MODULE) - -target_sources(KF5WindowSystemWaylandPlugin PRIVATE - kwindowsystem.cpp - plugin.cpp -) - -target_link_libraries(KF5WindowSystemWaylandPlugin - KF5WindowSystem -) - -set_target_properties( - KF5WindowSystemWaylandPlugin - PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/kf5/kwindowsystem" -) - -install( - TARGETS - KF5WindowSystemWaylandPlugin - DESTINATION - ${KDE_INSTALL_PLUGINDIR}/kf5/kwindowsystem/ -) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/wayland/kwindowsystem.cpp new/kwindowsystem-5.91.0/src/platforms/wayland/kwindowsystem.cpp --- old/kwindowsystem-5.90.0/src/platforms/wayland/kwindowsystem.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/wayland/kwindowsystem.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,292 +0,0 @@ -/* - SPDX-FileCopyrightText: 2015 Martin Gr????lin <mgraess...@kde.org> - - SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL -*/ - -#include "kwindowsystem_p_wayland.h" -#include <QList> -#include <QMetaMethod> -#include <QPixmap> - -QList<WId> KWindowSystemPrivateWayland::windows() -{ - return QList<WId>(); -} - -QList<WId> KWindowSystemPrivateWayland::stackingOrder() -{ - return QList<WId>(); -} - -WId KWindowSystemPrivateWayland::activeWindow() -{ - return 0; -} - -void KWindowSystemPrivateWayland::activateWindow(WId win, long time) -{ - Q_UNUSED(win) - Q_UNUSED(time) -} - -void KWindowSystemPrivateWayland::forceActiveWindow(WId win, long time) -{ - Q_UNUSED(win) - Q_UNUSED(time) -} - -void KWindowSystemPrivateWayland::demandAttention(WId win, bool set) -{ - Q_UNUSED(win) - Q_UNUSED(set) -} - -bool KWindowSystemPrivateWayland::compositingActive() -{ - return true; -} - -int KWindowSystemPrivateWayland::currentDesktop() -{ - return 0; -} - -int KWindowSystemPrivateWayland::numberOfDesktops() -{ - return 0; -} - -void KWindowSystemPrivateWayland::setCurrentDesktop(int desktop) -{ - Q_UNUSED(desktop) -} - -void KWindowSystemPrivateWayland::setOnAllDesktops(WId win, bool b) -{ - Q_UNUSED(win) - Q_UNUSED(b) -} - -void KWindowSystemPrivateWayland::setOnDesktop(WId win, int desktop) -{ - Q_UNUSED(win) - Q_UNUSED(desktop) -} - -void KWindowSystemPrivateWayland::setOnActivities(WId win, const QStringList &activities) -{ - Q_UNUSED(win) - Q_UNUSED(activities) -} - -#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(5, 0) -WId KWindowSystemPrivateWayland::transientFor(WId window) -{ - Q_UNUSED(window) - return 0; -} - -WId KWindowSystemPrivateWayland::groupLeader(WId window) -{ - Q_UNUSED(window) - return 0; -} -#endif - -QPixmap KWindowSystemPrivateWayland::icon(WId win, int width, int height, bool scale, int flags) -{ - Q_UNUSED(win) - Q_UNUSED(width) - Q_UNUSED(height) - Q_UNUSED(scale) - Q_UNUSED(flags) - return QPixmap(); -} - -void KWindowSystemPrivateWayland::setIcons(WId win, const QPixmap &icon, const QPixmap &miniIcon) -{ - Q_UNUSED(win) - Q_UNUSED(icon) - Q_UNUSED(miniIcon) -} - -void KWindowSystemPrivateWayland::setType(WId win, NET::WindowType windowType) -{ - Q_UNUSED(win) - Q_UNUSED(windowType) -} - -void KWindowSystemPrivateWayland::setState(WId win, NET::States state) -{ - Q_UNUSED(win) - Q_UNUSED(state) -} - -void KWindowSystemPrivateWayland::clearState(WId win, NET::States state) -{ - Q_UNUSED(win) - Q_UNUSED(state) -} - -void KWindowSystemPrivateWayland::minimizeWindow(WId win) -{ - Q_UNUSED(win) -} - -void KWindowSystemPrivateWayland::unminimizeWindow(WId win) -{ - Q_UNUSED(win) -} - -void KWindowSystemPrivateWayland::raiseWindow(WId win) -{ - Q_UNUSED(win) -} - -void KWindowSystemPrivateWayland::lowerWindow(WId win) -{ - Q_UNUSED(win) -} - -bool KWindowSystemPrivateWayland::icccmCompliantMappingState() -{ - return false; -} - -QRect KWindowSystemPrivateWayland::workArea(int desktop) -{ - Q_UNUSED(desktop) - return QRect(); -} - -QRect KWindowSystemPrivateWayland::workArea(const QList<WId> &excludes, int desktop) -{ - Q_UNUSED(excludes) - Q_UNUSED(desktop) - return QRect(); -} - -QString KWindowSystemPrivateWayland::desktopName(int desktop) -{ - Q_UNUSED(desktop) - return QString(); -} - -void KWindowSystemPrivateWayland::setDesktopName(int desktop, const QString &name) -{ - Q_UNUSED(desktop) - Q_UNUSED(name) -} - -bool KWindowSystemPrivateWayland::showingDesktop() -{ - return false; -} - -void KWindowSystemPrivateWayland::setShowingDesktop(bool showing) -{ - Q_UNUSED(showing); -} - -void KWindowSystemPrivateWayland::setUserTime(WId win, long time) -{ - Q_UNUSED(win) - Q_UNUSED(time) -} - -void KWindowSystemPrivateWayland::setExtendedStrut(WId win, - int left_width, - int left_start, - int left_end, - int right_width, - int right_start, - int right_end, - int top_width, - int top_start, - int top_end, - int bottom_width, - int bottom_start, - int bottom_end) -{ - Q_UNUSED(win) - Q_UNUSED(left_width) - Q_UNUSED(left_start) - Q_UNUSED(left_end) - Q_UNUSED(right_width) - Q_UNUSED(right_start) - Q_UNUSED(right_end) - Q_UNUSED(top_width) - Q_UNUSED(top_start) - Q_UNUSED(top_end) - Q_UNUSED(bottom_width) - Q_UNUSED(bottom_start) - Q_UNUSED(bottom_end) -} - -void KWindowSystemPrivateWayland::setStrut(WId win, int left, int right, int top, int bottom) -{ - Q_UNUSED(win) - Q_UNUSED(left) - Q_UNUSED(right) - Q_UNUSED(top) - Q_UNUSED(bottom) -} - -bool KWindowSystemPrivateWayland::allowedActionsSupported() -{ - return false; -} - -QString KWindowSystemPrivateWayland::readNameProperty(WId window, unsigned long atom) -{ - Q_UNUSED(window) - Q_UNUSED(atom) - return QString(); -} - -void KWindowSystemPrivateWayland::allowExternalProcessWindowActivation(int pid) -{ - Q_UNUSED(pid) -} - -void KWindowSystemPrivateWayland::setBlockingCompositing(WId window, bool active) -{ - Q_UNUSED(window) - Q_UNUSED(active) -} - -bool KWindowSystemPrivateWayland::mapViewport() -{ - return false; -} - -int KWindowSystemPrivateWayland::viewportToDesktop(const QPoint &pos) -{ - Q_UNUSED(pos) - return 0; -} - -int KWindowSystemPrivateWayland::viewportWindowToDesktop(const QRect &r) -{ - Q_UNUSED(r) - return 0; -} - -QPoint KWindowSystemPrivateWayland::desktopToViewport(int desktop, bool absolute) -{ - Q_UNUSED(desktop) - Q_UNUSED(absolute) - return QPoint(); -} - -QPoint KWindowSystemPrivateWayland::constrainViewportRelativePosition(const QPoint &pos) -{ - Q_UNUSED(pos) - return QPoint(); -} - -void KWindowSystemPrivateWayland::connectNotify(const QMetaMethod &signal) -{ - Q_UNUSED(signal) -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/wayland/kwindowsystem_p_wayland.h new/kwindowsystem-5.91.0/src/platforms/wayland/kwindowsystem_p_wayland.h --- old/kwindowsystem-5.90.0/src/platforms/wayland/kwindowsystem_p_wayland.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/wayland/kwindowsystem_p_wayland.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,75 +0,0 @@ -/* - SPDX-FileCopyrightText: 2015 Martin Gr????lin <mgraess...@kde.org> - - SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL -*/ -#ifndef KWINDOWSYSTEM_P_WAYLAND_H -#define KWINDOWSYSTEM_P_WAYLAND_H - -#include "kwindowsystem_p.h" - -class KWindowSystemPrivateWayland : public KWindowSystemPrivate -{ -public: - QList<WId> windows() override; - QList<WId> stackingOrder() override; - WId activeWindow() override; - void activateWindow(WId win, long time) override; - void forceActiveWindow(WId win, long time) override; - void demandAttention(WId win, bool set) override; - bool compositingActive() override; - int currentDesktop() override; - int numberOfDesktops() override; - void setCurrentDesktop(int desktop) override; - void setOnAllDesktops(WId win, bool b) override; - void setOnDesktop(WId win, int desktop) override; - void setOnActivities(WId win, const QStringList &activities) override; -#if KWINDOWSYSTEM_BUILD_DEPRECATED_SINCE(5, 0) - WId transientFor(WId window) override; - WId groupLeader(WId window) override; -#endif - QPixmap icon(WId win, int width, int height, bool scale, int flags) override; - void setIcons(WId win, const QPixmap &icon, const QPixmap &miniIcon) override; - void setType(WId win, NET::WindowType windowType) override; - void setState(WId win, NET::States state) override; - void clearState(WId win, NET::States state) override; - void minimizeWindow(WId win) override; - void unminimizeWindow(WId win) override; - void raiseWindow(WId win) override; - void lowerWindow(WId win) override; - bool icccmCompliantMappingState() override; - QRect workArea(int desktop) override; - QRect workArea(const QList<WId> &excludes, int desktop) override; - QString desktopName(int desktop) override; - void setDesktopName(int desktop, const QString &name) override; - bool showingDesktop() override; - void setShowingDesktop(bool showing) override; - void setUserTime(WId win, long time) override; - void setExtendedStrut(WId win, - int left_width, - int left_start, - int left_end, - int right_width, - int right_start, - int right_end, - int top_width, - int top_start, - int top_end, - int bottom_width, - int bottom_start, - int bottom_end) override; - void setStrut(WId win, int left, int right, int top, int bottom) override; - bool allowedActionsSupported() override; - QString readNameProperty(WId window, unsigned long atom) override; - void allowExternalProcessWindowActivation(int pid) override; - void setBlockingCompositing(WId window, bool active) override; - bool mapViewport() override; - int viewportToDesktop(const QPoint &pos) override; - int viewportWindowToDesktop(const QRect &r) override; - QPoint desktopToViewport(int desktop, bool absolute) override; - QPoint constrainViewportRelativePosition(const QPoint &pos) override; - - void connectNotify(const QMetaMethod &signal) override; -}; - -#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/wayland/plugin.cpp new/kwindowsystem-5.91.0/src/platforms/wayland/plugin.cpp --- old/kwindowsystem-5.90.0/src/platforms/wayland/plugin.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/wayland/plugin.cpp 1970-01-01 01:00:00.000000000 +0100 @@ -1,22 +0,0 @@ -/* - SPDX-FileCopyrightText: 2015 Martin Gr????lin <mgraess...@kde.org> - - SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL -*/ - -#include "plugin.h" -#include "kwindowsystem_p_wayland.h" - -WaylandPlugin::WaylandPlugin(QObject *parent) - : KWindowSystemPluginInterface(parent) -{ -} - -WaylandPlugin::~WaylandPlugin() -{ -} - -KWindowSystemPrivate *WaylandPlugin::createWindowSystem() -{ - return new KWindowSystemPrivateWayland(); -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/wayland/plugin.h new/kwindowsystem-5.91.0/src/platforms/wayland/plugin.h --- old/kwindowsystem-5.90.0/src/platforms/wayland/plugin.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/wayland/plugin.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ -/* - SPDX-FileCopyrightText: 2015 Martin Gr????lin <mgraess...@kde.org> - - SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL -*/ - -#ifndef KWINDOWSYSTEM_WAYLAND_PLUGIN_H -#define KWINDOWSYSTEM_WAYLAND_PLUGIN_H - -#include "kwindowsystemplugininterface_p.h" - -class WaylandPlugin : public KWindowSystemPluginInterface -{ - Q_OBJECT - Q_PLUGIN_METADATA(IID "org.kde.kwindowsystem.KWindowSystemPluginInterface" FILE "wayland.json") - Q_INTERFACES(KWindowSystemPluginInterface) - -public: - explicit WaylandPlugin(QObject *parent = nullptr); - ~WaylandPlugin() override; - - KWindowSystemPrivate *createWindowSystem() override; -}; - -#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/wayland/wayland.json new/kwindowsystem-5.91.0/src/platforms/wayland/wayland.json --- old/kwindowsystem-5.90.0/src/platforms/wayland/wayland.json 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/wayland/wayland.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,3 +0,0 @@ -{ - "platforms": ["wayland", "wayland-egl"] -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/CMakeLists.txt new/kwindowsystem-5.91.0/src/platforms/xcb/CMakeLists.txt --- old/kwindowsystem-5.90.0/src/platforms/xcb/CMakeLists.txt 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/CMakeLists.txt 2022-02-05 22:30:50.000000000 +0100 @@ -57,12 +57,12 @@ set_target_properties( KF5WindowSystemX11Plugin - PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/kf5/kwindowsystem" + PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/kf${QT_MAJOR_VERSION}/kwindowsystem" ) install( TARGETS KF5WindowSystemX11Plugin DESTINATION - ${KDE_INSTALL_PLUGINDIR}/kf5/kwindowsystem/ + ${KDE_INSTALL_PLUGINDIR}/kf${QT_MAJOR_VERSION}/kwindowsystem/ ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/atoms_p.h new/kwindowsystem-5.91.0/src/platforms/xcb/atoms_p.h --- old/kwindowsystem-5.90.0/src/platforms/xcb/atoms_p.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/atoms_p.h 2022-02-05 22:30:50.000000000 +0100 @@ -153,6 +153,7 @@ // GTK extensions ENUM(_GTK_FRAME_EXTENTS), + ENUM(_GTK_APPLICATION_ID), // application protocols ENUM(WM_PROTOCOLS), diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/kkeyserver.cpp new/kwindowsystem-5.91.0/src/platforms/xcb/kkeyserver.cpp --- old/kwindowsystem-5.90.0/src/platforms/xcb/kkeyserver.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/kkeyserver.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -496,6 +496,7 @@ } checkDisplay(); + xcb_key_symbols_t *symbols = xcb_key_symbols_alloc(QX11Info::connection()); XModifierKeymap *xmk = XGetModifierMapping(QX11Info::display()); int min_keycode; @@ -515,7 +516,7 @@ // found fixes the problem. for (int j = 0; j < xmk->max_keypermod; ++j) { for (int k = 0; k < keysyms_per_keycode; ++k) { - keySymX = XKeycodeToKeysym(QX11Info::display(), xmk->modifiermap[xmk->max_keypermod * i + j], k); + keySymX = xcb_key_symbols_get_keysym(symbols, xmk->modifiermap[xmk->max_keypermod * i + j], k); switch (keySymX) { case XK_Alt_L: @@ -628,6 +629,7 @@ g_rgX11ModInfo[2].modX = g_alt_mask; g_rgX11ModInfo[3].modX = g_meta_mask; + xcb_key_symbols_free(symbols); XFreeModifiermap(xmk); g_bInitializedMods = true; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/kwindowinfo.cpp new/kwindowsystem-5.91.0/src/platforms/xcb/kwindowinfo.cpp --- old/kwindowsystem-5.90.0/src/platforms/xcb/kwindowinfo.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/kwindowinfo.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -46,6 +46,7 @@ installDesktopFileNameExtension(this); installPidExtension(this); installAppMenuExtension(this); + installGtkApplicationIdExtension(this); KXErrorHandler handler; if (properties & NET::WMVisibleIconName) { @@ -451,6 +452,16 @@ return QByteArray(m_info->desktopFileName()); } +QByteArray KWindowInfoPrivateX11::gtkApplicationId() const +{ +#if !defined(KDE_NO_WARNING_OUTPUT) + if (!(m_info->passedProperties2() & NET::WM2DesktopFileName)) { + qWarning() << "Pass NET::WM2DesktopFileName to KWindowInfo"; + } +#endif + return QByteArray(m_info->gtkApplicationId()); +} + QByteArray KWindowInfoPrivateX11::applicationMenuObjectPath() const { #if !defined(KDE_NO_WARNING_OUTPUT) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/kwindowinfo_p_x11.h new/kwindowsystem-5.91.0/src/platforms/xcb/kwindowinfo_p_x11.h --- old/kwindowsystem-5.90.0/src/platforms/xcb/kwindowinfo_p_x11.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/kwindowinfo_p_x11.h 2022-02-05 22:30:50.000000000 +0100 @@ -14,7 +14,8 @@ class KWindowInfoPrivateX11 : public KWindowInfoPrivate, public KWindowInfoPrivateDesktopFileNameExtension, public KWindowInfoPrivatePidExtension, - public KWindowInfoPrivateAppMenuExtension + public KWindowInfoPrivateAppMenuExtension, + public KWindowInfoPrivateGtkApplicationIdExtension { public: KWindowInfoPrivateX11(WId window, NET::Properties properties, NET::Properties2 properties2); @@ -49,6 +50,7 @@ QByteArray desktopFileName() const override; QByteArray applicationMenuObjectPath() const override; QByteArray applicationMenuServiceName() const override; + QByteArray gtkApplicationId() const override; int pid() const override; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/netwm.cpp new/kwindowsystem-5.91.0/src/platforms/xcb/netwm.cpp --- old/kwindowsystem-5.90.0/src/platforms/xcb/netwm.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/netwm.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -156,6 +156,7 @@ delete[] p->activities; delete[] p->client_machine; delete[] p->desktop_file; + delete[] p->gtk_application_id; delete[] p->appmenu_object_path; delete[] p->appmenu_service_name; @@ -2521,6 +2522,7 @@ p->icon_sizes = nullptr; p->activities = (char *)nullptr; p->desktop_file = nullptr; + p->gtk_application_id = nullptr; p->appmenu_object_path = nullptr; p->appmenu_service_name = nullptr; p->blockCompositing = false; @@ -2583,6 +2585,7 @@ p->icon_sizes = nullptr; p->activities = (char *)nullptr; p->desktop_file = nullptr; + p->gtk_application_id = nullptr; p->appmenu_object_path = nullptr; p->appmenu_service_name = nullptr; p->blockCompositing = false; @@ -3792,6 +3795,8 @@ dirty2 |= WM2OpaqueRegion; } else if (pe->atom == p->atom(_KDE_NET_WM_DESKTOP_FILE)) { dirty2 = WM2DesktopFileName; + } else if (pe->atom == p->atom(_GTK_APPLICATION_ID)) { + dirty2 = WM2GTKApplicationId; } else if (pe->atom == p->atom(_NET_WM_FULLSCREEN_MONITORS)) { dirty2 = WM2FullscreenMonitors; } else if (pe->atom == p->atom(_GTK_FRAME_EXTENTS)) { @@ -3988,6 +3993,10 @@ cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_KDE_NET_WM_DESKTOP_FILE), p->atom(UTF8_STRING), 0, MAX_PROP_SIZE); } + if (dirty2 & WM2GTKApplicationId) { + cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_GTK_APPLICATION_ID), p->atom(UTF8_STRING), 0, MAX_PROP_SIZE); + } + if (dirty2 & WM2GTKFrameExtents) { cookies[c++] = xcb_get_property(p->conn, false, p->window, p->atom(_GTK_FRAME_EXTENTS), XCB_ATOM_CARDINAL, 0, 4); } @@ -4591,6 +4600,16 @@ } } + if (dirty2 & WM2GTKApplicationId) { + delete[] p->gtk_application_id; + p->gtk_application_id = nullptr; + + const QByteArray id = get_string_reply(p->conn, cookies[c++], p->atom(UTF8_STRING)); + if (id.length() > 0) { + p->gtk_application_id = nstrndup(id.constData(), id.length()); + } + } + if (dirty2 & WM2GTKFrameExtents) { p->gtk_frame_extents = NETStrut(); @@ -4930,6 +4949,11 @@ return p->desktop_file; } +const char *NETWinInfo::gtkApplicationId() const +{ + return p->gtk_application_id; +} + void NETRootInfo::virtual_hook(int, void *) { /*BASE::virtual_hook( id, data );*/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/netwm.h new/kwindowsystem-5.91.0/src/platforms/xcb/netwm.h --- old/kwindowsystem-5.90.0/src/platforms/xcb/netwm.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/netwm.h 2022-02-05 22:30:50.000000000 +0100 @@ -1627,6 +1627,12 @@ const char *desktopFileName() const; /** + * @returns The GTK application id of the window if present. + * @since 5.91 + **/ + const char *gtkApplicationId() const; + + /** * Sets the @p name as the D-BUS service name for the application menu. * @since 5.69 **/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/platforms/xcb/netwm_p.h new/kwindowsystem-5.91.0/src/platforms/xcb/netwm_p.h --- old/kwindowsystem-5.90.0/src/platforms/xcb/netwm_p.h 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/platforms/xcb/netwm_p.h 2022-02-05 22:30:50.000000000 +0100 @@ -168,7 +168,7 @@ xcb_window_t transient_for, window_group; xcb_pixmap_t icon_pixmap, icon_mask; NET::Actions allowed_actions; - char *class_class, *class_name, *window_role, *client_machine, *desktop_file, *appmenu_object_path, *appmenu_service_name; + char *class_class, *class_name, *window_role, *client_machine, *desktop_file, *appmenu_object_path, *appmenu_service_name, *gtk_application_id; NET::Properties properties; NET::Properties2 properties2; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kwindowsystem-5.90.0/src/pluginwrapper.cpp new/kwindowsystem-5.91.0/src/pluginwrapper.cpp --- old/kwindowsystem-5.90.0/src/pluginwrapper.cpp 2022-01-01 13:37:48.000000000 +0100 +++ new/kwindowsystem-5.91.0/src/pluginwrapper.cpp 2022-02-05 22:30:50.000000000 +0100 @@ -25,8 +25,8 @@ const auto paths = QCoreApplication::libraryPaths(); for (const QString &path : paths) { static const QStringList searchFolders{ - QStringLiteral("/kf5/org.kde.kwindowsystem.platforms"), - QStringLiteral("/kf5/kwindowsystem"), + QStringLiteral("/kf" QT_STRINGIFY(QT_VERSION_MAJOR)) + QStringLiteral("/org.kde.kwindowsystem.platforms"), + QStringLiteral("/kf" QT_STRINGIFY(QT_VERSION_MAJOR)) + QStringLiteral("/kwindowsystem"), }; for (const QString &searchFolder : searchFolders) { QDir pluginDir(path + searchFolder);