pass button to mouse input event

macos-click-through
Keith Simmons 3 years ago
parent 839f2938a1
commit cf781031e3

@ -21,6 +21,7 @@ pub enum UiCommand {
}, },
Keyboard(String), Keyboard(String),
MouseButton { MouseButton {
button: String,
action: String, action: String,
grid_id: u64, grid_id: u64,
position: (u32, u32), position: (u32, u32),
@ -58,12 +59,13 @@ impl UiCommand {
nvim.input(&input_command).await.expect("Input failed"); nvim.input(&input_command).await.expect("Input failed");
} }
UiCommand::MouseButton { UiCommand::MouseButton {
button,
action, action,
grid_id, grid_id,
position: (grid_x, grid_y), position: (grid_x, grid_y),
} => { } => {
nvim.input_mouse( nvim.input_mouse(
"left", &button,
&action, &action,
"", "",
grid_id as i64, grid_id as i64,

@ -165,32 +165,42 @@ impl MouseManager {
} }
} }
fn handle_pointer_transition(&mut self, down: bool) { fn handle_pointer_transition(&mut self, mouse_button: &MouseButton, down: bool) {
// For some reason pointer down is handled differently from pointer up and drag. // For some reason pointer down is handled differently from pointer up and drag.
// Floating windows: relative coordinates are great. // Floating windows: relative coordinates are great.
// Non floating windows: rather than global coordinates, relative are needed // Non floating windows: rather than global coordinates, relative are needed
if self.enabled { if self.enabled {
if let Some(details) = &self.window_details_under_mouse { let button_text = match mouse_button {
let action = if down { MouseButton::Left => Some("left"),
"press".to_owned() MouseButton::Right => Some("right"),
} else { MouseButton::Middle => Some("middle"),
"release".to_owned() _ => None,
}; };
let position = if !down && self.has_moved {
self.drag_position
} else {
self.relative_position
};
self.command_sender if let Some(button_text) = button_text {
.send(UiCommand::MouseButton { if let Some(details) = &self.window_details_under_mouse {
action, let action = if down {
grid_id: details.id, "press".to_owned()
position: position.into(), } else {
}) "release".to_owned()
.ok(); };
}
let position = if !down && self.has_moved {
self.drag_position
} else {
self.relative_position
};
self.command_sender
.send(UiCommand::MouseButton {
button: button_text.to_string(),
action,
grid_id: details.id,
position: position.into(),
})
.ok();
}
}
} }
self.dragging = down; self.dragging = down;
@ -302,12 +312,12 @@ impl MouseManager {
Event::WindowEvent { Event::WindowEvent {
event: event:
WindowEvent::MouseInput { WindowEvent::MouseInput {
button: MouseButton::Left, button,
state, state,
.. ..
}, },
.. ..
} => self.handle_pointer_transition(state == &ElementState::Pressed), } => self.handle_pointer_transition(button, state == &ElementState::Pressed),
_ => {} _ => {}
} }
} }

Loading…
Cancel
Save