diff options
author | 2022-11-30 19:55:57 +0100 | |
---|---|---|
committer | 2022-11-30 19:55:57 +0100 | |
commit | 8b55e9b9e6ba0b83038dd491dd34d95b4f9a381b (patch) | |
tree | 6939784c7121a4937bd32e65bfc781c1aca324bd /native | |
parent | 23da5a32515a2eaf567d35d1b81e4b8400a27219 (diff) | |
parent | 899bd45700f0fe7a5dee5fb71400820981f154e0 (diff) | |
download | iced-8b55e9b9e6ba0b83038dd491dd34d95b4f9a381b.tar.gz iced-8b55e9b9e6ba0b83038dd491dd34d95b4f9a381b.tar.bz2 iced-8b55e9b9e6ba0b83038dd491dd34d95b4f9a381b.zip |
Merge pull request #1546 from tarkah/fix/overlay-widget-operations
Fix overlay widget operations
Diffstat (limited to '')
-rw-r--r-- | native/src/overlay.rs | 2 | ||||
-rw-r--r-- | native/src/overlay/element.rs | 4 | ||||
-rw-r--r-- | native/src/user_interface.rs | 19 |
3 files changed, 15 insertions, 10 deletions
diff --git a/native/src/overlay.rs b/native/src/overlay.rs index bcb1a2ee..0b05b058 100644 --- a/native/src/overlay.rs +++ b/native/src/overlay.rs @@ -44,7 +44,7 @@ where /// Applies a [`widget::Operation`] to the [`Overlay`]. fn operate( - &self, + &mut self, _layout: Layout<'_>, _operation: &mut dyn widget::Operation<Message>, ) { diff --git a/native/src/overlay/element.rs b/native/src/overlay/element.rs index 09eee86d..4f5ef32a 100644 --- a/native/src/overlay/element.rs +++ b/native/src/overlay/element.rs @@ -106,7 +106,7 @@ where /// Applies a [`widget::Operation`] to the [`Element`]. pub fn operate( - &self, + &mut self, layout: Layout<'_>, operation: &mut dyn widget::Operation<Message>, ) { @@ -142,7 +142,7 @@ where } fn operate( - &self, + &mut self, layout: Layout<'_>, operation: &mut dyn widget::Operation<B>, ) { diff --git a/native/src/user_interface.rs b/native/src/user_interface.rs index 55c86a17..6b853da8 100644 --- a/native/src/user_interface.rs +++ b/native/src/user_interface.rs @@ -496,14 +496,19 @@ where operation, ); - if let Some(layout) = self.overlay.as_ref() { - if let Some(overlay) = self.root.as_widget_mut().overlay( - &mut self.state, - Layout::new(&self.base), - renderer, - ) { - overlay.operate(Layout::new(layout), operation); + if let Some(mut overlay) = self.root.as_widget_mut().overlay( + &mut self.state, + Layout::new(&self.base), + renderer, + ) { + if self.overlay.is_none() { + self.overlay = Some(overlay.layout(renderer, self.bounds)); } + + overlay.operate( + Layout::new(self.overlay.as_ref().unwrap()), + operation, + ); } } |