diff options
| author | Maxime Coste <mawww@kakoune.org> | 2020-06-28 19:48:55 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2020-06-28 19:48:55 +1000 |
| commit | d3374e7e5f7af9f4fdf33200f91847b3cddf9e67 (patch) | |
| tree | 8a70ba5491447a5dfb7b565be242757ab470042f /src/json_ui.cc | |
| parent | fc3e5ea419aa79c7adf38a9252586d867b3eb19b (diff) | |
Refactor mouse press/release handling to support 3 buttons
Change button to be an additional parameter instead of having separate
events for left/right buttons.
Fixes #3471
Diffstat (limited to 'src/json_ui.cc')
| -rw-r--r-- | src/json_ui.cc | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/src/json_ui.cc b/src/json_ui.cc index b4c6528c..007c8ab0 100644 --- a/src/json_ui.cc +++ b/src/json_ui.cc @@ -248,31 +248,30 @@ void JsonUI::eval_json(const Value& json) m_on_key(key); } } - else if (method == "mouse") + else if (method == "mouse_move") + { + if (params.size() != 2) + throw invalid_rpc_request("mouse coordinates not specified"); + + if (not params[0].is_a<int>() or not params[1].is_a<int>()) + throw invalid_rpc_request("mouse coordinates are not integers"); + + m_on_key({Key::Modifiers::MousePos, encode_coord({params[0].as<int>(), params[1].as<int>()})}); + } + else if (method == "mouse_press" or method == "mouse_release") { if (params.size() != 3) - throw invalid_rpc_request("mouse type/coordinates not specified"); + throw invalid_rpc_request("mouse button/coordinates not specified"); if (not params[0].is_a<String>()) - throw invalid_rpc_request("mouse type is not a string"); - else if (not params[1].is_a<int>() or - not params[2].is_a<int>()) + throw invalid_rpc_request("mouse button is not a string"); + if (not params[1].is_a<int>() or not params[2].is_a<int>()) throw invalid_rpc_request("mouse coordinates are not integers"); - const StringView type = params[0].as<String>(); - const Codepoint coord = encode_coord({params[1].as<int>(), params[2].as<int>()}); - if (type == "move") - m_on_key({Key::Modifiers::MousePos, coord}); - else if (type == "press_left") - m_on_key({Key::Modifiers::MousePressLeft, coord}); - else if (type == "press_right") - m_on_key({Key::Modifiers::MousePressRight, coord}); - else if (type == "release_left") - m_on_key({Key::Modifiers::MouseReleaseLeft, coord}); - else if (type == "release_right") - m_on_key({Key::Modifiers::MouseReleaseRight, coord}); - else - throw invalid_rpc_request(format("invalid mouse event type: {}", type)); + auto event = method == "mouse_press" ? Key::Modifiers::MousePress : Key::Modifiers::MouseRelease; + auto button = str_to_button(params[0].as<String>()); + + m_on_key({event | Key::to_modifier(button), encode_coord({params[1].as<int>(), params[2].as<int>()})}); } else if (method == "scroll") { |
