aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2008-04-18 17:12:26 +0800
committerMilan Crha <mcrha@src.gnome.org>2008-04-18 17:12:26 +0800
commit6a52b2cc19aa11400f33087280b95329f1e87ff9 (patch)
treeb00bd5397a9826b9e412fa48a9ab6c240ea3a207
parenta4f5f85400e00efa72c5a3a6a7a2b81b7bc9d268 (diff)
downloadgsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.tar
gsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.tar.gz
gsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.tar.bz2
gsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.tar.lz
gsoc2013-evolution-6a52b2cc19aa11400f33087280b95329f1e87ff9.tar.xz
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
-rw-r--r--calendar/ChangeLog12
-rw-r--r--calendar/gui/dialogs/comp-editor.c21
-rw-r--r--calendar/gui/e-cal-model-calendar.c28
-rw-r--r--calendar/gui/e-calendar-view.c26
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!");
}