3434#include < libinputactions/input/backends/LibevdevComplementaryInputBackend.h>
3535#include < libinputactions/input/devices/InputDeviceRule.h>
3636#include < libinputactions/interfaces/NotificationManager.h>
37+ #include < libinputactions/scripting/modules/core/Config.h>
38+ #include < libinputactions/scripting/modules/core/CoreModule.h>
3739#include < libinputactions/scripting/ScriptingEngine.h>
3840
3941namespace InputActions
4042{
4143
42- struct Config
44+ struct ConfigData
4345{
4446 bool allowExternalVariableAccess = true ;
4547 bool autoReload = true ;
@@ -64,13 +66,15 @@ void ConfigLoader::loadEmpty()
6466bool ConfigLoader::load (const ConfigLoadSettings &settings)
6567{
6668 auto scriptingEngine = g_scriptingEngine;
69+
6770 try {
6871 qCDebug (INPUTACTIONS , " Reloading config" );
6972 const auto rawConfig = settings.config .value_or (g_configProvider->currentConfig ());
7073
7174 g_configIssueManager = std::make_shared<ConfigIssueManager>(rawConfig);
7275 g_scriptingEngine = std::make_shared<ScriptingEngine>();
7376 auto config = createConfig (rawConfig);
77+ scriptingEngine.reset ();
7478 activateConfig (std::move (config), true );
7579 } catch (const ConfigException &e) {
7680 g_scriptingEngine = scriptingEngine;
@@ -94,14 +98,14 @@ bool ConfigLoader::load(const ConfigLoadSettings &settings)
9498 return true ;
9599}
96100
97- Config ConfigLoader::createConfig (const QString &raw)
101+ ConfigData ConfigLoader::createConfig (const QString &raw)
98102{
99103 const auto root = Node::create (raw);
100104 if (!root->isMap ()) {
101105 throw InvalidNodeTypeConfigException (root.get (), NodeType::Map);
102106 }
103107
104- Config config;
108+ ConfigData config;
105109
106110 if (const auto *scriptingNode = root->mapAt (" scripting" )) {
107111 if (const auto *scriptsNode = scriptingNode->at (" scripts" )) {
@@ -147,12 +151,17 @@ Config ConfigLoader::createConfig(const QString &raw)
147151 return config;
148152}
149153
150- void ConfigLoader::activateConfig (Config config, bool initialize)
154+ void ConfigLoader::activateConfig (ConfigData config, bool initialize)
151155{
152156 g_inputBackend->reset (); // Okay because required keys are not cleared
153157 g_actionExecutor->clearQueue ();
154158 g_actionExecutor->waitForDone ();
155159
160+ const auto *coreModule = g_scriptingEngine->coreModule ();
161+ if (coreModule) {
162+ Q_EMIT coreModule->config ()->aboutToBeActivated ();
163+ }
164+
156165 g_globalConfig->setAllowExternalVariableAccess (config.allowExternalVariableAccess );
157166 g_globalConfig->setAutoReload (config.autoReload );
158167 g_globalConfig->setSendNotificationOnError (config.sendNotificationOnError );
@@ -172,6 +181,10 @@ void ConfigLoader::activateConfig(Config config, bool initialize)
172181 if (initialize) {
173182 g_inputBackend->initialize ();
174183 }
184+
185+ if (coreModule) {
186+ Q_EMIT coreModule->config ()->activated ();
187+ }
175188}
176189
177190}
0 commit comments