summaryrefslogtreecommitdiffstats
path: root/widget/src/text_input.rs
diff options
context:
space:
mode:
authorLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2023-07-13 12:10:10 -0700
committerLibravatar Cory Forsstrom <cforsstrom18@gmail.com>2023-07-13 12:16:48 -0700
commit66d671066386cd4ec1addbdfe0750e3077a5ea51 (patch)
tree182f244c5971822edd7896ad3cdb71b6ed7570d7 /widget/src/text_input.rs
parentdc0ebdc525dcb234fb754248eb1ee1606f91e839 (diff)
downloadiced-66d671066386cd4ec1addbdfe0750e3077a5ea51.tar.gz
iced-66d671066386cd4ec1addbdfe0750e3077a5ea51.tar.bz2
iced-66d671066386cd4ec1addbdfe0750e3077a5ea51.zip
Dont blink input cursor when window loses focus
Diffstat (limited to 'widget/src/text_input.rs')
-rw-r--r--widget/src/text_input.rs39
1 files changed, 31 insertions, 8 deletions
diff --git a/widget/src/text_input.rs b/widget/src/text_input.rs
index 272263f9..bd3145ea 100644
--- a/widget/src/text_input.rs
+++ b/widget/src/text_input.rs
@@ -564,6 +564,7 @@ where
Some(Focus {
updated_at: now,
now,
+ is_window_focused: true,
})
})
} else {
@@ -919,19 +920,35 @@ where
state.keyboard_modifiers = modifiers;
}
+ Event::Window(window::Event::Unfocused) => {
+ let state = state();
+
+ if let Some(focus) = &mut state.is_focused {
+ focus.is_window_focused = false;
+ }
+ }
+ Event::Window(window::Event::Focused) => {
+ let state = state();
+
+ if let Some(focus) = &mut state.is_focused {
+ focus.is_window_focused = true;
+ }
+ }
Event::Window(window::Event::RedrawRequested(now)) => {
let state = state();
if let Some(focus) = &mut state.is_focused {
- focus.now = now;
+ if focus.is_window_focused {
+ focus.now = now;
- let millis_until_redraw = CURSOR_BLINK_INTERVAL_MILLIS
- - (now - focus.updated_at).as_millis()
- % CURSOR_BLINK_INTERVAL_MILLIS;
+ let millis_until_redraw = CURSOR_BLINK_INTERVAL_MILLIS
+ - (now - focus.updated_at).as_millis()
+ % CURSOR_BLINK_INTERVAL_MILLIS;
- shell.request_redraw(window::RedrawRequest::At(
- now + Duration::from_millis(millis_until_redraw as u64),
- ));
+ shell.request_redraw(window::RedrawRequest::At(
+ now + Duration::from_millis(millis_until_redraw as u64),
+ ));
+ }
}
}
_ => {}
@@ -1016,7 +1033,11 @@ pub fn draw<Renderer>(
let font = font.unwrap_or_else(|| renderer.default_font());
let size = size.unwrap_or_else(|| renderer.default_size());
- let (cursor, offset) = if let Some(focus) = &state.is_focused {
+ let (cursor, offset) = if let Some(focus) = state
+ .is_focused
+ .as_ref()
+ .filter(|focus| focus.is_window_focused)
+ {
match state.cursor.state(value) {
cursor::State::Index(position) => {
let (text_value_width, offset) =
@@ -1188,6 +1209,7 @@ pub struct State {
struct Focus {
updated_at: Instant,
now: Instant,
+ is_window_focused: bool,
}
impl State {
@@ -1225,6 +1247,7 @@ impl State {
self.is_focused = Some(Focus {
updated_at: now,
now,
+ is_window_focused: true,
});
self.move_cursor_to_end();