# HG changeset patch # User Richard Nelson # Date 1174956378 0 # Node ID 0f1ab43db29767da2dd3572cdad1afe2cbc45766 # Parent cc3c50816cc978fdecbb7486880881a404907a40 fix file saving diff -r cc3c50816cc9 -r 0f1ab43db297 finch/gntrequest.c --- a/finch/gntrequest.c Mon Mar 26 05:42:33 2007 +0000 +++ b/finch/gntrequest.c Tue Mar 27 00:46:18 2007 +0000 @@ -582,6 +582,8 @@ data->dialog = window; gnt_box_set_title(GNT_BOX(window), title ? title : (savedialog ? _("Save File...") : _("Open File..."))); gnt_file_sel_set_current_location(sel, purple_home_dir()); /* XXX: */ + if (savedialog) + gnt_file_sel_set_suggested_filename(sel, filename); g_signal_connect(G_OBJECT(sel->cancel), "activate", G_CALLBACK(file_cancel_cb), data); g_signal_connect(G_OBJECT(sel->select), "activate", diff -r cc3c50816cc9 -r 0f1ab43db297 finch/libgnt/gntfilesel.c --- a/finch/libgnt/gntfilesel.c Mon Mar 26 05:42:33 2007 +0000 +++ b/finch/libgnt/gntfilesel.c Tue Mar 27 00:46:18 2007 +0000 @@ -28,6 +28,7 @@ { GntFileSel *sel = GNT_FILE_SEL(widget); g_free(sel->current); + g_free(sel->suggest); if (sel->tags) { g_list_foreach(sel->tags, (GFunc)g_free, NULL); g_list_free(sel->tags); @@ -70,7 +71,8 @@ { char *old; const char *tmp; - tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files)); + tmp = sel->suggest ? sel->suggest : + (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files)); old = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : ""); gnt_entry_set_text(GNT_ENTRY(sel->location), old); g_free(old); @@ -230,6 +232,8 @@ static void file_sel_changed(GntWidget *widget, gpointer old, gpointer current, GntFileSel *sel) { + g_free(sel->suggest); + sel->suggest = NULL; update_location(sel); } @@ -449,12 +453,19 @@ return sel->dirsonly; } +void gnt_file_sel_set_suggested_filename(GntFileSel *sel, const char *suggest) +{ + sel->suggest = g_strdup(suggest); +} + char *gnt_file_sel_get_selected_file(GntFileSel *sel) { char *ret; - const char *tmp; - tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files)); - ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : ""); + if (sel->dirsonly) { + ret = g_strdup(g_path_get_dirname(gnt_entry_get_text(GNT_ENTRY(sel->location)))); + } else { + ret = g_strdup(gnt_entry_get_text(GNT_ENTRY(sel->location))); + } return ret; } diff -r cc3c50816cc9 -r 0f1ab43db297 finch/libgnt/gntfilesel.h --- a/finch/libgnt/gntfilesel.h Mon Mar 26 05:42:33 2007 +0000 +++ b/finch/libgnt/gntfilesel.h Tue Mar 27 00:46:18 2007 +0000 @@ -33,6 +33,7 @@ GntWidget *cancel; /* cancel button */ char *current; /* Full path of the current location */ + char *suggest; /* Suggested filename */ /* XXX: someone should make these useful */ gboolean must_exist; /* Make sure the selected file (the name entered in 'location') exists */ gboolean dirsonly; /* Show only directories */ @@ -73,6 +74,8 @@ void gnt_file_sel_set_multi_select(GntFileSel *sel, gboolean set); +void gnt_file_sel_set_suggested_filename(GntFileSel *sel, const char *suggest); + G_END_DECLS #endif /* GNT_FILE_SEL_H */