Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kglobalacceld6 for openSUSE:Factory checked in at 2026-02-16 13:05:51 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kglobalacceld6 (Old) and /work/SRC/openSUSE:Factory/.kglobalacceld6.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kglobalacceld6" Mon Feb 16 13:05:51 2026 rev:36 rq:1333070 version:6.6.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kglobalacceld6/kglobalacceld6.changes 2026-01-18 22:19:51.006039517 +0100 +++ /work/SRC/openSUSE:Factory/.kglobalacceld6.new.1977/kglobalacceld6.changes 2026-02-16 13:09:07.285539188 +0100 @@ -1,0 +2,34 @@ +Thu Feb 12 19:42:50 UTC 2026 - Fabian Vogt <[email protected]> + +- Update to 6.6.0: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.6.0 +- Changes since 6.5.91: + * Update version for new release 6.6.0 + +------------------------------------------------------------------- +Wed Jan 28 16:13:49 UTC 2026 - Fabian Vogt <[email protected]> + +- Update to 6.5.91: + * New bugfix release + * For more details see https://kde.org/announcements/plasma/6/6.5.91 +- Changes since 6.5.90: + * Update version for new release 6.5.91 + +------------------------------------------------------------------- +Sat Jan 17 20:25:49 UTC 2026 - Fabian Vogt <[email protected]> + +- Update to 6.5.90: + * New feature release + * For more details see https://kde.org/announcements/plasma/6/6.5.90 +- Changes since 6.5.5: + * Update version for new release 6.5.90 + * Do not consume modifier key releases for modifier-only shortcuts + * Refine, document, and test allowlist functionality + * Add ability to only allow a defined list of shortcuts + * Use better way to disable session management + * Add unittest for shortcut serialization + * Fix unneeded rewrites of kglobalshortcutrc on startup + * Update version for new release 6.5.80 + +------------------------------------------------------------------- Old: ---- kglobalacceld-6.5.5.tar.xz kglobalacceld-6.5.5.tar.xz.sig New: ---- kglobalacceld-6.6.0.tar.xz kglobalacceld-6.6.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kglobalacceld6.spec ++++++ --- /var/tmp/diff_new_pack.WpU1GR/_old 2026-02-16 13:09:08.721598938 +0100 +++ /var/tmp/diff_new_pack.WpU1GR/_new 2026-02-16 13:09:08.725599104 +0100 @@ -26,14 +26,14 @@ # Latest ABI-stable Plasma (e.g. 6.0 in KF6, but 6.0.80 in KUF) %{!?_plasma6_version: %define _plasma6_version %(echo %{_plasma6_bugfix} | awk -F. '{print $1"."$2}')} Name: kglobalacceld6 -Version: 6.5.5 +Version: 6.6.0 Release: 0 Summary: Global keyboard shortcut daemon License: LGPL-2.0-or-later URL: https://www.kde.org -Source: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz +Source: %{rname}-%{version}.tar.xz %if %{with released} -Source1: https://download.kde.org/stable/plasma/%{version}/%{rname}-%{version}.tar.xz.sig +Source1: %{rname}-%{version}.tar.xz.sig Source2: plasma.keyring %endif %if 0%{?suse_version} == 1500 ++++++ kglobalacceld-6.5.5.tar.xz -> kglobalacceld-6.6.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/CMakeLists.txt new/kglobalacceld-6.6.0/CMakeLists.txt --- old/kglobalacceld-6.5.5/CMakeLists.txt 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/CMakeLists.txt 2026-02-12 11:02:33.000000000 +0100 @@ -2,10 +2,10 @@ project(kglobalacceld) -set(PROJECT_VERSION "6.5.5") +set(PROJECT_VERSION "6.6.0") -set(QT_MIN_VERSION "6.9.0") -set(KF6_MIN_VERSION "6.18.0") +set(QT_MIN_VERSION "6.10.0") +set(KF6_MIN_VERSION "6.22.0") set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/autotests/CMakeLists.txt new/kglobalacceld-6.6.0/autotests/CMakeLists.txt --- old/kglobalacceld-6.5.5/autotests/CMakeLists.txt 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/autotests/CMakeLists.txt 2026-02-12 11:02:33.000000000 +0100 @@ -6,3 +6,4 @@ ecm_add_test(migrateconfigtest.cpp LINK_LIBRARIES Qt::Test KF6::ConfigCore KF6::Service KGlobalAccelD) ecm_add_test(shortcutstest.cpp LINK_LIBRARIES Qt::Test KF6::ConfigCore KF6::Service KGlobalAccelD dummyplugin) +ecm_add_test(allowlisttest.cpp LINK_LIBRARIES Qt::Test KF6::ConfigCore KF6::Service KGlobalAccelD dummyplugin) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/autotests/allowlisttest.cpp new/kglobalacceld-6.6.0/autotests/allowlisttest.cpp --- old/kglobalacceld-6.5.5/autotests/allowlisttest.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kglobalacceld-6.6.0/autotests/allowlisttest.cpp 2026-02-12 11:02:33.000000000 +0100 @@ -0,0 +1,196 @@ +/* + SPDX-FileCopyrightText: 2026 Kristen McWilliam <[email protected]> + + SPDX-License-Identifier: LGPL-2.0-or-later +*/ + +/** @file + * Autotests for allow-list functionality. + * + * Verifies that when the allow-list is enabled, only shortcuts + * specified in the allow-list are activated. + */ + +#include "dummy.h" +#include "kglobalacceld.h" + +#include <QDBusConnection> +#include <QPluginLoader> +#include <QSignalSpy> +#include <QStandardPaths> +#include <QTest> + +Q_IMPORT_PLUGIN(KGlobalAccelImpl) + +/** + * Timeout for waiting for signals in tests (in milliseconds). + */ +constexpr int SIGNAL_TIMEOUT_MS = 150; + +class AllowListTest : public QObject +{ + Q_OBJECT + +private Q_SLOTS: + void initTestCase(); + void testAllowList_data(); + void testAllowList(); + void testAllowListMultipleActions(); +}; + +void AllowListTest::initTestCase() +{ + QStandardPaths::setTestModeEnabled(true); + QCoreApplication::setApplicationName(QStringLiteral("allowlisttest")); + QCoreApplication::setOrganizationName(QStringLiteral("kde")); + qputenv("KGLOBALACCELD_PLATFORM", "dummy"); +} + +void AllowListTest::testAllowList_data() +{ + QTest::addColumn<bool>("useAllowList"); + QTest::addColumn<bool>("listAction"); + QTest::addColumn<bool>("expectTriggered"); + + QTest::newRow("allowlist disabled") << false << false << true; + QTest::newRow("allowlist enabled, not listed") << true << false << false; + QTest::newRow("allowlist enabled, listed") << true << true << true; +} + +void AllowListTest::testAllowList() +{ + QFETCH(bool, useAllowList); + QFETCH(bool, listAction); + QFETCH(bool, expectTriggered); + + const QString componentName = qApp->applicationName(); + const QString actionName = QStringLiteral("AllowListTestAction"); + + // Prepare clean config dir and allow-list config before daemon init so it is loaded on startup. + const QString configDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); + QDir().mkpath(configDir); + QFile::remove(configDir + QLatin1String("/kglobalaccelrc")); + QFile::remove(configDir + QLatin1String("/kglobalshortcutsrc")); + + QFile config(configDir + QLatin1String("/kglobalaccelrc")); + QVERIFY(config.open(QIODevice::WriteOnly | QIODevice::Truncate)); + QTextStream stream(&config); + stream << "[General]\n"; + stream << "useAllowList=" << (useAllowList ? "true" : "false") << "\n"; + if (useAllowList) { + stream << "[AllowedShortcuts]\n"; + if (listAction) { + stream << componentName << '=' << actionName << "\n"; + } + } + config.close(); + + // Ensure the DBus name is free before each init attempt. + QDBusConnection::sessionBus().unregisterService(QStringLiteral("org.kde.kglobalaccel")); + + auto daemon = std::make_unique<KGlobalAccelD>(); + QVERIFY(daemon->init()); + + KGlobalAccelImpl *interface = KGlobalAccelImpl::instance(); + QVERIFY(interface); + + auto action = std::make_unique<QAction>(); + action->setObjectName(actionName); + + const QKeySequence shortcut(Qt::CTRL | Qt::Key_L); + QVERIFY(KGlobalAccel::setGlobalShortcut(action.get(), shortcut)); + + QSignalSpy spy(action.get(), &QAction::triggered); + + interface->checkKeyEvent(shortcut[0].toCombined(), ShortcutKeyState::Pressed); + interface->checkKeyEvent(shortcut[0].toCombined(), ShortcutKeyState::Released); + + if (expectTriggered) { + QVERIFY(spy.wait()); + QCOMPARE(spy.count(), 1); + } else { + QVERIFY(!spy.wait(SIGNAL_TIMEOUT_MS)); + QCOMPARE(spy.count(), 0); + } + + KGlobalAccel::self()->removeAllShortcuts(action.get()); + + daemon.reset(); + QDBusConnection::sessionBus().unregisterService(QStringLiteral("org.kde.kglobalaccel")); +} + +void AllowListTest::testAllowListMultipleActions() +{ + const QString componentName = qApp->applicationName(); + const QStringList allowedActions = {QStringLiteral("AllowListTestActionOne"), QStringLiteral("AllowListTestActionTwo")}; + const QString disallowedAction = QStringLiteral("AllowListTestActionThree"); + + const QString configDir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation); + QDir().mkpath(configDir); + QFile::remove(configDir + QLatin1String("/kglobalaccelrc")); + QFile::remove(configDir + QLatin1String("/kglobalshortcutsrc")); + + QFile config(configDir + QLatin1String("/kglobalaccelrc")); + QVERIFY(config.open(QIODevice::WriteOnly | QIODevice::Truncate)); + QTextStream stream(&config); + stream << "[General]\n"; + stream << "useAllowList=true\n"; + stream << "[AllowedShortcuts]\n"; + stream << componentName << '=' << allowedActions.join(QLatin1Char(',')) << "\n"; + config.close(); + + QDBusConnection::sessionBus().unregisterService(QStringLiteral("org.kde.kglobalaccel")); + + auto daemon = std::make_unique<KGlobalAccelD>(); + QVERIFY(daemon->init()); + + KGlobalAccelImpl *interface = KGlobalAccelImpl::instance(); + QVERIFY(interface); + + auto actionOne = std::make_unique<QAction>(); + actionOne->setObjectName(allowedActions.at(0)); + auto actionTwo = std::make_unique<QAction>(); + actionTwo->setObjectName(allowedActions.at(1)); + auto actionThree = std::make_unique<QAction>(); + actionThree->setObjectName(disallowedAction); + + // Use layout-independent keys to avoid CI flakiness on varying keymaps. + const QKeySequence shortcutOne(Qt::CTRL | Qt::Key_A); + const QKeySequence shortcutTwo(Qt::CTRL | Qt::Key_B); + const QKeySequence shortcutThree(Qt::CTRL | Qt::Key_C); + QVERIFY(KGlobalAccel::setGlobalShortcut(actionOne.get(), shortcutOne)); + QVERIFY(KGlobalAccel::setGlobalShortcut(actionTwo.get(), shortcutTwo)); + QVERIFY(KGlobalAccel::setGlobalShortcut(actionThree.get(), shortcutThree)); + + QSignalSpy spyOne(actionOne.get(), &QAction::triggered); + QSignalSpy spyTwo(actionTwo.get(), &QAction::triggered); + QSignalSpy spyThree(actionThree.get(), &QAction::triggered); + + const auto triggerShortcut = [interface](const QKeySequence &sequence) { + interface->checkKeyEvent(sequence[0].toCombined(), ShortcutKeyState::Pressed); + interface->checkKeyEvent(sequence[0].toCombined(), ShortcutKeyState::Released); + }; + + // Allow event loop to register shortcuts before injecting key events. + QCoreApplication::processEvents(); + + triggerShortcut(shortcutOne); + triggerShortcut(shortcutTwo); + triggerShortcut(shortcutThree); + + QTRY_COMPARE_WITH_TIMEOUT(spyOne.count(), 1, 2000); + QTRY_COMPARE_WITH_TIMEOUT(spyTwo.count(), 1, 2000); + QVERIFY(!spyThree.wait(SIGNAL_TIMEOUT_MS)); + QCOMPARE(spyThree.count(), 0); + + KGlobalAccel::self()->removeAllShortcuts(actionOne.get()); + KGlobalAccel::self()->removeAllShortcuts(actionTwo.get()); + KGlobalAccel::self()->removeAllShortcuts(actionThree.get()); + + daemon.reset(); + QDBusConnection::sessionBus().unregisterService(QStringLiteral("org.kde.kglobalaccel")); +} + +QTEST_MAIN(AllowListTest) + +#include "allowlisttest.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/autotests/shortcutstest.cpp new/kglobalacceld-6.6.0/autotests/shortcutstest.cpp --- old/kglobalacceld-6.5.5/autotests/shortcutstest.cpp 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/autotests/shortcutstest.cpp 2026-02-12 11:02:33.000000000 +0100 @@ -8,6 +8,7 @@ #include "dummy.h" #include "kglobalacceld.h" +#include "component.h" #include <QPluginLoader> #include <QSignalSpy> @@ -23,6 +24,7 @@ void initTestCase(); void testShortcuts_data(); void testShortcuts(); + void testSerialization(); private: std::unique_ptr<KGlobalAccelD> m_globalacceld; @@ -182,6 +184,21 @@ m_globalaccel->removeAllShortcuts(action.get()); } +void ShortcutsTest::testSerialization() +{ + QCOMPARE(Component::keysFromString(QLatin1String("none")), QList<QKeySequence>()); + QCOMPARE(Component::stringFromKeys(QList<QKeySequence>()), QLatin1String("none")); + + QCOMPARE(Component::keysFromString(QLatin1String("")), QList<QKeySequence>() << QKeySequence()); + QCOMPARE(Component::stringFromKeys(QList<QKeySequence>() << QKeySequence()), QLatin1String("")); + + QCOMPARE(Component::keysFromString(QLatin1String("Ctrl+P")), QList<QKeySequence>() << QKeySequence(Qt::CTRL | Qt::Key_P)); + QCOMPARE(Component::stringFromKeys(QList<QKeySequence>() << QKeySequence(Qt::CTRL | Qt::Key_P)), QLatin1String("Ctrl+P")); + + QCOMPARE(Component::keysFromString(QLatin1String("\tCtrl+P\t")), QList<QKeySequence>() << QKeySequence() << QKeySequence(Qt::CTRL | Qt::Key_P) << QKeySequence()); + QCOMPARE(Component::stringFromKeys(QList<QKeySequence>() << QKeySequence() << QKeySequence(Qt::CTRL | Qt::Key_P) << QKeySequence()), QLatin1String("\tCtrl+P\t")); +} + QTEST_MAIN(ShortcutsTest) #include "shortcutstest.moc" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/src/component.cpp new/kglobalacceld-6.6.0/src/component.cpp --- old/kglobalacceld-6.5.5/src/component.cpp 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/src/component.cpp 2026-02-12 11:02:33.000000000 +0100 @@ -28,9 +28,7 @@ const QStringList strList = str.split(QLatin1Char('\t')); for (const QString &s : strList) { QKeySequence key = QKeySequence::fromString(s, QKeySequence::PortableText); - if (!key.isEmpty()) { // sanity check just in case - ret.append(key); - } + ret.append(key); } return ret; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/src/component.h new/kglobalacceld-6.6.0/src/component.h --- old/kglobalacceld-6.5.5/src/component.h 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/src/component.h 2026-02-12 11:02:33.000000000 +0100 @@ -7,6 +7,8 @@ #ifndef COMPONENT_H #define COMPONENT_H +#include "kglobalacceld_export.h" + #include "globalshortcut.h" #include "kglobalshortcutinfo.h" @@ -21,11 +23,12 @@ class GlobalShortcut; class GlobalShortcutContext; class GlobalShortcutsRegistry; +class ShortcutsTest; /** * @author Michael Jansen <[email protected]> */ -class Component : public QObject +class KGLOBALACCELD_EXPORT Component : public QObject { Q_OBJECT @@ -101,6 +104,7 @@ protected: friend class ::GlobalShortcutsRegistry; + friend class ::ShortcutsTest; //! Constructs a component. This is a private constructor, to create a component //! use GlobalShortcutsRegistry::self()->createComponent(). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/src/globalshortcutsregistry.cpp new/kglobalacceld-6.6.0/src/globalshortcutsregistry.cpp --- old/kglobalacceld-6.5.5/src/globalshortcutsregistry.cpp 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/src/globalshortcutsregistry.cpp 2026-02-12 11:02:33.000000000 +0100 @@ -1,6 +1,8 @@ /* SPDX-FileCopyrightText: 2008 Michael Jansen <[email protected]> SPDX-FileCopyrightText: 2022 Ahmad Samir <[email protected]> + SPDX-FileCopyrightText: 2026 Nicolas Fella <[email protected]> + SPDX-FileCopyrightText: 2026 Kristen McWilliam <[email protected]> SPDX-License-Identifier: LGPL-2.0-or-later */ @@ -29,6 +31,8 @@ #include <QPluginLoader> #include <QStandardPaths> +using namespace Qt::StringLiterals; + static bool checkPlatform(const QJsonObject &metadata, const QString &platformName) { const QJsonArray platforms = metadata.value(QStringLiteral("MetaData")).toObject().value(QStringLiteral("platforms")).toArray(); @@ -446,7 +450,7 @@ if (state == ShortcutKeyState::Released) { if (m_state == PressingModifierOnly) { m_state = ReleasingModifierOnly; - handled = processKey(m_currentModifiers, ShortcutKeyState::Pressed); + processKey(m_currentModifiers, ShortcutKeyState::Pressed); } m_currentModifiers = modifiers & ~Utils::keyToModifier(key); if (m_state == ReleasingModifierOnly && !m_currentModifiers) { @@ -477,6 +481,17 @@ return handled; } +bool GlobalShortcutsRegistry::isShortcutAllowed(const GlobalShortcut *shortcut) const +{ + if (!m_useAllowList) { + return true; + } + + return std::any_of(m_allowedShortcuts.cbegin(), m_allowedShortcuts.cend(), [shortcut](const ShortcutName &sc) { + return sc.componentName == shortcut->context()->component()->uniqueName() && sc.shortcutName == shortcut->uniqueName(); + }); +} + bool GlobalShortcutsRegistry::processKey(int keyQt, ShortcutKeyState state) { int keys[maxSequenceLength] = {0, 0, 0, 0}; @@ -546,6 +561,10 @@ m_lastShortcut->context()->component()->emitGlobalShortcutEvent(*m_lastShortcut, ShortcutKeyState::Released); } + if (!isShortcutAllowed(shortcut)) { + return false; + } + // Invoke the action shortcut->context()->component()->emitGlobalShortcutEvent(*shortcut, state); m_lastShortcut = shortcut; @@ -627,6 +646,32 @@ return static_cast<KServiceActionComponent *>(c); } +void GlobalShortcutsRegistry::loadAllowListSettings() +{ + KConfig config(u"kglobalaccelrc"_s); + m_useAllowList = config.group(u"General"_s).readEntry("useAllowList", false); + m_allowedShortcuts.clear(); + + const KConfigGroup allowedGroup = config.group(u"AllowedShortcuts"_s); + const QStringList componentNames = allowedGroup.keyList(); + for (const QString &componentName : componentNames) { + if (componentName.isEmpty()) { + qCWarning(KGLOBALACCELD) << "Skipping allow list entry with empty component name"; + continue; + } + + const QStringList shortcuts = allowedGroup.readEntry(componentName, QStringList()); + for (const QString &shortcutName : shortcuts) { + if (shortcutName.isEmpty()) { + qCWarning(KGLOBALACCELD) << "Skipping allow list entry with empty shortcut name for component" << componentName; + continue; + } + + m_allowedShortcuts << ShortcutName{componentName, shortcutName}; + } + } +} + void GlobalShortcutsRegistry::loadSettings() { if (!m_components.empty()) { @@ -725,6 +770,8 @@ } detectAppsWithShortcuts(); + + loadAllowListSettings(); } void GlobalShortcutsRegistry::detectAppsWithShortcuts() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/src/globalshortcutsregistry.h new/kglobalacceld-6.6.0/src/globalshortcutsregistry.h --- old/kglobalacceld-6.5.5/src/globalshortcutsregistry.h 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/src/globalshortcutsregistry.h 2026-02-12 11:02:33.000000000 +0100 @@ -1,5 +1,7 @@ /* SPDX-FileCopyrightText: 2008 Michael Jansen <[email protected]> + SPDX-FileCopyrightText: 2026 Nicolas Fella <[email protected]> + SPDX-FileCopyrightText: 2026 Kristen McWilliam <[email protected]> SPDX-License-Identifier: LGPL-2.0-or-later */ @@ -194,6 +196,47 @@ mutable KConfig _config; + /** + * Flag that enables allow-list enforcement for shortcuts. + * + * When set to true, only shortcuts listed in m_allowedShortcuts will be + * activated. + */ + bool m_useAllowList = false; + + /** + * Representation of a single allow-list entry. + */ + struct ShortcutName { + /** + * + * Name of the component that owns the shortcut, e.g. kwin, kaccess, etc. + */ + QString componentName; + + /** + * Name of the shortcut. + * + * For example, `view_zoom_in`, `Toggle Screen Reader On and Off`, etc. + */ + QString shortcutName; + }; + + /** + * Allow-list entries loaded from configuration. + */ + QList<ShortcutName> m_allowedShortcuts; + + /** + * Read allow-list configuration and populate internal state. + */ + void loadAllowListSettings(); + + /** + * Check whether a shortcut is permitted when the allow-list is active. + */ + bool isShortcutAllowed(const GlobalShortcut *shortcut) const; + QDBusObjectPath _dbusPath; GlobalShortcut *m_lastShortcut = nullptr; QTimer m_refreshServicesTimer; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/src/kglobalacceld.desktop.in new/kglobalacceld-6.6.0/src/kglobalacceld.desktop.in --- old/kglobalacceld-6.5.5/src/kglobalacceld.desktop.in 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/src/kglobalacceld.desktop.in 2026-02-12 11:02:33.000000000 +0100 @@ -36,7 +36,6 @@ Name[sa]=वैश्विक संक्षिप्तमार्गाः Name[sk]=Globálne skratky Name[sl]=Globalne bližnjice -Name[sv]=Globala genvägar Name[ta]=முழுதளாவிய சுருக்குவழிகள் Name[tr]=Global Kısayollar Name[uk]=Загальні скорочення diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kglobalacceld-6.5.5/src/main.cpp new/kglobalacceld-6.6.0/src/main.cpp --- old/kglobalacceld-6.5.5/src/main.cpp 2026-01-13 13:57:47.000000000 +0100 +++ new/kglobalacceld-6.6.0/src/main.cpp 2026-02-12 11:02:33.000000000 +0100 @@ -24,14 +24,7 @@ return 0; } - auto sessionManager = qgetenv("SESSION_MANAGER"); - // Disable Session Management the right way (C) - // - // ksmserver has global shortcuts. disableSessionManagement() does not prevent Qt from - // registering the app with the session manager. We remove the address to make sure we do not - // get a hang on kglobalaccel restart (kglobalaccel tries to register with ksmserver, - // ksmserver tries to register with kglobalaccel). - qunsetenv("SESSION_MANAGER"); + QCoreApplication::setAttribute(Qt::AA_DisableSessionManager); QGuiApplication::setDesktopSettingsAware(false); QGuiApplication::setQuitLockEnabled(false); @@ -60,10 +53,6 @@ app.setQuitOnLastWindowClosed(false); - if (!sessionManager.isEmpty()) { - qputenv("SESSION_MANAGER", sessionManager); - } - // Restart on a crash KCrash::setFlags(KCrash::AutoRestart);
