diff options
-rw-r--r-- | addressbook/ChangeLog | 20 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor-address.c | 12 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor-fullname.c | 14 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor.c | 116 |
4 files changed, 109 insertions, 53 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index ca80b12360..326fbf2368 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,5 +1,25 @@ 2001-09-16 Chris Toshok <toshok@ximian.com> + * gui/contact-editor/e-contact-editor.c (_phone_arrow_pressed): + use enable_widget instead of gtk_widget_set_sensitive. + (_email_arrow_pressed): same. + (_address_arrow_pressed): same. + (disable_widget_foreach): same. + (enable_writable_fields): same. + (set_editable): same. + (enable_widget): new function, using both gtk_widget_set_sensitive + and *_set_editable to allow the user to select text in GtkEntry's + and GtkText's. + + * gui/contact-editor/e-contact-editor-fullname.c + (e_contact_editor_fullname_set_arg): use set_editable as well as + set_sensitive, to allow the user to select text in GtkEntry's. + + * gui/contact-editor/e-contact-editor-address.c + (e_contact_editor_address_set_arg): same. + +2001-09-16 Chris Toshok <toshok@ximian.com> + * backend/pas/evolutionperson.schema: fix syntax errors (which are broken, imo...) diff --git a/addressbook/gui/contact-editor/e-contact-editor-address.c b/addressbook/gui/contact-editor/e-contact-editor-address.c index 1fe9337503..919fb63acb 100644 --- a/addressbook/gui/contact-editor/e-contact-editor-address.c +++ b/addressbook/gui/contact-editor/e-contact-editor-address.c @@ -24,6 +24,7 @@ #include <libgnomeui/gnome-stock.h> #include <gal/widgets/e-unicode.h> #include <e-contact-editor-address.h> +#include <gtk/gtkcombo.h> static void e_contact_editor_address_init (EContactEditorAddress *card); static void e_contact_editor_address_class_init (EContactEditorAddressClass *klass); @@ -163,7 +164,16 @@ e_contact_editor_address_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) }; e_contact_editor_address->editable = GTK_VALUE_BOOL (*arg) ? TRUE : FALSE; for (i = 0; entry_names[i] != NULL; i ++) { - gtk_widget_set_sensitive (glade_xml_get_widget(e_contact_editor_address->gui, entry_names[i]), e_contact_editor_address->editable); + GtkWidget *w = glade_xml_get_widget(e_contact_editor_address->gui, entry_names[i]); + if (GTK_IS_ENTRY (w)) { + gtk_entry_set_editable (GTK_ENTRY (w), + e_contact_editor_address->editable); + } + else if (GTK_IS_COMBO (w)) { + gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (w)->entry), + e_contact_editor_address->editable); + gtk_widget_set_sensitive (GTK_COMBO (w)->button, e_contact_editor_address->editable); + } } break; } diff --git a/addressbook/gui/contact-editor/e-contact-editor-fullname.c b/addressbook/gui/contact-editor/e-contact-editor-fullname.c index cf97854956..0af0de3236 100644 --- a/addressbook/gui/contact-editor/e-contact-editor-fullname.c +++ b/addressbook/gui/contact-editor/e-contact-editor-fullname.c @@ -24,6 +24,7 @@ #include <libgnomeui/gnome-stock.h> #include <gal/widgets/e-unicode.h> #include "e-contact-editor-fullname.h" +#include <gtk/gtkcombo.h> static void e_contact_editor_fullname_init (EContactEditorFullname *card); static void e_contact_editor_fullname_class_init (EContactEditorFullnameClass *klass); @@ -161,9 +162,16 @@ e_contact_editor_fullname_set_arg (GtkObject *o, GtkArg *arg, guint arg_id) }; e_contact_editor_fullname->editable = GTK_VALUE_BOOL (*arg) ? TRUE : FALSE; for (i = 0; entry_names[i] != NULL; i ++) { - gtk_widget_set_sensitive (glade_xml_get_widget(e_contact_editor_fullname->gui, - entry_names[i]), - e_contact_editor_fullname->editable); + GtkWidget *w = glade_xml_get_widget(e_contact_editor_fullname->gui, entry_names[i]); + if (GTK_IS_ENTRY (w)) { + gtk_entry_set_editable (GTK_ENTRY (w), + e_contact_editor_fullname->editable); + } + else if (GTK_IS_COMBO (w)) { + gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (w)->entry), + e_contact_editor_fullname->editable); + gtk_widget_set_sensitive (GTK_COMBO (w)->button, e_contact_editor_fullname->editable); + } } break; } diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index 6b8f39d61b..86386f4cdd 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -85,6 +85,7 @@ static void add_field_callback(GtkWidget *widget, EContactEditor *editor); static void command_state_changed (EContactEditor *ce); static void widget_changed (GtkWidget *widget, EContactEditor *editor); static void close_dialog (EContactEditor *ce); +static void enable_widget (GtkWidget *widget, gboolean enabled); static GtkObjectClass *parent_class = NULL; @@ -523,6 +524,11 @@ set_entry_changed_signal_phone(EContactEditor *editor, char *id) static void widget_changed (GtkWidget *widget, EContactEditor *editor) { + if (!editor->editable) { + g_warning ("non-editable contact editor has an editable field in it."); + return; + } + if (!editor->changed) { editor->changed = TRUE; command_state_changed (editor); @@ -1167,6 +1173,7 @@ e_contact_editor_init (EContactEditor *e_contact_editor) e_contact_editor->card = NULL; e_contact_editor->changed = FALSE; + e_contact_editor->editable = TRUE; gui = glade_xml_new (EVOLUTION_GLADEDIR "/contact-editor.glade", NULL); e_contact_editor->gui = gui; @@ -1774,8 +1781,8 @@ _phone_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor if (result != -1) { editor->phone_choice[which - 1] = result; set_fields(editor); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, label), TRUE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, entry), editor->editable); + enable_widget (glade_xml_get_widget (editor->gui, label), TRUE); + enable_widget (glade_xml_get_widget (editor->gui, entry), editor->editable); } g_free(label); @@ -1807,9 +1814,9 @@ _email_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEditor set_fields(editor); /* make sure the buttons/entry is/are sensitive */ - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "label-email1"), TRUE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "entry-email1"), editor->editable); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "checkbutton-htmlmail"), editor->editable); + enable_widget (glade_xml_get_widget (editor->gui, "label-email1"), TRUE); + enable_widget (glade_xml_get_widget (editor->gui, "entry-email1"), editor->editable); + enable_widget (glade_xml_get_widget (editor->gui, "checkbutton-htmlmail"), editor->editable); } } @@ -1837,9 +1844,8 @@ _address_arrow_pressed (GtkWidget *widget, GdkEventButton *button, EContactEdito set_address_field(editor, result); /* make sure the buttons/entry is/are sensitive */ - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "label-address"), TRUE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "button-fulladdr"), editor->editable); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "text-address"), editor->editable); + enable_widget (glade_xml_get_widget (editor->gui, "label-address"), TRUE); + enable_widget (glade_xml_get_widget (editor->gui, "text-address"), editor->editable); } } @@ -2032,7 +2038,7 @@ fill_in_single_field(EContactEditor *editor, char *name) static void disable_widget_foreach (char *key, GtkWidget *widget, gpointer closure) { - gtk_widget_set_sensitive (widget, FALSE); + enable_widget (widget, FALSE); } static struct { @@ -2083,7 +2089,6 @@ static struct { { "label-comments", E_CARD_SIMPLE_FIELD_NOTE }, { "text-comments", E_CARD_SIMPLE_FIELD_NOTE, TRUE }, - { "button-fullname", E_CARD_SIMPLE_FIELD_FULL_NAME }, { "entry-fullname", E_CARD_SIMPLE_FIELD_FULL_NAME, TRUE }, { "button-categories", E_CARD_SIMPLE_FIELD_CATEGORIES, TRUE }, @@ -2136,18 +2141,17 @@ enable_writable_fields(EContactEditor *editor) the full adress button */ for (i = 0; i < 4; i ++) { widget_name = g_strdup_printf ("label-phone%d", i+1); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, widget_name), FALSE); + enable_widget (glade_xml_get_widget (editor->gui, widget_name), FALSE); g_free (widget_name); widget_name = g_strdup_printf ("entry-phone%d", i+1); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, widget_name), FALSE); + enable_widget (glade_xml_get_widget (editor->gui, widget_name), FALSE); g_free (widget_name); } - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "label-email1"), FALSE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "entry-email1"), FALSE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "checkbutton-htmlmail"), FALSE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "label-address"), FALSE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "button-fulladdr"), FALSE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "text-address"), FALSE); + enable_widget (glade_xml_get_widget (editor->gui, "label-email1"), FALSE); + enable_widget (glade_xml_get_widget (editor->gui, "entry-email1"), FALSE); + enable_widget (glade_xml_get_widget (editor->gui, "checkbutton-htmlmail"), FALSE); + enable_widget (glade_xml_get_widget (editor->gui, "label-address"), FALSE); + enable_widget (glade_xml_get_widget (editor->gui, "text-address"), FALSE); /* enable widgets that map directly from a field to a widget (the drop down items) */ iter = e_list_get_iterator (fields); @@ -2156,7 +2160,7 @@ enable_writable_fields(EContactEditor *editor) GtkWidget *widget = g_hash_table_lookup (dropdown_hash, field); if (widget) { - gtk_widget_set_sensitive (widget, TRUE); + enable_widget (widget, editor->editable); } else { /* if it's not a field that's handled by the @@ -2170,22 +2174,21 @@ enable_writable_fields(EContactEditor *editor) the menu (the one reflected in the label) is enabled. */ if (!strcmp (field, e_card_simple_get_ecard_field (simple, e_card_simple_map_email_to_field(editor->email_choice)))) { - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "label-email1"), TRUE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "entry-email1"), editor->editable); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "checkbutton-htmlmail"), TRUE); + enable_widget (glade_xml_get_widget (editor->gui, "label-email1"), TRUE); + enable_widget (glade_xml_get_widget (editor->gui, "entry-email1"), editor->editable); + enable_widget (glade_xml_get_widget (editor->gui, "checkbutton-htmlmail"), editor->editable); } else if (!strcmp (field, e_card_simple_get_ecard_field (simple, e_card_simple_map_address_to_field(editor->address_choice)))) { - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "label-address"), TRUE); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "button-fulladdr"), editor->editable); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, "text-address"), editor->editable); + enable_widget (glade_xml_get_widget (editor->gui, "label-address"), TRUE); + enable_widget (glade_xml_get_widget (editor->gui, "text-address"), editor->editable); } else for (i = 0; i < 4; i ++) { if (!strcmp (field, e_card_simple_get_ecard_field (simple, e_card_simple_map_phone_to_field(editor->phone_choice[i])))) { widget_name = g_strdup_printf ("label-phone%d", i+1); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, widget_name), TRUE); + enable_widget (glade_xml_get_widget (editor->gui, widget_name), TRUE); g_free (widget_name); widget_name = g_strdup_printf ("entry-phone%d", i+1); - gtk_widget_set_sensitive (glade_xml_get_widget (editor->gui, widget_name), editor->editable); + enable_widget (glade_xml_get_widget (editor->gui, widget_name), editor->editable); g_free (widget_name); } } @@ -2204,13 +2207,14 @@ enable_writable_fields(EContactEditor *editor) widget_field_mappings[i].widget_name); continue; } - + if (!GTK_IS_LABEL (w)) + continue; field = e_card_simple_get_ecard_field (simple, widget_field_mappings[i].field_id); enabled = (g_hash_table_lookup (supported_hash, field) != NULL); - gtk_widget_set_sensitive (w, enabled); + enable_widget (w, enabled); } g_hash_table_destroy (dropdown_hash); @@ -2223,43 +2227,36 @@ static void set_editable (EContactEditor *editor) { int i; - char *label, *entry; + char *entry; /* set the sensitivity of all the non-dropdown entry/texts/dateedits */ for (i = 0; i < num_widget_field_mappings; i ++) { - if (widget_field_mappings[i].desensitize_for_read_only) - gtk_widget_set_sensitive (glade_xml_get_widget(editor->gui, - widget_field_mappings[i].widget_name), editor->editable); + if (widget_field_mappings[i].desensitize_for_read_only) { + GtkWidget *widget = glade_xml_get_widget(editor->gui, widget_field_mappings[i].widget_name); + enable_widget (widget, editor->editable); + } } /* handle the phone dropdown entries */ for (i = 0; i < 4; i ++) { - label = g_strdup_printf ("label-phone%d", i+1); entry = g_strdup_printf ("entry-phone%d", i+1); - if (GTK_WIDGET_IS_SENSITIVE (glade_xml_get_widget (editor->gui, label))) - gtk_widget_set_sensitive (glade_xml_get_widget(editor->gui, - entry), editor->editable); + enable_widget (glade_xml_get_widget(editor->gui, entry), + editor->editable); - g_free (label); g_free (entry); } /* handle the email dropdown entry */ - label = "label-email1"; entry = "entry-email1"; - if (GTK_WIDGET_IS_SENSITIVE (glade_xml_get_widget (editor->gui, label))) { - gtk_widget_set_sensitive (glade_xml_get_widget(editor->gui, - entry), editor->editable); - gtk_widget_set_sensitive (glade_xml_get_widget(editor->gui, - "checkbutton-htmlmail"), editor->editable); - } + enable_widget (glade_xml_get_widget(editor->gui, entry), + editor->editable); + enable_widget (glade_xml_get_widget(editor->gui, "checkbutton-htmlmail"), + editor->editable); /* handle the address dropdown entry */ - label = "label-address"; entry = "text-address"; - if (GTK_WIDGET_IS_SENSITIVE (glade_xml_get_widget (editor->gui, label))) - gtk_widget_set_sensitive (glade_xml_get_widget(editor->gui, - entry), editor->editable); + enable_widget (glade_xml_get_widget(editor->gui, entry), + editor->editable); } static void @@ -2519,3 +2516,24 @@ e_contact_editor_create_date(gchar *name, e_date_edit_set_time (E_DATE_EDIT (widget), -1); return widget; } + +static void +enable_widget (GtkWidget *widget, gboolean enabled) +{ + if (GTK_IS_ENTRY (widget)) { + gtk_entry_set_editable (GTK_ENTRY (widget), enabled); + } + else if (GTK_IS_TEXT (widget)) { + gtk_text_set_editable (GTK_TEXT (widget), enabled); + } + else if (GTK_IS_COMBO (widget)) { + gtk_entry_set_editable (GTK_ENTRY (GTK_COMBO (widget)->entry), + enabled); + gtk_widget_set_sensitive (GTK_COMBO (widget)->button, enabled); + } + else if (E_IS_DATE_EDIT (widget)) { + e_date_edit_set_editable (E_DATE_EDIT (widget), enabled); + } + else + gtk_widget_set_sensitive (widget, enabled); +} |