create separate timer for redraw requests (#8023)

* create separate timer for redraw requests

* Update helix-view/src/editor.rs

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>

---------

Co-authored-by: Michael Davis <mcarsondavis@gmail.com>
This commit is contained in:
Pascal Kuthe 2023-08-21 23:24:30 +02:00 committed by GitHub
parent 454b61cb21
commit e5f8d8ef04
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 2 deletions

View File

@ -598,6 +598,9 @@ pub async fn handle_editor_event(&mut self, event: EditorEvent) -> bool {
self.render().await;
}
}
EditorEvent::Redraw => {
self.render().await;
}
EditorEvent::IdleTimer => {
self.editor.clear_idle_timer();
self.handle_idle_timeout().await;

View File

@ -918,6 +918,7 @@ pub struct Editor {
pub auto_pairs: Option<AutoPairs>,
pub idle_timer: Pin<Box<Sleep>>,
redraw_timer: Pin<Box<Sleep>>,
last_motion: Option<Motion>,
pub last_completion: Option<CompleteAction>,
@ -963,6 +964,7 @@ pub enum EditorEvent {
LanguageServerMessage((usize, Call)),
DebuggerEvent(dap::Payload),
IdleTimer,
Redraw,
}
#[derive(Debug, Clone)]
@ -1053,6 +1055,7 @@ pub fn new(
status_msg: None,
autoinfo: None,
idle_timer: Box::pin(sleep(conf.idle_timeout)),
redraw_timer: Box::pin(sleep(Duration::MAX)),
last_motion: None,
last_completion: None,
config,
@ -1753,12 +1756,16 @@ pub async fn wait_event(&mut self) -> EditorEvent {
if !self.needs_redraw{
self.needs_redraw = true;
let timeout = Instant::now() + Duration::from_millis(33);
if timeout < self.idle_timer.deadline(){
self.idle_timer.as_mut().reset(timeout)
if timeout < self.idle_timer.deadline() && timeout < self.redraw_timer.deadline(){
self.redraw_timer.as_mut().reset(timeout)
}
}
}
_ = &mut self.redraw_timer => {
self.redraw_timer.as_mut().reset(Instant::now() + Duration::from_secs(86400 * 365 * 30));
return EditorEvent::Redraw
}
_ = &mut self.idle_timer => {
return EditorEvent::IdleTimer
}