diff options
Diffstat (limited to 'addressbook/backend/ebook/e-card.c')
-rw-r--r-- | addressbook/backend/ebook/e-card.c | 1174 |
1 files changed, 629 insertions, 545 deletions
diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c index 945888dad7..9c77ab6a4b 100644 --- a/addressbook/backend/ebook/e-card.c +++ b/addressbook/backend/ebook/e-card.c @@ -12,6 +12,7 @@ #include "e-card.h" +#include <gal/util/e-i18n.h> #include <gal/widgets/e-unicode.h> #include <ctype.h> @@ -21,13 +22,15 @@ #include <time.h> #include <math.h> -#include <bonobo/bonobo-i18n.h> +#include <gtk/gtkobject.h> +#include <bonobo/bonobo-object-client.h> #include <gal/util/e-util.h> #include <libversit/vcc.h> #include "e-util/ename/e-name-western.h" #include "e-util/ename/e-address-western.h" #include "e-book.h" +#include "e-destination.h" #define is_a_prop_of(obj,prop) (isAPropertyOf ((obj),(prop))) #define str_val(obj) (the_str = (vObjectValueType (obj))? fakeCString (vObjectUStringZValue (obj)) : calloc (1, 1)) @@ -39,55 +42,53 @@ #define XEV_LIST_SHOW_ADDRESSES "X-EVOLUTION-LIST-SHOW_ADDRESSES" #define XEV_RELATED_CONTACTS "X-EVOLUTION-RELATED_CONTACTS" -/* Object property IDs */ +/* Object argument IDs */ enum { - PROP_0, - PROP_FILE_AS, - PROP_FULL_NAME, - PROP_NAME, - PROP_ADDRESS, - PROP_ADDRESS_LABEL, - PROP_PHONE, - PROP_EMAIL, - PROP_BIRTH_DATE, - PROP_URL, - PROP_ORG, - PROP_ORG_UNIT, - PROP_OFFICE, - PROP_TITLE, - PROP_ROLE, - PROP_MANAGER, - PROP_ASSISTANT, - PROP_NICKNAME, - PROP_SPOUSE, - PROP_ANNIVERSARY, - PROP_MAILER, - PROP_CALURI, - PROP_FBURL, - PROP_ICSCALENDAR, - PROP_NOTE, - PROP_RELATED_CONTACTS, - PROP_CATEGORIES, - PROP_CATEGORY_LIST, - PROP_WANTS_HTML, - PROP_WANTS_HTML_SET, - PROP_EVOLUTION_LIST, - PROP_EVOLUTION_LIST_SHOW_ADDRESSES, - PROP_ARBITRARY, - PROP_ID, - PROP_LAST_USE, - PROP_USE_SCORE, + ARG_0, + ARG_FILE_AS, + ARG_FULL_NAME, + ARG_NAME, + ARG_ADDRESS, + ARG_ADDRESS_LABEL, + ARG_PHONE, + ARG_EMAIL, + ARG_BIRTH_DATE, + ARG_URL, + ARG_ORG, + ARG_ORG_UNIT, + ARG_OFFICE, + ARG_TITLE, + ARG_ROLE, + ARG_MANAGER, + ARG_ASSISTANT, + ARG_NICKNAME, + ARG_SPOUSE, + ARG_ANNIVERSARY, + ARG_MAILER, + ARG_CALURI, + ARG_FBURL, + ARG_ICSCALENDAR, + ARG_NOTE, + ARG_RELATED_CONTACTS, + ARG_CATEGORIES, + ARG_CATEGORY_LIST, + ARG_WANTS_HTML, + ARG_WANTS_HTML_SET, + ARG_EVOLUTION_LIST, + ARG_EVOLUTION_LIST_SHOW_ADDRESSES, + ARG_ARBITRARY, + ARG_ID, + ARG_LAST_USE, + ARG_USE_SCORE, }; -static GObjectClass *parent_class; - static void parse(ECard *card, VObject *vobj, char *default_charset); static void e_card_init (ECard *card); static void e_card_class_init (ECardClass *klass); -static void e_card_dispose (GObject *object); -static void e_card_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec); -static void e_card_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec); +static void e_card_destroy (GtkObject *object); +static void e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id); +static void e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id); static void assign_string(VObject *vobj, char *default_charset, char **string); @@ -182,25 +183,24 @@ struct { * * Return value: The type ID of the &ECard class. **/ -GType +GtkType e_card_get_type (void) { - static GType card_type = 0; + static GtkType card_type = 0; if (!card_type) { - static const GTypeInfo card_info = { - sizeof (ECardClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) e_card_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ + GtkTypeInfo card_info = { + "ECard", sizeof (ECard), - 0, /* n_preallocs */ - (GInstanceInitFunc) e_card_init, + sizeof (ECardClass), + (GtkClassInitFunc) e_card_class_init, + (GtkObjectInitFunc) e_card_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL }; - card_type = g_type_register_static (G_TYPE_OBJECT, "ECard", &card_info, 0); + card_type = gtk_type_unique (gtk_object_get_type (), &card_info); } return card_type; @@ -209,7 +209,7 @@ e_card_get_type (void) ECard * e_card_new_with_default_charset (char *vcard, char *default_charset) { - ECard *card = g_object_new (E_TYPE_CARD, NULL); + ECard *card = E_CARD(gtk_type_new(e_card_get_type())); VObject *vobj = Parse_MIME(vcard, strlen(vcard)); while(vobj) { VObject *next; @@ -248,7 +248,7 @@ e_card_duplicate(ECard *card) if (card->book) { new_card->book = card->book; - g_object_ref (new_card->book); + gtk_object_ref (GTK_OBJECT (new_card->book)); } return new_card; @@ -282,7 +282,7 @@ e_card_get_use_score(ECard *card) e_card_get_today (&today); g_date_set_dmy (&last_use, card->last_use->day, card->last_use->month, card->last_use->year); - days_since_last_use = g_date_get_julian (&today) - g_date_get_julian (&last_use); + days_since_last_use = g_date_julian (&today) - g_date_julian (&last_use); /* Apply a seven-day "grace period" to the use score decay. */ days_since_last_use -= 7; @@ -306,9 +306,9 @@ e_card_touch(ECard *card) if (card->last_use == NULL) card->last_use = g_new (ECardDate, 1); - card->last_use->day = g_date_get_day (&today); - card->last_use->month = g_date_get_month (&today); - card->last_use->year = g_date_get_year (&today); + card->last_use->day = g_date_day (&today); + card->last_use->month = g_date_month (&today); + card->last_use->year = g_date_year (&today); card->raw_use_score = use_score + 1.0; } @@ -360,10 +360,10 @@ e_card_set_book (ECard *card, EBook *book) g_return_if_fail (card && E_IS_CARD (card)); if (card->book) - g_object_unref (card->book); + gtk_object_unref (GTK_OBJECT (card->book)); card->book = book; if (card->book) - g_object_ref (card->book); + gtk_object_ref (GTK_OBJECT (card->book)); } gchar * @@ -543,7 +543,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8) if (!(is_ascii || assumeUTF8)) addPropValue (addressprop, "CHARSET", "UTF-8"); } - g_object_unref(iterator); + gtk_object_unref(GTK_OBJECT(iterator)); } if ( card->address_label ) { @@ -558,7 +558,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8) set_address_flags (labelprop, address_label->flags); } - g_object_unref(iterator); + gtk_object_unref(GTK_OBJECT(iterator)); } if ( card->phone ) { @@ -570,7 +570,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8) set_phone_flags (phoneprop, phone->flags); } - g_object_unref(iterator); + gtk_object_unref(GTK_OBJECT(iterator)); } if ( card->email ) { @@ -580,7 +580,7 @@ e_card_get_vobject (const ECard *card, gboolean assumeUTF8) emailprop = ADD_PROP_VALUE(vobj, VCEmailAddressProp, (char *) e_iterator_get(iterator)); addProp (emailprop, VCInternetProp); } - g_object_unref(iterator); + gtk_object_unref(GTK_OBJECT(iterator)); } if ( card->bday ) { @@ -834,9 +834,9 @@ parse_email(ECard *card, VObject *vobj, char *default_charset) EList *list; assign_string(vobj, default_charset, &next_email); - g_object_get(card, - "email", &list, - NULL); + gtk_object_get(GTK_OBJECT(card), + "email", &list, + NULL); e_list_append(list, next_email); g_free (next_email); } @@ -864,9 +864,9 @@ parse_phone(ECard *card, VObject *vobj, char *default_charset) assign_string(vobj, default_charset, &(next_phone->number)); next_phone->flags = get_phone_flags(vobj); - g_object_get(card, - "phone", &list, - NULL); + gtk_object_get(GTK_OBJECT(card), + "phone", &list, + NULL); e_list_append(list, next_phone); e_card_phone_unref (next_phone); } @@ -886,9 +886,9 @@ parse_address(ECard *card, VObject *vobj, char *default_charset) next_addr->code = e_v_object_get_child_value (vobj, VCPostalCodeProp, default_charset); next_addr->country = e_v_object_get_child_value (vobj, VCCountryNameProp, default_charset); - g_object_get(card, - "address", &list, - NULL); + gtk_object_get(GTK_OBJECT(card), + "address", &list, + NULL); e_list_append(list, next_addr); e_card_delivery_address_unref (next_addr); } @@ -902,9 +902,9 @@ parse_address_label(ECard *card, VObject *vobj, char *default_charset) next_addr->flags = get_address_flags (vobj); assign_string(vobj, default_charset, &next_addr->data); - g_object_get(card, - "address_label", &list, - NULL); + gtk_object_get(GTK_OBJECT(card), + "address_label", &list, + NULL); e_list_append(list, next_addr); e_card_address_label_unref (next_addr); } @@ -1063,7 +1063,7 @@ add_list_unique(ECard *card, EList *list, char *string) e_list_append(list, temp); } g_free(temp); - g_object_unref(iterator); + gtk_object_unref(GTK_OBJECT(iterator)); } static void @@ -1073,9 +1073,9 @@ do_parse_categories(ECard *card, char *str) char *copy = g_new(char, length + 1); int i, j; EList *list; - g_object_get(card, - "category_list", &list, - NULL); + gtk_object_get(GTK_OBJECT(card), + "category_list", &list, + NULL); for (i = 0, j = 0; str[i]; i++, j++) { switch (str[i]) { case '\\': @@ -1198,9 +1198,9 @@ parse_arbitrary(ECard *card, VObject *vobj, char *default_charset) assign_string(vobj, default_charset, &(arbitrary->value)); - g_object_get(card, - "arbitrary", &list, - NULL); + gtk_object_get(GTK_OBJECT(card), + "arbitrary", &list, + NULL); e_list_append(list, arbitrary); e_card_arbitrary_unref(arbitrary); } @@ -1242,7 +1242,7 @@ parse_use_score(ECard *card, VObject *vobj, char *default_charset) static void parse_attribute(ECard *card, VObject *vobj, char *default_charset) { - ParsePropertyFunc function = g_hash_table_lookup(E_CARD_GET_CLASS(card)->attribute_jump_table, vObjectName(vobj)); + ParsePropertyFunc function = g_hash_table_lookup(E_CARD_CLASS(GTK_OBJECT(card)->klass)->attribute_jump_table, vObjectName(vobj)); if ( function ) function(card, vobj, default_charset); } @@ -1280,11 +1280,9 @@ static void e_card_class_init (ECardClass *klass) { int i; - GObjectClass *object_class; + GtkObjectClass *object_class; - object_class = G_OBJECT_CLASS(klass); - - parent_class = g_type_class_ref (G_TYPE_OBJECT); + object_class = GTK_OBJECT_CLASS(klass); klass->attribute_jump_table = g_hash_table_new(g_str_hash, g_str_equal); @@ -1292,257 +1290,81 @@ e_card_class_init (ECardClass *klass) g_hash_table_insert(klass->attribute_jump_table, attribute_jump_array[i].key, attribute_jump_array[i].function); } - object_class->dispose = e_card_dispose; - object_class->get_property = e_card_get_property; - object_class->set_property = e_card_set_property; - - g_object_class_install_property (object_class, PROP_FILE_AS, - g_param_spec_string ("file_as", - _("File As"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_FULL_NAME, - g_param_spec_string ("full_name", - _("Full Name"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_NAME, - g_param_spec_pointer ("name", - _("Name"), - /*_( */"XXX blurb" /*)*/, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ADDRESS, - g_param_spec_object ("address", - _("Address"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_LIST, - G_PARAM_READABLE)); - - g_object_class_install_property (object_class, PROP_ADDRESS_LABEL, - g_param_spec_object ("address_label", - _("Address Label"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_LIST, - G_PARAM_READABLE)); - - g_object_class_install_property (object_class, PROP_PHONE, - g_param_spec_object ("phone", - _("Phone"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_LIST, - G_PARAM_READABLE)); - - g_object_class_install_property (object_class, PROP_EMAIL, - g_param_spec_object ("email", - _("Email"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_LIST, - G_PARAM_READABLE)); - - g_object_class_install_property (object_class, PROP_BIRTH_DATE, - g_param_spec_pointer ("birth_date", - _("Birth date"), - /*_( */"XXX blurb" /*)*/, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_URL, - g_param_spec_string ("url", - _("URL"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ORG, - g_param_spec_string ("org", - _("Organization"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ORG_UNIT, - g_param_spec_string ("org_unit", - _("Organizational Unit"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_OFFICE, - g_param_spec_string ("office", - _("Office"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_TITLE, - g_param_spec_string ("title", - _("Title"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ROLE, - g_param_spec_string ("role", - _("Role"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_MANAGER, - g_param_spec_string ("manager", - _("Manager"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ASSISTANT, - g_param_spec_string ("assistant", - _("Assistant"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_NICKNAME, - g_param_spec_string ("nickname", - _("Nickname"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_SPOUSE, - g_param_spec_string ("spouse", - _("Spouse"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ANNIVERSARY, - g_param_spec_pointer ("anniversary", - _("Anniversary"), - /*_( */"XXX blurb" /*)*/, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_MAILER, - g_param_spec_string ("mailer", - _("Mailer"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_CALURI, - g_param_spec_string ("caluri", - _("Calendar URI"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_FBURL, - g_param_spec_string ("fburl", - _("Free/Busy URL"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ICSCALENDAR, - g_param_spec_string ("icscalendar", - _("ICS Calendar"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_NOTE, - g_param_spec_string ("note", - _("Note"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_RELATED_CONTACTS, - g_param_spec_string ("related_contacts", - _("Related Contacts"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_CATEGORIES, - g_param_spec_string ("categories", - _("Categories"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_CATEGORY_LIST, - g_param_spec_object ("category list", - _("Category List"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_LIST, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_WANTS_HTML, - g_param_spec_boolean ("wants_html", - _("Wants HTML"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_WANTS_HTML_SET, - g_param_spec_boolean ("wants_html_set", - _("Wants HTML set"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READABLE)); - - g_object_class_install_property (object_class, PROP_EVOLUTION_LIST, - g_param_spec_boolean ("list", - _("List"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_EVOLUTION_LIST_SHOW_ADDRESSES, - g_param_spec_boolean ("list_show_addresses", - _("List Show Addresses"), - /*_( */"XXX blurb" /*)*/, - FALSE, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ARBITRARY, - g_param_spec_object ("arbitrary", - _("Arbitrary"), - /*_( */"XXX blurb" /*)*/, - E_TYPE_LIST, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_ID, - g_param_spec_string ("id", - _("ID"), - /*_( */"XXX blurb" /*)*/, - NULL, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_LAST_USE, - g_param_spec_pointer ("last_use", - _("Last Use"), - /*_( */"XXX blurb" /*)*/, - G_PARAM_READWRITE)); - - g_object_class_install_property (object_class, PROP_USE_SCORE, - /* XXX at some point we - should remove - LAX_VALIDATION and figure - out some hard min & max - scores. */ - g_param_spec_float ("use_score", - _("Use Score"), - /*_( */"XXX blurb" /*)*/, - 0.0, - 0.0, - 0.0, - G_PARAM_READWRITE | G_PARAM_LAX_VALIDATION)); + gtk_object_add_arg_type ("ECard::file_as", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FILE_AS); + gtk_object_add_arg_type ("ECard::full_name", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FULL_NAME); + gtk_object_add_arg_type ("ECard::name", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_NAME); + gtk_object_add_arg_type ("ECard::address", + GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS); + gtk_object_add_arg_type ("ECard::address_label", + GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_ADDRESS_LABEL); + gtk_object_add_arg_type ("ECard::phone", + GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_PHONE); + gtk_object_add_arg_type ("ECard::email", + GTK_TYPE_OBJECT, GTK_ARG_READABLE, ARG_EMAIL); + gtk_object_add_arg_type ("ECard::birth_date", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_BIRTH_DATE); + gtk_object_add_arg_type ("ECard::url", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_URL); + gtk_object_add_arg_type ("ECard::org", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG); + gtk_object_add_arg_type ("ECard::org_unit", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ORG_UNIT); + gtk_object_add_arg_type ("ECard::office", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_OFFICE); + gtk_object_add_arg_type ("ECard::title", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_TITLE); + gtk_object_add_arg_type ("ECard::role", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ROLE); + gtk_object_add_arg_type ("ECard::manager", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MANAGER); + gtk_object_add_arg_type ("ECard::assistant", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ASSISTANT); + gtk_object_add_arg_type ("ECard::nickname", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NICKNAME); + gtk_object_add_arg_type ("ECard::spouse", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_SPOUSE); + gtk_object_add_arg_type ("ECard::anniversary", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_ANNIVERSARY); + gtk_object_add_arg_type ("ECard::mailer", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_MAILER); + gtk_object_add_arg_type ("ECard::caluri", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_CALURI); + gtk_object_add_arg_type ("ECard::fburl", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_FBURL); + gtk_object_add_arg_type ("ECard::icscalendar", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ICSCALENDAR); + gtk_object_add_arg_type ("ECard::note", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_NOTE); + gtk_object_add_arg_type ("ECard::related_contacts", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_RELATED_CONTACTS); + gtk_object_add_arg_type ("ECard::categories", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_CATEGORIES); + gtk_object_add_arg_type ("ECard::category_list", + GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_CATEGORY_LIST); + gtk_object_add_arg_type ("ECard::wants_html", + GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_WANTS_HTML); + gtk_object_add_arg_type ("ECard::wants_html_set", + GTK_TYPE_BOOL, GTK_ARG_READABLE, ARG_WANTS_HTML); + gtk_object_add_arg_type ("ECard::list", + GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_EVOLUTION_LIST); + gtk_object_add_arg_type ("ECard::list_show_addresses", + GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_EVOLUTION_LIST_SHOW_ADDRESSES); + gtk_object_add_arg_type ("ECard::arbitrary", + GTK_TYPE_OBJECT, GTK_ARG_READWRITE, ARG_ARBITRARY); + gtk_object_add_arg_type ("ECard::id", + GTK_TYPE_STRING, GTK_ARG_READWRITE, ARG_ID); + gtk_object_add_arg_type ("ECard::last_use", + GTK_TYPE_POINTER, GTK_ARG_READWRITE, ARG_LAST_USE); + gtk_object_add_arg_type ("ECard::use_score", + GTK_TYPE_FLOAT, GTK_ARG_READWRITE, ARG_USE_SCORE); + + + object_class->destroy = e_card_destroy; + object_class->get_arg = e_card_get_arg; + object_class->set_arg = e_card_set_arg; } ECardPhone * @@ -1936,7 +1758,7 @@ e_card_email_match_single_string (const gchar *a, const gchar *b) for (xa=a; *xa && *xa != '@'; ++xa); for (xb=b; *xb && *xb != '@'; ++xb); - if (xa-a != xb-b || *xa != *xb || g_ascii_strncasecmp (a, b, xa-a)) + if (xa-a != xb-b || *xa != *xb || g_strncasecmp (a, b, xa-a)) return FALSE; if (*xa == '\0') @@ -1977,7 +1799,7 @@ e_card_email_match_string (const ECard *card, const gchar *str) if (e_card_email_match_single_string (e_iterator_get (iter), str)) return TRUE; } - g_object_unref (iter); + gtk_object_unref (GTK_OBJECT (iter)); return FALSE; } @@ -1996,14 +1818,14 @@ e_card_email_find_number (const ECard *card, const gchar *email) iter = e_list_get_iterator (card->email); for (e_iterator_reset (iter); e_iterator_is_valid (iter); e_iterator_next (iter)) { - if (!g_ascii_strcasecmp (e_iterator_get (iter), email)) + if (!g_strcasecmp (e_iterator_get (iter), email)) goto finished; ++count; } count = -1; finished: - g_object_unref (iter); + gtk_object_unref (GTK_OBJECT (iter)); return count; } @@ -2013,82 +1835,75 @@ e_card_email_find_number (const ECard *card, const gchar *email) */ static void -e_card_dispose (GObject *object) +e_card_destroy (GtkObject *object) { ECard *card = E_CARD(object); + g_free(card->id); + if (card->book) + gtk_object_unref (GTK_OBJECT (card->book)); + g_free(card->file_as); + g_free(card->fname); + e_card_name_unref(card->name); + g_free(card->bday); + + g_free(card->url); + g_free(card->org); + g_free(card->org_unit); + g_free(card->office); + g_free(card->title); + g_free(card->role); + g_free(card->manager); + g_free(card->assistant); + g_free(card->nickname); + g_free(card->spouse); + g_free(card->anniversary); + g_free(card->caluri); + g_free(card->fburl); + g_free(card->icscalendar); + g_free(card->note); + g_free(card->related_contacts); -#define FREE_IF(x) do { if ((x)) { g_free (x); x = NULL; } } while (0) -#define UNREF_IF(x) do { if ((x)) { g_object_unref (x); x = NULL; } } while (0) - - FREE_IF (card->id); - UNREF_IF (card->book); - FREE_IF(card->file_as); - FREE_IF(card->fname); - if (card->name) { - e_card_name_unref(card->name); - card->name = NULL; - } - FREE_IF(card->bday); - - FREE_IF(card->url); - FREE_IF(card->org); - FREE_IF(card->org_unit); - FREE_IF(card->office); - FREE_IF(card->title); - FREE_IF(card->role); - FREE_IF(card->manager); - FREE_IF(card->assistant); - FREE_IF(card->nickname); - FREE_IF(card->spouse); - FREE_IF(card->anniversary); - FREE_IF(card->caluri); - FREE_IF(card->fburl); - FREE_IF(card->icscalendar); - FREE_IF(card->note); - FREE_IF(card->related_contacts); - - UNREF_IF (card->categories); - UNREF_IF (card->email); - UNREF_IF (card->phone); - UNREF_IF (card->address); - UNREF_IF (card->address_label); - - if (G_OBJECT_CLASS (parent_class)->dispose) - G_OBJECT_CLASS (parent_class)->dispose (object); + if (card->categories) + gtk_object_unref(GTK_OBJECT(card->categories)); + if (card->email) + gtk_object_unref(GTK_OBJECT(card->email)); + if (card->phone) + gtk_object_unref(GTK_OBJECT(card->phone)); + if (card->address) + gtk_object_unref(GTK_OBJECT(card->address)); + if (card->address_label) + gtk_object_unref(GTK_OBJECT(card->address_label)); } /* Set_arg handler for the card */ static void -e_card_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +e_card_set_arg (GtkObject *object, GtkArg *arg, guint arg_id) { ECard *card; card = E_CARD (object); - switch (prop_id) { - case PROP_FILE_AS: + switch (arg_id) { + case ARG_FILE_AS: g_free(card->file_as); - card->file_as = g_strdup(g_value_get_string (value)); + card->file_as = g_strdup(GTK_VALUE_STRING(*arg)); if (card->file_as == NULL) card->file_as = g_strdup(""); break; - case PROP_FULL_NAME: + case ARG_FULL_NAME: g_free(card->fname); - card->fname = g_strdup(g_value_get_string (value)); + card->fname = g_strdup(GTK_VALUE_STRING(*arg)); if (card->fname == NULL) card->fname = g_strdup(""); e_card_name_unref (card->name); card->name = e_card_name_from_string (card->fname); break; - case PROP_NAME: + case ARG_NAME: e_card_name_unref (card->name); - card->name = e_card_name_ref(g_value_get_pointer (value)); + card->name = e_card_name_ref(GTK_VALUE_POINTER(*arg)); if (card->name == NULL) card->name = e_card_name_new(); if (card->fname == NULL) { @@ -2108,193 +1923,189 @@ e_card_set_property (GObject *object, card->file_as = string; } break; - case PROP_CATEGORIES: + case ARG_CATEGORIES: if (card->categories) - g_object_unref(card->categories); + gtk_object_unref(GTK_OBJECT(card->categories)); card->categories = NULL; - if (g_value_get_string (value)) - do_parse_categories(card, (char*)g_value_get_string (value)); + if (GTK_VALUE_STRING(*arg)) + do_parse_categories(card, GTK_VALUE_STRING(*arg)); break; - case PROP_CATEGORY_LIST: + case ARG_CATEGORY_LIST: if (card->categories) - g_object_unref(card->categories); - card->categories = E_LIST(g_value_get_object(value)); + gtk_object_unref(GTK_OBJECT(card->categories)); + card->categories = E_LIST(GTK_VALUE_OBJECT(*arg)); if (card->categories) - g_object_ref(card->categories); + gtk_object_ref(GTK_OBJECT(card->categories)); break; - case PROP_BIRTH_DATE: + case ARG_BIRTH_DATE: g_free(card->bday); - if (g_value_get_pointer (value)) { + if (GTK_VALUE_POINTER (*arg)) { card->bday = g_new (ECardDate, 1); - memcpy (card->bday, g_value_get_pointer (value), sizeof (ECardDate)); + memcpy (card->bday, GTK_VALUE_POINTER (*arg), sizeof (ECardDate)); } else { card->bday = NULL; } break; - case PROP_URL: + case ARG_URL: g_free(card->url); - card->url = g_strdup(g_value_get_string(value)); + card->url = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_ORG: + case ARG_ORG: g_free(card->org); - card->org = g_strdup(g_value_get_string(value)); + card->org = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_ORG_UNIT: + case ARG_ORG_UNIT: g_free(card->org_unit); - card->org_unit = g_strdup(g_value_get_string(value)); + card->org_unit = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_OFFICE: + case ARG_OFFICE: g_free(card->office); - card->office = g_strdup(g_value_get_string(value)); + card->office = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_TITLE: + case ARG_TITLE: g_free(card->title); - card->title = g_strdup(g_value_get_string(value)); + card->title = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_ROLE: + case ARG_ROLE: g_free(card->role); - card->role = g_strdup(g_value_get_string(value)); + card->role = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_MANAGER: + case ARG_MANAGER: g_free(card->manager); - card->manager = g_strdup(g_value_get_string(value)); + card->manager = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_ASSISTANT: + case ARG_ASSISTANT: g_free(card->assistant); - card->assistant = g_strdup(g_value_get_string(value)); + card->assistant = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_NICKNAME: + case ARG_NICKNAME: g_free(card->nickname); - card->nickname = g_strdup(g_value_get_string(value)); + card->nickname = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_SPOUSE: + case ARG_SPOUSE: g_free(card->spouse); - card->spouse = g_strdup(g_value_get_string(value)); + card->spouse = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_ANNIVERSARY: + case ARG_ANNIVERSARY: g_free(card->anniversary); - if (g_value_get_pointer (value)) { + if (GTK_VALUE_POINTER (*arg)) { card->anniversary = g_new (ECardDate, 1); - memcpy (card->anniversary, g_value_get_pointer (value), sizeof (ECardDate)); + memcpy (card->anniversary, GTK_VALUE_POINTER (*arg), sizeof (ECardDate)); } else { card->anniversary = NULL; } break; - case PROP_MAILER: + case ARG_MAILER: g_free(card->mailer); - card->mailer = g_strdup(g_value_get_string(value)); + card->mailer = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_CALURI: + case ARG_CALURI: g_free(card->caluri); - card->caluri = g_strdup(g_value_get_string(value)); + card->caluri = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_FBURL: + case ARG_FBURL: g_free(card->fburl); - card->fburl = g_strdup(g_value_get_string(value)); + card->fburl = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_ICSCALENDAR: + case ARG_ICSCALENDAR: g_free(card->icscalendar); - card->icscalendar = g_strdup(g_value_get_string(value)); + card->icscalendar = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_NOTE: + case ARG_NOTE: g_free (card->note); - card->note = g_strdup(g_value_get_string(value)); + card->note = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_RELATED_CONTACTS: + case ARG_RELATED_CONTACTS: g_free (card->related_contacts); - card->related_contacts = g_strdup(g_value_get_string(value)); + card->related_contacts = g_strdup(GTK_VALUE_STRING(*arg)); break; - case PROP_WANTS_HTML: - card->wants_html = g_value_get_boolean (value); + case ARG_WANTS_HTML: + card->wants_html = GTK_VALUE_BOOL(*arg); card->wants_html_set = TRUE; break; - case PROP_ARBITRARY: + case ARG_ARBITRARY: if (card->arbitrary) - g_object_unref(card->arbitrary); - card->arbitrary = E_LIST(g_value_get_pointer(value)); + gtk_object_unref(GTK_OBJECT(card->arbitrary)); + card->arbitrary = E_LIST(GTK_VALUE_OBJECT(*arg)); if (card->arbitrary) - g_object_ref(card->arbitrary); + gtk_object_ref(GTK_OBJECT(card->arbitrary)); break; - case PROP_ID: + case ARG_ID: g_free(card->id); - card->id = g_strdup(g_value_get_string(value)); + card->id = g_strdup(GTK_VALUE_STRING(*arg)); if (card->id == NULL) card->id = g_strdup (""); break; - case PROP_LAST_USE: + case ARG_LAST_USE: g_free(card->last_use); - if (g_value_get_pointer (value)) { + if (GTK_VALUE_POINTER (*arg)) { card->last_use = g_new (ECardDate, 1); - memcpy (card->last_use, g_value_get_pointer (value), sizeof (ECardDate)); + memcpy (card->last_use, GTK_VALUE_POINTER (*arg), sizeof (ECardDate)); } else { card->last_use = NULL; } break; - case PROP_USE_SCORE: - card->raw_use_score = g_value_get_float (value); + case ARG_USE_SCORE: + card->raw_use_score = GTK_VALUE_FLOAT(*arg); break; - case PROP_EVOLUTION_LIST: - card->list = g_value_get_boolean (value); + case ARG_EVOLUTION_LIST: + card->list = GTK_VALUE_BOOL(*arg); break; - case PROP_EVOLUTION_LIST_SHOW_ADDRESSES: - card->list_show_addresses = g_value_get_boolean (value); + case ARG_EVOLUTION_LIST_SHOW_ADDRESSES: + card->list_show_addresses = GTK_VALUE_BOOL(*arg); break; default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; + return; } } /* Get_arg handler for the card */ static void -e_card_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +e_card_get_arg (GtkObject *object, GtkArg *arg, guint arg_id) { ECard *card; card = E_CARD (object); - switch (prop_id) { - case PROP_FILE_AS: - g_value_set_string (value, card->file_as); + switch (arg_id) { + case ARG_FILE_AS: + GTK_VALUE_STRING (*arg) = card->file_as; break; - case PROP_FULL_NAME: - g_value_set_string (value, card->fname); + case ARG_FULL_NAME: + GTK_VALUE_STRING (*arg) = card->fname; break; - case PROP_NAME: - g_value_set_pointer (value, card->name); + case ARG_NAME: + GTK_VALUE_POINTER(*arg) = card->name; break; - case PROP_ADDRESS: + case ARG_ADDRESS: if (!card->address) card->address = e_list_new((EListCopyFunc) e_card_delivery_address_ref, (EListFreeFunc) e_card_delivery_address_unref, NULL); - g_value_set_object (value, card->address); + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->address); break; - case PROP_ADDRESS_LABEL: + case ARG_ADDRESS_LABEL: if (!card->address_label) card->address_label = e_list_new((EListCopyFunc) e_card_address_label_ref, (EListFreeFunc) e_card_address_label_unref, NULL); - g_value_set_object (value, card->address_label); + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->address_label); break; - case PROP_PHONE: + case ARG_PHONE: if (!card->phone) card->phone = e_list_new((EListCopyFunc) e_card_phone_ref, (EListFreeFunc) e_card_phone_unref, NULL); - g_value_set_object (value, card->phone); + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->phone); break; - case PROP_EMAIL: + case ARG_EMAIL: if (!card->email) card->email = e_list_new((EListCopyFunc) g_strdup, (EListFreeFunc) g_free, NULL); - g_value_set_object (value, card->email); + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->email); break; - case PROP_CATEGORIES: + case ARG_CATEGORIES: { int i; char ** strs; @@ -2310,102 +2121,103 @@ e_card_get_property (GObject *object, strs[i] = (char *)e_iterator_get(iterator); } strs[i] = 0; - g_value_set_string(value, g_strjoinv(", ", strs)); + GTK_VALUE_STRING(*arg) = g_strjoinv(", ", strs); g_free(strs); } break; - case PROP_CATEGORY_LIST: + case ARG_CATEGORY_LIST: if (!card->categories) card->categories = e_list_new((EListCopyFunc) g_strdup, (EListFreeFunc) g_free, NULL); - g_value_set_object (value, card->categories); + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->categories); break; - case PROP_BIRTH_DATE: - g_value_set_pointer (value, card->bday); + case ARG_BIRTH_DATE: + GTK_VALUE_POINTER(*arg) = card->bday; break; - case PROP_URL: - g_value_set_string (value, card->url); + case ARG_URL: + GTK_VALUE_STRING(*arg) = card->url; break; - case PROP_ORG: - g_value_set_string (value, card->org); + case ARG_ORG: + GTK_VALUE_STRING(*arg) = card->org; break; - case PROP_ORG_UNIT: - g_value_set_string (value, card->org_unit); + case ARG_ORG_UNIT: + GTK_VALUE_STRING(*arg) = card->org_unit; break; - case PROP_OFFICE: - g_value_set_string (value, card->office); + case ARG_OFFICE: + GTK_VALUE_STRING(*arg) = card->office; break; - case PROP_TITLE: - g_value_set_string (value, card->title); + case ARG_TITLE: + GTK_VALUE_STRING(*arg) = card->title; break; - case PROP_ROLE: - g_value_set_string (value, card->role); + case ARG_ROLE: + GTK_VALUE_STRING(*arg) = card->role; break; - case PROP_MANAGER: - g_value_set_string (value, card->manager); + case ARG_MANAGER: + GTK_VALUE_STRING(*arg) = card->manager; break; - case PROP_ASSISTANT: - g_value_set_string (value, card->assistant); + case ARG_ASSISTANT: + GTK_VALUE_STRING(*arg) = card->assistant; break; - case PROP_NICKNAME: - g_value_set_string (value, card->nickname); + case ARG_NICKNAME: + GTK_VALUE_STRING(*arg) = card->nickname; break; - case PROP_SPOUSE: - g_value_set_string (value, card->spouse); + case ARG_SPOUSE: + GTK_VALUE_STRING(*arg) = card->spouse; break; - case PROP_ANNIVERSARY: - g_value_set_pointer (value, card->anniversary); + case ARG_ANNIVERSARY: + GTK_VALUE_POINTER(*arg) = card->anniversary; break; - case PROP_MAILER: - g_value_set_string (value, card->mailer); + case ARG_MAILER: + GTK_VALUE_STRING(*arg) = card->mailer; break; - case PROP_CALURI: - g_value_set_string (value, card->caluri); + case ARG_CALURI: + GTK_VALUE_STRING(*arg) = card->caluri; break; - case PROP_FBURL: - g_value_set_string (value, card->fburl); + case ARG_FBURL: + GTK_VALUE_STRING(*arg) = card->fburl; break; - case PROP_ICSCALENDAR: - g_value_set_string (value, card->icscalendar); + case ARG_ICSCALENDAR: + GTK_VALUE_STRING(*arg) = card->icscalendar; break; - case PROP_NOTE: - g_value_set_string (value, card->note); + case ARG_NOTE: + GTK_VALUE_STRING(*arg) = card->note; break; - case PROP_RELATED_CONTACTS: - g_value_set_string (value, card->related_contacts); + case ARG_RELATED_CONTACTS: + GTK_VALUE_STRING(*arg) = card->related_contacts; break; - case PROP_WANTS_HTML: - g_value_set_boolean (value, card->wants_html); + case ARG_WANTS_HTML: + GTK_VALUE_BOOL(*arg) = card->wants_html; break; - case PROP_WANTS_HTML_SET: - g_value_set_boolean (value, card->wants_html_set); + case ARG_WANTS_HTML_SET: + GTK_VALUE_BOOL(*arg) = card->wants_html_set; break; - case PROP_ARBITRARY: + case ARG_ARBITRARY: if (!card->arbitrary) card->arbitrary = e_list_new((EListCopyFunc) e_card_arbitrary_ref, (EListFreeFunc) e_card_arbitrary_unref, NULL); - g_value_set_object (value, card->arbitrary); + GTK_VALUE_OBJECT(*arg) = GTK_OBJECT(card->arbitrary); break; - case PROP_ID: - g_value_set_string (value, card->id); + case ARG_ID: + GTK_VALUE_STRING(*arg) = card->id; break; - case PROP_LAST_USE: - g_value_set_pointer (value, card->last_use); + case ARG_LAST_USE: + GTK_VALUE_POINTER(*arg) = card->last_use; break; - case PROP_USE_SCORE: - g_value_set_float (value, e_card_get_use_score (card)); + + case ARG_USE_SCORE: + GTK_VALUE_FLOAT(*arg) = e_card_get_use_score (card); break; - case PROP_EVOLUTION_LIST: - g_value_set_boolean (value, card->list); + case ARG_EVOLUTION_LIST: + GTK_VALUE_BOOL(*arg) = card->list; break; - case PROP_EVOLUTION_LIST_SHOW_ADDRESSES: - g_value_set_boolean (value, card->list_show_addresses); + case ARG_EVOLUTION_LIST_SHOW_ADDRESSES: + GTK_VALUE_BOOL(*arg) = card->list_show_addresses; break; default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + arg->type = GTK_TYPE_INVALID; break; } } @@ -2461,7 +2273,7 @@ e_card_load_cards_from_file_with_default_charset(const char *filename, char *def GList *list = NULL; while(vobj) { VObject *next; - ECard *card = g_object_new (E_TYPE_CARD, NULL); + ECard *card = E_CARD(gtk_type_new(e_card_get_type())); parse(card, vobj, default_charset); next = nextVObjectInList(vobj); cleanVObject(vobj); @@ -2485,7 +2297,7 @@ e_card_load_cards_from_string_with_default_charset(const char *str, char *defaul GList *list = NULL; while(vobj) { VObject *next; - ECard *card = g_object_new (E_TYPE_CARD, NULL); + ECard *card = E_CARD(gtk_type_new(e_card_get_type())); parse(card, vobj, default_charset); next = nextVObjectInList(vobj); cleanVObject(vobj); @@ -2506,32 +2318,32 @@ void e_card_free_empty_lists (ECard *card) { if (card->address && e_list_length (card->address) == 0) { - g_object_unref (card->address); + gtk_object_unref (GTK_OBJECT (card->address)); card->address = NULL; } if (card->address_label && e_list_length (card->address_label) == 0) { - g_object_unref (card->address_label); + gtk_object_unref (GTK_OBJECT (card->address_label)); card->address_label = NULL; } if (card->phone && e_list_length (card->phone) == 0) { - g_object_unref (card->phone); + gtk_object_unref (GTK_OBJECT (card->phone)); card->phone = NULL; } if (card->email && e_list_length (card->email) == 0) { - g_object_unref (card->email); + gtk_object_unref (GTK_OBJECT (card->email)); card->email = NULL; } if (card->categories && e_list_length (card->categories) == 0) { - g_object_unref (card->categories); + gtk_object_unref (GTK_OBJECT (card->categories)); card->categories = NULL; } if (card->arbitrary && e_list_length (card->arbitrary) == 0) { - g_object_unref (card->arbitrary); + gtk_object_unref (GTK_OBJECT (card->arbitrary)); card->arbitrary = NULL; } } @@ -2734,6 +2546,278 @@ set_address_flags (VObject *vobj, ECardAddressFlags flags) } } +#include <Evolution-Composer.h> + +#define COMPOSER_OAFID "OAFIID:GNOME_Evolution_Mail_Composer" + +void +e_card_list_send (GList *cards, ECardDisposition disposition) +{ + BonoboObjectClient *bonobo_server; + GNOME_Evolution_Composer composer_server; + CORBA_Environment ev; + + if (cards == NULL) + return; + + /* First, I obtain an object reference that represents the Composer. */ + bonobo_server = bonobo_object_activate (COMPOSER_OAFID, 0); + + g_return_if_fail (bonobo_server != NULL); + + composer_server = bonobo_object_corba_objref (BONOBO_OBJECT (bonobo_server)); + + CORBA_exception_init (&ev); + + if (disposition == E_CARD_DISPOSITION_AS_TO) { + GNOME_Evolution_Composer_RecipientList *to_list, *cc_list, *bcc_list; + CORBA_char *subject; + int to_i, bcc_i; + GList *iter; + gint to_length = 0, bcc_length = 0; + + /* Figure out how many addresses of each kind we have. */ + for (iter = cards; iter != NULL; iter = g_list_next (iter)) { + ECard *card = E_CARD (iter->data); + if (e_card_evolution_list (card)) { + gint len = card->email ? e_list_length (card->email) : 0; + if (e_card_evolution_list_show_addresses (card)) + to_length += len; + else + bcc_length += len; + } else { + if (card->email != NULL) + ++to_length; + } + } + + /* Now I have to make a CORBA sequences that represents a recipient list with + the right number of entries, for the cards. */ + to_list = GNOME_Evolution_Composer_RecipientList__alloc (); + to_list->_maximum = to_length; + to_list->_length = to_length; + if (to_length > 0) { + to_list->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (to_length); + } + + cc_list = GNOME_Evolution_Composer_RecipientList__alloc (); + cc_list->_maximum = cc_list->_length = 0; + + bcc_list = GNOME_Evolution_Composer_RecipientList__alloc (); + bcc_list->_maximum = bcc_length; + bcc_list->_length = bcc_length; + if (bcc_length > 0) { + bcc_list->_buffer = CORBA_sequence_GNOME_Evolution_Composer_Recipient_allocbuf (bcc_length); + } + + to_i = 0; + bcc_i = 0; + while (cards != NULL) { + ECard *card = cards->data; + EIterator *iterator; + gchar *name, *addr; + gboolean is_list, is_hidden, free_name_addr; + GNOME_Evolution_Composer_Recipient *recipient; + + if (card->email != NULL) { + + is_list = e_card_evolution_list (card); + is_hidden = is_list && !e_card_evolution_list_show_addresses (card); + + for (iterator = e_list_get_iterator (card->email); e_iterator_is_valid (iterator); e_iterator_next (iterator)) { + + if (is_hidden) { + recipient = &(bcc_list->_buffer[bcc_i]); + ++bcc_i; + } else { + recipient = &(to_list->_buffer[to_i]); + ++to_i; + } + + name = ""; + addr = ""; + free_name_addr = FALSE; + if (e_iterator_is_valid (iterator)) { + + if (is_list) { + /* We need to decode the list entries, which are XMLified EDestinations. */ + EDestination *dest = e_destination_import (e_iterator_get (iterator)); + if (dest != NULL) { + name = g_strdup (e_destination_get_name (dest)); + addr = g_strdup (e_destination_get_email (dest)); + free_name_addr = TRUE; + gtk_object_unref (GTK_OBJECT (dest)); + } + + } else { /* is just a plain old card */ + if (card->name) + name = e_card_name_to_string (card->name); + addr = g_strdup ((char *) e_iterator_get (iterator)); + free_name_addr = TRUE; + } + } + + recipient->name = CORBA_string_dup (name ? name : ""); + recipient->address = CORBA_string_dup (addr ? addr : ""); + + if (free_name_addr) { + g_free ((gchar *) name); + g_free ((gchar *) addr); + } + + /* If this isn't a list, we quit after the first (i.e. the default) address. */ + if (!is_list) + break; + + } + gtk_object_unref (GTK_OBJECT (iterator)); + } + + cards = g_list_next (cards); + } + + subject = CORBA_string_dup (""); + + GNOME_Evolution_Composer_setHeaders (composer_server, "", to_list, cc_list, bcc_list, subject, &ev); + if (ev._major != CORBA_NO_EXCEPTION) { + g_printerr ("gui/e-meeting-edit.c: I couldn't set the composer headers via CORBA! Aagh.\n"); + CORBA_exception_free (&ev); + return; + } + + CORBA_free (to_list); + CORBA_free (cc_list); + CORBA_free (bcc_list); + CORBA_free (subject); + } + + if (disposition == E_CARD_DISPOSITION_AS_ATTACHMENT) { + CORBA_char *content_type, *filename, *description; + GNOME_Evolution_Composer_AttachmentData *attach_data; + CORBA_boolean show_inline; + char *tempstr; + + GNOME_Evolution_Composer_RecipientList *to_list, *cc_list, *bcc_list; + CORBA_char *subject; + + content_type = CORBA_string_dup ("text/x-vcard"); + filename = CORBA_string_dup (""); + + if (cards->next) { + description = CORBA_string_dup (_("Multiple VCards")); + } else { + char *file_as; + + gtk_object_get(GTK_OBJECT(cards->data), + "file_as", &file_as, + NULL); + + tempstr = g_strdup_printf (_("VCard for %s"), file_as); + description = CORBA_string_dup (tempstr); + g_free (tempstr); + } + + show_inline = FALSE; + + tempstr = e_card_list_get_vcard (cards); + attach_data = GNOME_Evolution_Composer_AttachmentData__alloc(); + attach_data->_maximum = attach_data->_length = strlen (tempstr); + attach_data->_buffer = CORBA_sequence_CORBA_char_allocbuf (attach_data->_length); + strcpy (attach_data->_buffer, tempstr); + g_free (tempstr); + + GNOME_Evolution_Composer_attachData (composer_server, + content_type, filename, description, + show_inline, attach_data, + &ev); + + if (ev._major != CORBA_NO_EXCEPTION) { + g_printerr ("gui/e-meeting-edit.c: I couldn't attach data to the composer via CORBA! Aagh.\n"); + CORBA_exception_free (&ev); + return; + } + + CORBA_free (content_type); + CORBA_free (filename); + CORBA_free (description); + CORBA_free (attach_data); + + to_list = GNOME_Evolution_Composer_RecipientList__alloc (); + to_list->_maximum = to_list->_length = 0; + + cc_list = GNOME_Evolution_Composer_RecipientList__alloc (); + cc_list->_maximum = cc_list->_length = 0; + + bcc_list = GNOME_Evolution_Composer_RecipientList__alloc (); + bcc_list->_maximum = bcc_list->_length = 0; + + if (!cards || cards->next) { + subject = CORBA_string_dup ("Contact information"); + } else { + ECard *card = cards->data; + const gchar *tempstr2; + + tempstr2 = NULL; + gtk_object_get(GTK_OBJECT(card), + "file_as", &tempstr2, + NULL); + if (!tempstr2 || !*tempstr2) + gtk_object_get(GTK_OBJECT(card), + "full_name", &tempstr2, + NULL); + if (!tempstr2 || !*tempstr2) + gtk_object_get(GTK_OBJECT(card), + "org", &tempstr2, + NULL); + if (!tempstr2 || !*tempstr2) { + EList *list; + EIterator *iterator; + gtk_object_get(GTK_OBJECT(card), + "email", &list, + NULL); + iterator = e_list_get_iterator (list); + if (e_iterator_is_valid (iterator)) { + tempstr2 = e_iterator_get (iterator); + } + gtk_object_unref (GTK_OBJECT (iterator)); + } + + if (!tempstr2 || !*tempstr2) + tempstr = g_strdup_printf ("Contact information"); + else + tempstr = g_strdup_printf ("Contact information for %s", tempstr2); + subject = CORBA_string_dup (tempstr); + g_free (tempstr); + } + + GNOME_Evolution_Composer_setHeaders (composer_server, "", to_list, cc_list, bcc_list, subject, &ev); + + CORBA_free (to_list); + CORBA_free (cc_list); + CORBA_free (bcc_list); + CORBA_free (subject); + } + + GNOME_Evolution_Composer_show (composer_server, &ev); + + if (ev._major != CORBA_NO_EXCEPTION) { + g_printerr ("gui/e-meeting-edit.c: I couldn't show the composer via CORBA! Aagh.\n"); + CORBA_exception_free (&ev); + return; + } + + CORBA_exception_free (&ev); +} + +void +e_card_send (ECard *card, ECardDisposition disposition) +{ + GList *list; + list = g_list_prepend (NULL, card); + e_card_list_send (list, disposition); + g_list_free (list); +} + gboolean e_card_evolution_list (ECard *card) { |