From 35f0af2188fb13c9bd33e3bcd81e1e7097c44fa8 Mon Sep 17 00:00:00 2001 From: rootiest Date: Mon, 3 Aug 2026 23:05:17 -0400 Subject: [PATCH] fix: drop RefCell borrow in slider callbacks before calling refresh_preview --- src/ui/editor.rs | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/src/ui/editor.rs b/src/ui/editor.rs index 233c2b5..a71c3c4 100644 --- a/src/ui/editor.rs +++ b/src/ui/editor.rs @@ -129,10 +129,16 @@ pub fn build_editor_page( let composite = Rc::clone(&composite); let refresh_preview = refresh_preview.clone(); scale_x.connect_value_changed(move |s| { - let mut comp = composite.borrow_mut(); - if (comp.emblem_x - s.value()).abs() > f64::EPSILON { - comp.emblem_x = s.value(); - comp.is_modified = true; + let mut changed = false; + { + let mut comp = composite.borrow_mut(); + if (comp.emblem_x - s.value()).abs() > f64::EPSILON { + comp.emblem_x = s.value(); + comp.is_modified = true; + changed = true; + } + } + if changed { refresh_preview(); } }); @@ -141,10 +147,16 @@ pub fn build_editor_page( let composite = Rc::clone(&composite); let refresh_preview = refresh_preview.clone(); scale_y.connect_value_changed(move |s| { - let mut comp = composite.borrow_mut(); - if (comp.emblem_y - s.value()).abs() > f64::EPSILON { - comp.emblem_y = s.value(); - comp.is_modified = true; + let mut changed = false; + { + let mut comp = composite.borrow_mut(); + if (comp.emblem_y - s.value()).abs() > f64::EPSILON { + comp.emblem_y = s.value(); + comp.is_modified = true; + changed = true; + } + } + if changed { refresh_preview(); } }); @@ -153,10 +165,16 @@ pub fn build_editor_page( let composite = Rc::clone(&composite); let refresh_preview = refresh_preview.clone(); scale_size.connect_value_changed(move |s| { - let mut comp = composite.borrow_mut(); - if (comp.emblem_size - s.value()).abs() > f64::EPSILON { - comp.emblem_size = s.value(); - comp.is_modified = true; + let mut changed = false; + { + let mut comp = composite.borrow_mut(); + if (comp.emblem_size - s.value()).abs() > f64::EPSILON { + comp.emblem_size = s.value(); + comp.is_modified = true; + changed = true; + } + } + if changed { refresh_preview(); } });