aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--calendar/ChangeLog13
-rw-r--r--calendar/gui/comp-util.c23
-rw-r--r--calendar/gui/comp-util.h1
-rw-r--r--calendar/gui/e-week-view-event-item.c5
-rw-r--r--calendar/gui/e-week-view.c5
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);