Skip to content

Commit

Permalink
Allow interactions on disabled text_input
Browse files Browse the repository at this point in the history
Co-authored-by: Daniel Yoon <[email protected]>
  • Loading branch information
hecrj and Koranir committed Sep 4, 2024
1 parent 9628dc2 commit 9572bd1
Showing 1 changed file with 28 additions and 19 deletions.
47 changes: 28 additions & 19 deletions widget/src/text_input.rs
Original file line number Diff line number Diff line change
Expand Up @@ -395,11 +395,11 @@ where
position,
);

let is_cursor_visible = ((focus.now - focus.updated_at)
.as_millis()
/ CURSOR_BLINK_INTERVAL_MILLIS)
% 2
== 0;
let is_cursor_visible = !is_disabled
&& ((focus.now - focus.updated_at).as_millis()
/ CURSOR_BLINK_INTERVAL_MILLIS)
% 2
== 0;

let cursor = if is_cursor_visible {
Some((
Expand Down Expand Up @@ -531,12 +531,9 @@ where
fn diff(&self, tree: &mut Tree) {
let state = tree.state.downcast_mut::<State<Renderer::Paragraph>>();

// Unfocus text input if it becomes disabled
// Stop pasting if input becomes disabled
if self.on_input.is_none() {
state.last_click = None;
state.is_focused = None;
state.is_pasting = None;
state.is_dragging = false;
}
}

Expand Down Expand Up @@ -597,11 +594,7 @@ where
| Event::Touch(touch::Event::FingerPressed { .. }) => {
let state = state::<Renderer>(tree);

let click_position = if self.on_input.is_some() {
cursor.position_over(layout.bounds())
} else {
None
};
let click_position = cursor.position_over(layout.bounds());

state.is_focused = if click_position.is_some() {
state.is_focused.or_else(|| {
Expand Down Expand Up @@ -747,10 +740,6 @@ where
let state = state::<Renderer>(tree);

if let Some(focus) = &mut state.is_focused {
let Some(on_input) = &self.on_input else {
return event::Status::Ignored;
};

let modifiers = state.keyboard_modifiers;
focus.updated_at = Instant::now();

Expand All @@ -774,6 +763,10 @@ where
if state.keyboard_modifiers.command()
&& !self.is_secure =>
{
let Some(on_input) = &self.on_input else {
return event::Status::Ignored;
};

if let Some((start, end)) =
state.cursor.selection(&self.value)
{
Expand All @@ -798,6 +791,10 @@ where
if state.keyboard_modifiers.command()
&& !state.keyboard_modifiers.alt() =>
{
let Some(on_input) = &self.on_input else {
return event::Status::Ignored;
};

let content = match state.is_pasting.take() {
Some(content) => content,
None => {
Expand Down Expand Up @@ -841,6 +838,10 @@ where
}

if let Some(text) = text {
let Some(on_input) = &self.on_input else {
return event::Status::Ignored;
};

state.is_pasting = None;

if let Some(c) =
Expand Down Expand Up @@ -869,6 +870,10 @@ where
}
}
keyboard::Key::Named(key::Named::Backspace) => {
let Some(on_input) = &self.on_input else {
return event::Status::Ignored;
};

if modifiers.jump()
&& state.cursor.selection(&self.value).is_none()
{
Expand All @@ -893,6 +898,10 @@ where
update_cache(state, &self.value);
}
keyboard::Key::Named(key::Named::Delete) => {
let Some(on_input) = &self.on_input else {
return event::Status::Ignored;
};

if modifiers.jump()
&& state.cursor.selection(&self.value).is_none()
{
Expand Down Expand Up @@ -1111,7 +1120,7 @@ where
) -> mouse::Interaction {
if cursor.is_over(layout.bounds()) {
if self.on_input.is_none() {
mouse::Interaction::NotAllowed
mouse::Interaction::Idle
} else {
mouse::Interaction::Text
}
Expand Down

0 comments on commit 9572bd1

Please sign in to comment.