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:
parent
59b5bad794
commit
07618f9daa
@ -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>
|
||||
|
||||
* .cvsignore, Makefile.am, autogen.sh, configure.in,
|
||||
|
65
src/entry.c
65
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,18 +79,42 @@ 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);
|
||||
|
||||
}
|
||||
|
||||
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)
|
||||
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);
|
||||
|
||||
zenity_util_show_dialog (dialog);
|
||||
@ -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:
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
@ -83,6 +83,7 @@ typedef struct {
|
||||
gchar *dialog_text;
|
||||
gchar *entry_text;
|
||||
gboolean hide_text;
|
||||
const gchar **data;
|
||||
} ZenityEntryData;
|
||||
|
||||
typedef struct {
|
||||
|
Reference in New Issue
Block a user