Skip to content

Commit 9ae7c23

Browse files
committed
Let Neovim determine the mouse grid when composition is supported
1 parent d213a57 commit 9ae7c23

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

src/window/mouse_manager.rs

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use crate::{
1717
bridge::{send_ui, SerialCommand},
1818
renderer::{Renderer, WindowDrawDetails},
1919
settings::Settings,
20-
units::{GridPos, GridScale, GridVec, PixelPos, PixelRect, PixelSize, PixelVec},
20+
units::{GridPos, GridScale, GridSize, GridVec, PixelPos, PixelRect, PixelSize, PixelVec},
2121
window::keyboard_manager::KeyboardManager,
2222
window::WindowSettings,
2323
};
@@ -41,6 +41,7 @@ struct DragDetails {
4141
struct EditorState<'a> {
4242
grid_scale: &'a GridScale,
4343
window_regions: &'a Vec<WindowDrawDetails>,
44+
full_region: WindowDrawDetails,
4445
window: &'a Window,
4546
keyboard_manager: &'a KeyboardManager,
4647
}
@@ -97,14 +98,17 @@ impl MouseManager {
9798
editor_state: &'b EditorState<'b>,
9899
) -> Option<&'b WindowDrawDetails> {
99100
let position = self.window_position;
100-
101-
// the rendered window regions are sorted by draw order, so the earlier windows in the
102-
// list are drawn under the later ones
103-
editor_state
104-
.window_regions
105-
.iter()
106-
.filter(|details| details.region.contains(&position))
107-
.last()
101+
if self.use_composition {
102+
Some(&editor_state.full_region)
103+
} else {
104+
// the rendered window regions are sorted by draw order, so the earlier windows in the
105+
// list are drawn under the later ones
106+
editor_state
107+
.window_regions
108+
.iter()
109+
.filter(|details| details.region.contains(&position))
110+
.last()
111+
}
108112
}
109113

110114
fn get_relative_position(
@@ -137,10 +141,14 @@ impl MouseManager {
137141
// If dragging, the relevant window (the one which we send all commands to) is the one
138142
// which the mouse drag started on. Otherwise its the top rendered window
139143
let window_details = if let Some(drag_details) = &self.drag_details {
140-
editor_state
141-
.window_regions
142-
.iter()
143-
.find(|details| details.id == drag_details.draw_details.id)
144+
if self.use_composition {
145+
Some(&editor_state.full_region)
146+
} else {
147+
editor_state
148+
.window_regions
149+
.iter()
150+
.find(|details| details.id == drag_details.draw_details.id)
151+
}
144152
} else {
145153
self.get_window_details_under_mouse(editor_state)
146154
};
@@ -385,9 +393,21 @@ impl MouseManager {
385393
renderer: &Renderer,
386394
window: &Window,
387395
) {
396+
let full_region = WindowDrawDetails {
397+
id: 0,
398+
region: renderer
399+
.window_regions
400+
.first()
401+
.map_or(PixelRect::ZERO, |v| v.region),
402+
grid_size: renderer
403+
.window_regions
404+
.first()
405+
.map_or(GridSize::ZERO, |v| v.grid_size),
406+
};
388407
let editor_state = EditorState {
389408
grid_scale: &renderer.grid_renderer.grid_scale,
390409
window_regions: &renderer.window_regions,
410+
full_region,
391411
window,
392412
keyboard_manager,
393413
};

0 commit comments

Comments
 (0)