diff options
author | Milan Crha <mcrha@redhat.com> | 2008-03-13 18:12:49 +0800 |
---|---|---|
committer | Milan Crha <mcrha@src.gnome.org> | 2008-03-13 18:12:49 +0800 |
commit | 9bd177927d423b36a7506af4b23f5b5feccc5705 (patch) | |
tree | d54f4f15fb0e733a517dd08f3045c163cab0f55a /addressbook/gui/widgets | |
parent | cc692562f528115284d338dea12f8809d1efd17f (diff) | |
download | gsoc2013-evolution-9bd177927d423b36a7506af4b23f5b5feccc5705.tar gsoc2013-evolution-9bd177927d423b36a7506af4b23f5b5feccc5705.tar.gz gsoc2013-evolution-9bd177927d423b36a7506af4b23f5b5feccc5705.tar.bz2 gsoc2013-evolution-9bd177927d423b36a7506af4b23f5b5feccc5705.tar.lz gsoc2013-evolution-9bd177927d423b36a7506af4b23f5b5feccc5705.tar.xz gsoc2013-evolution-9bd177927d423b36a7506af4b23f5b5feccc5705.tar.zst gsoc2013-evolution-9bd177927d423b36a7506af4b23f5b5feccc5705.zip |
** Fix for bug #273177
2008-03-13 Milan Crha <mcrha@redhat.com>
** Fix for bug #273177
* addressbook/gui/contact-editor/e-contact-quick-add.h:
(e_contact_quick_add_vcard):
* addressbook/gui/contact-editor/e-contact-quick-add.c: (struct _QuickAdd),
(quick_add_unref), (quick_add_set_vcard), (clicked_cb),
(build_quick_add_dialog), (e_contact_quick_add_vcard):
Allow adding also whole vCard with this dialog.
* addressbook/gui/widgets/eab-popup-control.h: (struct _EABPopupControl):
* addressbook/gui/widgets/eab-popup-control.c: (eab_popup_control_set_vcard),
(eab_popup_control_cleanup), (eab_popup_control_set_vcard),
(eab_popup_control_no_matches), (set_prop), (get_prop),
(eab_popup_control_new):
New property 'vcard', if set, has higher precedence than name/email.
* mail/em-utils.h: (em_utils_add_vcard):
* mail/em-utils.c: (emu_add_address_or_vcard),
(em_utils_add_address), (em_utils_add_vcard):
New function to add whole vCard to addressbook.
* mail/em-popup.c: (emp_add_vcard), (emp_standard_menu_factory):
Add popup menu item to vcard attachments.
svn path=/trunk/; revision=35181
Diffstat (limited to 'addressbook/gui/widgets')
-rw-r--r-- | addressbook/gui/widgets/eab-popup-control.c | 45 | ||||
-rw-r--r-- | addressbook/gui/widgets/eab-popup-control.h | 1 |
2 files changed, 43 insertions, 3 deletions
diff --git a/addressbook/gui/widgets/eab-popup-control.c b/addressbook/gui/widgets/eab-popup-control.c index 94e46e0524..a30a4456a6 100644 --- a/addressbook/gui/widgets/eab-popup-control.c +++ b/addressbook/gui/widgets/eab-popup-control.c @@ -57,6 +57,7 @@ static void eab_popup_control_set_name (EABPopupControl *pop, const gchar *name); static void eab_popup_control_set_email (EABPopupControl *pop, const gchar *email); +static void eab_popup_control_set_vcard (EABPopupControl *pop, const gchar *vcard); static GtkObjectClass *parent_class; @@ -110,6 +111,9 @@ eab_popup_control_cleanup (EABPopupControl *pop) g_free (pop->email); pop->email = NULL; + + g_free (pop->vcard); + pop->vcard = NULL; } static void @@ -253,6 +257,26 @@ eab_popup_control_set_email (EABPopupControl *pop, const gchar *email) eab_popup_control_schedule_refresh (pop); } +static void +eab_popup_control_set_vcard (EABPopupControl *pop, const gchar *vcard) +{ + g_return_if_fail (pop && EAB_IS_POPUP_CONTROL (pop)); + + /* We only allow the vcard to be set once. */ + if (pop->vcard) + return; + + g_free (pop->name); + g_free (pop->email); + + pop->name = NULL; + pop->email = NULL; + + pop->vcard = g_strdup (vcard); + + eab_popup_control_schedule_refresh (pop); +} + void eab_popup_control_construct (EABPopupControl *pop) { @@ -332,7 +356,9 @@ emit_event (EABPopupControl *pop, const char *event) static void eab_popup_control_no_matches (EABPopupControl *pop) { - if (pop->email && *pop->email) { + if (pop->vcard && *pop->vcard) + e_contact_quick_add_vcard (pop->vcard, NULL, NULL); + else if (pop->email && *pop->email) { if (pop->name && *pop->name) e_contact_quick_add (pop->name, pop->email, NULL, NULL); else @@ -361,7 +387,8 @@ eab_popup_control_query (EABPopupControl *pop) enum { PROPERTY_NAME, PROPERTY_EMAIL, - PROPERTY_TRANSITORY + PROPERTY_TRANSITORY, + PROPERTY_VCARD }; static void @@ -379,6 +406,10 @@ set_prop (BonoboPropertyBag *bag, const BonoboArg *arg, guint arg_id, CORBA_Envi eab_popup_control_set_email (pop, BONOBO_ARG_GET_STRING (arg)); break; + case PROPERTY_VCARD: + eab_popup_control_set_vcard (pop, BONOBO_ARG_GET_STRING (arg)); + break; + default: g_return_if_reached (); } @@ -403,6 +434,10 @@ get_prop (BonoboPropertyBag *bag, BonoboArg *arg, guint arg_id, CORBA_Environmen BONOBO_ARG_SET_BOOLEAN (arg, pop->transitory); break; + case PROPERTY_VCARD: + BONOBO_ARG_SET_STRING (arg, pop->vcard); + break; + default: g_return_if_reached (); } @@ -435,7 +470,11 @@ eab_popup_control_new (void) BONOBO_ARG_BOOLEAN, NULL, NULL, BONOBO_PROPERTY_READABLE); - bonobo_control_set_properties (control, bonobo_object_corba_objref (BONOBO_OBJECT (bag)), NULL); + bonobo_property_bag_add (bag, "vcard", PROPERTY_VCARD, + BONOBO_ARG_STRING, NULL, NULL, + BONOBO_PROPERTY_WRITEABLE | BONOBO_PROPERTY_READABLE); + + bonobo_control_set_properties (control, bonobo_object_corba_objref (BONOBO_OBJECT (bag)), NULL); bonobo_object_unref (BONOBO_OBJECT (bag)); addy->es = bonobo_event_source_new (); diff --git a/addressbook/gui/widgets/eab-popup-control.h b/addressbook/gui/widgets/eab-popup-control.h index 1d7ee36f0a..79e134e812 100644 --- a/addressbook/gui/widgets/eab-popup-control.h +++ b/addressbook/gui/widgets/eab-popup-control.h @@ -50,6 +50,7 @@ struct _EABPopupControl { gchar *name; gchar *email; + gchar *vcard; GtkWidget *name_widget; GtkWidget *email_widget; |