on master help sign in
Propagate idle timeout event to components (#3172)
001858bGokul Soumya
helix-term/src/application.rs+2−7
@@ -435,18 +435,13 @@ impl Application {
435 }
435 }
436
436
437 pub fn handle_idle_timeout(&mut self) {
437 pub fn handle_idle_timeout(&mut self) {
438− use crate::compositor::EventResult;
439− let editor_view = self
440− .compositor
441− .find::<ui::EditorView>()
442− .expect("expected at least one EditorView");
443−
444 let mut cx = crate::compositor::Context {
438 let mut cx = crate::compositor::Context {
445 editor: &mut self.editor,
439 editor: &mut self.editor,
446 jobs: &mut self.jobs,
440 jobs: &mut self.jobs,
447 scroll: None,
441 scroll: None,
448 };
442 };
449− if let EventResult::Consumed(_) = editor_view.handle_idle_timeout(&mut cx) {
443+ let should_render = self.compositor.handle_event(&Event::IdleTimeout, &mut cx);
444+ if should_render {
450 self.render();
445 self.render();
451 }
446 }
452 }
447 }
helix-term/src/ui/editor.rs+3−10
@@ -1066,7 +1066,7 @@ impl EditorView {
1066 editor.clear_idle_timer(); // don't retrigger
1066 editor.clear_idle_timer(); // don't retrigger
1067 }
1067 }
1068
1068
1069− pub fn handle_idle_timeout(&mut self, cx: &mut crate::compositor::Context) -> EventResult {
1069+ pub fn handle_idle_timeout(&mut self, cx: &mut commands::Context) -> EventResult {
1070 if self.completion.is_some()
1070 if self.completion.is_some()
1071 || cx.editor.mode != Mode::Insert
1071 || cx.editor.mode != Mode::Insert
1072 || !cx.editor.config().auto_completion
1072 || !cx.editor.config().auto_completion
@@ -1074,15 +1074,7 @@ impl EditorView {
1074 return EventResult::Ignored(None);
1074 return EventResult::Ignored(None);
1075 }
1075 }
1076
1076
1077− let mut cx = commands::Context {
1078− register: None,
1079− editor: cx.editor,
1080− jobs: cx.jobs,
1081− count: None,
1082− callback: None,
1083− on_next_key_callback: None,
1084− };
1085− crate::commands::insert::idle_completion(&mut cx);
1077+ crate::commands::insert::idle_completion(cx);
1086
1078
1087 EventResult::Consumed(None)
1079 EventResult::Consumed(None)
1088 }
1080 }
@@ -1403,6 +1395,7 @@ impl Component for EditorView {
1403 }
1395 }
1404
1396
1405 Event::Mouse(event) => self.handle_mouse_event(event, &mut cx),
1397 Event::Mouse(event) => self.handle_mouse_event(event, &mut cx),
1398+ Event::IdleTimeout => self.handle_idle_timeout(&mut cx),
1406 Event::FocusGained | Event::FocusLost => EventResult::Ignored(None),
1399 Event::FocusGained | Event::FocusLost => EventResult::Ignored(None),
1407 }
1400 }
1408 }
1401 }
helix-view/src/input.rs+1
@@ -14,6 +14,7 @@ pub enum Event {
14 Mouse(MouseEvent),
14 Mouse(MouseEvent),
15 Paste(String),
15 Paste(String),
16 Resize(u16, u16),
16 Resize(u16, u16),
17+ IdleTimeout,
17}
18}
18
19
19#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
20#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]