GtkWidget* gcal_event_widget_clone (GcalEventWidget *widget) { GtkWidget *new_widget; new_widget = gcal_event_widget_new (widget->context, widget->event); gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (new_widget), widget->read_only); return new_widget; }
static void add_event_to_day_array (GcalYearView *year_view, GcalEventData *event_data, GList **days_widgets_array, gint days_span) { GcalYearViewPrivate *priv; GtkWidget *child_widget; const icaltimetype *dt_start, *dt_end; icaltimetype date, second_date; gint i; gboolean child_widget_used = FALSE; priv = year_view->priv; child_widget = gcal_event_widget_new_from_data (event_data); gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (child_widget), gcal_manager_is_client_writable (priv->manager, event_data->source)); dt_start = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (child_widget)); dt_end = gcal_event_widget_peek_end_date (GCAL_EVENT_WIDGET (child_widget)); /* normalize date on each new event */ date = *(priv->start_selected_date); second_date = *(priv->start_selected_date); second_date.hour = 23; second_date.minute = 59; /* marking and cloning */ for (i = 0; i < days_span; i++) { GtkWidget *cloned_child = child_widget; gint start_comparison, end_comparison; if (i != 0) { icaltime_adjust (&date, 1, 0, 0, 0); icaltime_adjust (&second_date, 1, 0, 0, 0); } start_comparison = icaltime_compare_date (dt_start, &date); if (start_comparison <= 0) { if (child_widget_used) cloned_child = gcal_event_widget_clone (GCAL_EVENT_WIDGET (child_widget)); else child_widget_used = TRUE; } else { cloned_child = NULL; } if (cloned_child != NULL) { days_widgets_array[i] = g_list_insert_sorted (days_widgets_array[i], cloned_child, (GCompareFunc) gcal_event_widget_compare_for_single_day); end_comparison = icaltime_compare_date (&second_date, dt_end); /* XXX: hack ensuring allday events with end_date a day after */ if (end_comparison == -1 && second_date.year == dt_end->year && dt_end->is_date == 1) end_comparison = 0; if (start_comparison < 0 && end_comparison < 0) gtk_style_context_add_class (gtk_widget_get_style_context (cloned_child), "slanted"); else if (start_comparison < 0) gtk_style_context_add_class (gtk_widget_get_style_context (cloned_child), "slanted-start"); else if (end_comparison < 0) gtk_style_context_add_class (gtk_widget_get_style_context (cloned_child), "slanted-end"); if (end_comparison == 0) break; } } }