fix: drop RefCell borrow during SVG saving and configure FileDialog to default to SVG
This commit is contained in:
+12
-1
@@ -193,14 +193,25 @@ fn build_editor(stack: &Stack, window: &ApplicationWindow, icon_path: PathBuf, b
|
|||||||
let window_clone = window.clone();
|
let window_clone = window.clone();
|
||||||
let comp = Rc::clone(&comp);
|
let comp = Rc::clone(&comp);
|
||||||
move || {
|
move || {
|
||||||
|
let filter = gtk::FileFilter::new();
|
||||||
|
filter.set_name(Some("SVG Images"));
|
||||||
|
filter.add_mime_type("image/svg+xml");
|
||||||
|
filter.add_pattern("*.svg");
|
||||||
|
|
||||||
|
let filters = gtk::gio::ListStore::new::<gtk::FileFilter>();
|
||||||
|
filters.append(&filter);
|
||||||
|
|
||||||
let dialog = gtk::FileDialog::builder()
|
let dialog = gtk::FileDialog::builder()
|
||||||
.title("Save Composite Icon As...")
|
.title("Save Composite Icon As...")
|
||||||
|
.filters(&filters)
|
||||||
|
.default_filter(&filter)
|
||||||
.build();
|
.build();
|
||||||
let c = Rc::clone(&comp);
|
let c = Rc::clone(&comp);
|
||||||
dialog.save(Some(&window_clone), gtk::gio::Cancellable::NONE, move |res| {
|
dialog.save(Some(&window_clone), gtk::gio::Cancellable::NONE, move |res| {
|
||||||
if let Ok(file) = res {
|
if let Ok(file) = res {
|
||||||
if let Some(path) = file.path() {
|
if let Some(path) = file.path() {
|
||||||
if let Err(e) = std::fs::write(&path, c.borrow().render()) {
|
let rendered = c.borrow().render();
|
||||||
|
if let Err(e) = std::fs::write(&path, rendered) {
|
||||||
eprintln!("Failed to save composite to {}: {e}", path.display());
|
eprintln!("Failed to save composite to {}: {e}", path.display());
|
||||||
} else {
|
} else {
|
||||||
c.borrow_mut().is_modified = false;
|
c.borrow_mut().is_modified = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user