diff options
Diffstat (limited to 'addressbook')
-rw-r--r-- | addressbook/ChangeLog | 22 | ||||
-rw-r--r-- | addressbook/backend/ebook/e-card.c | 27 | ||||
-rw-r--r-- | addressbook/backend/ebook/load-pine-addressbook.c | 147 | ||||
-rw-r--r-- | addressbook/backend/pas/pas-backend-file.c | 3 | ||||
-rw-r--r-- | addressbook/contact-editor/e-contact-editor.c | 240 | ||||
-rw-r--r-- | addressbook/contact-editor/e-contact-editor.h | 1 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor.c | 240 | ||||
-rw-r--r-- | addressbook/gui/contact-editor/e-contact-editor.h | 1 | ||||
-rw-r--r-- | addressbook/gui/minicard/e-minicard.c | 36 | ||||
-rw-r--r-- | addressbook/gui/widgets/e-minicard.c | 36 |
10 files changed, 693 insertions, 60 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog index a0e59a5574..57c10947a5 100644 --- a/addressbook/ChangeLog +++ b/addressbook/ChangeLog @@ -1,5 +1,27 @@ 2000-04-30 Christopher James Lahey <clahey@helixcode.com> + * backend/ebook/e-card.c: Make file as not have the : after it if + it's empty. If there's no name, or file_as, fill in these fields + with defaults based on full_name or name respectively. + + * backend/ebook/load-pine-addressbook.c: New file to do import of + pine .addressbook files. + + * backend/pas/pas-backend-file.c: Made empty fields act as the + empty string for searches. + + * contact-editor/e-contact-editor.c, + contact-editor/e-contact-editor.h: Made the File As field update + properly as you edit the name and company fields. Added the pull + down list of File As choices. Made sure that all fields will + be set to NULL if they are deleted to the empty string. + + * gui/minicard/e-minicard.c: Use the File As field instead of the + Full Name field for the header. Make identical compares on the + File As field do a compare on the uid. + +2000-04-30 Christopher James Lahey <clahey@helixcode.com> + * contact-editor/e-contact-editor-fullname.c, contact-editor/fullname.glade: Fixed a string mismatch. diff --git a/addressbook/backend/ebook/e-card.c b/addressbook/backend/ebook/e-card.c index 2f0f05b97f..2eeec38b73 100644 --- a/addressbook/backend/ebook/e-card.c +++ b/addressbook/backend/ebook/e-card.c @@ -227,13 +227,15 @@ char vobj = newVObject (VCCardProp); - if ( card->file_as ) + if ( card->file_as && *card->file_as ) addPropValue(vobj, "X-EVOLUTION-FILE-AS", card->file_as); + else if (card->file_as) + addProp(vobj, "X-EVOLUTION-FILE_AS"); if ( card->fname ) addPropValue(vobj, VCFullNameProp, card->fname); - if ( card->name ) { + if ( card->name && (card->name->prefix || card->name->given || card->name->additional || card->name->family || card->name->suffix) ) { VObject *nameprop; nameprop = addProp(vobj, VCNameProp); if ( card->name->prefix ) @@ -705,6 +707,27 @@ parse(ECard *card, VObject *vobj) while(moreIteration (&iterator)) { parse_attribute(card, nextVObject(&iterator)); } + if (!card->name) { + if (card->fname) { + card->name = e_card_name_from_string(card->fname); + } + } + if (!card->file_as) { + if (card->name) { + ECardName *name = card->name; + char *strings[3], **stringptr; + char *string; + stringptr = strings; + if (name->family && *name->family) + *(stringptr++) = name->family; + if (name->given && *name->given) + *(stringptr++) = name->given; + *stringptr = NULL; + string = g_strjoinv(", ", strings); + card->file_as = string; + } else + card->file_as = g_strdup(""); + } } static void diff --git a/addressbook/backend/ebook/load-pine-addressbook.c b/addressbook/backend/ebook/load-pine-addressbook.c new file mode 100644 index 0000000000..8837a11a9a --- /dev/null +++ b/addressbook/backend/ebook/load-pine-addressbook.c @@ -0,0 +1,147 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ +#include <config.h> +#include <bonobo.h> +#include <gnome.h> +#include <stdio.h> + +#include <e-book.h> + +static CORBA_Environment ev; + +#ifdef USING_OAF + +#include <liboaf/liboaf.h> + +static void +init_corba (int *argc, char **argv) +{ + gnome_init_with_popt_table("blah", "0.0", *argc, argv, NULL, 0, NULL); + + oaf_init (*argc, argv); +} + +#else + +#include <libgnorba/gnorba.h> + +static void +init_corba (int *argc, char **argv) +{ + gnome_CORBA_init_with_popt_table ( + "blah", "0.0", + argc, argv, NULL, 0, NULL, GNORBA_INIT_SERVER_FUNC, &ev); +} + +#endif + +static void +init_bonobo (int argc, char **argv) +{ + if (bonobo_init (CORBA_OBJECT_NIL, CORBA_OBJECT_NIL, CORBA_OBJECT_NIL) == FALSE) + g_error (_("Could not initialize Bonobo")); +} + +static void +add_card_cb (EBook *book, EBookStatus status, const gchar *id, gpointer closure) +{ + ECard *card = E_CARD(closure); + char *vcard = e_card_get_vcard(card); + g_print ("Saved card: %s\n", vcard); + g_free(vcard); + gtk_object_unref(GTK_OBJECT(card)); +} + +static void +book_open_cb (EBook *book, EBookStatus status, gpointer closure) +{ + FILE *fp = fopen (".addressbook", "r"); + char line[1024]; + while(fgets(line, 1024, fp)) { + int length = strlen(line); + char **strings; + ECardName *name; + ECard *card; + ECardList *list; + if (line[length - 1] == '\n') + line[--length] = 0; + + card = e_card_new(""); + strings = g_strsplit(line, "\t", 3); + name = e_card_name_from_string(strings[1]); + gtk_object_set(GTK_OBJECT(card), + "nickname", strings[0], + "full_name", strings[1], + "name", name, + NULL); + gtk_object_get(GTK_OBJECT(card), + "email", &list, + NULL); + e_card_list_append(list, strings[2]); + g_strfreev(strings); + e_book_add_card(book, card, add_card_cb, card); + } +} + +static guint +ebook_create (void) +{ + EBook *book; + + book = e_book_new (); + + if (!book) { + printf ("%s: %s(): Couldn't create EBook, bailing.\n", + __FILE__, + __FUNCTION__); + return FALSE; + } + + + if (! e_book_load_uri (book, "file:/tmp/test.db", book_open_cb, NULL)) { + printf ("error calling load_uri!\n"); + } + + + return FALSE; +} + +#if 0 +static char * +read_file (char *name) +{ + int len; + char buff[65536]; + char line[1024]; + FILE *f; + + f = fopen (name, "r"); + if (f == NULL) + g_error ("Unable to open %s!\n", name); + + len = 0; + while (fgets (line, sizeof (line), f) != NULL) { + strcpy (buff + len, line); + len += strlen (line); + } + + fclose (f); + + return g_strdup (buff); +} +#endif + +int +main (int argc, char **argv) +{ + + CORBA_exception_init (&ev); + + init_corba (&argc, argv); + init_bonobo (argc, argv); + + gtk_idle_add ((GtkFunction) ebook_create, NULL); + + bonobo_main (); + + return 0; +} diff --git a/addressbook/backend/pas/pas-backend-file.c b/addressbook/backend/pas/pas-backend-file.c index cbe75a5aba..20de42808c 100644 --- a/addressbook/backend/pas/pas-backend-file.c +++ b/addressbook/backend/pas/pas-backend-file.c @@ -287,6 +287,9 @@ entry_compare(PASBackendFileSearchContext *ctx, struct _ESExp *f, if (prop && compare(prop, argv[1]->value.string)) { truth = TRUE; } + if ((!prop) && compare("", argv[1]->value.string)) { + truth = TRUE; + } } else if (info->prop_type == PROP_TYPE_LIST) { /* the special searches that match any of the list elements */ diff --git a/addressbook/contact-editor/e-contact-editor.c b/addressbook/contact-editor/e-contact-editor.c index 3d25e8a1a9..b4c20987f9 100644 --- a/addressbook/contact-editor/e-contact-editor.c +++ b/addressbook/contact-editor/e-contact-editor.c @@ -253,14 +253,149 @@ address_text_changed (GtkWidget *widget, EContactEditor *editor) editor->address[editor->address_choice]->data = string; } +/* This function tells you whether name_to_style will make sense. */ +static gboolean +style_makes_sense(const ECardName *name, char *company, int style) +{ + switch (style) { + case 0: /* Fall Through */ + case 1: + return TRUE; + case 2: + if (company && *company) + return TRUE; + else + return FALSE; + case 3: /* Fall Through */ + case 4: + if (company && *company && ((name->given && *name->given) || (name->family && *name->family))) + return TRUE; + else + return FALSE; + default: + return FALSE; + } +} + +static char * +name_to_style(const ECardName *name, char *company, int style) +{ + char *string; + char *strings[4], **stringptr; + char *substring; + switch (style) { + case 0: + stringptr = strings; + if (name->family && *name->family) + *(stringptr++) = name->family; + if (name->given && *name->given) + *(stringptr++) = name->given; + *stringptr = NULL; + string = g_strjoinv(", ", strings); + break; + case 1: + stringptr = strings; + if (name->given && *name->given) + *(stringptr++) = name->given; + if (name->family && *name->family) + *(stringptr++) = name->family; + *stringptr = NULL; + string = g_strjoinv(" ", strings); + break; + case 2: + string = g_strdup(company); + break; + case 3: /* Fall Through */ + case 4: + stringptr = strings; + if (name->family && *name->family) + *(stringptr++) = name->family; + if (name->given && *name->given) + *(stringptr++) = name->given; + *stringptr = NULL; + substring = g_strjoinv(", ", strings); + if (!(company && *company)) + company = ""; + if (style == 3) + string = g_strdup_printf("%s (%s)", substring, company); + else + string = g_strdup_printf("%s (%s)", company, substring); + g_free(substring); + break; + default: + string = g_strdup(""); + } + return string; +} + +static int +file_as_get_style (EContactEditor *editor) +{ + GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as")); + char *filestring = gtk_entry_get_text(file_as); + char *trystring; + ECardName *name = editor->name; + int i; + int style; + + if (!name) return 0; + + style = -1; + for (i = 0; i < 5; i++) { + trystring = name_to_style(name, editor->company, i); + if (!strcmp(trystring, filestring)) { + g_free(trystring); + return i; + } + g_free(trystring); + } + return -1; +} + static void -name_entry_changed (GtkWidget *widget, EContactEditor *editor) +file_as_set_style(EContactEditor *editor, int style) { char *string; + int i; + GList *strings = NULL; + GtkCombo *combo = GTK_COMBO(glade_xml_get_widget(editor->gui, "combo-file-as")); + GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as")); + + if (style == -1) { + string = g_strdup(gtk_entry_get_text(file_as)); + strings = g_list_append(strings, string); + } + + for (i = 0; i < 5; i++) { + if (style_makes_sense(editor->name, editor->company, i)) { + string = name_to_style(editor->name, editor->company, i); + strings = g_list_append(strings, string); + } + } + + gtk_combo_set_popdown_strings(combo, strings); + g_list_foreach(strings, (GFunc) g_free, NULL); + g_list_free(strings); + + if (style != -1) { + string = name_to_style(editor->name, editor->company, style); + gtk_entry_set_text(file_as, string); + g_free(string); + } +} + +static void +name_entry_changed (GtkWidget *widget, EContactEditor *editor) +{ ECardName *name; + char *string; GtkEntry *entry = GTK_ENTRY(widget); + int style = 0; + + style = file_as_get_style(editor); name = editor->name; + if (name) e_card_name_free(name); @@ -269,6 +404,23 @@ name_entry_changed (GtkWidget *widget, EContactEditor *editor) name = e_card_name_from_string(string); editor->name = name; + + file_as_set_style(editor, style); +} + +static void +company_entry_changed (GtkWidget *widget, EContactEditor *editor) +{ + GtkEntry *entry = GTK_ENTRY(widget); + int style = 0; + + style = file_as_get_style(editor); + + g_free(editor->company); + + editor->company = g_strdup(gtk_entry_get_text(entry)); + + file_as_set_style(editor, style); } static void @@ -296,6 +448,9 @@ set_entry_changed_signals(EContactEditor *editor) widget = glade_xml_get_widget(editor->gui, "entry-fullname"); gtk_signal_connect(GTK_OBJECT(widget), "changed", name_entry_changed, editor); + widget = glade_xml_get_widget(editor->gui, "entry-company"); + gtk_signal_connect(GTK_OBJECT(widget), "changed", + company_entry_changed, editor); } static void @@ -358,6 +513,7 @@ e_contact_editor_init (EContactEditor *e_contact_editor) e_contact_editor->phone_list = NULL; e_contact_editor->address_list = NULL; e_contact_editor->name = NULL; + e_contact_editor->company = g_strdup(""); for (i = 0; i < E_CONTACT_EDITOR_PHONE_ID_LAST; i++) { e_contact_editor->phone[i] = NULL; @@ -414,6 +570,8 @@ e_contact_editor_destroy (GtkObject *object) { gtk_widget_unref(e_contact_editor->address_popup); } + g_free (e_contact_editor->company); + gtk_object_unref(GTK_OBJECT(e_contact_editor->gui)); } @@ -884,14 +1042,6 @@ fill_in_info(EContactEditor *editor) if (fname) gtk_editable_insert_text(editable, fname, strlen(fname), &position); - - - position = 0; - editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-file-as")); - gtk_editable_delete_text(editable, 0, -1); - if (file_as) - gtk_editable_insert_text(editable, file_as, strlen(file_as), &position); - for (iterator = e_card_list_get_iterator(phone_list); e_card_iterator_is_valid(iterator); e_card_iterator_next(iterator)) { int i; phone = e_card_iterator_get(iterator); @@ -1023,6 +1173,14 @@ fill_in_info(EContactEditor *editor) dateedit = GNOME_DATE_EDIT(glade_xml_get_widget(editor->gui, "dateedit-birthday")); gnome_date_edit_set_time(dateedit, time_val); } + + /* File as has to come after company and name or else it'll get messed up when setting them. */ + position = 0; + editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-file-as")); + gtk_editable_delete_text(editable, 0, -1); + if (file_as) + gtk_editable_insert_text(editable, file_as, strlen(file_as), &position); + set_fields(editor); } } @@ -1073,10 +1231,9 @@ extract_info(EContactEditor *editor) position = 0; editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-file-as")); file_as = gtk_editable_get_chars(editable, 0, -1); - if (file_as && *file_as) - gtk_object_set(GTK_OBJECT(card), - "file_as", file_as, - NULL); + gtk_object_set(GTK_OBJECT(card), + "file_as", file_as, + NULL); g_free(file_as); position = 0; @@ -1086,8 +1243,17 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "full_name", fname, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "full_name", NULL, + NULL); g_free(fname); + if (editor->name) + gtk_object_set(GTK_OBJECT(card), + "name", editor->name, + NULL); + for (iterator = e_card_list_get_iterator(phone_list); e_card_iterator_is_valid(iterator); iterator_next ? e_card_iterator_next(iterator) : FALSE ) { int i; phone = e_card_iterator_get(iterator); @@ -1182,6 +1348,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "url", url, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "url", NULL, + NULL); g_free(url); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-company")); @@ -1190,6 +1360,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "org", org, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "org", NULL, + NULL); g_free(org); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-department")); @@ -1198,6 +1372,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "org_unit", org_unit, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "org_unit", NULL, + NULL); g_free(org_unit); position = 0; @@ -1207,6 +1385,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "office", office, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "office", NULL, + NULL); g_free(office); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-jobtitle")); @@ -1215,6 +1397,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "title", title, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "title", NULL, + NULL); g_free(title); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-profession")); @@ -1223,6 +1409,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "role", role, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "role", NULL, + NULL); g_free(role); position = 0; @@ -1232,6 +1422,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "manager", manager, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "manager", NULL, + NULL); g_free(manager); position = 0; @@ -1241,6 +1435,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "assistant", assistant, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "assistant", NULL, + NULL); g_free(assistant); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-nickname")); @@ -1249,6 +1447,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "nickname", nickname, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "nickname", NULL, + NULL); g_free(nickname); position = 0; @@ -1258,6 +1460,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "spouse", spouse, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "spouse", NULL, + NULL); g_free(spouse); dateedit = GNOME_DATE_EDIT(glade_xml_get_widget(editor->gui, "dateedit-anniversary")); @@ -1278,6 +1484,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "fburl", fburl, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "fburl", NULL, + NULL); g_free(fburl); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "text-comments")); @@ -1286,6 +1496,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "note", note, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "note", NULL, + NULL); g_free(note); dateedit = GNOME_DATE_EDIT(glade_xml_get_widget(editor->gui, "dateedit-birthday")); diff --git a/addressbook/contact-editor/e-contact-editor.h b/addressbook/contact-editor/e-contact-editor.h index fa31e73bde..a0bad6e1f9 100644 --- a/addressbook/contact-editor/e-contact-editor.h +++ b/addressbook/contact-editor/e-contact-editor.h @@ -115,6 +115,7 @@ struct _EContactEditor ECardAddrLabel *address[E_CONTACT_EDITOR_ADDRESS_ID_LAST]; ECardName *name; + char *company; EContactEditorEmailId email_choice; EContactEditorPhoneId phone_choice[4]; diff --git a/addressbook/gui/contact-editor/e-contact-editor.c b/addressbook/gui/contact-editor/e-contact-editor.c index 3d25e8a1a9..b4c20987f9 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.c +++ b/addressbook/gui/contact-editor/e-contact-editor.c @@ -253,14 +253,149 @@ address_text_changed (GtkWidget *widget, EContactEditor *editor) editor->address[editor->address_choice]->data = string; } +/* This function tells you whether name_to_style will make sense. */ +static gboolean +style_makes_sense(const ECardName *name, char *company, int style) +{ + switch (style) { + case 0: /* Fall Through */ + case 1: + return TRUE; + case 2: + if (company && *company) + return TRUE; + else + return FALSE; + case 3: /* Fall Through */ + case 4: + if (company && *company && ((name->given && *name->given) || (name->family && *name->family))) + return TRUE; + else + return FALSE; + default: + return FALSE; + } +} + +static char * +name_to_style(const ECardName *name, char *company, int style) +{ + char *string; + char *strings[4], **stringptr; + char *substring; + switch (style) { + case 0: + stringptr = strings; + if (name->family && *name->family) + *(stringptr++) = name->family; + if (name->given && *name->given) + *(stringptr++) = name->given; + *stringptr = NULL; + string = g_strjoinv(", ", strings); + break; + case 1: + stringptr = strings; + if (name->given && *name->given) + *(stringptr++) = name->given; + if (name->family && *name->family) + *(stringptr++) = name->family; + *stringptr = NULL; + string = g_strjoinv(" ", strings); + break; + case 2: + string = g_strdup(company); + break; + case 3: /* Fall Through */ + case 4: + stringptr = strings; + if (name->family && *name->family) + *(stringptr++) = name->family; + if (name->given && *name->given) + *(stringptr++) = name->given; + *stringptr = NULL; + substring = g_strjoinv(", ", strings); + if (!(company && *company)) + company = ""; + if (style == 3) + string = g_strdup_printf("%s (%s)", substring, company); + else + string = g_strdup_printf("%s (%s)", company, substring); + g_free(substring); + break; + default: + string = g_strdup(""); + } + return string; +} + +static int +file_as_get_style (EContactEditor *editor) +{ + GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as")); + char *filestring = gtk_entry_get_text(file_as); + char *trystring; + ECardName *name = editor->name; + int i; + int style; + + if (!name) return 0; + + style = -1; + for (i = 0; i < 5; i++) { + trystring = name_to_style(name, editor->company, i); + if (!strcmp(trystring, filestring)) { + g_free(trystring); + return i; + } + g_free(trystring); + } + return -1; +} + static void -name_entry_changed (GtkWidget *widget, EContactEditor *editor) +file_as_set_style(EContactEditor *editor, int style) { char *string; + int i; + GList *strings = NULL; + GtkCombo *combo = GTK_COMBO(glade_xml_get_widget(editor->gui, "combo-file-as")); + GtkEntry *file_as = GTK_ENTRY(glade_xml_get_widget(editor->gui, "entry-file-as")); + + if (style == -1) { + string = g_strdup(gtk_entry_get_text(file_as)); + strings = g_list_append(strings, string); + } + + for (i = 0; i < 5; i++) { + if (style_makes_sense(editor->name, editor->company, i)) { + string = name_to_style(editor->name, editor->company, i); + strings = g_list_append(strings, string); + } + } + + gtk_combo_set_popdown_strings(combo, strings); + g_list_foreach(strings, (GFunc) g_free, NULL); + g_list_free(strings); + + if (style != -1) { + string = name_to_style(editor->name, editor->company, style); + gtk_entry_set_text(file_as, string); + g_free(string); + } +} + +static void +name_entry_changed (GtkWidget *widget, EContactEditor *editor) +{ ECardName *name; + char *string; GtkEntry *entry = GTK_ENTRY(widget); + int style = 0; + + style = file_as_get_style(editor); name = editor->name; + if (name) e_card_name_free(name); @@ -269,6 +404,23 @@ name_entry_changed (GtkWidget *widget, EContactEditor *editor) name = e_card_name_from_string(string); editor->name = name; + + file_as_set_style(editor, style); +} + +static void +company_entry_changed (GtkWidget *widget, EContactEditor *editor) +{ + GtkEntry *entry = GTK_ENTRY(widget); + int style = 0; + + style = file_as_get_style(editor); + + g_free(editor->company); + + editor->company = g_strdup(gtk_entry_get_text(entry)); + + file_as_set_style(editor, style); } static void @@ -296,6 +448,9 @@ set_entry_changed_signals(EContactEditor *editor) widget = glade_xml_get_widget(editor->gui, "entry-fullname"); gtk_signal_connect(GTK_OBJECT(widget), "changed", name_entry_changed, editor); + widget = glade_xml_get_widget(editor->gui, "entry-company"); + gtk_signal_connect(GTK_OBJECT(widget), "changed", + company_entry_changed, editor); } static void @@ -358,6 +513,7 @@ e_contact_editor_init (EContactEditor *e_contact_editor) e_contact_editor->phone_list = NULL; e_contact_editor->address_list = NULL; e_contact_editor->name = NULL; + e_contact_editor->company = g_strdup(""); for (i = 0; i < E_CONTACT_EDITOR_PHONE_ID_LAST; i++) { e_contact_editor->phone[i] = NULL; @@ -414,6 +570,8 @@ e_contact_editor_destroy (GtkObject *object) { gtk_widget_unref(e_contact_editor->address_popup); } + g_free (e_contact_editor->company); + gtk_object_unref(GTK_OBJECT(e_contact_editor->gui)); } @@ -884,14 +1042,6 @@ fill_in_info(EContactEditor *editor) if (fname) gtk_editable_insert_text(editable, fname, strlen(fname), &position); - - - position = 0; - editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-file-as")); - gtk_editable_delete_text(editable, 0, -1); - if (file_as) - gtk_editable_insert_text(editable, file_as, strlen(file_as), &position); - for (iterator = e_card_list_get_iterator(phone_list); e_card_iterator_is_valid(iterator); e_card_iterator_next(iterator)) { int i; phone = e_card_iterator_get(iterator); @@ -1023,6 +1173,14 @@ fill_in_info(EContactEditor *editor) dateedit = GNOME_DATE_EDIT(glade_xml_get_widget(editor->gui, "dateedit-birthday")); gnome_date_edit_set_time(dateedit, time_val); } + + /* File as has to come after company and name or else it'll get messed up when setting them. */ + position = 0; + editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-file-as")); + gtk_editable_delete_text(editable, 0, -1); + if (file_as) + gtk_editable_insert_text(editable, file_as, strlen(file_as), &position); + set_fields(editor); } } @@ -1073,10 +1231,9 @@ extract_info(EContactEditor *editor) position = 0; editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-file-as")); file_as = gtk_editable_get_chars(editable, 0, -1); - if (file_as && *file_as) - gtk_object_set(GTK_OBJECT(card), - "file_as", file_as, - NULL); + gtk_object_set(GTK_OBJECT(card), + "file_as", file_as, + NULL); g_free(file_as); position = 0; @@ -1086,8 +1243,17 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "full_name", fname, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "full_name", NULL, + NULL); g_free(fname); + if (editor->name) + gtk_object_set(GTK_OBJECT(card), + "name", editor->name, + NULL); + for (iterator = e_card_list_get_iterator(phone_list); e_card_iterator_is_valid(iterator); iterator_next ? e_card_iterator_next(iterator) : FALSE ) { int i; phone = e_card_iterator_get(iterator); @@ -1182,6 +1348,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "url", url, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "url", NULL, + NULL); g_free(url); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-company")); @@ -1190,6 +1360,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "org", org, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "org", NULL, + NULL); g_free(org); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-department")); @@ -1198,6 +1372,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "org_unit", org_unit, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "org_unit", NULL, + NULL); g_free(org_unit); position = 0; @@ -1207,6 +1385,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "office", office, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "office", NULL, + NULL); g_free(office); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-jobtitle")); @@ -1215,6 +1397,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "title", title, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "title", NULL, + NULL); g_free(title); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-profession")); @@ -1223,6 +1409,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "role", role, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "role", NULL, + NULL); g_free(role); position = 0; @@ -1232,6 +1422,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "manager", manager, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "manager", NULL, + NULL); g_free(manager); position = 0; @@ -1241,6 +1435,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "assistant", assistant, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "assistant", NULL, + NULL); g_free(assistant); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "entry-nickname")); @@ -1249,6 +1447,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "nickname", nickname, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "nickname", NULL, + NULL); g_free(nickname); position = 0; @@ -1258,6 +1460,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "spouse", spouse, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "spouse", NULL, + NULL); g_free(spouse); dateedit = GNOME_DATE_EDIT(glade_xml_get_widget(editor->gui, "dateedit-anniversary")); @@ -1278,6 +1484,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "fburl", fburl, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "fburl", NULL, + NULL); g_free(fburl); editable = GTK_EDITABLE(glade_xml_get_widget(editor->gui, "text-comments")); @@ -1286,6 +1496,10 @@ extract_info(EContactEditor *editor) gtk_object_set(GTK_OBJECT(card), "note", note, NULL); + else + gtk_object_set(GTK_OBJECT(card), + "note", NULL, + NULL); g_free(note); dateedit = GNOME_DATE_EDIT(glade_xml_get_widget(editor->gui, "dateedit-birthday")); diff --git a/addressbook/gui/contact-editor/e-contact-editor.h b/addressbook/gui/contact-editor/e-contact-editor.h index fa31e73bde..a0bad6e1f9 100644 --- a/addressbook/gui/contact-editor/e-contact-editor.h +++ b/addressbook/gui/contact-editor/e-contact-editor.h @@ -115,6 +115,7 @@ struct _EContactEditor ECardAddrLabel *address[E_CONTACT_EDITOR_ADDRESS_ID_LAST]; ECardName *name; + char *company; EContactEditorEmailId email_choice; EContactEditorPhoneId phone_choice[4]; diff --git a/addressbook/gui/minicard/e-minicard.c b/addressbook/gui/minicard/e-minicard.c index 1b6138c87c..6ff1d94aeb 100644 --- a/addressbook/gui/minicard/e-minicard.c +++ b/addressbook/gui/minicard/e-minicard.c @@ -449,6 +449,7 @@ remodel( EMinicard *e_minicard ) { if (e_minicard->card) { char *fname; + char *file_as; char *url; char *org; char *title; @@ -469,6 +470,7 @@ remodel( EMinicard *e_minicard ) gtk_object_get(GTK_OBJECT(e_minicard->card), "full_name", &fname, + "file_as", &file_as, "address", &address_list, "phone", &phone_list, "email", &email_list, @@ -478,17 +480,19 @@ remodel( EMinicard *e_minicard ) "role", &role, NULL); - if (fname) { - add_field(e_minicard, "Name:", fname); - if (e_minicard->header_text) - gnome_canvas_item_set(e_minicard->header_text, - "text", fname, + if (e_minicard->header_text) { + if (file_as) + gnome_canvas_item_set(e_minicard->header_text, + "text", file_as, NULL); - } else - if (e_minicard->header_text) + else gnome_canvas_item_set(e_minicard->header_text, "text", "", NULL); + } + + if (fname) + add_field(e_minicard, "Name:", fname); if (org) add_field(e_minicard, "Company:", org); @@ -592,7 +596,7 @@ e_minicard_get_card_id (EMinicard *minicard) if (minicard->card) { return e_card_get_id(minicard->card); } else { - return NULL; + return ""; } } @@ -605,20 +609,20 @@ e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2) g_return_val_if_fail(E_IS_MINICARD(minicard2), 0); if (minicard1->card && minicard2->card) { - char *fname1, *fname2; + char *file_as1, *file_as2; gtk_object_get(GTK_OBJECT(minicard1->card), - "full_name", &fname1, + "file_as", &file_as1, NULL); gtk_object_get(GTK_OBJECT(minicard2->card), - "full_name", &fname2, + "file_as", &file_as2, NULL); - if (fname1 && fname2) - return strcmp(fname1, fname2); - if (fname1) + if (file_as1 && file_as2) + return strcmp(file_as1, file_as2); + if (file_as1) return -1; - if (fname2) + if (file_as2) return 1; - return 0; + return strcmp(e_minicard_get_card_id(minicard1), e_minicard_get_card_id(minicard2)); } else { return 0; } diff --git a/addressbook/gui/widgets/e-minicard.c b/addressbook/gui/widgets/e-minicard.c index 1b6138c87c..6ff1d94aeb 100644 --- a/addressbook/gui/widgets/e-minicard.c +++ b/addressbook/gui/widgets/e-minicard.c @@ -449,6 +449,7 @@ remodel( EMinicard *e_minicard ) { if (e_minicard->card) { char *fname; + char *file_as; char *url; char *org; char *title; @@ -469,6 +470,7 @@ remodel( EMinicard *e_minicard ) gtk_object_get(GTK_OBJECT(e_minicard->card), "full_name", &fname, + "file_as", &file_as, "address", &address_list, "phone", &phone_list, "email", &email_list, @@ -478,17 +480,19 @@ remodel( EMinicard *e_minicard ) "role", &role, NULL); - if (fname) { - add_field(e_minicard, "Name:", fname); - if (e_minicard->header_text) - gnome_canvas_item_set(e_minicard->header_text, - "text", fname, + if (e_minicard->header_text) { + if (file_as) + gnome_canvas_item_set(e_minicard->header_text, + "text", file_as, NULL); - } else - if (e_minicard->header_text) + else gnome_canvas_item_set(e_minicard->header_text, "text", "", NULL); + } + + if (fname) + add_field(e_minicard, "Name:", fname); if (org) add_field(e_minicard, "Company:", org); @@ -592,7 +596,7 @@ e_minicard_get_card_id (EMinicard *minicard) if (minicard->card) { return e_card_get_id(minicard->card); } else { - return NULL; + return ""; } } @@ -605,20 +609,20 @@ e_minicard_compare (EMinicard *minicard1, EMinicard *minicard2) g_return_val_if_fail(E_IS_MINICARD(minicard2), 0); if (minicard1->card && minicard2->card) { - char *fname1, *fname2; + char *file_as1, *file_as2; gtk_object_get(GTK_OBJECT(minicard1->card), - "full_name", &fname1, + "file_as", &file_as1, NULL); gtk_object_get(GTK_OBJECT(minicard2->card), - "full_name", &fname2, + "file_as", &file_as2, NULL); - if (fname1 && fname2) - return strcmp(fname1, fname2); - if (fname1) + if (file_as1 && file_as2) + return strcmp(file_as1, file_as2); + if (file_as1) return -1; - if (fname2) + if (file_as2) return 1; - return 0; + return strcmp(e_minicard_get_card_id(minicard1), e_minicard_get_card_id(minicard2)); } else { return 0; } |