event-widget: use GcalEvent internally

This saves a lot of code, and is much saner to maintain.
This commit is contained in:
Georges Basile Stavracas Neto
2016-02-14 12:17:37 -02:00
parent 2ded8b3147
commit 0ec0ea8121
13 changed files with 649 additions and 791 deletions
+1 -1
View File
@@ -392,7 +392,7 @@
<property name="can_focus">True</property> <property name="can_focus">True</property>
<property name="hexpand">True</property> <property name="hexpand">True</property>
<signal name="activate" handler="create_event" object="GcalWindow" swapped="yes"/> <signal name="activate" handler="create_event" object="GcalWindow" swapped="yes"/>
<signal name="notify::text" handler="new_event_entry_text_changed" object="GcalWindow" swapped="yes"/> <signal name="notify::text" handler="new_event_entry_text_changed" object="GcalWindow" swapped="no"/>
</object> </object>
<packing> <packing>
<property name="left_attach">0</property> <property name="left_attach">0</property>
+8 -7
View File
@@ -793,12 +793,12 @@ gcal_edit_dialog_set_event_is_new (GcalEditDialog *dialog,
} }
void void
gcal_edit_dialog_set_event_data (GcalEditDialog *dialog, gcal_edit_dialog_set_event (GcalEditDialog *dialog,
GcalEventData *data) GcalEvent *event)
{ {
GdkRGBA color; GdkRGBA color;
GdkPixbuf *pix; GdkPixbuf *pix;
ESource *source;
const gchar *const_text = NULL; const gchar *const_text = NULL;
gboolean all_day; gboolean all_day;
@@ -810,13 +810,14 @@ gcal_edit_dialog_set_event_data (GcalEditDialog *dialog,
ECalComponentDateTime dtend; ECalComponentDateTime dtend;
all_day = FALSE; all_day = FALSE;
source = gcal_event_get_source (event);
dialog->setting_event = TRUE; dialog->setting_event = TRUE;
g_set_object (&dialog->source, data->source); g_set_object (&dialog->source, source);
g_clear_object (&dialog->component); g_clear_object (&dialog->component);
dialog->component = e_cal_component_clone (data->event_component); dialog->component = e_cal_component_clone (gcal_event_get_component (event));
g_clear_pointer (&dialog->source_uid, g_free); g_clear_pointer (&dialog->source_uid, g_free);
dialog->source_uid = e_source_dup_uid (dialog->source); dialog->source_uid = e_source_dup_uid (dialog->source);
@@ -850,14 +851,14 @@ gcal_edit_dialog_set_event_data (GcalEditDialog *dialog,
gtk_entry_set_text (GTK_ENTRY (dialog->summary_entry), e_summary.value); gtk_entry_set_text (GTK_ENTRY (dialog->summary_entry), e_summary.value);
/* dialog titlebar's title & subtitle */ /* dialog titlebar's title & subtitle */
get_color_name_from_source (data->source, &color); get_color_name_from_source (source, &color);
pix = gcal_get_pixbuf_from_color (&color, 16); pix = gcal_get_pixbuf_from_color (&color, 16);
gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix); gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix);
g_object_unref (pix); g_object_unref (pix);
gtk_header_bar_set_subtitle (GTK_HEADER_BAR (dialog->titlebar), gtk_header_bar_set_subtitle (GTK_HEADER_BAR (dialog->titlebar),
e_source_get_display_name (data->source)); e_source_get_display_name (source));
/* retrieve start and end dates */ /* retrieve start and end dates */
e_cal_component_get_dtstart (dialog->component, &dtstart); e_cal_component_get_dtstart (dialog->component, &dtstart);
+3 -2
View File
@@ -20,6 +20,7 @@
#ifndef __GCAL_EDIT_DIALOG_H__ #ifndef __GCAL_EDIT_DIALOG_H__
#define __GCAL_EDIT_DIALOG_H__ #define __GCAL_EDIT_DIALOG_H__
#include "gcal-event.h"
#include "gcal-manager.h" #include "gcal-manager.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
@@ -39,8 +40,8 @@ GtkWidget* gcal_edit_dialog_new (gboolean format_2
void gcal_edit_dialog_set_event_is_new (GcalEditDialog *dialog, void gcal_edit_dialog_set_event_is_new (GcalEditDialog *dialog,
gboolean event_is_new); gboolean event_is_new);
void gcal_edit_dialog_set_event_data (GcalEditDialog *dialog, void gcal_edit_dialog_set_event (GcalEditDialog *dialog,
GcalEventData *data); GcalEvent *event);
void gcal_edit_dialog_set_manager (GcalEditDialog *dialog, void gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
GcalManager *manager); GcalManager *manager);
+358 -567
View File
File diff suppressed because it is too large Load Diff
+14 -36
View File
@@ -20,6 +20,7 @@
#ifndef __GCAL_EVENT_WIDGET_H__ #ifndef __GCAL_EVENT_WIDGET_H__
#define __GCAL_EVENT_WIDGET_H__ #define __GCAL_EVENT_WIDGET_H__
#include "gcal-event.h"
#include "gcal-manager.h" #include "gcal-manager.h"
#include <gtk/gtk.h> #include <gtk/gtk.h>
@@ -32,56 +33,33 @@ G_BEGIN_DECLS
G_DECLARE_FINAL_TYPE (GcalEventWidget, gcal_event_widget, GCAL, EVENT_WIDGET, GtkWidget) G_DECLARE_FINAL_TYPE (GcalEventWidget, gcal_event_widget, GCAL, EVENT_WIDGET, GtkWidget)
GtkWidget* gcal_event_widget_new (gchar *uuid); GtkWidget* gcal_event_widget_new (GcalEvent *event);
GtkWidget* gcal_event_widget_new_from_data (GcalEventData *data); GcalEvent* gcal_event_widget_get_event (GcalEventWidget *self);
GtkWidget* gcal_event_widget_clone (GcalEventWidget *widget); GDateTime* gcal_event_widget_get_date_start (GcalEventWidget *self);
const gchar* gcal_event_widget_peek_uuid (GcalEventWidget *event); void gcal_event_widget_set_date_start (GcalEventWidget *self,
GDateTime *date_start);
GDateTime* gcal_event_widget_get_date_end (GcalEventWidget *self);
void gcal_event_widget_set_date_end (GcalEventWidget *self,
GDateTime *date_end);
void gcal_event_widget_set_read_only (GcalEventWidget *event, void gcal_event_widget_set_read_only (GcalEventWidget *event,
gboolean read_only); gboolean read_only);
gboolean gcal_event_widget_get_read_only (GcalEventWidget *event); gboolean gcal_event_widget_get_read_only (GcalEventWidget *event);
void gcal_event_widget_set_date (GcalEventWidget *event,
const icaltimetype *date);
icaltimetype* gcal_event_widget_get_date (GcalEventWidget *event);
const icaltimetype* gcal_event_widget_peek_start_date (GcalEventWidget *event);
void gcal_event_widget_set_end_date (GcalEventWidget *event,
const icaltimetype *date);
icaltimetype* gcal_event_widget_get_end_date (GcalEventWidget *event);
const icaltimetype* gcal_event_widget_peek_end_date (GcalEventWidget *event);
void gcal_event_widget_set_summary (GcalEventWidget *event,
gchar *summary);
gchar* gcal_event_widget_get_summary (GcalEventWidget *event);
void gcal_event_widget_set_color (GcalEventWidget *event,
GdkRGBA *color);
GdkRGBA* gcal_event_widget_get_color (GcalEventWidget *event);
void gcal_event_widget_set_all_day (GcalEventWidget *event,
gboolean all_day);
gboolean gcal_event_widget_get_all_day (GcalEventWidget *event);
gboolean gcal_event_widget_is_multiday (GcalEventWidget *event);
void gcal_event_widget_set_has_reminders (GcalEventWidget *event, void gcal_event_widget_set_has_reminders (GcalEventWidget *event,
gboolean has_reminders); gboolean has_reminders);
gboolean gcal_event_widget_get_has_reminders (GcalEventWidget *event); gboolean gcal_event_widget_get_has_reminders (GcalEventWidget *event);
GcalEventData* gcal_event_widget_get_data (GcalEventWidget *event); /* Utilities */
GtkWidget* gcal_event_widget_clone (GcalEventWidget *widget);
gboolean gcal_event_widget_equal (GcalEventWidget *widget1, gboolean gcal_event_widget_equal (GcalEventWidget *widget1,
GcalEventWidget *widget2); GcalEventWidget *widget2);
+21 -1
View File
@@ -17,6 +17,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>. * with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "gcal-event.h"
#include "gcal-manager.h" #include "gcal-manager.h"
#include "gcal-utils.h" #include "gcal-utils.h"
@@ -281,6 +282,25 @@ gather_components (ECalDataModel *data_model,
return TRUE; return TRUE;
} }
static gboolean
gather_events (ECalDataModel *data_model,
ECalClient *client,
const ECalComponentId *id,
ECalComponent *comp,
time_t instance_start,
time_t instance_end,
gpointer user_data)
{
GList **result = user_data;
GcalEvent *event;
event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp);
*result = g_list_append (*result, event);/* FIXME: add me sorted */
return TRUE;
}
/** /**
* load_source: * load_source:
* @manager: Manager instance * @manager: Manager instance
@@ -1522,7 +1542,7 @@ gcal_manager_get_events (GcalManager *manager,
range_start = icaltime_as_timet_with_zone (*start_date, manager->system_timezone); range_start = icaltime_as_timet_with_zone (*start_date, manager->system_timezone);
range_end = icaltime_as_timet_with_zone (*end_date, manager->system_timezone); range_end = icaltime_as_timet_with_zone (*end_date, manager->system_timezone);
e_cal_data_model_foreach_component (manager->e_data_model, range_start, range_end, gather_components, &list); e_cal_data_model_foreach_component (manager->e_data_model, range_start, range_end, gather_events, &list);
return list; return list;
} }
+67 -52
View File
@@ -475,11 +475,6 @@ rebuild_popover_for_day (GcalMonthView *view,
GdkRectangle rect; GdkRectangle rect;
gchar *label_title; gchar *label_title;
icaltimetype date, second_date;
const icaltimetype *dt_start, *dt_end;
gint start_comparison, end_comparison;
/* placement helpers */ /* placement helpers */
gdouble start_grid_y, cell_width, cell_height; gdouble start_grid_y, cell_width, cell_height;
@@ -504,36 +499,44 @@ rebuild_popover_for_day (GcalMonthView *view,
gtk_container_foreach (GTK_CONTAINER (priv->events_list_box), (GtkCallback) gtk_widget_destroy, NULL); gtk_container_foreach (GTK_CONTAINER (priv->events_list_box), (GtkCallback) gtk_widget_destroy, NULL);
l = g_hash_table_lookup (ppriv->overflow_cells, GINT_TO_POINTER (priv->pressed_overflow_indicator)); l = g_hash_table_lookup (ppriv->overflow_cells, GINT_TO_POINTER (priv->pressed_overflow_indicator));
/* Setup the start & end dates of the events as the begin & end of day */
if (l != NULL) if (l != NULL)
{ {
date = *(priv->date); GDateTime *current_date;
date.day = day; GDateTime *dt_start;
GDateTime *dt_end;
GTimeZone *tz;
second_date = date; current_date = icaltime_to_datetime (priv->date, &tz);
dt_start = g_date_time_new (tz,
g_date_time_get_year (current_date),
g_date_time_get_month (current_date),
day,
0, 0, 0);
date.hour = 0; dt_end = g_date_time_new (tz,
date.minute = 0; g_date_time_get_year (current_date),
second_date.hour = 23; g_date_time_get_month (current_date),
second_date.minute =59; day + 1,
} 0, 0, 0);
for (; l != NULL; l = g_list_next (l))
{
child_widget = gcal_event_widget_clone (GCAL_EVENT_WIDGET (l->data));
gtk_container_add (GTK_CONTAINER (priv->events_list_box), child_widget);
_gcal_subscriber_view_setup_child (GCAL_SUBSCRIBER_VIEW (view), child_widget);
dt_start = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (child_widget)); for (; l != NULL; l = g_list_next (l))
dt_end = gcal_event_widget_peek_end_date (GCAL_EVENT_WIDGET (child_widget)); {
GtkWidget *cloned_event;
date.is_date = dt_start->is_date; cloned_event = gcal_event_widget_clone (l->data);
start_comparison = icaltime_compare (*dt_start, date); gcal_event_widget_set_date_start (GCAL_EVENT_WIDGET (cloned_event), dt_start);
end_comparison = icaltime_compare (second_date, *dt_end); gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (cloned_event), dt_end);
if (start_comparison == -1 && end_comparison == -1)
gtk_style_context_add_class (gtk_widget_get_style_context (child_widget), "slanted"); gtk_container_add (GTK_CONTAINER (priv->events_list_box), cloned_event);
else if (start_comparison == -1) _gcal_subscriber_view_setup_child (GCAL_SUBSCRIBER_VIEW (view), cloned_event);
gtk_style_context_add_class (gtk_widget_get_style_context (child_widget), "slanted-start"); }
else if (end_comparison == -1)
gtk_style_context_add_class (gtk_widget_get_style_context (child_widget), "slanted-end"); g_clear_pointer (&current_date, g_date_time_unref);
g_clear_pointer (&dt_start, g_date_time_unref);
g_clear_pointer (&dt_end, g_date_time_unref);
g_clear_pointer (&tz, g_time_zone_unref);
} }
/* placement calculation */ /* placement calculation */
@@ -605,28 +608,33 @@ update_list_box_headers (GtkListBoxRow *row,
{ {
GcalMonthViewPrivate *priv; GcalMonthViewPrivate *priv;
GtkWidget *row_child, *before_child = NULL; GtkWidget *row_child, *before_child = NULL;
const icaltimetype *row_date, *before_date = NULL; GDateTime *row_date, *before_date = NULL;
GcalEvent *row_event;
priv = gcal_month_view_get_instance_private (GCAL_MONTH_VIEW (user_data)); priv = gcal_month_view_get_instance_private (GCAL_MONTH_VIEW (user_data));
row_child = gtk_bin_get_child (GTK_BIN (row)); row_child = gtk_bin_get_child (GTK_BIN (row));
row_date = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (row_child)); row_event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (row_child));
row_date = gcal_event_widget_get_date_start (GCAL_EVENT_WIDGET (row_child));
if (before != NULL) if (before != NULL)
{ {
before_child = gtk_bin_get_child (GTK_BIN (before)); before_child = gtk_bin_get_child (GTK_BIN (before));
before_date = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (before_child)); before_date = gcal_event_widget_get_date_start (GCAL_EVENT_WIDGET (before_child));
} }
if (!gcal_event_widget_is_multiday (GCAL_EVENT_WIDGET (row_child)) && if (!gcal_event_is_multiday (row_event) &&
!gcal_event_widget_get_all_day (GCAL_EVENT_WIDGET (row_child)) && !gcal_event_get_all_day (row_event) &&
(before_date == NULL || before_date->hour != row_date->hour)) (before_date == NULL || g_date_time_get_hour (before_date) != g_date_time_get_hour (row_date)))
{ {
gchar *time; gchar *time;
GtkWidget *label, *vbox; GtkWidget *label, *vbox;
gint hour;
hour = g_date_time_get_hour (row_date);
if (priv->use_24h_format) if (priv->use_24h_format)
time = g_strdup_printf ("%.2d:00", row_date->hour); time = g_strdup_printf ("%.2d:00", hour);
else else
time = g_strdup_printf ("%.2d:00 %s", row_date->hour % 12, row_date->hour < 12 ? "AM" : "PM"); time = g_strdup_printf ("%.2d:00 %s", hour % 12, hour < 12 ? "AM" : "PM");
label = gtk_label_new (time); label = gtk_label_new (time);
gtk_style_context_add_class (gtk_widget_get_style_context (label), GTK_STYLE_CLASS_DIM_LABEL); gtk_style_context_add_class (gtk_widget_get_style_context (label), GTK_STYLE_CLASS_DIM_LABEL);
@@ -1066,11 +1074,14 @@ gcal_month_view_size_allocate (GtkWidget *widget,
gint first_cell, last_cell, first_row, last_row, start, end; gint first_cell, last_cell, first_row, last_row, start, end;
gboolean visible, start_before = TRUE, end_after = TRUE; gboolean visible, start_before = TRUE, end_after = TRUE;
const icaltimetype *date; GDateTime *date;
GcalEvent *event;
GArray *cells, *lengths; GArray *cells, *lengths;
child_widget = (GtkWidget*) l->data; child_widget = (GtkWidget*) l->data;
uuid = gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (child_widget)); event = gcal_event_widget_get_event (l->data);
uuid = gcal_event_get_uid (event);
if (!gtk_widget_is_visible (child_widget) && !g_hash_table_contains (ppriv->hidden_as_overflow, uuid)) if (!gtk_widget_is_visible (child_widget) && !g_hash_table_contains (ppriv->hidden_as_overflow, uuid))
continue; continue;
@@ -1078,30 +1089,30 @@ gcal_month_view_size_allocate (GtkWidget *widget,
gtk_widget_get_preferred_height (child_widget, NULL, &natural_height); gtk_widget_get_preferred_height (child_widget, NULL, &natural_height);
j = 1; j = 1;
date = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (child_widget)); date = gcal_event_widget_get_date_start (GCAL_EVENT_WIDGET (child_widget));
if (date->month == priv->date->month) if (g_date_time_get_month (date) == priv->date->month)
{ {
j = date->day; j = g_date_time_get_day_of_month (date);
start_before = FALSE; start_before = FALSE;
} }
j += priv->days_delay; j += priv->days_delay;
first_cell = 7 * ((j - 1) / 7)+ 6 * priv->k + sw * ((j - 1) % 7); first_cell = 7 * ((j - 1) / 7)+ 6 * priv->k + sw * ((j - 1) % 7);
j = icaltime_days_in_month (priv->date->month, priv->date->year); j = icaltime_days_in_month (priv->date->month, priv->date->year);
date = gcal_event_widget_peek_end_date (GCAL_EVENT_WIDGET (child_widget)); date = gcal_event_widget_get_date_end (GCAL_EVENT_WIDGET (child_widget));
if (gcal_event_widget_get_all_day (GCAL_EVENT_WIDGET (child_widget))) if (gcal_event_get_all_day (event))
{ {
if (date->month == priv->date->month) if (g_date_time_get_month (date) == priv->date->month)
{ {
j = date->day - 1; j = g_date_time_get_day_of_month (date) - 1;
end_after = FALSE; end_after = FALSE;
} }
} }
else else
{ {
if (date->month == priv->date->month) if (g_date_time_get_month (date) == priv->date->month)
{ {
j = date->day; j = g_date_time_get_day_of_month (date);
end_after = FALSE; end_after = FALSE;
} }
} }
@@ -1221,7 +1232,8 @@ gcal_month_view_size_allocate (GtkWidget *widget,
{ {
child_widget = (GtkWidget*) aux->data; child_widget = (GtkWidget*) aux->data;
uuid = gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (child_widget)); uuid = gcal_event_get_uid (gcal_event_widget_get_event (GCAL_EVENT_WIDGET (child_widget)));
if (!gtk_widget_is_visible (child_widget) && !g_hash_table_contains (ppriv->hidden_as_overflow, uuid)) if (!gtk_widget_is_visible (child_widget) && !g_hash_table_contains (ppriv->hidden_as_overflow, uuid))
continue; continue;
@@ -1797,15 +1809,18 @@ static gboolean
gcal_month_view_is_child_multiday (GcalSubscriberView *subscriber, gcal_month_view_is_child_multiday (GcalSubscriberView *subscriber,
GcalEventWidget *child) GcalEventWidget *child)
{ {
return gcal_event_widget_is_multiday (child); return gcal_event_is_multiday (gcal_event_widget_get_event (child));
} }
static guint static guint
gcal_month_view_get_child_cell (GcalSubscriberView *subscriber, gcal_month_view_get_child_cell (GcalSubscriberView *subscriber,
GcalEventWidget *child) GcalEventWidget *child)
{ {
const icaltimetype *dt_start = gcal_event_widget_peek_start_date (child); GDateTime *dt;
return dt_start->day;
dt = gcal_event_widget_get_date_start (child);
return g_date_time_get_day_of_month (dt);
} }
static void static void
+23 -23
View File
@@ -21,8 +21,9 @@
#include "gcal-subscriber-view.h" #include "gcal-subscriber-view.h"
#include "gcal-subscriber-view-private.h" #include "gcal-subscriber-view-private.h"
#include "gcal-view.h" #include "gcal-event.h"
#include "gcal-event-widget.h" #include "gcal-event-widget.h"
#include "gcal-view.h"
enum enum
{ {
@@ -169,13 +170,15 @@ gcal_subscriber_view_add (GtkContainer *container,
GtkWidget *widget) GtkWidget *widget)
{ {
GcalSubscriberViewPrivate *priv; GcalSubscriberViewPrivate *priv;
GcalEvent *event;
const gchar *uuid; const gchar *uuid;
GList *l = NULL; GList *l = NULL;
g_return_if_fail (GCAL_IS_EVENT_WIDGET (widget)); g_return_if_fail (GCAL_IS_EVENT_WIDGET (widget));
g_return_if_fail (gtk_widget_get_parent (widget) == NULL); g_return_if_fail (gtk_widget_get_parent (widget) == NULL);
priv = gcal_subscriber_view_get_instance_private (GCAL_SUBSCRIBER_VIEW (container)); priv = gcal_subscriber_view_get_instance_private (GCAL_SUBSCRIBER_VIEW (container));
uuid = gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (widget)); event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (widget));
uuid = gcal_event_get_uid (event);
/* inserting in all children hash */ /* inserting in all children hash */
if (g_hash_table_lookup (priv->children, uuid) != NULL) if (g_hash_table_lookup (priv->children, uuid) != NULL)
@@ -215,6 +218,7 @@ gcal_subscriber_view_remove (GtkContainer *container,
GtkWidget *widget) GtkWidget *widget)
{ {
GcalSubscriberViewPrivate *priv; GcalSubscriberViewPrivate *priv;
GcalEvent *event;
const gchar *uuid; const gchar *uuid;
GList *l, *aux; GList *l, *aux;
@@ -222,8 +226,8 @@ gcal_subscriber_view_remove (GtkContainer *container,
g_return_if_fail (gtk_widget_get_parent (widget) == GTK_WIDGET (container)); g_return_if_fail (gtk_widget_get_parent (widget) == GTK_WIDGET (container));
priv = gcal_subscriber_view_get_instance_private (GCAL_SUBSCRIBER_VIEW (container)); priv = gcal_subscriber_view_get_instance_private (GCAL_SUBSCRIBER_VIEW (container));
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (widget));
uuid = gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (widget)); uuid = gcal_event_get_uid (event);
l = g_hash_table_lookup (priv->children, uuid); l = g_hash_table_lookup (priv->children, uuid);
if (l != NULL) if (l != NULL)
@@ -352,20 +356,17 @@ gcal_subscriber_view_component_added (ECalDataModelSubscriber *subscriber,
ECalClient *client, ECalClient *client,
ECalComponent *comp) ECalComponent *comp)
{ {
GtkWidget *event; GtkWidget *event_widget;
GcalEventData *data; GcalEvent *event;
data = g_new0 (GcalEventData, 1); event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp);
data->source = e_client_get_source (E_CLIENT (client)); event_widget = gcal_event_widget_new (event);
data->event_component = e_cal_component_clone (comp); gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (event_widget), e_client_is_readonly (E_CLIENT (client)));
event = gcal_event_widget_new_from_data (data); gtk_widget_show (event_widget);
gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (event), e_client_is_readonly (E_CLIENT (client))); gtk_container_add (GTK_CONTAINER (subscriber), event_widget);
gtk_widget_show (event); g_clear_object (&event);
gtk_container_add (GTK_CONTAINER (subscriber), event);
g_free (data);
} }
static void static void
@@ -376,17 +377,14 @@ gcal_subscriber_view_component_modified (ECalDataModelSubscriber *subscriber,
GcalSubscriberViewPrivate *priv; GcalSubscriberViewPrivate *priv;
GList *l; GList *l;
GtkWidget *new_widget; GtkWidget *new_widget;
GcalEventData *data; GcalEvent *event;
priv = gcal_subscriber_view_get_instance_private (GCAL_SUBSCRIBER_VIEW (subscriber)); priv = gcal_subscriber_view_get_instance_private (GCAL_SUBSCRIBER_VIEW (subscriber));
data = g_new0 (GcalEventData, 1); event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp);
data->source = e_client_get_source (E_CLIENT (client)); new_widget = gcal_event_widget_new (event);
data->event_component = e_cal_component_clone (comp);
new_widget = gcal_event_widget_new_from_data (data); l = g_hash_table_lookup (priv->children, gcal_event_get_uid (event));
g_free (data);
l = g_hash_table_lookup (priv->children, gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (new_widget)));
if (l != NULL) if (l != NULL)
{ {
gtk_widget_destroy (l->data); gtk_widget_destroy (l->data);
@@ -397,10 +395,12 @@ gcal_subscriber_view_component_modified (ECalDataModelSubscriber *subscriber,
else else
{ {
g_warning ("%s: Widget with uuid: %s not found in view: %s", g_warning ("%s: Widget with uuid: %s not found in view: %s",
G_STRFUNC, gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (new_widget)), G_STRFUNC, gcal_event_get_uid (event),
gtk_widget_get_name (GTK_WIDGET (subscriber))); gtk_widget_get_name (GTK_WIDGET (subscriber)));
gtk_widget_destroy (new_widget); gtk_widget_destroy (new_widget);
} }
g_clear_object (&event);
} }
static void static void
+28 -9
View File
@@ -63,6 +63,29 @@ month_item[12] =
G_DEFINE_BOXED_TYPE (icaltimetype, icaltime, gcal_dup_icaltime, g_free) G_DEFINE_BOXED_TYPE (icaltimetype, icaltime, gcal_dup_icaltime, g_free)
gint
datetime_compare_date (GDateTime *dt1,
GDateTime *dt2)
{
if (!dt1 && !dt2)
return 0;
else if (!dt1)
return -1;
else if (!dt2)
return 1;
if (g_date_time_get_year (dt1) != g_date_time_get_year (dt2))
return g_date_time_get_year (dt1) - g_date_time_get_year (dt2);
if (g_date_time_get_month (dt1) != g_date_time_get_month (dt2))
return g_date_time_get_month (dt1) - g_date_time_get_month (dt2);
if (g_date_time_get_day_of_month (dt1) != g_date_time_get_day_of_month (dt2))
return g_date_time_get_day_of_month (dt1) - g_date_time_get_day_of_month (dt2);
return 0;
}
icaltimetype* icaltimetype*
datetime_to_icaltime (GDateTime *dt) datetime_to_icaltime (GDateTime *dt)
{ {
@@ -233,22 +256,18 @@ gcal_compare_event_widget_by_date (gconstpointer a,
/* negative value if a < b; zero if a = b; positive value if a > b. */ /* negative value if a < b; zero if a = b; positive value if a > b. */
GcalViewChild *a_child; GcalViewChild *a_child;
GcalViewChild *b_child; GcalViewChild *b_child;
icaltimetype *a_date; GDateTime *a_date;
icaltimetype *b_date; GDateTime *b_date;
gint comparison; gint comparison;
a_child = (GcalViewChild*) a; a_child = (GcalViewChild*) a;
b_child = (GcalViewChild*) b; b_child = (GcalViewChild*) b;
a_date = a_date = gcal_event_get_date_start (gcal_event_widget_get_event (GCAL_EVENT_WIDGET (a_child->widget)));
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (a_child->widget)); b_date = gcal_event_get_date_start (gcal_event_widget_get_event (GCAL_EVENT_WIDGET (b_child->widget)));
b_date =
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (b_child->widget));
comparison = icaltime_compare (*a_date, *b_date); comparison = g_date_time_compare (a_date, b_date);
g_free (a_date);
g_free (b_date);
return comparison; return comparison;
} }
+3
View File
@@ -52,6 +52,9 @@ const gchar* (*GcalTranslateFunc) (GtkWidget
GType icaltime_get_type (void) G_GNUC_CONST; GType icaltime_get_type (void) G_GNUC_CONST;
gint datetime_compare_date (GDateTime *dt1,
GDateTime *dt2);
icaltimetype* datetime_to_icaltime (GDateTime *dt); icaltimetype* datetime_to_icaltime (GDateTime *dt);
gboolean datetime_is_date (GDateTime *dt); gboolean datetime_is_date (GDateTime *dt);
+16 -11
View File
@@ -1131,9 +1131,10 @@ gcal_week_view_add (GtkContainer *container,
GList *l; GList *l;
gint day; gint day;
icaltimetype *date;
GcalWeekViewChild *new_child; GcalWeekViewChild *new_child;
GDateTime *date;
GcalEvent *event;
g_return_if_fail (GCAL_IS_WEEK_VIEW (container)); g_return_if_fail (GCAL_IS_WEEK_VIEW (container));
g_return_if_fail (GCAL_IS_EVENT_WIDGET (widget)); g_return_if_fail (GCAL_IS_EVENT_WIDGET (widget));
@@ -1141,8 +1142,9 @@ gcal_week_view_add (GtkContainer *container,
priv = gcal_week_view_get_instance_private (GCAL_WEEK_VIEW (container)); priv = gcal_week_view_get_instance_private (GCAL_WEEK_VIEW (container));
/* Check if it's already added for date */ /* Check if it's already added for date */
date = gcal_event_widget_get_date (GCAL_EVENT_WIDGET (widget)); event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (widget));
day = (icaltime_day_of_week (*date) - priv->first_weekday + 6) % 7; date = gcal_event_get_date_start (event);
day = (g_date_time_get_day_of_week (date) - priv->first_weekday + 6) % 7;
for (l = priv->days[day]; l != NULL; l = l->next) for (l = priv->days[day]; l != NULL; l = l->next)
{ {
@@ -1164,7 +1166,7 @@ gcal_week_view_add (GtkContainer *container,
new_child->widget = widget; new_child->widget = widget;
new_child->hidden_by_me = FALSE; new_child->hidden_by_me = FALSE;
if (gcal_event_widget_get_all_day (GCAL_EVENT_WIDGET (widget))) if (gcal_event_get_all_day (event))
{ {
new_child->index = -1; new_child->index = -1;
if (gtk_widget_get_window (widget) != NULL) if (gtk_widget_get_window (widget) != NULL)
@@ -1173,7 +1175,7 @@ gcal_week_view_add (GtkContainer *container,
} }
else else
{ {
new_child->index = date->hour; new_child->index = g_date_time_get_hour (date);
if (priv->grid_window != NULL) if (priv->grid_window != NULL)
gtk_widget_set_parent_window (widget, priv->grid_window); gtk_widget_set_parent_window (widget, priv->grid_window);
} }
@@ -1185,7 +1187,6 @@ gcal_week_view_add (GtkContainer *container,
"activate", "activate",
G_CALLBACK (event_opened), G_CALLBACK (event_opened),
container); container);
g_free (date);
} }
static void static void
@@ -1193,17 +1194,18 @@ gcal_week_view_remove (GtkContainer *container,
GtkWidget *widget) GtkWidget *widget)
{ {
GcalWeekViewPrivate *priv; GcalWeekViewPrivate *priv;
GcalEvent *event;
GDateTime *date;
GList *l; GList *l;
icaltimetype *date;
gint day; gint day;
gboolean was_visible; gboolean was_visible;
g_return_if_fail (GCAL_IS_WEEK_VIEW (container)); g_return_if_fail (GCAL_IS_WEEK_VIEW (container));
g_return_if_fail (gtk_widget_get_parent (widget) == GTK_WIDGET (container)); g_return_if_fail (gtk_widget_get_parent (widget) == GTK_WIDGET (container));
priv = gcal_week_view_get_instance_private (GCAL_WEEK_VIEW (container)); priv = gcal_week_view_get_instance_private (GCAL_WEEK_VIEW (container));
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (widget));
date = gcal_event_widget_get_date (GCAL_EVENT_WIDGET (widget)); date = gcal_event_get_date_start (event);
day = (icaltime_day_of_week (*date) - priv->first_weekday + 6) % 7; day = (g_date_time_get_day_of_week (date) - priv->first_weekday + 6) % 7;
for (l = priv->days[day]; l != NULL; l = l->next) for (l = priv->days[day]; l != NULL; l = l->next)
{ {
@@ -1347,10 +1349,13 @@ gcal_week_view_get_by_uuid (GcalSubscriberView *subscriber_view,
for (l = priv->days[i]; l != NULL; l = l->next) for (l = priv->days[i]; l != NULL; l = l->next)
{ {
GcalWeekViewChild *child; GcalWeekViewChild *child;
GcalEvent *event;
const gchar* widget_uuid; const gchar* widget_uuid;
child = (GcalWeekViewChild*) l->data; child = (GcalWeekViewChild*) l->data;
widget_uuid = gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (child->widget)); event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (child->widget));
widget_uuid = gcal_event_get_uid (event);
if (g_strcmp0 (uuid, widget_uuid) == 0) if (g_strcmp0 (uuid, widget_uuid) == 0)
return child->widget; return child->widget;
} }
+19 -28
View File
@@ -773,7 +773,7 @@ new_event_entry_text_changed (GObject *object,
static gboolean blocked = TRUE; static gboolean blocked = TRUE;
gint length; gint length;
length = g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (user_data)), -1); length = g_utf8_strlen (gtk_entry_get_text (GTK_ENTRY (object)), -1);
gtk_widget_set_sensitive (window->new_event_create_button, length > 0); gtk_widget_set_sensitive (window->new_event_create_button, length > 0);
@@ -1083,18 +1083,13 @@ create_event (gpointer user_data,
window->event_creation_data->end_date); window->event_creation_data->end_date);
if (widget == window->new_event_details_button) if (widget == window->new_event_details_button)
{ {
GcalEventData *edata; GcalEvent *event;
edata = g_new0 (GcalEventData, 1); event = gcal_event_new (source, comp);
edata->source = source;
edata->event_component = comp;
gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE);
TRUE); gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (window->edit_dialog), event);
gcal_edit_dialog_set_event_data (GCAL_EDIT_DIALOG (window->edit_dialog),
edata);
g_object_unref (comp); g_object_unref (comp);
g_free (edata);
gtk_dialog_run (GTK_DIALOG (window->edit_dialog)); gtk_dialog_run (GTK_DIALOG (window->edit_dialog));
} }
@@ -1104,7 +1099,9 @@ create_event (gpointer user_data,
gcal_manager_create_event (window->manager, source, comp); gcal_manager_create_event (window->manager, source, comp);
} }
g_object_unref (source); g_clear_object (&source);
g_clear_object (&event);
g_clear_object (&comp);
} }
static void static void
@@ -1114,19 +1111,18 @@ create_event_detailed_cb (GcalView *view,
gpointer user_data) gpointer user_data)
{ {
GcalWindow *window = GCAL_WINDOW (user_data); GcalWindow *window = GCAL_WINDOW (user_data);
GcalEventData *edata; ECalComponent *comp;
GcalEvent *event;
edata = g_new0 (GcalEventData, 1); comp = build_component_from_details ("", (icaltimetype*) start_span, (icaltimetype*) end_span);
edata->source = gcal_manager_get_default_source (window->manager); event = gcal_event_new (gcal_manager_get_default_source (window->manager), comp);
edata->event_component = build_component_from_details ("", (icaltimetype*) start_span, (icaltimetype*) end_span);
gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE); gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE);
gcal_edit_dialog_set_event_data (GCAL_EDIT_DIALOG (window->edit_dialog), edata); gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (window->edit_dialog), event);
g_object_unref (edata->event_component);
g_free (edata);
gtk_dialog_run (GTK_DIALOG (window->edit_dialog)); gtk_dialog_run (GTK_DIALOG (window->edit_dialog));
g_clear_object (&comp);
} }
static void static void
@@ -1135,16 +1131,11 @@ event_activated (GcalView *view,
gpointer user_data) gpointer user_data)
{ {
GcalWindow *window = GCAL_WINDOW (user_data); GcalWindow *window = GCAL_WINDOW (user_data);
GcalEventData *data; GcalEvent *event;
data = gcal_event_widget_get_data (event_widget); event = gcal_event_widget_get_event (event_widget);
gcal_edit_dialog_set_event_is_new ( gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), FALSE);
GCAL_EDIT_DIALOG (window->edit_dialog), gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (window->edit_dialog), event);
FALSE);
gcal_edit_dialog_set_event_data (
GCAL_EDIT_DIALOG (window->edit_dialog),
data);
g_free (data);
gtk_dialog_run (GTK_DIALOG (window->edit_dialog)); gtk_dialog_run (GTK_DIALOG (window->edit_dialog));
} }
+88 -54
View File
@@ -199,12 +199,14 @@ update_selected_dates_from_button_data (GcalYearView *year_view)
year_view->start_selected_date->day = selected_data.start_day; year_view->start_selected_date->day = selected_data.start_day;
year_view->start_selected_date->month = selected_data.start_month + 1; year_view->start_selected_date->month = selected_data.start_month + 1;
year_view->start_selected_date->year = year_view->date->year; year_view->start_selected_date->year = year_view->date->year;
year_view->end_selected_date->is_date = TRUE;
year_view->end_selected_date->day = selected_data.end_day; year_view->end_selected_date->day = selected_data.end_day;
year_view->end_selected_date->month = selected_data.end_month + 1; year_view->end_selected_date->month = selected_data.end_month + 1;
year_view->end_selected_date->year = year_view->date->year; year_view->end_selected_date->year = year_view->date->year;
year_view->end_selected_date->hour = 23; year_view->end_selected_date->hour = 23;
year_view->end_selected_date->minute = 59; year_view->end_selected_date->minute = 59;
year_view->end_selected_date->is_date = TRUE;
*(year_view->end_selected_date) = icaltime_normalize (*(year_view->end_selected_date)); *(year_view->end_selected_date) = icaltime_normalize (*(year_view->end_selected_date));
} }
else else
@@ -212,6 +214,7 @@ update_selected_dates_from_button_data (GcalYearView *year_view)
*(year_view->start_selected_date) = *(year_view->current_date); *(year_view->start_selected_date) = *(year_view->current_date);
year_view->start_selected_date->hour = 0; year_view->start_selected_date->hour = 0;
year_view->start_selected_date->minute = 0; year_view->start_selected_date->minute = 0;
year_view->start_selected_date->second = 0;
*(year_view->end_selected_date) = *(year_view->current_date); *(year_view->end_selected_date) = *(year_view->current_date);
year_view->end_selected_date->hour = 23; year_view->end_selected_date->hour = 23;
@@ -254,50 +257,59 @@ update_no_events_page (GcalYearView *year_view)
static void static void
add_event_to_day_array (GcalYearView *year_view, add_event_to_day_array (GcalYearView *year_view,
GcalEventData *event_data, GcalEvent *event,
GList **days_widgets_array, GList **days_widgets_array,
gint days_span) gint days_span)
{ {
GtkWidget *child_widget; GtkWidget *child_widget;
const icaltimetype *dt_start, *dt_end; GDateTime *dt_start, *dt_end;
icaltimetype date, second_date; GDateTime *date, *second_date;
GTimeZone *tz;
gint i; gint i;
gboolean child_widget_used = FALSE; gboolean child_widget_used = FALSE;
child_widget = gcal_event_widget_new_from_data (event_data); child_widget = gcal_event_widget_new (event);
gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (child_widget), gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (child_widget),
!gcal_manager_is_client_writable (year_view->manager, event_data->source)); !gcal_manager_is_client_writable (year_view->manager, gcal_event_get_source (event)));
dt_start = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (child_widget)); dt_start = gcal_event_get_date_start (event);
dt_end = gcal_event_widget_peek_end_date (GCAL_EVENT_WIDGET (child_widget)); dt_end = gcal_event_get_date_end (event);
/* normalize date on each new event */ /* normalize date on each new event */
date = *(year_view->start_selected_date); date = icaltime_to_datetime (year_view->start_selected_date, &tz);
second_date = *(year_view->start_selected_date); second_date = g_date_time_new (tz,
second_date.hour = 23; g_date_time_get_year (date),
second_date.minute = 59; g_date_time_get_month (date),
g_date_time_get_day_of_month (date) + 1,
0, 0, 0);
gcal_event_widget_set_date_start (GCAL_EVENT_WIDGET (child_widget), date);
gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (child_widget), second_date);
/* marking and cloning */ /* marking and cloning */
for (i = 0; i < days_span; i++) for (i = 0; i < days_span; i++)
{ {
GtkWidget *cloned_child = child_widget; GDateTime *aux;
GtkWidget *cloned_child;
gint start_comparison, end_comparison; gint start_comparison, end_comparison;
if (i != 0) cloned_child = child_widget;
{ start_comparison = datetime_compare_date (dt_start, date);
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 (start_comparison <= 0)
{ {
if (child_widget_used) if (child_widget_used)
cloned_child = gcal_event_widget_clone (GCAL_EVENT_WIDGET (child_widget)); {
cloned_child = gcal_event_widget_clone (GCAL_EVENT_WIDGET (child_widget));
gcal_event_widget_set_date_start (GCAL_EVENT_WIDGET (cloned_child), date);
gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (cloned_child), second_date);
}
else else
child_widget_used = TRUE; {
child_widget_used = TRUE;
}
} }
else else
{ {
@@ -310,21 +322,20 @@ add_event_to_day_array (GcalYearView *year_view,
cloned_child, cloned_child,
(GCompareFunc) gcal_event_widget_compare_for_single_day); (GCompareFunc) gcal_event_widget_compare_for_single_day);
end_comparison = icaltime_compare_date (&second_date, dt_end); end_comparison = g_date_time_compare (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) if (end_comparison == 0)
break; break;
} }
/* Move the compared dates to the next day */
aux = date;
date = g_date_time_add_days (date, 1);
g_clear_pointer (&aux, g_date_time_unref);
aux = second_date;
second_date = g_date_time_add_days (second_date, 1);
g_clear_pointer (&aux, g_date_time_unref);
} }
} }
@@ -373,8 +384,8 @@ update_sidebar (GcalYearView *year_view)
g_list_free (current_day); g_list_free (current_day);
} }
g_list_free_full (events, g_object_unref);
g_free (days_widgets_array); g_free (days_widgets_array);
g_list_free_full (events, g_free);
} }
static void static void
@@ -393,20 +404,26 @@ update_sidebar_headers (GtkListBoxRow *row,
{ {
GcalYearView *year_view; GcalYearView *year_view;
GtkWidget *row_child, *before_child = NULL, *row_header = NULL; GtkWidget *row_child, *before_child = NULL, *row_header = NULL;
const icaltimetype *row_date, *before_date = NULL; GcalEvent *row_event, *before_event;
GDateTime *row_date, *before_date = NULL;
icaltimetype date; icaltimetype date;
gint row_shift, before_shift =-1; gint row_shift, before_shift =-1;
year_view = GCAL_YEAR_VIEW (user_data); year_view = GCAL_YEAR_VIEW (user_data);
row_child = gtk_bin_get_child (GTK_BIN (row)); row_child = gtk_bin_get_child (GTK_BIN (row));
if (row_child == NULL) if (row_child == NULL)
return; return;
row_date = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (row_child));
row_event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (row_child));
row_date = gcal_event_get_date_start (row_event);
row_shift = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row_child), "shift")); row_shift = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (row_child), "shift"));
if (before != NULL) if (before != NULL)
{ {
before_child = gtk_bin_get_child (GTK_BIN (before)); before_child = gtk_bin_get_child (GTK_BIN (before));
before_date = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (before_child)); before_event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (before_child));
before_date = gcal_event_get_date_start (before_event);
before_shift = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (before_child), "shift")); before_shift = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (before_child), "shift"));
} }
@@ -432,17 +449,20 @@ update_sidebar_headers (GtkListBoxRow *row,
gtk_container_add (GTK_CONTAINER (row_header), label); gtk_container_add (GTK_CONTAINER (row_header), label);
} }
if (!gcal_event_widget_is_multiday (GCAL_EVENT_WIDGET (row_child)) && if (!gcal_event_is_multiday (row_event) &&
!gcal_event_widget_get_all_day (GCAL_EVENT_WIDGET (row_child)) && !gcal_event_get_all_day (row_event) &&
(before_date == NULL || before_date->hour != row_date->hour)) (before_date == NULL || g_date_time_get_hour (before_date) != g_date_time_get_hour (row_date)))
{ {
gchar *time; gchar *time;
GtkWidget *label; GtkWidget *label;
gint hour;
hour = g_date_time_get_hour (row_date);
if (year_view->use_24h_format) if (year_view->use_24h_format)
time = g_strdup_printf ("%.2d:00", row_date->hour); time = g_strdup_printf ("%.2d:00", hour);
else else
time = g_strdup_printf ("%.2d:00 %s", row_date->hour % 12, row_date->hour < 12 ? "AM" : "PM"); time = g_strdup_printf ("%.2d:00 %s", hour % 12, hour < 12 ? "AM" : "PM");
label = gtk_label_new (time); label = gtk_label_new (time);
gtk_style_context_add_class (gtk_widget_get_style_context (label), GTK_STYLE_CLASS_DIM_LABEL); gtk_style_context_add_class (gtk_widget_get_style_context (label), GTK_STYLE_CLASS_DIM_LABEL);
@@ -752,7 +772,7 @@ draw_month_grid (GcalYearView *year_view,
box_side * (row + 1) + y + box_padding_top + layout_height + 2.0, box_side * (row + 1) + y + box_padding_top + layout_height + 2.0,
VISUAL_CLUES_SIDE, VISUAL_CLUES_SIDE); VISUAL_CLUES_SIDE, VISUAL_CLUES_SIDE);
gtk_style_context_restore (context); gtk_style_context_restore (context);
g_list_free_full (events, g_free); g_list_free_full (events, g_object_unref);
} }
g_free (nr_day); g_free (nr_day);
@@ -1174,8 +1194,14 @@ gcal_year_view_get_children_by_uuid (GcalView *view,
children = gtk_container_get_children (GTK_CONTAINER (year_view->events_sidebar)); children = gtk_container_get_children (GTK_CONTAINER (year_view->events_sidebar));
for (l = children; l != NULL; l = g_list_next (l)) for (l = children; l != NULL; l = g_list_next (l))
{ {
GcalEventWidget *child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data))); GcalEventWidget *child_widget;
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_widget_peek_uuid (child_widget)) == 0) GcalEvent *event;
child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data)));
event = gcal_event_widget_get_event (child_widget);
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_get_uid (event)) == 0)
result = g_list_append (result, child_widget); result = g_list_append (result, child_widget);
} }
g_list_free (children); g_list_free (children);
@@ -1190,7 +1216,7 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
{ {
GcalYearView *year_view = GCAL_YEAR_VIEW (subscriber); GcalYearView *year_view = GCAL_YEAR_VIEW (subscriber);
GcalEventData *data; GcalEvent *event;
GList **days_widgets_array; GList **days_widgets_array;
GList *l; GList *l;
gint i, days_span; gint i, days_span;
@@ -1203,9 +1229,7 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
days_span = icaltime_day_of_year(*(year_view->end_selected_date)) - icaltime_day_of_year(*(year_view->start_selected_date)) + 1; days_span = icaltime_day_of_year(*(year_view->end_selected_date)) - icaltime_day_of_year(*(year_view->start_selected_date)) + 1;
days_widgets_array = g_new0 (GList*, days_span); days_widgets_array = g_new0 (GList*, days_span);
data = g_new0 (GcalEventData, 1); event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp);
data->source = e_client_get_source (E_CLIENT (client));
data->event_component = e_cal_component_clone (comp);
/* check if event belongs to range */ /* check if event belongs to range */
zone = gcal_manager_get_system_timezone (year_view->manager); zone = gcal_manager_get_system_timezone (year_view->manager);
@@ -1228,11 +1252,10 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
(event_start >= range_start && event_start <= range_end) || (event_start >= range_start && event_start <= range_end) ||
(event_end >= range_start && event_end <= range_end))) (event_end >= range_start && event_end <= range_end)))
{ {
g_object_unref (data->event_component);
goto out; goto out;
} }
add_event_to_day_array (year_view, data, days_widgets_array, days_span); add_event_to_day_array (year_view, event, days_widgets_array, days_span);
gtk_stack_set_visible_child_name (GTK_STACK (year_view->navigator_stack), "events-list"); gtk_stack_set_visible_child_name (GTK_STACK (year_view->navigator_stack), "events-list");
for (i = 0; i < days_span; i++) for (i = 0; i < days_span; i++)
@@ -1251,7 +1274,7 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
} }
out: out:
g_free (data); g_clear_object (&event);
g_free (days_widgets_array); g_free (days_widgets_array);
} }
@@ -1268,8 +1291,13 @@ gcal_year_view_component_changed (ECalDataModelSubscriber *subscriber,
children = gtk_container_get_children (GTK_CONTAINER (year_view->events_sidebar)); children = gtk_container_get_children (GTK_CONTAINER (year_view->events_sidebar));
for (l = children; l != NULL; l = g_list_next (l)) for (l = children; l != NULL; l = g_list_next (l))
{ {
GcalEventWidget *child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data))); GcalEventWidget *child_widget;
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_widget_peek_uuid (child_widget)) == 0) GcalEvent *event;
child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data)));
event = gcal_event_widget_get_event (child_widget);
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_get_uid (event)) == 0)
gtk_widget_destroy (GTK_WIDGET (l->data)); gtk_widget_destroy (GTK_WIDGET (l->data));
} }
g_list_free (children); g_list_free (children);
@@ -1299,8 +1327,14 @@ gcal_year_view_component_removed (ECalDataModelSubscriber *subscriber,
children = gtk_container_get_children (GTK_CONTAINER (year_view->events_sidebar)); children = gtk_container_get_children (GTK_CONTAINER (year_view->events_sidebar));
for (l = children; l != NULL; l = g_list_next (l)) for (l = children; l != NULL; l = g_list_next (l))
{ {
GcalEventWidget *child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data))); GcalEventWidget *child_widget;
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_widget_peek_uuid (child_widget)) == 0) GcalEvent *event;
child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data)));
event = gcal_event_widget_get_event (child_widget);
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_get_uid (event)) == 0)
{ {
if (g_list_length (children) == 1) if (g_list_length (children) == 1)
update_sidebar_needed = TRUE; update_sidebar_needed = TRUE;