diff -Nur /home/aho/CVS/skipstone/src/callbacks.c skipstone/src/callbacks.c --- /home/aho/CVS/skipstone/src/callbacks.c Sat Dec 15 13:14:51 2001 +++ skipstone/src/callbacks.c Tue Dec 18 04:22:12 2001 @@ -557,7 +557,7 @@ location = gtk_moz_embed_get_location(skipstone->embed); if (location) file_name = g_basename(location); all = gtk_check_button_new_with_label(_("Save everything, including images and framesets?")); - fs = gtk_file_selection_new(_("Enter a filename to save as")); + fs = file_save_dialog_new(_("Enter a filename to save as")); gtk_box_pack_start(GTK_BOX(GTK_FILE_SELECTION(fs)->action_area), all, FALSE, FALSE, 0); gtk_widget_show(all); gtk_object_set_data(GTK_OBJECT(fs), "skipstone", skipstone); @@ -575,7 +575,7 @@ { GtkWidget *fs; D_ENTER; - fs = gtk_file_selection_new(_("Enter a filename to save as")); + fs = file_save_dialog_new(_("Enter a filename to save as")); gtk_object_set_data(GTK_OBJECT(fs), "skipstone", skipstone); gtk_object_set_data(GTK_OBJECT(fs), "link", image_link); gtk_object_set_data(GTK_OBJECT(fs), "name", image_name); diff -Nur /home/aho/CVS/skipstone/src/interface.c skipstone/src/interface.c --- /home/aho/CVS/skipstone/src/interface.c Fri Dec 7 18:27:53 2001 +++ skipstone/src/interface.c Tue Dec 18 06:20:23 2001 @@ -676,3 +676,89 @@ g_free(theme); D_RETURN; } + + + + + +static gchar *default_save_dir = NULL; + +static void +on_save_dialog_close (GtkWidget *widget, gpointer data) +{ + gchar *text; + + text = gtk_file_selection_get_filename(GTK_FILE_SELECTION(widget)); + if (!text) return; + + text = g_dirname(text); + if (!text || text[0] == '\0') return; + + if (default_save_dir) g_free (default_save_dir); + + if (text[strlen(text) - 1] != '/') + default_save_dir = g_strconcat (text, "/", NULL); + else + default_save_dir = g_strdup (text); + + g_free (text); +} + +static void +gtk_file_selection_dir_button (GtkWidget *widget, + gint row, + gint column, + GdkEventButton *bevent, + gpointer user_data) +{ + GtkFileSelection *fs = NULL; + gchar *filename, *temp = NULL; + + g_return_if_fail (GTK_IS_CLIST (widget)); + + fs = GTK_FILE_SELECTION (user_data); + g_return_if_fail (fs != NULL); + g_return_if_fail (GTK_IS_FILE_SELECTION (fs)); + + gtk_clist_get_text (GTK_CLIST (fs->dir_list), row, 0, &temp); + /* + filename = g_strdup (temp); + + if (filename) + { + if (bevent) + switch (bevent->type) + { + case GDK_2BUTTON_PRESS: + gtk_file_selection_populate (fs, filename, FALSE); + break; + + default: + gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), filename); + break; + } + else + gtk_entry_set_text (GTK_ENTRY (fs->selection_entry), filename); + + g_free (filename); + } + */ +} + +GtkWidget *file_save_dialog_new (const gchar *title) +{ + GtkWidget *fs; + + fs = gtk_file_selection_new(title); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)), "destroy", + (GtkSignalFunc) on_save_dialog_close, + NULL); + gtk_signal_connect (GTK_OBJECT (GTK_FILE_SELECTION(fs)->dir_list), "select_row", + (GtkSignalFunc) gtk_file_selection_dir_button, + (gpointer) fs); + + if (default_save_dir) + gtk_file_selection_set_filename(GTK_FILE_SELECTION(fs), default_save_dir); + + return fs; +} diff -Nur /home/aho/CVS/skipstone/src/skipstone.h skipstone/src/skipstone.h --- /home/aho/CVS/skipstone/src/skipstone.h Sat Dec 15 13:14:51 2001 +++ skipstone/src/skipstone.h Tue Dec 18 04:21:27 2001 @@ -111,6 +111,7 @@ void create_toolbar(SkipStone *skipstone, gint i); void connect_embed_signals(SkipStone *skipstone); void make_themes_menu(GtkWidget *menu); +GtkWidget *file_save_dialog_new (const gchar *title); /* interface - Notebook */