From 0ed2841435ccba10adcb531f7885406aa348ff0e Mon Sep 17 00:00:00 2001 From: Victoria Brekenfeld Date: Wed, 12 Mar 2025 16:52:58 +0100 Subject: [PATCH] iced: Don't call update from render_elements --- src/utils/iced.rs | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/utils/iced.rs b/src/utils/iced.rs index b2f6377a..c00e6e8a 100644 --- a/src/utils/iced.rs +++ b/src/utils/iced.rs @@ -154,7 +154,7 @@ pub(crate) struct IcedElementInternal { additional_scale: f64, outputs: HashSet, buffers: HashMap, (MemoryRenderBuffer, Option<(Vec, Color)>)>, - pending_update: bool, + pending_realloc: bool, // state size: Size, @@ -207,7 +207,7 @@ impl Clone for IcedElementInternal

{ additional_scale: self.additional_scale, outputs: self.outputs.clone(), buffers: self.buffers.clone(), - pending_update: self.pending_update.clone(), + pending_realloc: self.pending_realloc.clone(), size: self.size.clone(), last_seat: self.last_seat.clone(), cursor_pos: self.cursor_pos.clone(), @@ -234,7 +234,7 @@ impl fmt::Debug for IcedElementInternal

{ ) .field("buffers", &"...") .field("size", &self.size) - .field("pending_update", &self.pending_update) + .field("pending_realloc", &self.pending_realloc) .field("last_seat", &self.last_seat) .field("cursor_pos", &self.cursor_pos) .field("touch_map", &self.touch_map) @@ -292,7 +292,7 @@ impl IcedElement

{ additional_scale: 1.0, outputs: HashSet::new(), buffers: HashMap::new(), - pending_update: false, + pending_realloc: false, size, cursor_pos: None, last_seat, @@ -306,7 +306,7 @@ impl IcedElement

{ executor_token, rx, }; - let _ = internal.update(true); + internal.update(true); IcedElement(Arc::new(Mutex::new(internal))) } @@ -345,7 +345,8 @@ impl IcedElement

{ } internal_ref.size = size; - internal_ref.pending_update = true; + internal_ref.pending_realloc = true; + internal_ref.update(true); } pub fn set_additional_scale(&self, scale: f64) { @@ -404,14 +405,14 @@ impl IcedElement

{ impl IcedElementInternal

{ #[profiling::function] - fn update(&mut self, mut force: bool) -> Vec::Message>> { + fn update(&mut self, mut force: bool) { while let Ok(Some(message)) = self.rx.try_recv() { self.state.queue_message(message); force = true; } if !force { - return Vec::new(); + return; } let cursor = self @@ -446,7 +447,6 @@ impl IcedElementInternal

{ })); } } - Vec::new() } } @@ -469,7 +469,7 @@ impl PointerTarget for IcedEle // TODO: Update iced widgets to handle touch using event position, not cursor_pos internal.cursor_pos = Some(event_location); *internal.last_seat.lock().unwrap() = Some((seat.clone(), event.serial)); - let _ = internal.update(true); + internal.update(true); } fn motion( @@ -486,7 +486,7 @@ impl PointerTarget for IcedEle .queue_event(Event::Mouse(MouseEvent::CursorMoved { position })); internal.cursor_pos = Some(event_location); *internal.last_seat.lock().unwrap() = Some((seat.clone(), event.serial)); - let _ = internal.update(true); + internal.update(true); } fn relative_motion( @@ -515,7 +515,7 @@ impl PointerTarget for IcedEle ButtonState::Released => MouseEvent::ButtonReleased(button), })); *internal.last_seat.lock().unwrap() = Some((seat.clone(), event.serial)); - let _ = internal.update(true); + internal.update(true); } fn axis( @@ -540,7 +540,7 @@ impl PointerTarget for IcedEle } }, })); - let _ = internal.update(true); + internal.update(true); } fn frame(&self, _seat: &Seat, _data: &mut crate::state::State) {} @@ -556,7 +556,7 @@ impl PointerTarget for IcedEle internal .state .queue_event(Event::Mouse(MouseEvent::CursorLeft)); - let _ = internal.update(true); + internal.update(true); } fn gesture_swipe_begin( @@ -903,8 +903,7 @@ where let mut internal = self.0.lock().unwrap(); // makes partial borrows easier let internal_ref = &mut *internal; - let force = std::mem::replace(&mut internal_ref.pending_update, false); - if force { + if std::mem::replace(&mut internal_ref.pending_realloc, false) { for (scale, (buffer, old_primitives)) in internal_ref.buffers.iter_mut() { let buffer_size = internal_ref .size @@ -915,7 +914,6 @@ where *old_primitives = None; } } - let _ = internal_ref.update(force); scale = scale * internal_ref.additional_scale; if let Some((buffer, ref mut old_layers)) =