diff options
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/dialogs/select-source-dialog.c | 13 | ||||
-rw-r--r-- | calendar/gui/e-calendar-view.c | 17 |
2 files changed, 27 insertions, 3 deletions
diff --git a/calendar/gui/dialogs/select-source-dialog.c b/calendar/gui/dialogs/select-source-dialog.c index 04f6ab228a..b676cadb0a 100644 --- a/calendar/gui/dialogs/select-source-dialog.c +++ b/calendar/gui/dialogs/select-source-dialog.c @@ -156,7 +156,18 @@ select_source_dialog (GtkWindow *parent, ECalSourceType obj_type) g_list_free (icon_list); } - if (gtk_dialog_run (GTK_DIALOG (dialog)) != GTK_RESPONSE_OK) { + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { + if (selected_source) { + char *absolute_uri; + + /* set the absolute URI on the source we keep around, since the group + will be unrefed */ + absolute_uri = e_source_build_absolute_uri (selected_source); + e_source_set_absolute_uri (selected_source, (const char *) absolute_uri); + + g_free (absolute_uri); + } + } else { if (selected_source) g_object_unref (selected_source); selected_source = NULL; diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c index 46d8722fda..2150ca0993 100644 --- a/calendar/gui/e-calendar-view.c +++ b/calendar/gui/e-calendar-view.c @@ -1113,12 +1113,25 @@ transfer_item_to (ECalendarViewEvent *event, ECal *dest_client, gboolean remove_ if (!e_cal_modify_object (dest_client, event->comp_data->icalcomp, CALOBJ_MOD_ALL, NULL)) return; } else { + orig_icalcomp = icalcomponent_new_clone (event->comp_data->icalcomp); + + if (!remove_item) { + /* change the UID to avoid problems with duplicated UIDs */ + new_uid = e_cal_component_gen_uid (); + icalcomponent_set_uid (orig_icalcomp, new_uid); + + g_free (new_uid); + } + new_uid = NULL; - if (!e_cal_create_object (dest_client, event->comp_data->icalcomp, &new_uid, NULL)) + if (!e_cal_create_object (dest_client, orig_icalcomp, &new_uid, NULL)) { + icalcomponent_free (orig_icalcomp); return; + } if (new_uid) g_free (new_uid); + icalcomponent_free (orig_icalcomp); } /* remove the item from the source calendar */ @@ -1158,7 +1171,7 @@ transfer_selected_items (ECalendarView *cal_view, gboolean remove_item) e_calendar_view_set_status_message (cal_view, _("Copying items")); for (l = selected; l != NULL; l = l->next) - transfer_item_to ((ECalendarViewEvent *) l->data, dest_client, TRUE); + transfer_item_to ((ECalendarViewEvent *) l->data, dest_client, remove_item); e_calendar_view_set_status_message (cal_view, NULL); |