From 7d4f83689a512f3af1a4002a1567ffbb2762ebb9 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Mon, 9 Jun 2008 10:09:05 +0000 Subject: ** Fix for bug #536813 2008-06-09 Milan Crha ** Fix for bug #536813 * gui/comp-util.h: (is_icalcomp_on_the_server): * gui/comp-util.c: (is_icalcomp_on_the_server): Similar helper function as cal_comp_is_on_server only the parameter is icalcomponent. * gui/e-week-view-event-item.c: (e_week_view_event_item_double_click): * gui/e-week-view.c: (e_week_view_on_text_item_event): Do not start to edit the event on the double click if the event is not on the server yet. Storing the event can cause the renumbering events so the result can be that the edited event would be different. svn path=/trunk/; revision=35618 --- calendar/gui/comp-util.c | 23 +++++++++++++++++++++++ calendar/gui/comp-util.h | 1 + calendar/gui/e-week-view-event-item.c | 5 ++--- calendar/gui/e-week-view.c | 5 +++++ 4 files changed, 31 insertions(+), 3 deletions(-) (limited to 'calendar/gui') diff --git a/calendar/gui/comp-util.c b/calendar/gui/comp-util.c index e1aacc7c9e..392f991a84 100644 --- a/calendar/gui/comp-util.c +++ b/calendar/gui/comp-util.c @@ -247,6 +247,29 @@ cal_comp_is_on_server (ECalComponent *comp, ECal *client) return FALSE; } +/** + * is_icalcomp_on_the_server: + * same as @cal_comp_is_on_server, only the component parameter is icalcomponent, not the ECalComponent. + **/ +gboolean +is_icalcomp_on_the_server (icalcomponent *icalcomp, ECal *client) +{ + gboolean on_server; + ECalComponent *comp; + + if (!icalcomp || !client || !icalcomponent_get_uid (icalcomp)) + return FALSE; + + comp = e_cal_component_new (); + e_cal_component_set_icalcomponent (comp, icalcomponent_new_clone (icalcomp)); + + on_server = cal_comp_is_on_server (comp, client); + + g_object_unref (comp); + + return on_server; +} + /** * cal_comp_event_new_with_defaults: * diff --git a/calendar/gui/comp-util.h b/calendar/gui/comp-util.h index 5949b2d318..fe89ee11c4 100644 --- a/calendar/gui/comp-util.h +++ b/calendar/gui/comp-util.h @@ -41,6 +41,7 @@ gint cal_comp_util_get_n_icons (ECalComponent *comp); gboolean cal_comp_is_on_server (ECalComponent *comp, ECal *client); +gboolean is_icalcomp_on_the_server (icalcomponent *icalcomp, ECal *client); ECalComponent *cal_comp_event_new_with_defaults (ECal *client); ECalComponent *cal_comp_event_new_with_current_time (ECal *client, gboolean all_day); diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c index 0efeef27ee..e5e079c04d 100644 --- a/calendar/gui/e-week-view-event-item.c +++ b/calendar/gui/e-week-view-event-item.c @@ -1079,7 +1079,6 @@ e_week_view_event_item_button_release (EWeekViewEventItem *wveitem, return FALSE; } - static gboolean e_week_view_event_item_double_click (EWeekViewEventItem *wveitem, GdkEvent *bevent) @@ -1099,8 +1098,8 @@ e_week_view_event_item_double_click (EWeekViewEventItem *wveitem, if (week_view->editing_event_num >= 0) { EWeekViewEvent *editing = &g_array_index (week_view->events, EWeekViewEvent, week_view->editing_event_num); - /* do not call edit of the component, if double clicked on the same component - the event is spread into more days */ - if (editing && event && editing->comp_data == event->comp_data) + /* do not call edit of the component, if double clicked on the component, which is not on the server */ + if (editing && event && editing->comp_data == event->comp_data && (!event->comp_data || !is_icalcomp_on_the_server (event->comp_data->icalcomp, event->comp_data->client))) return TRUE; } diff --git a/calendar/gui/e-week-view.c b/calendar/gui/e-week-view.c index b1290069f7..442003320d 100644 --- a/calendar/gui/e-week-view.c +++ b/calendar/gui/e-week-view.c @@ -3100,6 +3100,11 @@ e_week_view_on_text_item_event (GnomeCanvasItem *item, event = &g_array_index (week_view->events, EWeekViewEvent, event_num); + /* if we started to editing new item on the canvas, then do not open editing dialog until it's saved, + because the save of the event recalculates event numbers and you can edit different one */ + if (!is_icalcomp_on_the_server (event->comp_data->icalcomp, event->comp_data->client)) + return TRUE; + e_calendar_view_edit_appointment (E_CALENDAR_VIEW (week_view), event->comp_data->client, event->comp_data->icalcomp, FALSE); -- cgit