aboutsummaryrefslogtreecommitdiffstats
path: root/calendar/gui/e-calendar-view.c
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo@novell.com>2004-08-10 22:04:20 +0800
committerRodrigo Moya <rodrigo@src.gnome.org>2004-08-10 22:04:20 +0800
commit91841270f1f436fa751a89fcd131bcb9afb9aa43 (patch)
treed5171f20852e9b28967a4b2c1a49ee2522d452da /calendar/gui/e-calendar-view.c
parentab6ef39d3fe5e844009c253b4013a28ea265a690 (diff)
downloadgsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.tar.gz
gsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.tar.zst
gsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.zip
re-added 'Make this occurrence movable' menu item, gone by mistake.
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. svn path=/trunk/; revision=26861
Diffstat (limited to 'calendar/gui/e-calendar-view.c')
-rw-r--r--calendar/gui/e-calendar-view.c72
1 files changed, 72 insertions, 0 deletions
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),