Author: post
Date: 2010-04-02 19:34:55 +0200 (Fri, 02 Apr 2010)
New Revision: 3315
Modified:
trunk/src/rs-save-dialog.c
Log:
Export As: Set default filename with extension, change extension when choosing
different file type & don't crash if no filename given.
Modified: trunk/src/rs-save-dialog.c
===================================================================
--- trunk/src/rs-save-dialog.c 2010-04-02 14:26:37 UTC (rev 3314)
+++ trunk/src/rs-save-dialog.c 2010-04-02 17:34:55 UTC (rev 3315)
@@ -107,6 +107,7 @@
dialog->chooser =
gtk_file_chooser_widget_new(GTK_FILE_CHOOSER_ACTION_SAVE);
if (folder)
gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog->chooser), folder);
+
dialog->type_box = gui_confbox_new((const gchar *) "save-as-filetype");
dialog->pref_bin = gtk_alignment_new(0.0, 0.5, 1.0, 1.0);
@@ -133,9 +134,10 @@
gtk_box_pack_start(GTK_BOX(dialog->vbox), button_box, FALSE, TRUE, 0);
gtk_widget_show_all(dialog->vbox);
+
/* Set default action */
GTK_WIDGET_SET_FLAGS(button_save, GTK_CAN_DEFAULT);
- gtk_window_set_default(window, button_save);
+ gtk_window_set_default(window, button_save);
gui_confbox_set_callback(dialog->type_box, dialog, file_type_changed);
savers = g_type_children (RS_TYPE_OUTPUT, &n_savers);
@@ -201,7 +203,24 @@
gtk_spin_button_set_value(dialog->w_spin, dialog->w_original);
gtk_spin_button_set_value(dialog->h_spin, dialog->h_original);
gtk_spin_button_set_value(dialog->p_spin, 100.0);
+
+ gchar* basename = g_path_get_basename(photo->filename);
+ gchar* output = g_strrstr(basename, ".");
+ /* Terminate basename at last "." */
+ if (output != NULL)
+ *output = '\0';
+ /* Find extension */
+ const gchar *ext = "jpg";
+ if (dialog->output &&
g_object_class_find_property(G_OBJECT_GET_CLASS(dialog->output), "filename"))
+ ext = rs_output_get_extension(RS_OUTPUT(dialog->output));
+
+ gchar* name_ext = g_strdup_printf("%s.%s",basename, ext);
+
+ gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog->chooser),
name_ext);
+ g_free(basename);
+ g_free(name_ext);
+
dialog->snapshot = snapshot;
}
@@ -220,7 +239,23 @@
dialog->file_pref = rs_output_get_parameter_widget(dialog->output,
"save-as");
if (g_object_class_find_property(G_OBJECT_GET_CLASS(dialog->output),
"filename"))
+ {
gtk_widget_show(dialog->chooser);
+ gchar* cur_file =
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser));
+ if( cur_file)
+ {
+ gchar* basename = g_path_get_basename(cur_file);
+ gchar* output = g_strrstr(basename, ".");
+ /* Terminate basename at last "." */
+ if (output != NULL)
+ *output = '\0';
+ gchar* name_ext = g_strdup_printf("%s.%s",basename,
rs_output_get_extension(RS_OUTPUT(dialog->output)));
+
gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(dialog->chooser), name_ext);
+ g_free(cur_file);
+ g_free(basename);
+ g_free(name_ext);
+ }
+ }
else
gtk_widget_hide(dialog->chooser);
@@ -253,7 +288,10 @@
gfloat actual_scale;
RSSaveDialog *dialog = RS_SAVE_DIALOG(data);
- gchar *description = g_strdup_printf(_("Exporting to %s"),
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser)));
+ gchar *filename =
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser));
+ if (!filename)
+ return NULL;
+ gchar *description = g_strdup_printf(_("Exporting to %s"), filename);
rs_job_update_description(slot, description);
g_free(description);
@@ -304,15 +342,15 @@
rs_job_update_progress(slot, 0.15);
if (g_object_class_find_property(G_OBJECT_GET_CLASS(dialog->output),
"filename"))
- g_object_set(dialog->output, "filename",
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser)), NULL);
+ g_object_set(dialog->output, "filename", filename, NULL);
if(!rs_output_execute(dialog->output, dialog->fend))
- show_save_error(_("Could not save file: %s\n\nCheck that you
have write permissions to this folder."),
-
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser)));
+ show_save_error(_("Could not save file: %s\n\nCheck that you
have write permissions to this folder."),filename);
rs_job_update_progress(slot, 0.75);
gdk_threads_enter();
gtk_widget_destroy(GTK_WIDGET(dialog));
gdk_threads_leave();
+ g_free(filename);
return NULL;
}
@@ -321,14 +359,18 @@
save_clicked(GtkButton *button, gpointer user_data)
{
RSSaveDialog *dialog = RS_SAVE_DIALOG(user_data);
- gchar *dirname =
g_path_get_dirname(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser)));
- rs_conf_set_string(CONF_EXPORT_AS_FOLDER, dirname);
- g_free(dirname);
+ gchar *filename =
gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog->chooser));
+ if (filename)
+ {
+ gchar *dirname = g_path_get_dirname(filename);
+ rs_conf_set_string(CONF_EXPORT_AS_FOLDER, dirname);
+ g_free(filename);
+ g_free(dirname);
- /* Just hide it for now, we destroy it in job() */
- gtk_widget_hide_all(GTK_WIDGET(dialog));
-
- rs_job_queue_add_job(job, g_object_ref(dialog), FALSE);
+ /* Just hide it for now, we destroy it in job() */
+ gtk_widget_hide_all(GTK_WIDGET(dialog));
+ rs_job_queue_add_job(job, g_object_ref(dialog), FALSE);
+ }
}
static void
_______________________________________________
Rawstudio-commit mailing list
[email protected]
http://rawstudio.org/cgi-bin/mailman/listinfo/rawstudio-commit