tGtkGetFile() function added; "browse" button for sounds in GUI client options dialog is now functional on GTK+ systems. - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 627eb9e4202027b39884cc2bc571e2da5e46e911
 (DIR) parent 7846c81331d424e9261479cad1295a499768c127
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Mon,  8 Jul 2002 12:49:08 +0000
       
       GtkGetFile() function added; "browse" button for sounds in GUI client
       options dialog is now functional on GTK+ systems.
       
       
       Diffstat:
         M src/gtkport/gtkport.c               |      43 ++++++++++++++++++++++++++++++
         M src/gtkport/gtkport.h               |       2 ++
         M src/gui_client/optdialog.c          |      18 +++++++++++++++++-
       
       3 files changed, 62 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
       t@@ -5356,6 +5356,49 @@ GtkWidget *gtk_url_new(const gchar *text, const gchar *target,
          return eventbox;
        }
        
       +static void store_filename(GtkWidget *widget, gchar **filename)
       +{
       +  GtkWidget *file_select = gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW);
       +
       +  g_assert(file_select != NULL);
       +  *filename = g_strdup(gtk_file_selection_get_filename(
       +                               GTK_FILE_SELECTION(file_select)));
       +}
       +
       +gchar *GtkGetFile(const GtkWidget *parent, const gchar *oldname,
       +                  const gchar *title)
       +{
       +  GtkWidget *file_select, *ok, *cancel;
       +  gchar *filename = NULL;
       +
       +  file_select = gtk_file_selection_new(title);
       +  if (parent) {
       +    gtk_window_set_modal(GTK_WINDOW(file_select), TRUE);
       +    gtk_window_set_transient_for(GTK_WINDOW(file_select),
       +                                 GTK_WINDOW(parent));
       +  }
       +
       +  ok = GTK_FILE_SELECTION(file_select)->ok_button;
       +  cancel = GTK_FILE_SELECTION(file_select)->cancel_button;
       +  if (oldname) {
       +    gtk_file_selection_set_filename(GTK_FILE_SELECTION(file_select), oldname);
       +  }
       +  gtk_signal_connect(GTK_OBJECT(ok), "clicked",
       +                     GTK_SIGNAL_FUNC(store_filename),
       +                     (gpointer)&filename);
       +  gtk_signal_connect_object(GTK_OBJECT(ok), "clicked",
       +                            GTK_SIGNAL_FUNC(gtk_widget_destroy), file_select);
       +  gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked",
       +                            GTK_SIGNAL_FUNC(gtk_widget_destroy), file_select);
       +  gtk_signal_connect(GTK_OBJECT(file_select), "destroy",
       +                     GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
       +
       +  gtk_widget_show(file_select);
       +  gtk_main();
       +
       +  return filename;
       +}
       +
        #endif /* CYGWIN */
        
        #if CYGWIN || !HAVE_GLIB2
 (DIR) diff --git a/src/gtkport/gtkport.h b/src/gtkport/gtkport.h
       t@@ -856,5 +856,7 @@ void TextViewClear(GtkTextView *textview);
        GtkWidget *gtk_url_new(const gchar *text, const gchar *target,
                               const gchar *bin);
        GtkWidget *NewStockButton(const gchar *label, GtkAccelGroup *accel_group);
       +gchar *GtkGetFile(const GtkWidget *parent, const gchar *oldname,
       +                  const gchar *title);
        
        #endif /* __GTKPORT_H__ */
 (DIR) diff --git a/src/gui_client/optdialog.c b/src/gui_client/optdialog.c
       t@@ -526,6 +526,21 @@ static void sound_row_unselect(GtkCList *clist, gint row, gint column,
          g_free(text);
        }
        
       +static void BrowseSound(GtkWidget *entry)
       +{
       +  gchar *oldtext, *newtext;
       +  GtkWidget *dialog = gtk_widget_get_ancestor(entry, GTK_TYPE_WINDOW);
       +
       +  oldtext = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1);
       +
       +  newtext = GtkGetFile(dialog, oldtext, _("Select sound file"));
       +  g_free(oldtext);
       +  if (newtext) {
       +    gtk_entry_set_text(GTK_ENTRY(entry), newtext);
       +    g_free(newtext);
       +  }
       +}
       +
        static void TestPlaySound(GtkWidget *entry)
        {
          gchar *text;
       t@@ -900,7 +915,8 @@ void OptDialog(GtkWidget *widget, gpointer data)
          gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0);
        
          button = gtk_button_new_with_label(_("Browse..."));
       -  gtk_object_set_data(GTK_OBJECT(button), "entry", entry);
       +  gtk_signal_connect_object(GTK_OBJECT(button), "clicked",
       +                            GTK_SIGNAL_FUNC(BrowseSound), entry);
          gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0);
        
          button = gtk_button_new_with_label(_("Play"));