aboutsummaryrefslogtreecommitdiff
path: root/src/app/runtime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/runtime.rs')
-rw-r--r--src/app/runtime.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/app/runtime.rs b/src/app/runtime.rs
index 180c3cef..bd7830b9 100644
--- a/src/app/runtime.rs
+++ b/src/app/runtime.rs
@@ -167,13 +167,15 @@ impl App {
true
}
crate::raw_input::RawInputEvent::Mouse(mouse) => {
+ let changes_view = !matches!(mouse.kind, crossterm::event::MouseEventKind::Moved)
+ || self.state.mode.mouse_motion_changes_view();
if self.state.popup_pane.is_some() || self.state.mouse_capture {
self.handle_mouse(mouse);
} else {
self.state
.handle_pane_mouse_only(&self.terminal_runtimes, mouse);
}
- true
+ changes_view
}
crate::raw_input::RawInputEvent::OuterFocusGained => {
self.send_outer_focus_event(crate::ghostty::FocusEvent::Gained);
@@ -809,6 +811,24 @@ mod tests {
}
#[tokio::test]
+ async fn passive_mouse_motion_does_not_request_monolithic_render() {
+ let (mut app, _) = test_app_with_pane();
+ app.state.mode = crate::app::Mode::Terminal;
+ let motion = || {
+ crate::raw_input::RawInputEvent::Mouse(crossterm::event::MouseEvent {
+ kind: crossterm::event::MouseEventKind::Moved,
+ column: 10,
+ row: 5,
+ modifiers: crossterm::event::KeyModifiers::empty(),
+ })
+ };
+
+ assert!(!app.handle_raw_input_event(motion()).await);
+ app.state.mode = crate::app::Mode::GlobalMenu;
+ assert!(app.handle_raw_input_event(motion()).await);
+ }
+
+ #[tokio::test]
async fn raw_input_batch_does_not_start_pending_agent_resume_before_render() {
let (mut app, pane_id) = test_app_with_pane();
app.state.ensure_test_terminals();