Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
        }
    }
}