From 1b92eea9f43d08e724c831ae6807b39b2ba73f4e Mon Sep 17 00:00:00 2001 From: jacob berkman Date: Wed, 22 Aug 2001 22:12:12 +0000 Subject: emit an event from our event source (contact_editor_cb): emit a destroy 2001-08-22 jacob berkman * gui/component/e-address-popup.c (emit_event): emit an event from our event source (contact_editor_cb): emit a destroy event so our control frame can be destroyed. (edit_contact_info_cb): emit a hide event so our control frame can be hidden (e_address_popup_cardify): (add_contacts_cb): emit the destroy event (e_address_popup_factory_new_control): don't unref our object at widget destroy time as that was really really broken (e_address_popup_factory_new_control): create an event source and aggregate ourself with it * gui/contact-editor/e-contact-editor.c (enable_writable_fields): display a nicer warning when we can't find a widget for a given field (e_contact_editor_raise): only raise if there is a window * gui/contact-editor/contact-editor.glade: name some widgets that got unnamed, and set the first entry as defaultable * gui/contact-editor/e-contact-editor.c: envelope printing is disabled in 1.0 2001-08-22 jacob berkman * mail-display.c: rework how the e-card-popup thing has its life managed. we now hide the window on the Hide event and destroy it on the Destroy event emitted from its event source svn path=/trunk/; revision=12402 --- addressbook/ChangeLog | 26 ++++++++++++++ addressbook/gui/component/e-address-popup.c | 40 ++++++++++++++++------ addressbook/gui/component/e-address-popup.h | 3 ++ .../gui/contact-editor/contact-editor.glade | 5 +-- addressbook/gui/contact-editor/e-contact-editor.c | 32 +++++++++++++---- 5 files changed, 87 insertions(+), 19 deletions(-) (limited to 'addressbook') diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index 76a4ca8b11..eaa2782ce0 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,3 +1,29 @@ +2001-08-22 jacob berkman + + * gui/component/e-address-popup.c (emit_event): emit an event from + our event source + (contact_editor_cb): emit a destroy event so our control frame can + be destroyed. + (edit_contact_info_cb): emit a hide event so our control frame can + be hidden + (e_address_popup_cardify): + (add_contacts_cb): emit the destroy event + (e_address_popup_factory_new_control): don't unref our object at + widget destroy time as that was really really broken + (e_address_popup_factory_new_control): create an event source and + aggregate ourself with it + + * gui/contact-editor/e-contact-editor.c (enable_writable_fields): + display a nicer warning when we can't find a widget for a given + field + (e_contact_editor_raise): only raise if there is a window + + * gui/contact-editor/contact-editor.glade: name some widgets that + got unnamed, and set the first entry as defaultable + + * gui/contact-editor/e-contact-editor.c: envelope printing is + disabled in 1.0 + 2001-08-22 Chris Toshok * backend/ebook/e-destination.c (e_destination_get_email): make diff --git a/addressbook/gui/component/e-address-popup.c b/addressbook/gui/component/e-address-popup.c index c291e95009..362eee4250 100644 --- a/addressbook/gui/component/e-address-popup.c +++ b/addressbook/gui/component/e-address-popup.c @@ -882,19 +882,37 @@ e_address_popup_new (void) return GTK_WIDGET (pop); } +static void +emit_event (EAddressPopup *pop, const char *event) +{ + if (pop->es) { + BonoboArg *arg; + + arg = bonobo_arg_new (BONOBO_ARG_BOOLEAN); + BONOBO_ARG_SET_BOOLEAN (arg, TRUE); + bonobo_event_source_notify_listeners_full (pop->es, + "GNOME/Evolution/Addressbook/AddressPopup", + "Event", + event, + arg, NULL); + bonobo_arg_release (arg); + } +} + static void contact_editor_cb (EBook *book, gpointer closure) { EAddressPopup *pop = E_ADDRESS_POPUP (closure); EContactEditor *ce = e_addressbook_show_contact_editor (book, pop->card, FALSE, TRUE); - e_contact_editor_raise (ce); + emit_event (pop, "Destroy"); + e_contact_editor_raise (ce); } static void edit_contact_info_cb (EAddressPopup *pop) { + emit_event (pop, "Hide"); e_book_use_local_address_book (contact_editor_cb, pop); - gtk_widget_destroy (GTK_WIDGET (pop)); } static void @@ -932,8 +950,7 @@ add_contacts_cb (EAddressPopup *pop) e_contact_quick_add_free_form (pop->email, NULL, NULL); } - - gtk_widget_destroy (GTK_WIDGET (pop)); + emit_event (pop, "Destroy"); } static void @@ -997,7 +1014,8 @@ e_address_popup_ambiguous_email_add (EAddressPopup *pop, const GList *cards) card_picker_init (wiz, cards, pop->name, pop->email); - gtk_widget_destroy (GTK_WIDGET (pop)); + emit_event (pop, "Destroy"); + gtk_container_add (GTK_CONTAINER (win), wiz->body); gtk_widget_show_all (win); } @@ -1144,17 +1162,15 @@ e_address_popup_factory_new_control (void) { BonoboControl *control; BonoboPropertyBag *bag; + EAddressPopup *addy; GtkWidget *w; w = e_address_popup_new (); + addy = E_ADDRESS_POPUP (w); + control = bonobo_control_new (w); gtk_widget_show (w); - gtk_signal_connect_object (GTK_OBJECT (w), - "destroy", - GTK_SIGNAL_FUNC (bonobo_object_unref), - GTK_OBJECT (control)); - bag = bonobo_property_bag_new (get_prop, set_prop, w); bonobo_property_bag_add (bag, "name", PROPERTY_NAME, BONOBO_ARG_STRING, NULL, NULL, @@ -1171,6 +1187,10 @@ e_address_popup_factory_new_control (void) bonobo_control_set_properties (control, bag); bonobo_object_unref (BONOBO_OBJECT (bag)); + addy->es = bonobo_event_source_new (); + bonobo_object_add_interface (BONOBO_OBJECT (control), + BONOBO_OBJECT (addy->es)); + return control; } diff --git a/addressbook/gui/component/e-address-popup.h b/addressbook/gui/component/e-address-popup.h index 9cfde6cb28..ef51437551 100644 --- a/addressbook/gui/component/e-address-popup.h +++ b/addressbook/gui/component/e-address-popup.h @@ -31,6 +31,7 @@ #include #include #include +#include BEGIN_GNOME_DECLS @@ -63,6 +64,8 @@ struct _EAddressPopup { guint query_tag; gboolean multiple_matches; ECard *card; + + BonoboEventSource *es; }; struct _EAddressPopupClass { diff --git a/addressbook/gui/contact-editor/contact-editor.glade b/addressbook/gui/contact-editor/contact-editor.glade index bb8bf2cd74..88d74a2a77 100644 --- a/addressbook/gui/contact-editor/contact-editor.glade +++ b/addressbook/gui/contact-editor/contact-editor.glade @@ -698,6 +698,7 @@ GtkEntry entry-fullname + True True True True @@ -1603,7 +1604,7 @@ GtkLabel - label21 + accellabel-fileas GTK_JUSTIFY_CENTER False @@ -1630,7 +1631,7 @@ GtkLabel - label22 + accellabel-web GTK_JUSTIFY_CENTER False diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index 68ef1f6a6d..843f1ab355 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -1055,8 +1055,9 @@ EPixmap pixmaps[] = { E_PIXMAP ("/commands/ContactEditorSaveAs", "save-as-16.png"), E_PIXMAP ("/commands/ContactEditorDelete", "evolution-trash-mini.png"), E_PIXMAP ("/commands/ContactEditorPrint", "print.xpm"), +#if 0 /* Envelope printing is disabled for Evolution 1.0. */ E_PIXMAP ("/commands/ContactEditorPrintEnvelope", "print.xpm"), - +#endif E_PIXMAP ("/Toolbar/ContactEditorSave", "buttons/save-24.png"), E_PIXMAP ("/Toolbar/ContactEditorDelete", "buttons/delete-message.png"), E_PIXMAP ("/Toolbar/ContactEditorPrint", "buttons/print.png"), @@ -1341,6 +1342,9 @@ e_contact_editor_new (EBook *book, { EContactEditor *ce; + g_return_val_if_fail (E_IS_BOOK (book), NULL); + g_return_val_if_fail (E_IS_CARD (card), NULL); + ce = E_CONTACT_EDITOR (gtk_type_new (E_CONTACT_EDITOR_TYPE)); gtk_object_set (GTK_OBJECT (ce), @@ -2185,11 +2189,23 @@ enable_writable_fields(EContactEditor *editor) /* handle the label next to the dropdown widgets */ for (i = 0; i < num_widget_field_mappings; i ++) { - gboolean enabled = g_hash_table_lookup (supported_hash, - e_card_simple_get_ecard_field (simple, - widget_field_mappings[i].field_id)) != NULL; - gtk_widget_set_sensitive (glade_xml_get_widget(editor->gui, - widget_field_mappings[i].widget_name), enabled); + gboolean enabled; + GtkWidget *w; + const char *field; + + w = glade_xml_get_widget(editor->gui, widget_field_mappings[i].widget_name); + if (!w) { + g_warning (_("Could not find widget for a field: `%s'"), + widget_field_mappings[i].widget_name); + 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); } g_hash_table_destroy (dropdown_hash); @@ -2464,7 +2480,9 @@ extract_info(EContactEditor *editor) void e_contact_editor_raise (EContactEditor *editor) { - gdk_window_raise (GTK_WIDGET (editor->app)->window); + /* FIXME: perhaps we should raise at realize time */ + if (GTK_WIDGET (editor->app)->window) + gdk_window_raise (GTK_WIDGET (editor->app)->window); } /** -- cgit v1.2.3