diff options
author | Milan Crha <mcrha@redhat.com> | 2008-04-18 17:12:26 +0800 |
---|---|---|
committer | Milan Crha <mcrha@src.gnome.org> | 2008-04-18 17:12:26 +0800 |
commit | 6a52b2cc19aa11400f33087280b95329f1e87ff9 (patch) | |
tree | b00bd5397a9826b9e412fa48a9ab6c240ea3a207 /calendar | |
parent | a4f5f85400e00efa72c5a3a6a7a2b81b7bc9d268 (diff) | |
download | gsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.tar.gz gsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.tar.zst gsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.zip |
** Fix for bug #509923
2008-04-18 Milan Crha <mcrha@redhat.com>
** Fix for bug #509923
* gui/dialogs/comp-editor.c: (real_send_comp):
* gui/e-calendar-view.c: (e_calendar_view_modify_and_send):
* gui/e-cal-model-calendar.c: (ecmc_set_value_at):
Send changes based on the user's choice of "all instances" or
"only this instance" for recurring events.
* gui/e-cal-model-calendar.c: (ecmc_set_value_at):
Also modify objects based on the user's choice.
svn path=/trunk/; revision=35382
Diffstat (limited to 'calendar')
-rw-r--r-- | calendar/ChangeLog | 12 | ||||
-rw-r--r-- | calendar/gui/dialogs/comp-editor.c | 21 | ||||
-rw-r--r-- | calendar/gui/e-cal-model-calendar.c | 28 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.c | 26 |
4 files changed, 80 insertions, 7 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 98618e0bbf..558d9097df 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,15 @@ +2008-04-18 Milan Crha <mcrha@redhat.com> + + ** Fix for bug #509923 + + * gui/dialogs/comp-editor.c: (real_send_comp): + * gui/e-calendar-view.c: (e_calendar_view_modify_and_send): + * gui/e-cal-model-calendar.c: (ecmc_set_value_at): + Send changes based on the user's choice of "all instances" or + "only this instance" for recurring events. + * gui/e-cal-model-calendar.c: (ecmc_set_value_at): + Also modify objects based on the user's choice. + 2008-04-17 Milan Crha <mcrha@redhat.com> ** Part of fix for bug #526739 diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c index 201a321a87..0662572690 100644 --- a/calendar/gui/dialogs/comp-editor.c +++ b/calendar/gui/dialogs/comp-editor.c @@ -2609,7 +2609,7 @@ static gboolean real_send_comp (CompEditor *editor, ECalComponentItipMethod method) { CompEditorPrivate *priv; - ECalComponent *send_comp; + ECalComponent *send_comp = NULL; char *address = NULL; GList *users = NULL; @@ -2618,7 +2618,24 @@ real_send_comp (CompEditor *editor, ECalComponentItipMethod method) priv = editor->priv; - send_comp = e_cal_component_clone (priv->comp); + if (priv->mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (priv->comp)) { + /* Ensure we send the master object, not the instance only */ + icalcomponent *icalcomp = NULL; + const char *uid = NULL; + + e_cal_component_get_uid (priv->comp, &uid); + if (e_cal_get_object (priv->client, uid, NULL, &icalcomp, NULL) && icalcomp) { + send_comp = e_cal_component_new (); + if (!e_cal_component_set_icalcomponent (send_comp, icalcomp)) { + icalcomponent_free (icalcomp); + g_object_unref (send_comp); + send_comp = NULL; + } + } + } + + if (!send_comp) + send_comp = e_cal_component_clone (priv->comp); if (e_cal_component_get_vtype (send_comp) == E_CAL_COMPONENT_JOURNAL) get_users_from_memo_comp (send_comp, &users); diff --git a/calendar/gui/e-cal-model-calendar.c b/calendar/gui/e-cal-model-calendar.c index 0a91d29a16..6d22135aea 100644 --- a/calendar/gui/e-cal-model-calendar.c +++ b/calendar/gui/e-cal-model-calendar.c @@ -377,11 +377,33 @@ ecmc_set_value_at (ETableModel *etm, int col, int row, const void *value) break; } - if (e_cal_modify_object (comp_data->client, comp_data->icalcomp, CALOBJ_MOD_ALL, NULL)) { + if (e_cal_modify_object (comp_data->client, comp_data->icalcomp, mod, NULL)) { if (itip_organizer_is_user (comp, comp_data->client) && - send_component_dialog (NULL, comp_data->client, comp, FALSE)) - itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, + send_component_dialog (NULL, comp_data->client, comp, FALSE)) { + ECalComponent *send_comp = NULL; + + if (mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (comp)) { + /* Ensure we send the master object, not the instance only */ + icalcomponent *icalcomp = NULL; + const char *uid = NULL; + + e_cal_component_get_uid (comp, &uid); + if (e_cal_get_object (comp_data->client, uid, NULL, &icalcomp, NULL) && icalcomp) { + send_comp = e_cal_component_new (); + if (!e_cal_component_set_icalcomponent (send_comp, icalcomp)) { + icalcomponent_free (icalcomp); + g_object_unref (send_comp); + send_comp = NULL; + } + } + } + + itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, send_comp ? send_comp : comp, comp_data->client, NULL, NULL, NULL); + + if (send_comp) + g_object_unref (send_comp); + } } else { g_warning (G_STRLOC ": Could not modify the object!"); diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index 5bb0b1a63a..11a509aebe 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -2052,8 +2052,30 @@ e_calendar_view_modify_and_send (ECalComponent *comp, { if (e_cal_modify_object (client, e_cal_component_get_icalcomponent (comp), mod, NULL)) { if ((itip_organizer_is_user (comp, client) || itip_sentby_is_user (comp)) && - send_component_dialog (toplevel, client, comp, new)) - itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, comp, client, NULL, NULL, NULL); + send_component_dialog (toplevel, client, comp, new)) { + ECalComponent *send_comp = NULL; + + if (mod == CALOBJ_MOD_ALL && e_cal_component_is_instance (comp)) { + /* Ensure we send the master object, not the instance only */ + icalcomponent *icalcomp = NULL; + const char *uid = NULL; + + e_cal_component_get_uid (comp, &uid); + if (e_cal_get_object (client, uid, NULL, &icalcomp, NULL) && icalcomp) { + send_comp = e_cal_component_new (); + if (!e_cal_component_set_icalcomponent (send_comp, icalcomp)) { + icalcomponent_free (icalcomp); + g_object_unref (send_comp); + send_comp = NULL; + } + } + } + + itip_send_comp (E_CAL_COMPONENT_METHOD_REQUEST, send_comp ? send_comp : comp, client, NULL, NULL, NULL); + + if (send_comp) + g_object_unref (send_comp); + } } else { g_message (G_STRLOC ": Could not update the object!"); } |