From 857d8a9c37c6a177dc546944349ad8d28c52d874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Wed, 19 Apr 2017 17:00:02 +0200 Subject: [PATCH] Add a KSharedConfigPtr for kcminputrc to KWin::Application Summary: There are a few places where KWin needs to read values from kcminputrc. As I need to add yet another one it makes more sense to properly structure it like in other cases and have only one kcminputrc hold in the application. This also allows to better mock the config values in the integration tests. Reviewers: #kwin, #plasma Subscribers: plasma-devel, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D5540 --- autotests/mock_effectshandler.cpp | 6 ++++++ autotests/mock_effectshandler.h | 1 + cursor.cpp | 2 +- effects.cpp | 5 +++++ effects.h | 1 + effects/startupfeedback/startupfeedback.cpp | 2 +- input.cpp | 8 ++++---- input.h | 1 - libkwineffects/kwineffects.h | 6 ++++++ main.cpp | 4 ++++ main.h | 9 +++++++++ 11 files changed, 38 insertions(+), 7 deletions(-) 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;