diff options
Diffstat (limited to 'calendar/gui/e-week-view-event-item.c')
-rw-r--r-- | calendar/gui/e-week-view-event-item.c | 97 |
1 files changed, 79 insertions, 18 deletions
diff --git a/calendar/gui/e-week-view-event-item.c b/calendar/gui/e-week-view-event-item.c index 90d8831747..ba44b7a24a 100644 --- a/calendar/gui/e-week-view-event-item.c +++ b/calendar/gui/e-week-view-event-item.c @@ -87,11 +87,14 @@ week_view_event_item_get_position (EWeekViewEventItem *event_item, { EWeekView *week_view; GnomeCanvasItem *item; + GtkWidget *parent; item = GNOME_CANVAS_ITEM (event_item); - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), E_CALENDAR_VIEW_POS_NONE); + parent = gtk_widget_get_parent (GTK_WIDGET (item->canvas)); + g_return_val_if_fail (E_IS_WEEK_VIEW (parent), E_CALENDAR_VIEW_POS_NONE); + + week_view = E_WEEK_VIEW (parent); if (x < item->x1 + E_WEEK_VIEW_EVENT_L_PAD || x >= item->x2 - E_WEEK_VIEW_EVENT_R_PAD) @@ -120,19 +123,31 @@ week_view_event_item_double_click (EWeekViewEventItem *event_item, EWeekView *week_view; EWeekViewEvent *event; GnomeCanvasItem *item; + GtkWidget *parent; item = GNOME_CANVAS_ITEM (event_item); - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); + parent = gtk_widget_get_parent (GTK_WIDGET (item->canvas)); + g_return_val_if_fail (E_IS_WEEK_VIEW (parent), FALSE); + + week_view = E_WEEK_VIEW (parent); + + if (!is_array_index_in_bounds (week_view->events, event_item->priv->event_num)) + return TRUE; event = &g_array_index ( week_view->events, EWeekViewEvent, event_item->priv->event_num); + if (!is_comp_data_valid (event)) + return TRUE; + if (week_view->editing_event_num >= 0) { EWeekViewEvent *editing; + if (!is_array_index_in_bounds (week_view->events, week_view->editing_event_num)) + return TRUE; + editing = &g_array_index ( week_view->events, EWeekViewEvent, week_view->editing_event_num); @@ -141,6 +156,7 @@ week_view_event_item_double_click (EWeekViewEventItem *event_item, * on the component, which is not on the server. */ if (editing && event && editing->comp_data == event->comp_data && + is_comp_data_valid (editing) && (!event->comp_data || !is_icalcomp_on_the_server ( event->comp_data->icalcomp, @@ -167,14 +183,24 @@ week_view_event_item_button_press (EWeekViewEventItem *event_item, EWeekViewEvent *event; EWeekViewEventSpan *span; GnomeCanvasItem *item; + GtkWidget *parent; item = GNOME_CANVAS_ITEM (event_item); - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); + parent = gtk_widget_get_parent (GTK_WIDGET (item->canvas)); + g_return_val_if_fail (E_IS_WEEK_VIEW (parent), FALSE); + + week_view = E_WEEK_VIEW (parent); + + if (!is_array_index_in_bounds (week_view->events, event_item->priv->event_num)) + return FALSE; event = &g_array_index (week_view->events, EWeekViewEvent, event_item->priv->event_num); + + if (!is_array_index_in_bounds (week_view->spans, event->spans_index + event_item->priv->span_num)) + return FALSE; + span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + event_item->priv->span_num); @@ -201,11 +227,7 @@ week_view_event_item_button_press (EWeekViewEventItem *event_item, return TRUE; } else if (bevent->button.button == 3) { -#if GTK_CHECK_VERSION(2,19,7) if (!gtk_widget_has_focus (GTK_WIDGET (week_view))) { -#else - if (!GTK_WIDGET_HAS_FOCUS (week_view)) { -#endif gtk_widget_grab_focus (GTK_WIDGET (week_view)); if (week_view->event_destroyed) { week_view->event_destroyed = FALSE; @@ -235,11 +257,14 @@ week_view_event_item_button_release (EWeekViewEventItem *event_item, { EWeekView *week_view; GnomeCanvasItem *item; + GtkWidget *parent; item = GNOME_CANVAS_ITEM (event_item); - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_val_if_fail (E_IS_WEEK_VIEW (week_view), FALSE); + parent = gtk_widget_get_parent (GTK_WIDGET (item->canvas)); + g_return_val_if_fail (E_IS_WEEK_VIEW (parent), FALSE); + + week_view = E_WEEK_VIEW (parent); if (week_view->pressed_event_num != -1 && week_view->pressed_event_num == event_item->priv->event_num @@ -368,6 +393,8 @@ week_view_event_item_draw_icons (EWeekViewEventItem *event_item, EWeekView *week_view; EWeekViewEvent *event; ECalComponent *comp; + GnomeCanvas *canvas; + GtkWidget *parent; GdkGC *gc; gint num_icons = 0, icon_x_inc; gboolean draw_reminder_icon = FALSE, draw_recurrence_icon = FALSE; @@ -376,10 +403,19 @@ week_view_event_item_draw_icons (EWeekViewEventItem *event_item, GSList *categories_pixbufs = NULL, *pixbufs; cairo_t *cr; - week_view = E_WEEK_VIEW (GTK_WIDGET (GNOME_CANVAS_ITEM (event_item)->canvas)->parent); + canvas = GNOME_CANVAS_ITEM (event_item)->canvas; + parent = gtk_widget_get_parent (GTK_WIDGET (canvas)); + week_view = E_WEEK_VIEW (parent); + + if (!is_array_index_in_bounds (week_view->events, event_item->priv->event_num)) + return; event = &g_array_index (week_view->events, EWeekViewEvent, event_item->priv->event_num); + + if (!is_comp_data_valid (event)) + return; + comp = e_cal_component_new (); e_cal_component_set_icalcomponent ( comp, icalcomponent_new_clone (event->comp_data->icalcomp)); @@ -484,6 +520,8 @@ week_view_event_item_draw_triangle (EWeekViewEventItem *event_item, ECalModel *model; EWeekView *week_view; EWeekViewEvent *event; + GnomeCanvas *canvas; + GtkWidget *parent; GdkPoint points[3]; const gchar *color_spec; gint c1, c2; @@ -492,11 +530,19 @@ week_view_event_item_draw_triangle (EWeekViewEventItem *event_item, if (!can_draw_in_region (draw_region, x, y, w, h)) return; - week_view = E_WEEK_VIEW (GTK_WIDGET (GNOME_CANVAS_ITEM (event_item)->canvas)->parent); + canvas = GNOME_CANVAS_ITEM (event_item)->canvas; + parent = gtk_widget_get_parent (GTK_WIDGET (canvas)); + week_view = E_WEEK_VIEW (parent); + + if (!is_array_index_in_bounds (week_view->events, event_item->priv->event_num)) + return; event = &g_array_index (week_view->events, EWeekViewEvent, event_item->priv->event_num); + if (!is_comp_data_valid (event)) + return; + cr = gdk_cairo_create (drawable); points[0].x = x; @@ -621,12 +667,15 @@ week_view_event_item_update (GnomeCanvasItem *item, GnomeCanvasItemClass *canvas_item_class; EWeekViewEventItem *event_item; EWeekView *week_view; + GtkWidget *parent; gint event_num, span_num; gint span_x, span_y, span_w; event_item = E_WEEK_VIEW_EVENT_ITEM (item); - week_view = E_WEEK_VIEW (GTK_WIDGET (item->canvas)->parent); - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); + parent = gtk_widget_get_parent (GTK_WIDGET (item->canvas)); + g_return_if_fail (E_IS_WEEK_VIEW (parent)); + + week_view = E_WEEK_VIEW (parent); /* Chain up to parent's update() method. */ canvas_item_class = GNOME_CANVAS_ITEM_CLASS (parent_class); @@ -666,6 +715,7 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item, EWeekViewEventSpan *span; ECalModel *model; GdkGC *gc; + GtkWidget *parent; gint x1, y1, x2, y2, time_x, time_y; gint icon_x, icon_y, time_width, min_end_time_x, max_icon_x; gint rect_x, rect_w, rect_x2 = 0; @@ -686,21 +736,32 @@ week_view_event_item_draw (GnomeCanvasItem *canvas_item, const gchar *color_spec; event_item = E_WEEK_VIEW_EVENT_ITEM (canvas_item); - week_view = E_WEEK_VIEW (GTK_WIDGET (canvas_item->canvas)->parent); - g_return_if_fail (E_IS_WEEK_VIEW (week_view)); + parent = gtk_widget_get_parent (GTK_WIDGET (canvas_item->canvas)); + g_return_if_fail (E_IS_WEEK_VIEW (parent)); + + week_view = E_WEEK_VIEW (parent); if (event_item->priv->event_num == -1 || event_item->priv->span_num == -1) return; g_return_if_fail (event_item->priv->event_num < week_view->events->len); + if (!is_array_index_in_bounds (week_view->events, event_item->priv->event_num)) + return; + event = &g_array_index (week_view->events, EWeekViewEvent, event_item->priv->event_num); + if (!is_comp_data_valid (event)) + return; + g_return_if_fail ( event->spans_index + event_item->priv->span_num < week_view->spans->len); + if (!is_array_index_in_bounds (week_view->spans, event->spans_index + event_item->priv->span_num)) + return; + span = &g_array_index (week_view->spans, EWeekViewEventSpan, event->spans_index + event_item->priv->span_num); |