From 5ab2df3c08cfc14b0388e5042fa4221f81ac54a5 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Tue, 25 Jun 2002 13:11:47 +0000 Subject: add back proto 2002-06-25 JP Rosevear * gui/dialogs/comp-editor-page.h: add back proto * gui/dialogs/comp-editor-page.c (comp_editor_page_notify_needs_send): add page needs_send signal * gui/e-meeting-time-sel.c (e_meeting_time_selector_on_invite_others_button_draw): check to see if the button should be sensitive when drawing (e_meeting_time_selector_construct): listen for the button draw signal * cal-util/cal-component.c (cal_component_strip_errors): remove X-LIC-ERROR x properties * cal-util/cal-component.h: new proto * gui/dialogs/meeting-page.c (change_clicked_cb): set needs_send to true (meeting_page_fill_widgets): set up gui based on if the user or someone else is the organizer (meeting_page_construct): read the addresses here for the combo box (get_widgets): explicitly set the value in list values * gui/dialogs/event-editor.c (set_menu_sens): base this on the exist org and user org values of the comp editor (event_editor_edit_comp): set up editable row restrictions on the meeting model if the user is not an organizer, and don't set needs send if we aren't the organizer initially (model_row_changed_cb): set needs_send to true (row_count_changed_cb): ditto * gui/dialogs/meeting-page.glade: update gui * gui/dialogs/comp-editor.c (save_comp_with_send): if the user is not the organizer, REPLY rather than REQUEST (comp_editor_set_existing_org): accessor (comp_editor_get_existing_org): ditto (comp_editor_set_user_org): ditto (comp_editor_get_user_org): ditto (real_edit_comp): determine if there is an existing organizer and if the organizers is a user (page_changed_cb): warn the user that changes may be discarded (page_summary_changed_cb): ditto (page_dates_changed_cb): ditto * gui/dialogs/comp-editor.h: new protos * gui/itip-utils.c (itip_organizer_is_user): determine if the organizer of a component is a user (itip_sentby_is_user): same for sentby field of organizer (comp_sentby): use above routines instead (comp_compliant): strip all X-LIC-ERROR fields generated by libical * gui/e-meeting-model.c (is_cell_editable): if there is a list of editable rows, allow only the status column of those rows to be edited (init): init edit_rows (e_meeting_model_restricted_add): add an editable row to the model (e_meeting_model_restricted_remove): remove an editable row (e_meeting_model_restricted_clear): clear all editable rows (e_meeting_model_etable_click_to_add): set the click to add arg on all tables (e_meeting_model_etable_from_model): track the tables (table_destroy_list_cb): remove the table being destroyed from the list (table_destroy_state_cb): remove the table being destroyed from the list * gui/e-meeting-model.h: new protos * gui/e-itip-control.c (update_attendee_status): kill warning svn path=/trunk/; revision=17274 --- calendar/gui/itip-utils.c | 83 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 18 deletions(-) (limited to 'calendar/gui/itip-utils.c') diff --git a/calendar/gui/itip-utils.c b/calendar/gui/itip-utils.c index 7e9efdbb57..db070c8a4f 100644 --- a/calendar/gui/itip-utils.c +++ b/calendar/gui/itip-utils.c @@ -182,6 +182,66 @@ itip_addresses_free (GList *addresses) g_list_free (addresses); } +gboolean +itip_organizer_is_user (CalComponent *comp) +{ + CalComponentOrganizer organizer; + GList *addresses, *l; + const char *strip; + gboolean user_org = FALSE; + + if (!cal_component_has_organizer (comp)) + return FALSE; + + cal_component_get_organizer (comp, &organizer); + if (organizer.value != NULL) { + strip = itip_strip_mailto (organizer.value); + + addresses = itip_addresses_get (); + for (l = addresses; l != NULL; l = l->next) { + ItipAddress *a = l->data; + + if (!g_strcasecmp (a->address, strip)) { + user_org = TRUE; + break; + } + } + itip_addresses_free (addresses); + } + + return user_org; +} + +gboolean +itip_sentby_is_user (CalComponent *comp) +{ + CalComponentOrganizer organizer; + GList *addresses, *l; + const char *strip; + gboolean user_sentby = FALSE; + + if (!cal_component_has_organizer (comp)) + return FALSE; + + cal_component_get_organizer (comp, &organizer); + if (organizer.sentby != NULL) { + strip = itip_strip_mailto (organizer.sentby); + + addresses = itip_addresses_get (); + for (l = addresses; l != NULL; l = l->next) { + ItipAddress *a = l->data; + + if (!g_strcasecmp (a->address, strip)) { + user_sentby = TRUE; + break; + } + } + itip_addresses_free (addresses); + } + + return user_sentby; +} + const gchar * itip_strip_mailto (const gchar *address) { @@ -283,7 +343,6 @@ comp_subject (CalComponentItipMethod method, CalComponent *comp) CalComponentText caltext; const char *description, *prefix = NULL; GSList *alist; - int *sequence; CORBA_char *subject; cal_component_get_summary (comp, &caltext); @@ -541,9 +600,6 @@ static void comp_sentby (CalComponent *comp) { CalComponentOrganizer organizer; - GList *addresses, *l; - const char *strip; - gboolean is_user = FALSE; cal_component_get_organizer (comp, &organizer); if (!organizer.value) { @@ -560,19 +616,8 @@ comp_sentby (CalComponent *comp) return; } - - strip = itip_strip_mailto (organizer.value); - addresses = itip_addresses_get (); - for (l = addresses; l != NULL; l = l->next) { - ItipAddress *a = l->data; - - if (!strcmp (a->address, strip)) { - is_user = TRUE; - break; - } - } - if (!is_user) { + if (!itip_organizer_is_user (comp) && !itip_sentby_is_user (comp)) { ItipAddress *a = itip_addresses_get_default (); organizer.value = g_strdup (organizer.value); @@ -588,8 +633,6 @@ comp_sentby (CalComponent *comp) g_free ((char *)organizer.language); itip_address_free (a); } - - itip_addresses_free (addresses); } static CalComponent * comp_minimal (CalComponent *comp, gboolean attendee) @@ -682,6 +725,9 @@ comp_compliant (CalComponentItipMethod method, CalComponent *comp) /* We delete incoming alarms anyhow, and this helps with outlook */ cal_component_remove_all_alarms (clone); + /* Strip X-LIC-ERROR stuff */ + cal_component_strip_errors (clone); + /* Comply with itip spec */ switch (method) { case CAL_COMPONENT_METHOD_PUBLISH: @@ -695,6 +741,7 @@ comp_compliant (CalComponentItipMethod method, CalComponent *comp) comp_sentby (clone); break; case CAL_COMPONENT_METHOD_REPLY: + comp_minimal (clone, TRUE); break; case CAL_COMPONENT_METHOD_ADD: break; -- cgit v1.2.3