tGtkGetFile() function added; "browse" button for sounds in GUI client options … | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 627eb9e4202027b39884cc2bc571e2da5e46e911 | |
parent 7846c81331d424e9261479cad1295a499768c127 | |
Author: Ben Webb <[email protected]> | |
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(-) | |
--- | |
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 *… | |
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 | |
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__ */ | |
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,… | |
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")); |