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);
 

Reply via email to