finch/libgnt/gntfilesel.c

changeset 16000
0bb1f85ebd2c
parent 15990
8f3cecb0bf47
child 16011
8510d387d21b
equal deleted inserted replaced
15998:294277e634fc 16000:0bb1f85ebd2c
26 static void 26 static void
27 gnt_file_sel_destroy(GntWidget *widget) 27 gnt_file_sel_destroy(GntWidget *widget)
28 { 28 {
29 GntFileSel *sel = GNT_FILE_SEL(widget); 29 GntFileSel *sel = GNT_FILE_SEL(widget);
30 g_free(sel->current); 30 g_free(sel->current);
31 g_free(sel->suggest);
31 if (sel->tags) { 32 if (sel->tags) {
32 g_list_foreach(sel->tags, (GFunc)g_free, NULL); 33 g_list_foreach(sel->tags, (GFunc)g_free, NULL);
33 g_list_free(sel->tags); 34 g_list_free(sel->tags);
34 } 35 }
35 } 36 }
68 static void 69 static void
69 update_location(GntFileSel *sel) 70 update_location(GntFileSel *sel)
70 { 71 {
71 char *old; 72 char *old;
72 const char *tmp; 73 const char *tmp;
73 tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files)); 74 tmp = sel->suggest ? sel->suggest :
75 (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files));
74 old = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : ""); 76 old = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : "");
75 gnt_entry_set_text(GNT_ENTRY(sel->location), old); 77 gnt_entry_set_text(GNT_ENTRY(sel->location), old);
76 g_free(old); 78 g_free(old);
77 } 79 }
78 80
228 } 230 }
229 231
230 static void 232 static void
231 file_sel_changed(GntWidget *widget, gpointer old, gpointer current, GntFileSel *sel) 233 file_sel_changed(GntWidget *widget, gpointer old, gpointer current, GntFileSel *sel)
232 { 234 {
235 g_free(sel->suggest);
236 sel->suggest = NULL;
233 update_location(sel); 237 update_location(sel);
234 } 238 }
235 239
236 static void 240 static void
237 gnt_file_sel_map(GntWidget *widget) 241 gnt_file_sel_map(GntWidget *widget)
447 gboolean gnt_file_sel_get_dirs_only(GntFileSel *sel) 451 gboolean gnt_file_sel_get_dirs_only(GntFileSel *sel)
448 { 452 {
449 return sel->dirsonly; 453 return sel->dirsonly;
450 } 454 }
451 455
456 void gnt_file_sel_set_suggested_filename(GntFileSel *sel, const char *suggest)
457 {
458 sel->suggest = g_strdup(suggest);
459 }
460
452 char *gnt_file_sel_get_selected_file(GntFileSel *sel) 461 char *gnt_file_sel_get_selected_file(GntFileSel *sel)
453 { 462 {
454 char *ret; 463 char *ret;
455 const char *tmp; 464 if (sel->dirsonly) {
456 tmp = (const char*)gnt_tree_get_selection_data(sel->dirsonly ? GNT_TREE(sel->dirs) : GNT_TREE(sel->files)); 465 ret = g_strdup(g_path_get_dirname(gnt_entry_get_text(GNT_ENTRY(sel->location))));
457 ret = g_strdup_printf("%s%s%s", sel->current, sel->current[1] ? G_DIR_SEPARATOR_S : "", tmp ? tmp : ""); 466 } else {
467 ret = g_strdup(gnt_entry_get_text(GNT_ENTRY(sel->location)));
468 }
458 return ret; 469 return ret;
459 } 470 }
460 471
461 void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must) 472 void gnt_file_sel_set_must_exist(GntFileSel *sel, gboolean must)
462 { 473 {

mercurial