diff options
-rw-r--r-- | calendar/ChangeLog | 13 | ||||
-rw-r--r-- | calendar/gui/comp-util.c | 23 | ||||
-rw-r--r-- | calendar/gui/comp-util.h | 1 | ||||
-rw-r--r-- | calendar/gui/e-week-view-event-item.c | 5 | ||||
-rw-r--r-- | calendar/gui/e-week-view.c | 5 |
5 files changed, 44 insertions, 3 deletions
diff --git a/calendar/ChangeLog b/calendar/ChangeLog index 6fd1593859..f4e2ded865 100644 --- a/calendar/ChangeLog +++ b/calendar/ChangeLog @@ -1,3 +1,16 @@ +2008-06-09 Milan Crha <mcrha@redhat.com> + + ** 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. + 2008-06-04 Matthew Barnes <mbarnes@redhat.com> ** Fixes security vulnerabilities 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 @@ -248,6 +248,29 @@ cal_comp_is_on_server (ECalComponent *comp, ECal *client) } /** + * 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: * * Creates a new VEVENT component and adds any default alarms to it as set in 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); |