diff options
| author | Pierre Bourdon <delroth@gmail.com> | 2016-07-29 17:43:49 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-07-29 17:43:49 +0200 |
| commit | e0cbb9d1ae6f35b4b44a8e1ed99e8a710c36a7d3 (patch) | |
| tree | 7e0fff192b12dbddbf9c39d133ee433662727fa4 /Source/Core/InputCommon/ControllerInterface/ExpressionParser.cpp | |
| parent | fc85d8036f1bab0963b3a64278f8e4ea157b6dcf (diff) | |
| parent | 135641404af9c52e433ef28dba4f86fa208f4365 (diff) | |
Merge pull request #3890 from leoetlino/evdev-hotplug
evdev: Add hotplug support
Diffstat (limited to 'Source/Core/InputCommon/ControllerInterface/ExpressionParser.cpp')
| -rw-r--r-- | Source/Core/InputCommon/ControllerInterface/ExpressionParser.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Source/Core/InputCommon/ControllerInterface/ExpressionParser.cpp b/Source/Core/InputCommon/ControllerInterface/ExpressionParser.cpp index 6e9b8b77ab..2960888148 100644 --- a/Source/Core/InputCommon/ControllerInterface/ExpressionParser.cpp +++ b/Source/Core/InputCommon/ControllerInterface/ExpressionParser.cpp @@ -235,8 +235,9 @@ public: ControlQualifier qualifier; Device::Control* control; - ControlExpression(ControlQualifier qualifier_, Device::Control* control_) - : qualifier(qualifier_), control(control_) + ControlExpression(ControlQualifier qualifier_, std::shared_ptr<Device> device, + Device::Control* control_) + : qualifier(qualifier_), control(control_), m_device(device) { } @@ -244,6 +245,8 @@ public: void SetValue(ControlState value) override { control->ToOutput()->SetGatedState(value); } int CountNumControls() override { return 1; } operator std::string() override { return "`" + (std::string)qualifier + "`"; } +private: + std::shared_ptr<Device> m_device; }; class BinaryExpression : public ExpressionNode @@ -393,6 +396,7 @@ private: { case TOK_CONTROL: { + std::shared_ptr<Device> device = finder.FindDevice(tok.qualifier); Device::Control* control = finder.FindControl(tok.qualifier); if (control == nullptr) { @@ -400,7 +404,7 @@ private: return EXPRESSION_PARSE_SUCCESS; } - *expr_out = new ControlExpression(tok.qualifier, control); + *expr_out = new ControlExpression(tok.qualifier, device, control); return EXPRESSION_PARSE_SUCCESS; } case TOK_LPAREN: @@ -550,10 +554,11 @@ ExpressionParseStatus ParseExpression(const std::string& str, ControlFinder& fin qualifier.control_name = str; qualifier.has_device = false; + std::shared_ptr<Device> device = finder.FindDevice(qualifier); Device::Control* control = finder.FindControl(qualifier); if (control) { - *expr_out = new Expression(new ControlExpression(qualifier, control)); + *expr_out = new Expression(new ControlExpression(qualifier, device, control)); return EXPRESSION_PARSE_SUCCESS; } |
