From 68e9966bb3f4872f5753787ce78ac90ed4948ee8 Mon Sep 17 00:00:00 2001 From: rootiest Date: Mon, 3 Aug 2026 21:40:56 -0400 Subject: [PATCH] fix: drop RefMut before calling refresh_preview to avoid panic --- src/ui/editor.rs | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/src/ui/editor.rs b/src/ui/editor.rs index 414c003..58c5353 100644 --- a/src/ui/editor.rs +++ b/src/ui/editor.rs @@ -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())();