diff --git a/examples/editor/src/main.rs b/examples/editor/src/main.rs index b854275f..a40f6e9c 100644 --- a/examples/editor/src/main.rs +++ b/examples/editor/src/main.rs @@ -59,7 +59,7 @@ impl Editor { )), Message::FileOpened, ), - operation::focus_next(), + operation::focus(EDITOR), ]), ) } @@ -196,6 +196,7 @@ impl Editor { column![ controls, text_editor(&self.content) + .id(EDITOR) .height(Fill) .on_action(Message::ActionPerformed) .wrapping(if self.word_wrap { @@ -331,3 +332,5 @@ fn icon<'a, Message>(codepoint: char) -> Element<'a, Message> { .shaping(text::Shaping::Basic) .into() } + +const EDITOR: &str = "editor"; diff --git a/widget/src/text_editor.rs b/widget/src/text_editor.rs index 8ab40311..6141ee59 100644 --- a/widget/src/text_editor.rs +++ b/widget/src/text_editor.rs @@ -104,6 +104,7 @@ pub struct TextEditor< Theme: Catalog, Renderer: text::Renderer, { + id: Option, content: &'a Content, placeholder: Option>, font: Option, @@ -135,6 +136,7 @@ where /// Creates new [`TextEditor`] with the given [`Content`]. pub fn new(content: &'a Content) -> Self { Self { + id: None, content, placeholder: None, font: None, @@ -156,6 +158,12 @@ where last_status: None, } } + + /// Sets the [`Id`](widget::Id) of the [`TextEditor`]. + pub fn id(mut self, id: impl Into) -> Self { + self.id = Some(id.into()); + self + } } impl<'a, Highlighter, Message, Theme, Renderer> @@ -275,6 +283,7 @@ where ) -> highlighter::Format, ) -> TextEditor<'a, H, Message, Theme, Renderer> { TextEditor { + id: self.id, content: self.content, placeholder: self.placeholder, font: self.font, @@ -1057,7 +1066,7 @@ where ) { let state = tree.state.downcast_mut::>(); - operation.focusable(None, layout.bounds(), state); + operation.focusable(self.id.as_ref(), layout.bounds(), state); } }