diff options
Diffstat (limited to 'fiv-view.c')
-rw-r--r-- | fiv-view.c | 40 |
1 files changed, 15 insertions, 25 deletions
@@ -797,18 +797,7 @@ save_as(FivView *self, cairo_surface_t *frame) "_Cancel", GTK_RESPONSE_CANCEL, "_Save", GTK_RESPONSE_ACCEPT, NULL); GtkFileChooser *chooser = GTK_FILE_CHOOSER(dialog); - - // TODO(p): Consider a hard dependency on libwebp, or clean this up. -#ifdef HAVE_LIBWEBP - // This is the best general format: supports lossless encoding, animations, - // alpha channel, and Exif and ICC profile metadata. - // PNG is another viable option, but sPNG can't do APNG, Wuffs can't save, - // and libpng is a pain in the arse. - GtkFileFilter *webp_filter = gtk_file_filter_new(); - gtk_file_filter_add_mime_type(webp_filter, "image/webp"); - gtk_file_filter_add_pattern(webp_filter, "*.webp"); - gtk_file_filter_set_name(webp_filter, "Lossless WebP (*.webp)"); - gtk_file_chooser_add_filter(chooser, webp_filter); + gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE); // Note that GTK+'s save dialog is too stupid to automatically change // the extension when user changes the filter. Presumably, @@ -819,14 +808,21 @@ save_as(FivView *self, cairo_surface_t *frame) g_free(basename); gtk_file_chooser_set_current_name(chooser, name); g_free(name); -#endif // HAVE_LIBWEBP - - gtk_file_chooser_set_do_overwrite_confirmation(chooser, TRUE); gchar *dirname = g_path_get_dirname(self->path); gtk_file_chooser_set_current_folder(chooser, dirname); g_free(dirname); + // This is the best general format: supports lossless encoding, animations, + // alpha channel, and Exif and ICC profile metadata. + // PNG is another viable option, but sPNG can't do APNG, Wuffs can't save, + // and libpng is a pain in the arse. + GtkFileFilter *webp_filter = gtk_file_filter_new(); + gtk_file_filter_add_mime_type(webp_filter, "image/webp"); + gtk_file_filter_add_pattern(webp_filter, "*.webp"); + gtk_file_filter_set_name(webp_filter, "Lossless WebP (*.webp)"); + gtk_file_chooser_add_filter(chooser, webp_filter); + // The format is supported by Exiv2 and ExifTool. // This is mostly a developer tool. GtkFileFilter *exv_filter = gtk_file_filter_new(); @@ -835,22 +831,16 @@ save_as(FivView *self, cairo_surface_t *frame) gtk_file_filter_set_name(exv_filter, "Exiv2 metadata (*.exv)"); gtk_file_chooser_add_filter(chooser, exv_filter); + GError *error = NULL; switch (gtk_dialog_run(GTK_DIALOG(dialog))) { gchar *path; case GTK_RESPONSE_ACCEPT: path = gtk_file_chooser_get_filename(chooser); - - GError *error = NULL; -#ifdef HAVE_LIBWEBP - if (gtk_file_chooser_get_filter(chooser) == webp_filter) - fiv_io_save(self->page, frame, target, path, &error); - else -#endif // HAVE_LIBWEBP - fiv_io_save_metadata(self->page, path, &error); - if (error) + if (!(gtk_file_chooser_get_filter(chooser) == webp_filter + ? fiv_io_save(self->page, frame, target, path, &error) + : fiv_io_save_metadata(self->page, path, &error))) show_error_dialog(window, error); g_free(path); - // Fall-through. default: gtk_widget_destroy(dialog); |