summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-12-22 17:14:46 +1100
committerMaxime Coste <mawww@kakoune.org>2018-12-22 17:14:46 +1100
commita577e80092c95963df5b705f91c48f6a3bb3424e (patch)
tree0f272c6000d4a556a2b4ca8b98a93e530fcb25c9 /src
parent6f9e297deffc0780ef48ab242186392047868e1c (diff)
parentb1f5639d8cbc9b0a8525e1fcc76a4000f7852ded (diff)
Merge remote-tracking branch 'lenormf/right-click-support'
Diffstat (limited to 'src')
-rw-r--r--src/input_handler.cc18
-rw-r--r--src/json_ui.cc12
-rw-r--r--src/keys.cc12
-rw-r--r--src/keys.hh23
-rw-r--r--src/ncurses_ui.cc8
5 files changed, 50 insertions, 23 deletions
diff --git a/src/input_handler.cc b/src/input_handler.cc
index ade87d04..0d9710dd 100644
--- a/src/input_handler.cc
+++ b/src/input_handler.cc
@@ -92,9 +92,20 @@ struct MouseHandler
Buffer& buffer = context.buffer();
BufferCoord cursor;
auto& selections = context.selections();
- switch ((Key::Modifiers)(key.modifiers & Key::Modifiers::MouseEvent))
+ const auto key_modifier = (Key::Modifiers)(key.modifiers & Key::Modifiers::MouseEvent);
+ switch (key_modifier)
{
- case Key::Modifiers::MousePress:
+ case Key::Modifiers::MousePressRight:
+ m_dragging = false;
+ cursor = context.window().buffer_coord(key.coord());
+ if (key.modifiers & Key::Modifiers::Control)
+ selections = {{selections.begin()->anchor(), cursor}};
+ else
+ selections.main() = {selections.main().anchor(), cursor};
+ selections.sort_and_merge_overlapping();
+ return true;
+
+ case Key::Modifiers::MousePressLeft:
m_dragging = true;
m_anchor = context.window().buffer_coord(key.coord());
if (not (key.modifiers & Key::Modifiers::Control))
@@ -108,7 +119,8 @@ struct MouseHandler
}
return true;
- case Key::Modifiers::MouseRelease:
+ case Key::Modifiers::MouseReleaseLeft:
+ case Key::Modifiers::MouseReleaseRight:
if (not m_dragging)
return true;
m_dragging = false;
diff --git a/src/json_ui.cc b/src/json_ui.cc
index 32524c3b..fc021cb8 100644
--- a/src/json_ui.cc
+++ b/src/json_ui.cc
@@ -424,10 +424,14 @@ void JsonUI::eval_json(const Value& json)
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")
- m_on_key({Key::Modifiers::MousePress, coord});
- else if (type == "release")
- m_on_key({Key::Modifiers::MouseRelease, 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 if (type == "wheel_up")
m_on_key({Key::Modifiers::MouseWheelUp, coord});
else if (type == "wheel_down")
diff --git a/src/keys.cc b/src/keys.cc
index e4318707..e624767c 100644
--- a/src/keys.cc
+++ b/src/keys.cc
@@ -152,10 +152,14 @@ String key_to_str(Key key)
{
case Key::Modifiers::MousePos:
return format("<mouse:move:{}.{}>", coord.line, coord.column);
- case Key::Modifiers::MousePress:
- return format("<mouse:press:{}.{}>", coord.line, coord.column);
- case Key::Modifiers::MouseRelease:
- return format("<mouse:release:{}.{}>", coord.line, coord.column);
+ case Key::Modifiers::MousePressLeft:
+ return format("<mouse:press_left:{}.{}>", coord.line, coord.column);
+ case Key::Modifiers::MousePressRight:
+ return format("<mouse:press_right:{}.{}>", coord.line, coord.column);
+ case Key::Modifiers::MouseReleaseLeft:
+ return format("<mouse:release_left:{}.{}>", coord.line, coord.column);
+ case Key::Modifiers::MouseReleaseRight:
+ return format("<mouse:release_right:{}.{}>", coord.line, coord.column);
case Key::Modifiers::MouseWheelDown:
return "<mouse:wheel_down>";
case Key::Modifiers::MouseWheelUp:
diff --git a/src/keys.hh b/src/keys.hh
index a7684f22..b0940bd6 100644
--- a/src/keys.hh
+++ b/src/keys.hh
@@ -21,16 +21,19 @@ struct Key
Alt = 1 << 1,
Shift = 1 << 2,
- MousePress = 1 << 3,
- MouseRelease = 1 << 4,
- MousePos = 1 << 5,
- MouseWheelDown = 1 << 6,
- MouseWheelUp = 1 << 7,
- MouseEvent = MousePress | MouseRelease | MousePos |
- MouseWheelDown | MouseWheelUp,
-
- Resize = 1 << 8,
- MenuSelect = 1 << 10,
+ MousePressLeft = 1 << 3,
+ MousePressRight = 1 << 4,
+ MouseReleaseLeft = 1 << 5,
+ MouseReleaseRight = 1 << 6,
+ MousePos = 1 << 7,
+ MouseWheelDown = 1 << 8,
+ MouseWheelUp = 1 << 9,
+ MouseEvent = MousePressLeft | MousePressRight |
+ MouseReleaseLeft | MouseReleaseRight |
+ MousePos | MouseWheelDown | MouseWheelUp,
+
+ Resize = 1 << 10,
+ MenuSelect = 1 << 11,
};
enum NamedKey : Codepoint
{
diff --git a/src/ncurses_ui.cc b/src/ncurses_ui.cc
index 653f5c95..452c2e8b 100644
--- a/src/ncurses_ui.cc
+++ b/src/ncurses_ui.cc
@@ -565,9 +565,13 @@ Optional<Key> NCursesUI::get_next_key()
res |= Key::Modifiers::Alt;
if (BUTTON_PRESS(mask, 1))
- return res | Key::Modifiers::MousePress;
+ return res | Key::Modifiers::MousePressLeft;
+ if (BUTTON_PRESS(mask, 3))
+ return res | Key::Modifiers::MousePressRight;
if (BUTTON_RELEASE(mask, 1))
- return res | Key::Modifiers::MouseRelease;
+ return res | Key::Modifiers::MouseReleaseLeft;
+ if (BUTTON_RELEASE(mask, 3))
+ return res | Key::Modifiers::MouseReleaseRight;
if (BUTTON_PRESS(mask, m_wheel_down_button))
return res | Key::Modifiers::MouseWheelDown;
if (BUTTON_PRESS(mask, m_wheel_up_button))