summaryrefslogtreecommitdiff
path: root/src/json_ui.cc
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2020-06-28 19:48:55 +1000
committerMaxime Coste <mawww@kakoune.org>2020-06-28 19:48:55 +1000
commitd3374e7e5f7af9f4fdf33200f91847b3cddf9e67 (patch)
tree8a70ba5491447a5dfb7b565be242757ab470042f /src/json_ui.cc
parentfc3e5ea419aa79c7adf38a9252586d867b3eb19b (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.cc37
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")
{