summaryrefslogtreecommitdiffstats
path: root/native
diff options
context:
space:
mode:
authorLibravatar Zak <zakmikellides@gmail.com>2020-11-09 12:00:40 +0000
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-11-25 03:57:18 +0100
commitd275a4ed324c878ed776de2acc3cae0ee9c9724d (patch)
tree90e1ee3150efe3039e668f6a761d6c774fecfed7 /native
parent8f081bad7756e16a4eb0ca4dcb1144fc47de5e9b (diff)
downloadiced-d275a4ed324c878ed776de2acc3cae0ee9c9724d.tar.gz
iced-d275a4ed324c878ed776de2acc3cae0ee9c9724d.tar.bz2
iced-d275a4ed324c878ed776de2acc3cae0ee9c9724d.zip
This PR fixes a bug with select all (CMD + A on MacOS) when using a text_input.
Previous behaviour: when selecting all (CMD + A) would delete the current text inside the input and replace the content with just the letter 'a'. Now we check if the logo key (modifier key) has been pressed before checking any other key and save it to the state level. This way we can prevent any text being deleted when using the select all shortcut or text being entered at all when a modifier key is pressed (this behaviour matches other text input behaviour i.e text inputs in the browser etc...).
Diffstat (limited to 'native')
-rw-r--r--native/src/widget/text_input.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/native/src/widget/text_input.rs b/native/src/widget/text_input.rs
index c067de77..20295e9f 100644
--- a/native/src/widget/text_input.rs
+++ b/native/src/widget/text_input.rs
@@ -382,6 +382,7 @@ where
Event::Keyboard(keyboard::Event::CharacterReceived(c))
if self.state.is_focused
&& self.state.is_pasting.is_none()
+ && !self.state.is_logo_pressed
&& !c.is_control() =>
{
let mut editor =
@@ -398,6 +399,10 @@ where
key_code,
modifiers,
}) if self.state.is_focused => {
+ if platform::is_copy_paste_modifier_pressed(modifiers) {
+ self.state.is_logo_pressed = true;
+ }
+
match key_code {
keyboard::KeyCode::Enter => {
if let Some(on_submit) = self.on_submit.clone() {
@@ -523,7 +528,7 @@ where
}
}
keyboard::KeyCode::V => {
- if platform::is_copy_paste_modifier_pressed(modifiers) {
+ if self.state.is_logo_pressed {
if let Some(clipboard) = clipboard {
let content = match self.state.is_pasting.take()
{
@@ -558,13 +563,14 @@ where
}
}
keyboard::KeyCode::A => {
- if platform::is_copy_paste_modifier_pressed(modifiers) {
+ if self.state.is_logo_pressed {
self.state.cursor.select_all(&self.value);
}
}
keyboard::KeyCode::Escape => {
self.state.is_focused = false;
self.state.is_dragging = false;
+ self.state.is_logo_pressed = false;
self.state.is_pasting = None;
}
_ => {}
@@ -579,7 +585,9 @@ where
keyboard::KeyCode::V => {
self.state.is_pasting = None;
}
- _ => {}
+ _ => {
+ self.state.is_logo_pressed = false;
+ }
}
return event::Status::Captured;
@@ -721,6 +729,7 @@ where
pub struct State {
is_focused: bool,
is_dragging: bool,
+ is_logo_pressed: bool,
is_pasting: Option<Value>,
last_click: Option<mouse::Click>,
cursor: Cursor,
@@ -742,6 +751,7 @@ impl State {
Self {
is_focused: true,
is_dragging: false,
+ is_logo_pressed: false,
is_pasting: None,
last_click: None,
cursor: Cursor::default(),