diff options
author | Chenthill Palanisamy <pchen@src.gnome.org> | 2005-06-07 05:05:18 +0800 |
---|---|---|
committer | Chenthill Palanisamy <pchen@src.gnome.org> | 2005-06-07 05:05:18 +0800 |
commit | 9f5a04beb4ce18da2609e93adbb625a51c640e56 (patch) | |
tree | 8bf8e8184fcbfa11a5ae8f5eb7ca70c851b20ecf /calendar/gui/dialogs/meeting-page.c | |
parent | f05ae97ea17e835b4f9b198e4ebeb892f33aabd9 (diff) | |
download | gsoc2013-evolution-9f5a04beb4ce18da2609e93adbb625a51c640e56.tar gsoc2013-evolution-9f5a04beb4ce18da2609e93adbb625a51c640e56.tar.gz gsoc2013-evolution-9f5a04beb4ce18da2609e93adbb625a51c640e56.tar.bz2 gsoc2013-evolution-9f5a04beb4ce18da2609e93adbb625a51c640e56.tar.lz gsoc2013-evolution-9f5a04beb4ce18da2609e93adbb625a51c640e56.tar.xz gsoc2013-evolution-9f5a04beb4ce18da2609e93adbb625a51c640e56.tar.zst gsoc2013-evolution-9f5a04beb4ce18da2609e93adbb625a51c640e56.zip |
Added support for groupwise meeting delegation.
svn path=/trunk/; revision=29463
Diffstat (limited to 'calendar/gui/dialogs/meeting-page.c')
-rw-r--r-- | calendar/gui/dialogs/meeting-page.c | 73 |
1 files changed, 66 insertions, 7 deletions
diff --git a/calendar/gui/dialogs/meeting-page.c b/calendar/gui/dialogs/meeting-page.c index 5846e81652..ee51c4e4ad 100644 --- a/calendar/gui/dialogs/meeting-page.c +++ b/calendar/gui/dialogs/meeting-page.c @@ -62,6 +62,7 @@ struct _MeetingPagePrivate { EAccountList *accounts; EMeetingAttendee *ia; char *default_address; + char *user_add; /* Glade XML data */ GladeXML *xml; @@ -78,6 +79,7 @@ struct _MeetingPagePrivate { GtkWidget *remove; GtkWidget *invite; GtkWidget *att_label; + GtkWidget *org_label; /* ListView stuff */ EMeetingStore *model; @@ -196,6 +198,7 @@ set_attendees (ECalComponent *comp, const GPtrArray *attendees) } comp_attendees = g_slist_reverse (comp_attendees); + e_cal_component_set_attendee_list (comp, comp_attendees); for (l = comp_attendees; l != NULL; l = l->next) @@ -249,6 +252,10 @@ meeting_page_finalize (GObject *object) priv->default_address = NULL; } + if (priv->user_add) { + g_free (priv->user_add); + priv->user_add = NULL; + } g_free (priv); mpage->priv = NULL; @@ -292,7 +299,17 @@ clear_widgets (MeetingPage *mpage) priv = mpage->priv; + if (COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_PAGE_DELEGATE) { + gtk_label_set_markup_with_mnemonic (priv->att_label, _("<b>Dele_gatees</b>")); + } + + if (e_cal_get_static_capability (COMP_EDITOR_PAGE (mpage)->client, CAL_STATIC_CAPABILITY_NO_ORGANIZER)) { + gtk_label_set_label (GTK_LABEL (priv->org_label), _("From:")); + gtk_widget_hide (priv->existing_organizer_btn); + } + gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (priv->organizer)->entry), priv->default_address); + gtk_label_set_text (GTK_LABEL (priv->existing_organizer), _("None")); gtk_widget_show (priv->organizer_table); @@ -308,7 +325,12 @@ sensitize_widgets (MeetingPage *mpage) gboolean read_only = FALSE; MeetingPagePrivate *priv = mpage->priv; GError *error = NULL; + guint32 flags; + gboolean delegate; + flags = COMP_EDITOR_PAGE (mpage)->flags; + delegate = flags & COMP_EDITOR_PAGE_DELEGATE; + if (!e_cal_is_read_only (COMP_EDITOR_PAGE (mpage)->client, &read_only, &error)) { if (error->code != E_CALENDAR_STATUS_BUSY) read_only = TRUE; @@ -316,9 +338,9 @@ sensitize_widgets (MeetingPage *mpage) } gtk_widget_set_sensitive (priv->organizer, !read_only); gtk_widget_set_sensitive (priv->existing_organizer_btn, !read_only); - gtk_widget_set_sensitive (priv->add, !read_only && priv->user_org); - gtk_widget_set_sensitive (priv->remove, !read_only && priv->user_org); - gtk_widget_set_sensitive (priv->invite, !read_only && priv->user_org); + gtk_widget_set_sensitive (priv->add, !read_only && (priv->user_org || delegate)); + gtk_widget_set_sensitive (priv->remove, !read_only && (priv->user_org|| delegate)); + gtk_widget_set_sensitive (priv->invite, !read_only && (priv->user_org || delegate)); gtk_widget_set_sensitive (GTK_WIDGET (priv->list_view), !read_only); } @@ -335,6 +357,7 @@ meeting_page_fill_widgets (CompEditorPage *page, ECalComponent *comp) priv->updating = TRUE; + /* Clean out old data */ if (priv->comp != NULL) g_object_unref (priv->comp); @@ -378,10 +401,13 @@ meeting_page_fill_widgets (CompEditorPage *page, ECalComponent *comp) priv->user_org = FALSE; } - if (organizer.cn != NULL) + if (e_cal_get_static_capability (COMP_EDITOR_PAGE (mpage)->client, CAL_STATIC_CAPABILITY_NO_ORGANIZER)) + string = g_strdup (priv->user_add); + else if ( organizer.cn != NULL) string = g_strdup_printf ("%s <%s>", organizer.cn, strip); else string = g_strdup (strip); + gtk_label_set_text (GTK_LABEL (priv->existing_organizer), string); g_free (string); @@ -456,7 +482,28 @@ meeting_page_fill_component (CompEditorPage *page, ECalComponent *comp) _("At least one attendee is required.")); return FALSE; } - set_attendees (comp, e_meeting_store_get_attendees (priv->model)); + + + if (COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_PAGE_DELEGATE ) { + GSList *attendee_list, *l; + int i; + GPtrArray *attendees = e_meeting_store_get_attendees (priv->model); + + e_cal_component_get_attendee_list (priv->comp, &attendee_list); + + for (i = 0; i < attendees->len; i++) { + EMeetingAttendee *ia = g_ptr_array_index (attendees, i); + ECalComponentAttendee *ca; + + ca = e_meeting_attendee_as_e_cal_component_attendee (ia); + + attendee_list = g_slist_append (attendee_list, ca); + } + e_cal_component_set_attendee_list (comp, attendee_list); + e_cal_component_free_attendee_list (attendee_list); + } else + set_attendees (comp, e_meeting_store_get_attendees (priv->model)); + return TRUE; } @@ -512,6 +559,7 @@ get_widgets (MeetingPage *mpage) /* Attendees Label */ priv->att_label = GW ("attendees-label"); + priv->org_label = GW ("org-label"); #undef GW @@ -585,6 +633,11 @@ add_clicked_cb (GtkButton *btn, MeetingPage *mpage) EMeetingAttendee *attendee; attendee = e_meeting_store_add_attendee_with_defaults (mpage->priv->model); + + if (COMP_EDITOR_PAGE (mpage)->flags & COMP_EDITOR_PAGE_DELEGATE) { + e_meeting_attendee_set_delfrom (attendee, g_strdup (mpage->priv->user_add)); + } + e_meeting_list_view_edit (mpage->priv->list_view, attendee); } @@ -855,6 +908,7 @@ meeting_page_construct (MeetingPage *mpage, EMeetingStore *ems, EAccount *def_account; GList *address_strings = NULL, *l; GtkWidget *sw; + EAccount *a; priv = mpage->priv; @@ -879,7 +933,7 @@ meeting_page_construct (MeetingPage *mpage, EMeetingStore *ems, for (it = e_list_get_iterator((EList *)priv->accounts); e_iterator_is_valid(it); e_iterator_next(it)) { - EAccount *a = (EAccount *)e_iterator_get(it); + a = (EAccount *)e_iterator_get(it); char *full; full = g_strdup_printf("%s <%s>", a->id->name, a->id->address); @@ -898,8 +952,13 @@ meeting_page_construct (MeetingPage *mpage, EMeetingStore *ems, priv->default_address = g_strdup (full); } } + + if (backend_address) + priv->user_add = backend_address; + else + priv->user_add = g_strdup (a->id->address); + g_object_unref(it); - g_free (backend_address); if (address_strings) gtk_combo_set_popdown_strings (GTK_COMBO (priv->organizer), address_strings); |