diff options
author | Rodrigo Moya <rodrigo@novell.com> | 2004-08-10 22:04:20 +0800 |
---|---|---|
committer | Rodrigo Moya <rodrigo@src.gnome.org> | 2004-08-10 22:04:20 +0800 |
commit | 91841270f1f436fa751a89fcd131bcb9afb9aa43 (patch) | |
tree | d5171f20852e9b28967a4b2c1a49ee2522d452da /calendar/gui | |
parent | ab6ef39d3fe5e844009c253b4013a28ea265a690 (diff) | |
download | gsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.tar gsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.tar.gz gsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.tar.bz2 gsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.tar.lz gsoc2013-evolution-91841270f1f436fa751a89fcd131bcb9afb9aa43.tar.xz 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')
-rw-r--r-- | calendar/gui/e-calendar-view.c | 72 |
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), |