filesel.c 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /* $Id: filesel.c,v 1.1 2001/04/14 20:01:15 kilobug Exp $ */
  2. #include "gtkutil.h"
  3. typedef struct _filesel_t
  4. {
  5. GtkEntry *entry;
  6. GtkWidget *filesel;
  7. } filesel_t;
  8. static void clean_filesel(GtkWidget *wid, filesel_t *file)
  9. {
  10. if (file->filesel != NULL)
  11. gtk_widget_destroy(file->filesel);
  12. g_free(file);
  13. }
  14. static void ok_filesel(GtkWidget *wid, filesel_t *file)
  15. {
  16. char *s;
  17. s = gtk_file_selection_get_filename(GTK_FILE_SELECTION(file->filesel));
  18. gtk_entry_set_text(file->entry, s);
  19. gtk_widget_hide(file->filesel);
  20. }
  21. GtkWidget *create_filesel_button(const char *label, const char *title,
  22. GtkEntry *entry)
  23. {
  24. GtkWidget *button;
  25. filesel_t *file;
  26. GtkFileSelection *fs;
  27. file = g_malloc(sizeof(*file));
  28. file->entry = entry;
  29. file->filesel = gtk_file_selection_new(title);
  30. gtk_widget_hide(file->filesel);
  31. fs = GTK_FILE_SELECTION(file->filesel);
  32. gtk_file_selection_hide_fileop_buttons(fs);
  33. gtk_signal_connect_object(GTK_OBJECT(fs->cancel_button), "clicked",
  34. gtk_widget_hide, GTK_OBJECT(file->filesel));
  35. gtk_signal_connect(GTK_OBJECT(fs->ok_button), "clicked", ok_filesel, file);
  36. button = gtk_button_new_with_label(label);
  37. gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
  38. gtk_widget_show, GTK_OBJECT(file->filesel));
  39. gtk_signal_connect_after(GTK_OBJECT(button), "destroy",
  40. clean_filesel, file);
  41. gtk_widget_show(button);
  42. return button;
  43. }