summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--src/entry.c65
-rw-r--r--src/main.c1
-rw-r--r--src/option.c2
-rw-r--r--src/zenity.glade21
-rw-r--r--src/zenity.h1
6 files changed, 65 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 436df37..58c8a22 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 e8c2585..4b0f588 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);
diff --git a/src/main.c b/src/main.c
index 7077af8..7e83fd8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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 7917c91..2be4550 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 f19fde3..9e01865 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 05e628f..c6a1892 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 {