diff --git a/autotests/mock_effectshandler.cpp b/autotests/mock_effectshandler.cpp index 95d8b72ec7..be4b1ffa57 100644 --- a/autotests/mock_effectshandler.cpp +++ b/autotests/mock_effectshandler.cpp @@ -30,3 +30,9 @@ KSharedConfigPtr MockEffectsHandler::config() const static const KSharedConfigPtr s_config = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); return s_config; } + +KSharedConfigPtr MockEffectsHandler::inputConfig() const +{ + static const KSharedConfigPtr s_inputConfig = KSharedConfig::openConfig(QString(), KConfig::SimpleConfig); + return s_inputConfig; +} diff --git a/autotests/mock_effectshandler.h b/autotests/mock_effectshandler.h index 024455b30d..72351f2d28 100644 --- a/autotests/mock_effectshandler.h +++ b/autotests/mock_effectshandler.h @@ -261,6 +261,7 @@ public: void hideOnScreenMessage(OnScreenMessageHideFlags flags = OnScreenMessageHideFlags()) override { Q_UNUSED(flags)} KSharedConfigPtr config() const override; + KSharedConfigPtr inputConfig() const override; private: bool m_animationsSuported = true; diff --git a/cursor.cpp b/cursor.cpp index e8f9646336..47b55906ba 100644 --- a/cursor.cpp +++ b/cursor.cpp @@ -86,7 +86,7 @@ void Cursor::loadThemeSettings() void Cursor::loadThemeFromKConfig() { - KConfigGroup mousecfg(KSharedConfig::openConfig("kcminputrc", KConfig::NoGlobals), "Mouse"); + KConfigGroup mousecfg(kwinApp()->inputConfig(), "Mouse"); const QString themeName = mousecfg.readEntry("cursorTheme", "default"); bool ok = false; uint themeSize = mousecfg.readEntry("cursorSize", QString("24")).toUInt(&ok); diff --git a/effects.cpp b/effects.cpp index 7dda141596..d2c4768c04 100644 --- a/effects.cpp +++ b/effects.cpp @@ -1626,6 +1626,11 @@ KSharedConfigPtr EffectsHandlerImpl::config() const return kwinApp()->config(); } +KSharedConfigPtr EffectsHandlerImpl::inputConfig() const +{ + return kwinApp()->inputConfig(); +} + //**************************************** // EffectWindowImpl //**************************************** diff --git a/effects.h b/effects.h index 041afbd7a0..ba24902b08 100644 --- a/effects.h +++ b/effects.h @@ -242,6 +242,7 @@ public: void hideOnScreenMessage(OnScreenMessageHideFlags flags = OnScreenMessageHideFlags()) override; KSharedConfigPtr config() const override; + KSharedConfigPtr inputConfig() const override; Scene *scene() const { return m_scene; diff --git a/effects/startupfeedback/startupfeedback.cpp b/effects/startupfeedback/startupfeedback.cpp index 14b5f1300a..02d9cd660d 100644 --- a/effects/startupfeedback/startupfeedback.cpp +++ b/effects/startupfeedback/startupfeedback.cpp @@ -283,7 +283,7 @@ void StartupFeedbackEffect::start(const QString& icon) prepareTextures(iconPixmap); auto readCursorSize = []() -> int { // read details about the mouse-cursor theme define per default - KConfigGroup mousecfg(KSharedConfig::openConfig(QStringLiteral("kcminputrc")), "Mouse"); + KConfigGroup mousecfg(effects->inputConfig(), "Mouse"); QString size = mousecfg.readEntry("cursorSize", QString()); // fetch a reasonable size for the cursor-theme image diff --git a/input.cpp b/input.cpp index 6b3bdb90ff..2ffa05371f 100644 --- a/input.cpp +++ b/input.cpp @@ -1458,7 +1458,6 @@ InputRedirection::InputRedirection(QObject *parent) } ); } - m_inputConfig = KSharedConfig::openConfig(QStringLiteral("kcminputrc")); } #endif connect(kwinApp(), &Application::workspaceCreated, this, &InputRedirection::setupWorkspace); @@ -1632,8 +1631,9 @@ void InputRedirection::reconfigure() { #if HAVE_INPUT if (Application::usesLibinput()) { - m_inputConfig->reparseConfiguration(); - const auto config = m_inputConfig->group(QStringLiteral("keyboard")); + auto inputConfig = kwinApp()->inputConfig(); + inputConfig->reparseConfiguration(); + const auto config = inputConfig->group(QStringLiteral("keyboard")); const int delay = config.readEntry("RepeatDelay", 660); const int rate = config.readEntry("RepeatRate", 25); const bool enabled = config.readEntry("KeyboardRepeating", 0) == 0; @@ -1670,7 +1670,7 @@ void InputRedirection::setupLibInput() waylandServer()->display()->createRelativePointerManager(KWayland::Server::RelativePointerInterfaceVersion::UnstableV1, waylandServer()->display())->create(); } - conn->setInputConfig(m_inputConfig); + conn->setInputConfig(kwinApp()->inputConfig()); conn->updateLEDs(m_keyboard->xkb()->leds()); conn->setup(); connect(m_keyboard, &KeyboardInputRedirection::ledsChanged, conn, &LibInput::Connection::updateLEDs); diff --git a/input.h b/input.h index 3d16b97324..d44513d32c 100644 --- a/input.h +++ b/input.h @@ -285,7 +285,6 @@ private: QVector m_filters; QVector m_spies; - KSharedConfigPtr m_inputConfig; KWIN_SINGLETON(InputRedirection) friend InputRedirection *input(); diff --git a/libkwineffects/kwineffects.h b/libkwineffects/kwineffects.h index a417f71d74..91cf1b2559 100644 --- a/libkwineffects/kwineffects.h +++ b/libkwineffects/kwineffects.h @@ -1306,6 +1306,12 @@ public: **/ virtual KSharedConfigPtr config() const = 0; + /** + * @returns The global input configuration (kcminputrc) + * @since 5.10 + **/ + virtual KSharedConfigPtr inputConfig() const = 0; + Q_SIGNALS: /** * Signal emitted when the current desktop changed. diff --git a/main.cpp b/main.cpp index 6e045ef679..7e15528e73 100644 --- a/main.cpp +++ b/main.cpp @@ -105,6 +105,7 @@ Application::Application(Application::OperationMode mode, int &argc, char **argv , m_configLock(false) , m_config() , m_kxkbConfig() + , m_inputConfig() , m_operationMode(mode) { qRegisterMetaType("Options::WindowOperation"); @@ -148,6 +149,9 @@ void Application::start() if (!m_kxkbConfig) { m_kxkbConfig = KSharedConfig::openConfig(QStringLiteral("kxkbrc"), KConfig::NoGlobals); } + if (!m_inputConfig) { + m_inputConfig = KSharedConfig::openConfig(QStringLiteral("kcminputrc"), KConfig::NoGlobals); + } performStartup(); } diff --git a/main.h b/main.h index e9150be429..c6df3b6ca3 100644 --- a/main.h +++ b/main.h @@ -56,6 +56,7 @@ class KWIN_EXPORT Application : public QApplication Q_PROPERTY(int x11ScreenNumber READ x11ScreenNumber CONSTANT) Q_PROPERTY(KSharedConfigPtr config READ config WRITE setConfig) Q_PROPERTY(KSharedConfigPtr kxkbConfig READ kxkbConfig WRITE setKxkbConfig) + Q_PROPERTY(KSharedConfigPtr inputConfig READ inputConfig WRITE setInputConfig) public: /** * @brief This enum provides the various operation modes of KWin depending on the available @@ -96,6 +97,13 @@ public: m_kxkbConfig = config; } + KSharedConfigPtr inputConfig() const { + return m_inputConfig; + } + void setInputConfig(KSharedConfigPtr config) { + m_inputConfig = config; + } + void start(); /** * @brief The operation mode used by KWin. @@ -232,6 +240,7 @@ private: bool m_configLock; KSharedConfigPtr m_config; KSharedConfigPtr m_kxkbConfig; + KSharedConfigPtr m_inputConfig; OperationMode m_operationMode; xcb_timestamp_t m_x11Time = XCB_TIME_CURRENT_TIME; xcb_window_t m_rootWindow = XCB_WINDOW_NONE;