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"));