Make Clipboard argument in Widget trait mutable

This commit is contained in:
Héctor Ramón Jiménez 2021-03-10 01:59:02 +01:00
parent 35425001ed
commit 21971e0037
31 changed files with 173 additions and 127 deletions

View file

@ -243,9 +243,9 @@ where
event: Event,
layout: Layout<'_>,
cursor_position: Point,
messages: &mut Vec<Message>,
renderer: &Renderer,
clipboard: Option<&dyn Clipboard>,
clipboard: &mut dyn Clipboard,
messages: &mut Vec<Message>,
) -> event::Status {
match event {
Event::Mouse(mouse::Event::ButtonPressed(mouse::Button::Left))
@ -503,43 +503,42 @@ where
}
keyboard::KeyCode::V => {
if self.state.keyboard_modifiers.is_command_pressed() {
if let Some(clipboard) = clipboard {
let content = match self.state.is_pasting.take()
{
Some(content) => content,
None => {
let content: String = clipboard
.read()
.unwrap_or(String::new())
.chars()
.filter(|c| !c.is_control())
.collect();
let content = match self.state.is_pasting.take() {
Some(content) => content,
None => {
let content: String = clipboard
.read()
.unwrap_or(String::new())
.chars()
.filter(|c| !c.is_control())
.collect();
Value::new(&content)
}
};
Value::new(&content)
}
};
let mut editor = Editor::new(
&mut self.value,
&mut self.state.cursor,
);
let mut editor = Editor::new(
&mut self.value,
&mut self.state.cursor,
);
editor.paste(content.clone());
editor.paste(content.clone());
let message =
(self.on_change)(editor.contents());
messages.push(message);
let message = (self.on_change)(editor.contents());
messages.push(message);
self.state.is_pasting = Some(content);
}
self.state.is_pasting = Some(content);
} else {
self.state.is_pasting = None;
}
}
keyboard::KeyCode::A => {
if self.state.keyboard_modifiers.is_command_pressed() {
self.state.cursor.select_all(&self.value);
}
keyboard::KeyCode::A
if self
.state
.keyboard_modifiers
.is_command_pressed() =>
{
self.state.cursor.select_all(&self.value);
}
keyboard::KeyCode::Escape => {
self.state.is_focused = false;