|
17 | 17 | */ |
18 | 18 |
|
19 | 19 | #include "ConfigLoader.h" |
| 20 | +#include "ConfigIssue.h" |
20 | 21 | #include "ConfigIssueManager.h" |
21 | 22 | #include "GlobalConfig.h" |
| 23 | +#include "InputActionsMain.h" |
22 | 24 | #include "Node.h" |
23 | | -#include "config/ConfigIssue.h" |
24 | | -#include "interfaces/ConfigProvider.h" |
25 | 25 | #include "parsers/containers.h" |
26 | 26 | #include "parsers/core.h" |
27 | 27 | #include "parsers/utils.h" |
|
35 | 35 | #include <libinputactions/handlers/TouchscreenTriggerHandler.h> |
36 | 36 | #include <libinputactions/input/backends/LibevdevComplementaryInputBackend.h> |
37 | 37 | #include <libinputactions/input/devices/InputDeviceRule.h> |
| 38 | +#include <libinputactions/interfaces/ConfigProvider.h> |
38 | 39 | #include <libinputactions/interfaces/NotificationManager.h> |
39 | 40 | #include <libinputactions/scripting/ScriptingEngine.h> |
40 | 41 | #include <libinputactions/scripting/modules/core/Config.h> |
41 | 42 | #include <libinputactions/scripting/modules/core/CoreModule.h> |
42 | 43 | #include <libinputactions/scripting/modules/main/Script.h> |
| 44 | +#include <libinputactions/variables/VariableRegistry.h> |
43 | 45 |
|
44 | 46 | namespace InputActions |
45 | 47 | { |
@@ -79,18 +81,22 @@ bool ConfigLoader::load(const ConfigLoadSettings &settings) |
79 | 81 | }; |
80 | 82 |
|
81 | 83 | auto currentEngine = g_scriptingEngine; |
| 84 | + auto currentVariableRegistry = g_variableRegistry; |
82 | 85 | try { |
83 | 86 | qCDebug(INPUTACTIONS, "Reloading config"); |
84 | 87 | const auto rawConfig = settings.config.value_or(g_configProvider->currentConfig()); |
85 | 88 |
|
86 | 89 | g_configIssueManager = std::make_shared<ConfigIssueManager>(rawConfig); |
87 | | - g_scriptingEngine = std::make_shared<ScriptingEngine>(); |
| 90 | + g_variableRegistry = std::make_shared<VariableRegistry>(); |
| 91 | + g_inputActions->registerGlobalVariables(g_variableRegistry.get()); |
| 92 | + g_scriptingEngine = std::make_shared<ScriptingEngine>(*g_variableRegistry.get()); |
88 | 93 | auto config = createConfig(rawConfig); |
89 | 94 | destroyEngine(currentEngine); |
90 | 95 | activateConfig(std::move(config), true); |
91 | 96 | } catch (const ConfigException &e) { |
92 | 97 | destroyEngine(g_scriptingEngine); |
93 | 98 | g_scriptingEngine = currentEngine; |
| 99 | + g_variableRegistry = currentVariableRegistry; |
94 | 100 | g_configIssueManager->addIssue(e); |
95 | 101 | } |
96 | 102 |
|
@@ -158,6 +164,10 @@ ConfigData ConfigLoader::createConfig(const QString &raw) |
158 | 164 | } |
159 | 165 | } |
160 | 166 |
|
| 167 | + if (auto *coreModule = g_scriptingEngine->coreModule()) { |
| 168 | + coreModule->variableRegistry()->disableRegistration(); |
| 169 | + } |
| 170 | + |
161 | 171 | loadMember(config.autoReload, root->at("autoreload")); |
162 | 172 | loadMember(config.allowExternalVariableAccess, root->at("external_variable_access")); |
163 | 173 | if (const auto *notificationsNode = root->mapAt("notifications")) { |
@@ -195,7 +205,7 @@ void ConfigLoader::activateConfig(ConfigData config, bool initialize) |
195 | 205 | g_actionExecutor->clearQueue(); |
196 | 206 | g_actionExecutor->waitForDone(); |
197 | 207 |
|
198 | | - const auto *coreModule = g_scriptingEngine->coreModule(); |
| 208 | + auto *coreModule = g_scriptingEngine->coreModule(); |
199 | 209 | if (coreModule) { |
200 | 210 | Q_EMIT coreModule->config()->aboutToBeActivated(); |
201 | 211 | } |
|
0 commit comments