|
20 | 20 | #include "containers.h" |
21 | 21 | #include "flags.h" |
22 | 22 | #include "globals.h" |
| 23 | +#include "scripting.h" |
23 | 24 | #include "separated-string.h" |
24 | 25 | #include "triggers.h" |
25 | 26 | #include "utils.h" |
|
39 | 40 | #include <libinputactions/conditions/VariableCondition.h> |
40 | 41 | #include <libinputactions/config/ConfigIssue.h> |
41 | 42 | #include <libinputactions/config/ConfigIssueManager.h> |
| 43 | +#include <libinputactions/config/ConfigLoader.h> |
42 | 44 | #include <libinputactions/config/Node.h> |
43 | 45 | #include <libinputactions/handlers/KeyboardTriggerHandler.h> |
44 | 46 | #include <libinputactions/handlers/MouseTriggerHandler.h> |
|
51 | 53 | #include <libinputactions/input/backends/InputBackend.h> |
52 | 54 | #include <libinputactions/input/devices/InputDeviceRule.h> |
53 | 55 | #include <libinputactions/interfaces/CursorShapeProvider.h> |
| 56 | +#include <libinputactions/scripting/JSFunctionAction.h> |
| 57 | +#include <libinputactions/scripting/JSFunctionCondition.h> |
| 58 | +#include <libinputactions/scripting/ScriptingEngine.h> |
54 | 59 | #include <libinputactions/triggers/core/StrokeTriggerCore.h> |
55 | 60 | #include <libinputactions/triggers/keyboard/KeyboardShortcutTrigger.h> |
56 | 61 | #include <libinputactions/triggers/mouse/MouseTrigger.h> |
@@ -149,6 +154,8 @@ void NodeParser<std::unique_ptr<Action>>::parse(const Node *node, std::unique_pt |
149 | 154 | auto action = std::make_unique<CommandAction>(commandNode->as<Value<QString>>()); |
150 | 155 | loadSetter(action, &CommandAction::setWait, node->at("wait")); |
151 | 156 | result = std::move(action); |
| 157 | + } else if (const auto *functionNode = node->at("function")) { |
| 158 | + result = std::make_unique<JSFunctionAction>(parseFunction(functionNode), functionNode->shared_from_this()); |
152 | 159 | } else if (const auto *inputNode = node->at("input")) { |
153 | 160 | auto action = std::make_unique<InputAction>(inputNode->as<std::vector<InputActionItem>>()); |
154 | 161 | loadSetter(action, &InputAction::setDelay, node->at("delay")); |
@@ -225,6 +232,9 @@ std::shared_ptr<Condition> parseCondition(const Node *node, const VariableRegist |
225 | 232 | if (const auto *canReplaceTextNode = node->at("can_replace_text")) { |
226 | 233 | return std::make_shared<CanReplaceTextCondition>(canReplaceTextNode->as<std::vector<TextSubstitutionRule>>(true)); |
227 | 234 | } |
| 235 | + if (const auto *functionNode = node->at("function")) { |
| 236 | + return std::make_shared<JSFunctionCondition>(parseFunction(functionNode), functionNode->shared_from_this()); |
| 237 | + } |
228 | 238 |
|
229 | 239 | if (isLegacy(node)) { |
230 | 240 | g_configIssueManager->addIssue(DeprecatedFeatureConfigIssue(node, DeprecatedFeature::LegacyConditions)); |
|
0 commit comments