diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | src/entry.c | 65 | ||||
-rw-r--r-- | src/main.c | 1 | ||||
-rw-r--r-- | src/option.c | 2 | ||||
-rw-r--r-- | src/zenity.glade | 21 | ||||
-rw-r--r-- | src/zenity.h | 1 |
6 files changed, 65 insertions, 32 deletions
@@ -1,5 +1,12 @@ 2006-05-10 Lucas Rocha <lucasr@gnome.org> + * src/entry.c (zenity_entry_fill_entries, zenity_entry), + src/main.c, src/option.c, src/zenity.glade, src/zenity.h: + add optional dropdown menu to entry dialog (Fixed bug #311038). + Patch from Diego Escalante Urrelo <dieguito@gmail.com>. + +2006-05-10 Lucas Rocha <lucasr@gnome.org> + * .cvsignore, Makefile.am, autogen.sh, configure.in, data/Makefile.am, po/.cvsignore, src/Makefile.am: move to automake 1.9 and several cleanups (Fixes bug #341056). diff --git a/src/entry.c b/src/entry.c index e8c25857..4b0f588a 100644 --- a/src/entry.c +++ b/src/entry.c @@ -30,6 +30,18 @@ static void zenity_entry_dialog_response (GtkWidget *widget, int response, gpointer data); static GtkWidget *entry; +static gint n_entries = 0; + +static void +zenity_entry_fill_entries (GSList **entries, const gchar **args) +{ + gint i = 0; + + while (args[i] != NULL) { + *entries = g_slist_append (*entries, (gchar *) args[i]); + i++; + } +} void zenity_entry (ZenityData *data, ZenityEntryData *entry_data) @@ -37,7 +49,10 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data) GladeXML *glade_dialog = NULL; GtkWidget *dialog; GtkWidget *text; - + GSList *entries = NULL; + GSList *tmp; + GtkWidget *vbox; + glade_dialog = zenity_util_load_glade_file ("zenity_entry_dialog"); if (glade_dialog == NULL) { @@ -48,7 +63,6 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data) glade_xml_signal_autoconnect (glade_dialog); dialog = glade_xml_get_widget (glade_dialog, "zenity_entry_dialog"); - g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (zenity_entry_dialog_response), data); @@ -65,17 +79,41 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data) if (entry_data->dialog_text) gtk_label_set_text_with_mnemonic (GTK_LABEL (text), entry_data->dialog_text); + + vbox = glade_xml_get_widget (glade_dialog, "vbox4"); + + zenity_entry_fill_entries(&entries, entry_data->data); + + n_entries = g_slist_length (entries); + + if (n_entries > 1) { + entry = gtk_combo_box_entry_new_text (); + + for (tmp = entries; tmp; tmp = tmp->next) { + gtk_combo_box_append_text (GTK_COMBO_BOX (entry), tmp->data); + } + + if (entry_data->entry_text) { + gtk_combo_box_prepend_text (GTK_COMBO_BOX (entry), entry_data->entry_text); + gtk_combo_box_set_active (GTK_COMBO_BOX (entry), 0); + } + } else { + entry = gtk_entry_new(); + + if (entry_data->entry_text) + gtk_entry_set_text (GTK_ENTRY (entry), entry_data->entry_text); + + if (entry_data->hide_text) + g_object_set (G_OBJECT (entry), "visibility", FALSE, NULL); - entry = glade_xml_get_widget (glade_dialog, "zenity_entry_input"); - - if (glade_dialog) - g_object_unref (glade_dialog); + } - if (entry_data->entry_text) - gtk_entry_set_text (GTK_ENTRY (entry), entry_data->entry_text); + gtk_widget_show (entry); - if (entry_data->hide_text) - g_object_set (G_OBJECT (entry), "visibility", FALSE, NULL); + gtk_box_pack_end (GTK_BOX (vbox), entry, FALSE, FALSE, 0); + + if (glade_dialog) + g_object_unref (glade_dialog); gtk_label_set_mnemonic_widget (GTK_LABEL (text), entry); @@ -93,7 +131,12 @@ zenity_entry_dialog_response (GtkWidget *widget, int response, gpointer data) switch (response) { case GTK_RESPONSE_OK: zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK); - text = gtk_entry_get_text (GTK_ENTRY (entry)); + if (n_entries > 1) { + text = gtk_combo_box_get_active_text (GTK_COMBO_BOX (entry)); + } + else { + text = gtk_entry_get_text (GTK_ENTRY (entry)); + } if (text != NULL) g_print ("%s\n", text); @@ -56,6 +56,7 @@ main (gint argc, gchar **argv) { zenity_calendar (results->data, results->calendar_data); break; case MODE_ENTRY: + results->entry_data->data = (const gchar **) argv + 1; zenity_entry (results->data, results->entry_data); break; case MODE_ERROR: diff --git a/src/option.c b/src/option.c index 7917c91e..2be45500 100644 --- a/src/option.c +++ b/src/option.c @@ -1116,7 +1116,7 @@ zenity_entry_post_callback (GOptionContext *context, GError **error) { zenity_option_set_dialog_mode (zenity_entry_active, MODE_ENTRY); - + if (results->mode == MODE_ENTRY) { results->entry_data->dialog_text = zenity_general_dialog_text; results->entry_data->entry_text = zenity_entry_entry_text; diff --git a/src/zenity.glade b/src/zenity.glade index f19fde34..9e018654 100644 --- a/src/zenity.glade +++ b/src/zenity.glade @@ -540,14 +540,10 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="mnemonic_widget">zenity_entry_input</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="width_chars">-1</property> <property name="single_line_mode">False</property> <property name="angle">0</property> - <accessibility> - <atkrelation target="zenity_entry_input" type="label-for"/> - </accessibility> </widget> <packing> <property name="padding">0</property> @@ -557,22 +553,7 @@ </child> <child> - <widget class="GtkEntry" id="zenity_entry_input"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="editable">True</property> - <property name="visibility">True</property> - <property name="max_length">0</property> - <property name="text" translatable="yes"></property> - <property name="has_frame">True</property> - <property name="invisible_char">*</property> - <property name="activates_default">True</property> - </widget> - <packing> - <property name="padding">0</property> - <property name="expand">False</property> - <property name="fill">False</property> - </packing> + <placeholder/> </child> </widget> <packing> diff --git a/src/zenity.h b/src/zenity.h index 05e628f4..c6a1892e 100644 --- a/src/zenity.h +++ b/src/zenity.h @@ -83,6 +83,7 @@ typedef struct { gchar *dialog_text; gchar *entry_text; gboolean hide_text; + const gchar **data; } ZenityEntryData; typedef struct { |