diff --git a/autotests/mock_effectshandler.h b/autotests/mock_effectshandler.h --- a/autotests/mock_effectshandler.h +++ b/autotests/mock_effectshandler.h @@ -261,6 +261,7 @@ 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/autotests/mock_effectshandler.cpp b/autotests/mock_effectshandler.cpp --- a/autotests/mock_effectshandler.cpp +++ b/autotests/mock_effectshandler.cpp @@ -30,3 +30,9 @@ 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/cursor.cpp b/cursor.cpp --- a/cursor.cpp +++ b/cursor.cpp @@ -86,7 +86,7 @@ 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.h b/effects.h --- a/effects.h +++ b/effects.h @@ -242,6 +242,7 @@ void hideOnScreenMessage(OnScreenMessageHideFlags flags = OnScreenMessageHideFlags()) override; KSharedConfigPtr config() const override; + KSharedConfigPtr inputConfig() const override; Scene *scene() const { return m_scene; diff --git a/effects.cpp b/effects.cpp --- a/effects.cpp +++ b/effects.cpp @@ -1626,6 +1626,11 @@ return kwinApp()->config(); } +KSharedConfigPtr EffectsHandlerImpl::inputConfig() const +{ + return kwinApp()->inputConfig(); +} + //**************************************** // EffectWindowImpl //**************************************** diff --git a/effects/startupfeedback/startupfeedback.cpp b/effects/startupfeedback/startupfeedback.cpp --- a/effects/startupfeedback/startupfeedback.cpp +++ b/effects/startupfeedback/startupfeedback.cpp @@ -283,7 +283,7 @@ 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.h b/input.h --- a/input.h +++ b/input.h @@ -285,7 +285,6 @@ QVector m_filters; QVector m_spies; - KSharedConfigPtr m_inputConfig; KWIN_SINGLETON(InputRedirection) friend InputRedirection *input(); diff --git a/input.cpp b/input.cpp --- a/input.cpp +++ b/input.cpp @@ -1458,7 +1458,6 @@ } ); } - m_inputConfig = KSharedConfig::openConfig(QStringLiteral("kcminputrc")); } #endif connect(kwinApp(), &Application::workspaceCreated, this, &InputRedirection::setupWorkspace); @@ -1632,8 +1631,9 @@ { #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 @@ 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/libkwineffects/kwineffects.h b/libkwineffects/kwineffects.h --- a/libkwineffects/kwineffects.h +++ b/libkwineffects/kwineffects.h @@ -1306,6 +1306,12 @@ **/ 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.h b/main.h --- a/main.h +++ b/main.h @@ -56,6 +56,7 @@ 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 @@ 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 @@ 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; diff --git a/main.cpp b/main.cpp --- a/main.cpp +++ b/main.cpp @@ -105,6 +105,7 @@ , m_configLock(false) , m_config() , m_kxkbConfig() + , m_inputConfig() , m_operationMode(mode) { qRegisterMetaType("Options::WindowOperation"); @@ -148,6 +149,9 @@ if (!m_kxkbConfig) { m_kxkbConfig = KSharedConfig::openConfig(QStringLiteral("kxkbrc"), KConfig::NoGlobals); } + if (!m_inputConfig) { + m_inputConfig = KSharedConfig::openConfig(QStringLiteral("kcminputrc"), KConfig::NoGlobals); + } performStartup(); }