don't request timer if blink interval is 0

This commit is contained in:
Dongdong Zhou 2022-07-19 20:37:00 +01:00
parent c2ad7f33de
commit 1995f84a60
1 changed files with 40 additions and 28 deletions

View File

@ -544,8 +544,12 @@ fn event(
Event::Command(cmd) if cmd.is(LAPCE_UI_COMMAND) => {
let command = cmd.get_unchecked(LAPCE_UI_COMMAND);
if let LapceUICommand::Focus = command {
self.cursor_blink_timer =
ctx.request_timer(Duration::from_millis(500), None);
if data.config.editor.blink_interval > 0 {
self.cursor_blink_timer = ctx.request_timer(
Duration::from_millis(data.config.editor.blink_interval),
None,
);
}
self.request_focus(ctx, data, true);
let editor_data = data.editor_view_content(self.view_id);
self.ensure_cursor_visible(
@ -559,12 +563,16 @@ fn event(
}
Event::Timer(id) if self.cursor_blink_timer == *id => {
ctx.set_handled();
if ctx.is_focused() {
ctx.request_paint();
self.cursor_blink_timer =
ctx.request_timer(Duration::from_millis(500), None);
} else {
self.cursor_blink_timer = TimerToken::INVALID;
if data.config.editor.blink_interval > 0 {
if ctx.is_focused() {
ctx.request_paint();
self.cursor_blink_timer = ctx.request_timer(
Duration::from_millis(data.config.editor.blink_interval),
None,
);
} else {
self.cursor_blink_timer = TimerToken::INVALID;
}
}
}
Event::Timer(id) if self.last_idle_timer == *id => {
@ -768,27 +776,31 @@ fn update(
}
}
if data.focus == self.view_id {
let reset = if old_data.focus != self.view_id {
true
} else {
let mode = editor_data.editor.cursor.get_mode();
let old_mode = old_editor_data.editor.cursor.get_mode();
let offset = editor_data.editor.cursor.offset();
let old_offset = old_editor_data.editor.cursor.offset();
let (line, col) =
editor_data.doc.buffer().offset_to_line_col(offset);
let (old_line, old_col) =
old_editor_data.doc.buffer().offset_to_line_col(old_offset);
mode != old_mode || line != old_line || col != old_col
};
if data.config.editor.blink_interval > 0 {
if data.focus == self.view_id {
let reset = if old_data.focus != self.view_id {
true
} else {
let mode = editor_data.editor.cursor.get_mode();
let old_mode = old_editor_data.editor.cursor.get_mode();
let offset = editor_data.editor.cursor.offset();
let old_offset = old_editor_data.editor.cursor.offset();
let (line, col) =
editor_data.doc.buffer().offset_to_line_col(offset);
let (old_line, old_col) =
old_editor_data.doc.buffer().offset_to_line_col(old_offset);
mode != old_mode || line != old_line || col != old_col
};
if reset {
self.cursor_blink_timer =
ctx.request_timer(Duration::from_millis(500), None);
*editor_data.editor.last_cursor_instant.borrow_mut() =
Instant::now();
ctx.request_paint();
if reset {
self.cursor_blink_timer = ctx.request_timer(
Duration::from_millis(data.config.editor.blink_interval),
None,
);
*editor_data.editor.last_cursor_instant.borrow_mut() =
Instant::now();
ctx.request_paint();
}
}
}