aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/dialogs/meeting-page.c
diff options
context:
space:
mode:
authorJP Rosevear <jpr@ximian.com>2001-08-09 06:16:08 +0800
committerJP Rosevear <jpr@src.gnome.org>2001-08-09 06:16:08 +0800
commitec730bb5f70e7600085befbd3bf9cc334187973e (patch)
treed216848c8661ba84e221ead9f0ef59711c275465 /calendar/gui/dialogs/meeting-page.c
parente239e423ddddf3a5e0613f03aef8e8381e6f753c (diff)
downloadgsoc2013-evolution-ec730bb5f70e7600085befbd3bf9cc334187973e.tar
gsoc2013-evolution-ec730bb5f70e7600085befbd3bf9cc334187973e.tar.gz
gsoc2013-evolution-ec730bb5f70e7600085befbd3bf9cc334187973e.tar.bz2
gsoc2013-evolution-ec730bb5f70e7600085befbd3bf9cc334187973e.tar.lz
gsoc2013-evolution-ec730bb5f70e7600085befbd3bf9cc334187973e.tar.xz
gsoc2013-evolution-ec730bb5f70e7600085befbd3bf9cc334187973e.tar.zst
gsoc2013-evolution-ec730bb5f70e7600085befbd3bf9cc334187973e.zip
set the attendees of a component (meeting_page_fill_component): use above
2001-08-08 JP Rosevear <jpr@ximian.com> * gui/dialogs/meeting-page.c (set_attendees): set the attendees of a component (meeting_page_fill_component): use above (meeting_page_get_cancel_comp): return a comp with the attendees to be cancelled * gui/dialogs/meeting-page.h: get a component that will be sent as a cancellation * gui/dialogs/event-editor.c (event_editor_class_init): override send_comp class method (event_editor_send_comp): send cancellation notices to deleted attendees (refresh_meeting_cmd): save before send (forward_cmd): ditto * gui/dialogs/comp-editor.c (comp_editor_class_init): set default send_comp method (real_send_comp): do the real work (comp_editor_send_comp): call class method (save_comp): don't do any sending (save_comp_with_send): save and send here (prompt_to_save_changes): use above (save_close_cmd): ditto * gui/dialogs/comp-editor.h: add virtual function svn path=/trunk/; revision=11803
Diffstat (limited to 'calendar/gui/dialogs/meeting-page.c')
-rw-r--r--calendar/gui/dialogs/meeting-page.c105
1 files changed, 78 insertions, 27 deletions
diff --git a/calendar/gui/dialogs/meeting-page.c b/calendar/gui/dialogs/meeting-page.c
index 4e88d4194a..161ae07255 100644
--- a/calendar/gui/dialogs/meeting-page.c
+++ b/calendar/gui/dialogs/meeting-page.c
@@ -95,6 +95,9 @@ struct _MeetingPagePrivate {
/* Lists of attendees */
GSList *attendees;
GSList *deleted_attendees;
+
+ /* To use in case of cancellation */
+ CalComponent *comp;
/* List of identities */
GList *addresses;
@@ -214,8 +217,12 @@ meeting_page_init (MeetingPage *mpage)
priv = g_new0 (MeetingPagePrivate, 1);
mpage->priv = priv;
- priv->xml = NULL;
+ priv->attendees = NULL;
+ priv->deleted_attendees = NULL;
+ priv->comp = NULL;
+
+ priv->xml = NULL;
priv->main = NULL;
priv->invite = NULL;
@@ -226,6 +233,37 @@ meeting_page_init (MeetingPage *mpage)
}
static void
+set_attendees (CalComponent *comp, GSList *attendees)
+{
+ GSList *comp_attendees = NULL;
+ GSList *l;
+
+ for (l = attendees; l != NULL; l = l->next) {
+ struct attendee *attendee = l->data;
+ CalComponentAttendee *att = g_new0 (CalComponentAttendee, 1);
+
+
+ att->value = attendee->address;
+ att->member = (attendee->member && *attendee->member) ? attendee->member : NULL;
+ att->cutype= attendee->cutype;
+ att->role = attendee->role;
+ att->status = attendee->status;
+ att->rsvp = attendee->rsvp;
+ att->delto = (attendee->delto && *attendee->delto) ? attendee->delto : NULL;
+ att->delfrom = (attendee->delfrom && *attendee->delfrom) ? attendee->delfrom : NULL;
+ att->sentby = (attendee->sentby && *attendee->sentby) ? attendee->sentby : NULL;
+ att->cn = (attendee->cn && *attendee->cn) ? attendee->cn : NULL;
+ att->language = (attendee->language && *attendee->language) ? attendee->language : NULL;
+
+ comp_attendees = g_slist_prepend (comp_attendees, att);
+
+ }
+ comp_attendees = g_slist_reverse (comp_attendees);
+ cal_component_set_attendee_list (comp, comp_attendees);
+ g_slist_free (comp_attendees);
+}
+
+static void
cleanup_attendees (GSList *attendees)
{
GSList *l;
@@ -262,6 +300,9 @@ meeting_page_destroy (GtkObject *object)
mpage = MEETING_PAGE (object);
priv = mpage->priv;
+ if (priv->comp != NULL)
+ gtk_object_unref (GTK_OBJECT (priv->comp));
+
cleanup_attendees (priv->attendees);
cleanup_attendees (priv->deleted_attendees);
@@ -352,6 +393,10 @@ meeting_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
priv->updating = TRUE;
/* Clean out old data */
+ if (priv->comp != NULL)
+ gtk_object_unref (GTK_OBJECT (priv->comp));
+ priv->comp = NULL;
+
cleanup_attendees (priv->attendees);
cleanup_attendees (priv->deleted_attendees);
priv->attendees = NULL;
@@ -360,6 +405,9 @@ meeting_page_fill_widgets (CompEditorPage *page, CalComponent *comp)
/* Clean the screen */
clear_widgets (mpage);
+ /* Component for cancellation */
+ priv->comp = cal_component_clone (comp);
+
/* Organizer */
cal_component_get_organizer (comp, &organizer);
priv->addresses = itip_addresses_get ();
@@ -432,7 +480,6 @@ meeting_page_fill_component (CompEditorPage *page, CalComponent *comp)
MeetingPage *mpage;
MeetingPagePrivate *priv;
CalComponentOrganizer organizer = {NULL, NULL, NULL, NULL};
- GSList *attendees = NULL, *l;
mpage = MEETING_PAGE (page);
priv = mpage->priv;
@@ -474,30 +521,8 @@ meeting_page_fill_component (CompEditorPage *page, CalComponent *comp)
g_free (addr);
g_free (cn);
}
-
- for (l = priv->attendees; l != NULL; l = l->next) {
- struct attendee *attendee = l->data;
- CalComponentAttendee *att = g_new0 (CalComponentAttendee, 1);
-
-
- att->value = attendee->address;
- att->member = (attendee->member && *attendee->member) ? attendee->member : NULL;
- att->cutype= attendee->cutype;
- att->role = attendee->role;
- att->status = attendee->status;
- att->rsvp = attendee->rsvp;
- att->delto = (attendee->delto && *attendee->delto) ? attendee->delto : NULL;
- att->delfrom = (attendee->delfrom && *attendee->delfrom) ? attendee->delfrom : NULL;
- att->sentby = (attendee->sentby && *attendee->sentby) ? attendee->sentby : NULL;
- att->cn = (attendee->cn && *attendee->cn) ? attendee->cn : NULL;
- att->language = (attendee->language && *attendee->language) ? attendee->language : NULL;
-
- attendees = g_slist_prepend (attendees, att);
-
- }
- attendees = g_slist_reverse (attendees);
- cal_component_set_attendee_list (comp, attendees);
- g_slist_free (attendees);
+
+ set_attendees (comp, priv->attendees);
}
@@ -1403,7 +1428,7 @@ popup_delete_cb (GtkWidget *widget, gpointer data)
a = g_slist_nth_data (priv->attendees, priv->row);
/* If this was a delegatee, no longer delegate */
- if (a->delfrom != NULL) {
+ if (a->delfrom != NULL && *a->delfrom != '\0') {
struct attendee *b;
b = find_match (mpage, a->delfrom, &pos);
@@ -1537,3 +1562,29 @@ meeting_page_new (void)
return mpage;
}
+/**
+ * meeting_page_get_cancel_comp:
+ * @mpage:
+ *
+ *
+ *
+ * Return value:
+ **/
+CalComponent *
+meeting_page_get_cancel_comp (MeetingPage *mpage)
+{
+ MeetingPagePrivate *priv;
+
+ g_return_val_if_fail (mpage != NULL, NULL);
+ g_return_val_if_fail (IS_MEETING_PAGE (mpage), NULL);
+
+ priv = mpage->priv;
+
+ if (priv->deleted_attendees == NULL)
+ return NULL;
+
+ set_attendees (priv->comp, priv->deleted_attendees);
+
+ return cal_component_clone (priv->comp);
+}
+