fix: drop RefMut before calling refresh_preview to avoid panic

This commit is contained in:
2026-08-03 21:40:56 -04:00
parent e1e27bb4ff
commit 68e9966bb3
+23 -17
View File
@@ -153,7 +153,6 @@ pub fn build_editor_page(
let composite = Rc::clone(&composite); let composite = Rc::clone(&composite);
let tag = tag.clone(); let tag = tag.clone();
let refresh_preview = refresh_preview.clone(); let refresh_preview = refresh_preview.clone();
let rebuild_swatches_for_closure = Rc::clone(&rebuild_swatches_for_closure);
button.connect_rgba_notify(move |btn| { button.connect_rgba_notify(move |btn| {
let new_rgba = btn.rgba(); let new_rgba = btn.rgba();
let new_hex = format!( let new_hex = format!(
@@ -162,15 +161,16 @@ pub fn build_editor_page(
(new_rgba.green() * 255.0).round() as u8, (new_rgba.green() * 255.0).round() as u8,
(new_rgba.blue() * 255.0).round() as u8, (new_rgba.blue() * 255.0).round() as u8,
); );
let mut comp = composite.borrow_mut(); let changed = {
let changed = if is_emblem { let mut comp = composite.borrow_mut();
comp.emblem.as_mut().unwrap().update_color(&tag, &new_hex).unwrap_or(false) if is_emblem {
} else { comp.emblem.as_mut().unwrap().update_color(&tag, &new_hex).unwrap_or(false)
comp.bg.update_color(&tag, &new_hex).unwrap_or(false) } else {
comp.bg.update_color(&tag, &new_hex).unwrap_or(false)
}
}; };
if changed { if changed {
refresh_preview(); refresh_preview();
(rebuild_swatches_for_closure.borrow())();
} }
}); });
} }
@@ -190,11 +190,14 @@ pub fn build_editor_page(
let refresh_preview = refresh_preview.clone(); let refresh_preview = refresh_preview.clone();
let rebuild_swatches = Rc::clone(&rebuild_swatches); let rebuild_swatches = Rc::clone(&rebuild_swatches);
undo_button.connect_clicked(move |_| { undo_button.connect_clicked(move |_| {
let mut comp = composite.borrow_mut(); let changed = {
let mut changed = comp.bg.undo().unwrap_or(false); let mut comp = composite.borrow_mut();
if let Some(emblem) = &mut comp.emblem { let mut changed = comp.bg.undo().unwrap_or(false);
changed |= emblem.undo().unwrap_or(false); if let Some(emblem) = &mut comp.emblem {
} changed |= emblem.undo().unwrap_or(false);
}
changed
};
if changed { if changed {
refresh_preview(); refresh_preview();
(rebuild_swatches.borrow())(); (rebuild_swatches.borrow())();
@@ -206,11 +209,14 @@ pub fn build_editor_page(
let refresh_preview = refresh_preview.clone(); let refresh_preview = refresh_preview.clone();
let rebuild_swatches = Rc::clone(&rebuild_swatches); let rebuild_swatches = Rc::clone(&rebuild_swatches);
redo_button.connect_clicked(move |_| { redo_button.connect_clicked(move |_| {
let mut comp = composite.borrow_mut(); let changed = {
let mut changed = comp.bg.redo().unwrap_or(false); let mut comp = composite.borrow_mut();
if let Some(emblem) = &mut comp.emblem { let mut changed = comp.bg.redo().unwrap_or(false);
changed |= emblem.redo().unwrap_or(false); if let Some(emblem) = &mut comp.emblem {
} changed |= emblem.redo().unwrap_or(false);
}
changed
};
if changed { if changed {
refresh_preview(); refresh_preview();
(rebuild_swatches.borrow())(); (rebuild_swatches.borrow())();