add optional dropdown menu to entry dialog (Fixed bug #311038). Patch from

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>.
This commit is contained in:
Lucas Rocha 2006-05-11 01:31:35 +00:00 committed by Lucas Almeida Rocha
parent 59b5bad794
commit 07618f9daa
6 changed files with 65 additions and 32 deletions

View File

@ -1,3 +1,10 @@
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> 2006-05-10 Lucas Rocha <lucasr@gnome.org>
* .cvsignore, Makefile.am, autogen.sh, configure.in, * .cvsignore, Makefile.am, autogen.sh, configure.in,

View File

@ -30,6 +30,18 @@
static void zenity_entry_dialog_response (GtkWidget *widget, int response, gpointer data); static void zenity_entry_dialog_response (GtkWidget *widget, int response, gpointer data);
static GtkWidget *entry; 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 void
zenity_entry (ZenityData *data, ZenityEntryData *entry_data) zenity_entry (ZenityData *data, ZenityEntryData *entry_data)
@ -37,7 +49,10 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data)
GladeXML *glade_dialog = NULL; GladeXML *glade_dialog = NULL;
GtkWidget *dialog; GtkWidget *dialog;
GtkWidget *text; GtkWidget *text;
GSList *entries = NULL;
GSList *tmp;
GtkWidget *vbox;
glade_dialog = zenity_util_load_glade_file ("zenity_entry_dialog"); glade_dialog = zenity_util_load_glade_file ("zenity_entry_dialog");
if (glade_dialog == NULL) { if (glade_dialog == NULL) {
@ -48,7 +63,6 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data)
glade_xml_signal_autoconnect (glade_dialog); glade_xml_signal_autoconnect (glade_dialog);
dialog = glade_xml_get_widget (glade_dialog, "zenity_entry_dialog"); dialog = glade_xml_get_widget (glade_dialog, "zenity_entry_dialog");
g_signal_connect (G_OBJECT (dialog), "response", g_signal_connect (G_OBJECT (dialog), "response",
G_CALLBACK (zenity_entry_dialog_response), data); G_CALLBACK (zenity_entry_dialog_response), data);
@ -65,18 +79,42 @@ zenity_entry (ZenityData *data, ZenityEntryData *entry_data)
if (entry_data->dialog_text) if (entry_data->dialog_text)
gtk_label_set_text_with_mnemonic (GTK_LABEL (text), 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);
}
gtk_widget_show (entry);
gtk_box_pack_end (GTK_BOX (vbox), entry, FALSE, FALSE, 0);
entry = glade_xml_get_widget (glade_dialog, "zenity_entry_input");
if (glade_dialog) if (glade_dialog)
g_object_unref (glade_dialog); g_object_unref (glade_dialog);
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);
gtk_label_set_mnemonic_widget (GTK_LABEL (text), entry); gtk_label_set_mnemonic_widget (GTK_LABEL (text), entry);
zenity_util_show_dialog (dialog); zenity_util_show_dialog (dialog);
@ -93,7 +131,12 @@ zenity_entry_dialog_response (GtkWidget *widget, int response, gpointer data)
switch (response) { switch (response) {
case GTK_RESPONSE_OK: case GTK_RESPONSE_OK:
zen_data->exit_code = zenity_util_return_exit_code (ZENITY_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) if (text != NULL)
g_print ("%s\n", text); g_print ("%s\n", text);

View File

@ -56,6 +56,7 @@ main (gint argc, gchar **argv) {
zenity_calendar (results->data, results->calendar_data); zenity_calendar (results->data, results->calendar_data);
break; break;
case MODE_ENTRY: case MODE_ENTRY:
results->entry_data->data = (const gchar **) argv + 1;
zenity_entry (results->data, results->entry_data); zenity_entry (results->data, results->entry_data);
break; break;
case MODE_ERROR: case MODE_ERROR:

View File

@ -1116,7 +1116,7 @@ zenity_entry_post_callback (GOptionContext *context,
GError **error) GError **error)
{ {
zenity_option_set_dialog_mode (zenity_entry_active, MODE_ENTRY); zenity_option_set_dialog_mode (zenity_entry_active, MODE_ENTRY);
if (results->mode == MODE_ENTRY) { if (results->mode == MODE_ENTRY) {
results->entry_data->dialog_text = zenity_general_dialog_text; results->entry_data->dialog_text = zenity_general_dialog_text;
results->entry_data->entry_text = zenity_entry_entry_text; results->entry_data->entry_text = zenity_entry_entry_text;

View File

@ -540,14 +540,10 @@
<property name="yalign">0.5</property> <property name="yalign">0.5</property>
<property name="xpad">0</property> <property name="xpad">0</property>
<property name="ypad">0</property> <property name="ypad">0</property>
<property name="mnemonic_widget">zenity_entry_input</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property> <property name="width_chars">-1</property>
<property name="single_line_mode">False</property> <property name="single_line_mode">False</property>
<property name="angle">0</property> <property name="angle">0</property>
<accessibility>
<atkrelation target="zenity_entry_input" type="label-for"/>
</accessibility>
</widget> </widget>
<packing> <packing>
<property name="padding">0</property> <property name="padding">0</property>
@ -557,22 +553,7 @@
</child> </child>
<child> <child>
<widget class="GtkEntry" id="zenity_entry_input"> <placeholder/>
<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>
</child> </child>
</widget> </widget>
<packing> <packing>

View File

@ -83,6 +83,7 @@ typedef struct {
gchar *dialog_text; gchar *dialog_text;
gchar *entry_text; gchar *entry_text;
gboolean hide_text; gboolean hide_text;
const gchar **data;
} ZenityEntryData; } ZenityEntryData;
typedef struct { typedef struct {