| 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 { |