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 tag = tag.clone();
let refresh_preview = refresh_preview.clone();
let rebuild_swatches_for_closure = Rc::clone(&rebuild_swatches_for_closure);
button.connect_rgba_notify(move |btn| {
let new_rgba = btn.rgba();
let new_hex = format!(
@@ -162,15 +161,16 @@ pub fn build_editor_page(
(new_rgba.green() * 255.0).round() as u8,
(new_rgba.blue() * 255.0).round() as u8,
);
let mut comp = composite.borrow_mut();
let changed = if is_emblem {
comp.emblem.as_mut().unwrap().update_color(&tag, &new_hex).unwrap_or(false)
} else {
comp.bg.update_color(&tag, &new_hex).unwrap_or(false)
let changed = {
let mut comp = composite.borrow_mut();
if is_emblem {
comp.emblem.as_mut().unwrap().update_color(&tag, &new_hex).unwrap_or(false)
} else {
comp.bg.update_color(&tag, &new_hex).unwrap_or(false)
}
};
if changed {
refresh_preview();
(rebuild_swatches_for_closure.borrow())();
}
});
}
@@ -190,11 +190,14 @@ pub fn build_editor_page(
let refresh_preview = refresh_preview.clone();
let rebuild_swatches = Rc::clone(&rebuild_swatches);
undo_button.connect_clicked(move |_| {
let mut comp = composite.borrow_mut();
let mut changed = comp.bg.undo().unwrap_or(false);
if let Some(emblem) = &mut comp.emblem {
changed |= emblem.undo().unwrap_or(false);
}
let changed = {
let mut comp = composite.borrow_mut();
let mut changed = comp.bg.undo().unwrap_or(false);
if let Some(emblem) = &mut comp.emblem {
changed |= emblem.undo().unwrap_or(false);
}
changed
};
if changed {
refresh_preview();
(rebuild_swatches.borrow())();
@@ -206,11 +209,14 @@ pub fn build_editor_page(
let refresh_preview = refresh_preview.clone();
let rebuild_swatches = Rc::clone(&rebuild_swatches);
redo_button.connect_clicked(move |_| {
let mut comp = composite.borrow_mut();
let mut changed = comp.bg.redo().unwrap_or(false);
if let Some(emblem) = &mut comp.emblem {
changed |= emblem.redo().unwrap_or(false);
}
let changed = {
let mut comp = composite.borrow_mut();
let mut changed = comp.bg.redo().unwrap_or(false);
if let Some(emblem) = &mut comp.emblem {
changed |= emblem.redo().unwrap_or(false);
}
changed
};
if changed {
refresh_preview();
(rebuild_swatches.borrow())();