aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog42
-rw-r--r--calendar/gui/e-calendar-view.c72
2 files changed, 96 insertions, 18 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog
index f3d8cc9184..2c7594b6df 100644
--- a/calendar/ChangeLog
+++ b/calendar/ChangeLog
@@ -1,31 +1,37 @@
+2004-08-09 Rodrigo Moya <rodrigo@novell.com>
+
+ * gui/e-calendar-view.c: re-added 'Make this occurrence movable' menu
+ item, gone by mistake.
+ (on_unrecur_appointment): new callback for the new menu item.
+
2004-08-06 JP Rosevear <jpr@ximian.com>
- Fixes #62452
+ Fixes #62452
- * gui/e-itip-control.c (find_my_address): take option to retrieve
- current status as well, actually look for the delegator in the
- list so we can retrieve status there as well
- (show_current_event): use find_my_address to get the status so we
- properly handle not finding the address in the list of attendees
- (show_current): pass extra param
- (ok_clicked_cb): ditto
+ * gui/e-itip-control.c (find_my_address): take option to retrieve
+ current status as well, actually look for the delegator in the
+ list so we can retrieve status there as well
+ (show_current_event): use find_my_address to get the status so we
+ properly handle not finding the address in the list of attendees
+ (show_current): pass extra param
+ (ok_clicked_cb): ditto
2004-08-06 JP Rosevear <jpr@ximian.com>
- Fixes #62021
+ Fixes #62021
- * gui/dialogs/event-page.c (source_changed_cb): set the default
- timezone
+ * gui/dialogs/event-page.c (source_changed_cb): set the default
+ timezone
- * gui/e-itip-control.c (start_calendar_server): set the default
- timezone
-
- * gui/calendar-component.c (setup_create_ecal): set the default
- timezone, as the component view is not alive and hence has not set
- it
+ * gui/e-itip-control.c (start_calendar_server): set the default
+ timezone
+ * gui/calendar-component.c (setup_create_ecal): set the default
+ timezone, as the component view is not alive and hence has not set
+ it
+
* gui/tasks-component.c (setup_create_ecal): ditto
-
+
2004-08-05 Parthasarathi S A <sparthasarathi@novell.com>
Fix for bug #61673.
diff --git a/calendar/gui/e-calendar-view.c b/calendar/gui/e-calendar-view.c
index 0cb5cb9f3d..c22a4125d4 100644
--- a/calendar/gui/e-calendar-view.c
+++ b/calendar/gui/e-calendar-view.c
@@ -1255,6 +1255,77 @@ on_delete_appointment (GtkWidget *widget, gpointer user_data)
}
static void
+on_unrecur_appointment (GtkWidget *widget, gpointer user_data)
+{
+ ECalendarView *cal_view;
+ ECalendarViewEvent *event;
+ ECalComponent *comp, *new_comp;
+ ECalComponentDateTime date;
+ struct icaltimetype itt;
+ GList *selected;
+ char *new_uid;
+
+ cal_view = E_CALENDAR_VIEW (user_data);
+
+ selected = e_calendar_view_get_selected_events (cal_view);
+ if (!selected)
+ return;
+
+ event = (ECalendarViewEvent *) selected->data;
+
+ date.value = &itt;
+ date.tzid = NULL;
+
+ /* For the recurring object, we add an exception to get rid of the
+ instance. */
+
+ comp = e_cal_component_new ();
+ e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (event->comp_data->icalcomp));
+ cal_comp_util_add_exdate (comp, event->comp_data->instance_start, e_calendar_view_get_timezone (cal_view));
+ e_cal_component_commit_sequence (comp);
+
+ /* For the unrecurred instance we duplicate the original object,
+ create a new uid for it, get rid of the recurrence rules, and set
+ the start & end times to the instances times. */
+ new_comp = e_cal_component_new ();
+ e_cal_component_set_icalcomponent (new_comp, icalcomponent_new_clone (event->comp_data->icalcomp));
+ new_uid = e_cal_component_gen_uid ();
+ e_cal_component_set_uid (new_comp, new_uid);
+ g_free (new_uid);
+ e_cal_component_set_rdate_list (new_comp, NULL);
+ e_cal_component_set_rrule_list (new_comp, NULL);
+ e_cal_component_set_exdate_list (new_comp, NULL);
+ e_cal_component_set_exrule_list (new_comp, NULL);
+
+ date.value = &itt;
+ date.tzid = icaltimezone_get_tzid (e_calendar_view_get_timezone (cal_view));
+
+ *date.value = icaltime_from_timet_with_zone (event->comp_data->instance_start, FALSE,
+ e_calendar_view_get_timezone (cal_view));
+ e_cal_component_set_dtstart (new_comp, &date);
+ *date.value = icaltime_from_timet_with_zone (event->comp_data->instance_end, FALSE,
+ e_calendar_view_get_timezone (cal_view));
+ e_cal_component_set_dtend (new_comp, &date);
+ e_cal_component_commit_sequence (new_comp);
+
+ /* Now update both ECalComponents. Note that we do this last since at
+ * present the updates happen synchronously so our event may disappear.
+ */
+ if (!e_cal_modify_object (event->comp_data->client, e_cal_component_get_icalcomponent (comp), CALOBJ_MOD_THIS, NULL))
+ g_message ("e_day_view_on_unrecur_appointment(): Could not update the object!");
+
+ g_object_unref (comp);
+
+ if (!e_cal_create_object (event->comp_data->client, e_cal_component_get_icalcomponent (new_comp), &new_uid, NULL))
+ g_message ("e_day_view_on_unrecur_appointment(): Could not update the object!");
+ else
+ g_free (new_uid);
+
+ g_object_unref (new_comp);
+ g_list_free (selected);
+}
+
+static void
on_delete_occurrence (GtkWidget *widget, gpointer user_data)
{
ECalendarView *cal_view;
@@ -1378,6 +1449,7 @@ static EPopupMenu child_items [] = {
E_POPUP_SEPARATOR,
E_POPUP_ITEM (N_("_Delete"), GTK_SIGNAL_FUNC (on_delete_appointment), MASK_EDITABLE | MASK_SINGLE | MASK_EDITING),
+ E_POPUP_ITEM (N_("Make this Occurrence _Movable"), GTK_SIGNAL_FUNC (on_unrecur_appointment), MASK_EDITABLE | MASK_RECURRING | MASK_EDITING | MASK_INSTANCE),
E_POPUP_ITEM (N_("Delete this _Occurrence"), GTK_SIGNAL_FUNC (on_delete_occurrence), MASK_RECURRING | MASK_EDITING | MASK_EDITABLE),
E_POPUP_ITEM (N_("Delete _All Occurrences"), GTK_SIGNAL_FUNC (on_delete_appointment), MASK_RECURRING | MASK_EDITING | MASK_EDITABLE),