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="hexpand">True</property>
<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>
<packing>
<property name="left_attach">0</property>
+8 -7
View File
@@ -793,12 +793,12 @@ gcal_edit_dialog_set_event_is_new (GcalEditDialog *dialog,
}
void
gcal_edit_dialog_set_event_data (GcalEditDialog *dialog,
GcalEventData *data)
gcal_edit_dialog_set_event (GcalEditDialog *dialog,
GcalEvent *event)
{
GdkRGBA color;
GdkPixbuf *pix;
ESource *source;
const gchar *const_text = NULL;
gboolean all_day;
@@ -810,13 +810,14 @@ gcal_edit_dialog_set_event_data (GcalEditDialog *dialog,
ECalComponentDateTime dtend;
all_day = FALSE;
source = gcal_event_get_source (event);
dialog->setting_event = TRUE;
g_set_object (&dialog->source, data->source);
g_set_object (&dialog->source, source);
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);
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);
/* 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);
gtk_image_set_from_pixbuf (GTK_IMAGE (dialog->source_image), pix);
g_object_unref (pix);
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 */
e_cal_component_get_dtstart (dialog->component, &dtstart);
+3 -2
View File
@@ -20,6 +20,7 @@
#ifndef __GCAL_EDIT_DIALOG_H__
#define __GCAL_EDIT_DIALOG_H__
#include "gcal-event.h"
#include "gcal-manager.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,
gboolean event_is_new);
void gcal_edit_dialog_set_event_data (GcalEditDialog *dialog,
GcalEventData *data);
void gcal_edit_dialog_set_event (GcalEditDialog *dialog,
GcalEvent *event);
void gcal_edit_dialog_set_manager (GcalEditDialog *dialog,
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__
#define __GCAL_EVENT_WIDGET_H__
#include "gcal-event.h"
#include "gcal-manager.h"
#include <gtk/gtk.h>
@@ -32,56 +33,33 @@ G_BEGIN_DECLS
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,
gboolean read_only);
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,
gboolean has_reminders);
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,
GcalEventWidget *widget2);
+21 -1
View File
@@ -17,6 +17,7 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "gcal-event.h"
#include "gcal-manager.h"
#include "gcal-utils.h"
@@ -281,6 +282,25 @@ gather_components (ECalDataModel *data_model,
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:
* @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_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;
}
+67 -52
View File
@@ -475,11 +475,6 @@ rebuild_popover_for_day (GcalMonthView *view,
GdkRectangle rect;
gchar *label_title;
icaltimetype date, second_date;
const icaltimetype *dt_start, *dt_end;
gint start_comparison, end_comparison;
/* placement helpers */
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);
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)
{
date = *(priv->date);
date.day = day;
GDateTime *current_date;
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;
date.minute = 0;
second_date.hour = 23;
second_date.minute =59;
}
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_end = g_date_time_new (tz,
g_date_time_get_year (current_date),
g_date_time_get_month (current_date),
day + 1,
0, 0, 0);
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));
for (; l != NULL; l = g_list_next (l))
{
GtkWidget *cloned_event;
date.is_date = dt_start->is_date;
start_comparison = icaltime_compare (*dt_start, date);
end_comparison = icaltime_compare (second_date, *dt_end);
if (start_comparison == -1 && end_comparison == -1)
gtk_style_context_add_class (gtk_widget_get_style_context (child_widget), "slanted");
else if (start_comparison == -1)
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");
cloned_event = gcal_event_widget_clone (l->data);
gcal_event_widget_set_date_start (GCAL_EVENT_WIDGET (cloned_event), dt_start);
gcal_event_widget_set_date_end (GCAL_EVENT_WIDGET (cloned_event), dt_end);
gtk_container_add (GTK_CONTAINER (priv->events_list_box), cloned_event);
_gcal_subscriber_view_setup_child (GCAL_SUBSCRIBER_VIEW (view), cloned_event);
}
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 */
@@ -605,28 +608,33 @@ update_list_box_headers (GtkListBoxRow *row,
{
GcalMonthViewPrivate *priv;
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));
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)
{
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)) &&
!gcal_event_widget_get_all_day (GCAL_EVENT_WIDGET (row_child)) &&
(before_date == NULL || before_date->hour != row_date->hour))
if (!gcal_event_is_multiday (row_event) &&
!gcal_event_get_all_day (row_event) &&
(before_date == NULL || g_date_time_get_hour (before_date) != g_date_time_get_hour (row_date)))
{
gchar *time;
GtkWidget *label, *vbox;
gint hour;
hour = g_date_time_get_hour (row_date);
if (priv->use_24h_format)
time = g_strdup_printf ("%.2d:00", row_date->hour);
time = g_strdup_printf ("%.2d:00", hour);
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);
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;
gboolean visible, start_before = TRUE, end_after = TRUE;
const icaltimetype *date;
GDateTime *date;
GcalEvent *event;
GArray *cells, *lengths;
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))
continue;
@@ -1078,30 +1089,30 @@ gcal_month_view_size_allocate (GtkWidget *widget,
gtk_widget_get_preferred_height (child_widget, NULL, &natural_height);
j = 1;
date = gcal_event_widget_peek_start_date (GCAL_EVENT_WIDGET (child_widget));
if (date->month == priv->date->month)
date = gcal_event_widget_get_date_start (GCAL_EVENT_WIDGET (child_widget));
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;
}
j += priv->days_delay;
first_cell = 7 * ((j - 1) / 7)+ 6 * priv->k + sw * ((j - 1) % 7);
j = icaltime_days_in_month (priv->date->month, priv->date->year);
date = gcal_event_widget_peek_end_date (GCAL_EVENT_WIDGET (child_widget));
if (gcal_event_widget_get_all_day (GCAL_EVENT_WIDGET (child_widget)))
date = gcal_event_widget_get_date_end (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;
}
}
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;
}
}
@@ -1221,7 +1232,8 @@ gcal_month_view_size_allocate (GtkWidget *widget,
{
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))
continue;
@@ -1797,15 +1809,18 @@ static gboolean
gcal_month_view_is_child_multiday (GcalSubscriberView *subscriber,
GcalEventWidget *child)
{
return gcal_event_widget_is_multiday (child);
return gcal_event_is_multiday (gcal_event_widget_get_event (child));
}
static guint
gcal_month_view_get_child_cell (GcalSubscriberView *subscriber,
GcalEventWidget *child)
{
const icaltimetype *dt_start = gcal_event_widget_peek_start_date (child);
return dt_start->day;
GDateTime *dt;
dt = gcal_event_widget_get_date_start (child);
return g_date_time_get_day_of_month (dt);
}
static void
+23 -23
View File
@@ -21,8 +21,9 @@
#include "gcal-subscriber-view.h"
#include "gcal-subscriber-view-private.h"
#include "gcal-view.h"
#include "gcal-event.h"
#include "gcal-event-widget.h"
#include "gcal-view.h"
enum
{
@@ -169,13 +170,15 @@ gcal_subscriber_view_add (GtkContainer *container,
GtkWidget *widget)
{
GcalSubscriberViewPrivate *priv;
GcalEvent *event;
const gchar *uuid;
GList *l = NULL;
g_return_if_fail (GCAL_IS_EVENT_WIDGET (widget));
g_return_if_fail (gtk_widget_get_parent (widget) == NULL);
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 */
if (g_hash_table_lookup (priv->children, uuid) != NULL)
@@ -215,6 +218,7 @@ gcal_subscriber_view_remove (GtkContainer *container,
GtkWidget *widget)
{
GcalSubscriberViewPrivate *priv;
GcalEvent *event;
const gchar *uuid;
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));
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);
l = g_hash_table_lookup (priv->children, uuid);
if (l != NULL)
@@ -352,20 +356,17 @@ gcal_subscriber_view_component_added (ECalDataModelSubscriber *subscriber,
ECalClient *client,
ECalComponent *comp)
{
GtkWidget *event;
GcalEventData *data;
GtkWidget *event_widget;
GcalEvent *event;
data = g_new0 (GcalEventData, 1);
data->source = e_client_get_source (E_CLIENT (client));
data->event_component = e_cal_component_clone (comp);
event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp);
event_widget = gcal_event_widget_new (event);
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);
gcal_event_widget_set_read_only (GCAL_EVENT_WIDGET (event), e_client_is_readonly (E_CLIENT (client)));
gtk_widget_show (event_widget);
gtk_container_add (GTK_CONTAINER (subscriber), event_widget);
gtk_widget_show (event);
gtk_container_add (GTK_CONTAINER (subscriber), event);
g_free (data);
g_clear_object (&event);
}
static void
@@ -376,17 +377,14 @@ gcal_subscriber_view_component_modified (ECalDataModelSubscriber *subscriber,
GcalSubscriberViewPrivate *priv;
GList *l;
GtkWidget *new_widget;
GcalEventData *data;
GcalEvent *event;
priv = gcal_subscriber_view_get_instance_private (GCAL_SUBSCRIBER_VIEW (subscriber));
data = g_new0 (GcalEventData, 1);
data->source = e_client_get_source (E_CLIENT (client));
data->event_component = e_cal_component_clone (comp);
event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp);
new_widget = gcal_event_widget_new (event);
new_widget = gcal_event_widget_new_from_data (data);
g_free (data);
l = g_hash_table_lookup (priv->children, gcal_event_get_uid (event));
l = g_hash_table_lookup (priv->children, gcal_event_widget_peek_uuid (GCAL_EVENT_WIDGET (new_widget)));
if (l != NULL)
{
gtk_widget_destroy (l->data);
@@ -397,10 +395,12 @@ gcal_subscriber_view_component_modified (ECalDataModelSubscriber *subscriber,
else
{
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_destroy (new_widget);
}
g_clear_object (&event);
}
static void
+28 -9
View File
@@ -63,6 +63,29 @@ month_item[12] =
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*
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. */
GcalViewChild *a_child;
GcalViewChild *b_child;
icaltimetype *a_date;
icaltimetype *b_date;
GDateTime *a_date;
GDateTime *b_date;
gint comparison;
a_child = (GcalViewChild*) a;
b_child = (GcalViewChild*) b;
a_date =
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (a_child->widget));
b_date =
gcal_event_widget_get_date (GCAL_EVENT_WIDGET (b_child->widget));
a_date = gcal_event_get_date_start (gcal_event_widget_get_event (GCAL_EVENT_WIDGET (a_child->widget)));
b_date = gcal_event_get_date_start (gcal_event_widget_get_event (GCAL_EVENT_WIDGET (b_child->widget)));
comparison = icaltime_compare (*a_date, *b_date);
g_free (a_date);
g_free (b_date);
comparison = g_date_time_compare (a_date, b_date);
return comparison;
}
+3
View File
@@ -52,6 +52,9 @@ const gchar* (*GcalTranslateFunc) (GtkWidget
GType icaltime_get_type (void) G_GNUC_CONST;
gint datetime_compare_date (GDateTime *dt1,
GDateTime *dt2);
icaltimetype* datetime_to_icaltime (GDateTime *dt);
gboolean datetime_is_date (GDateTime *dt);
+16 -11
View File
@@ -1131,9 +1131,10 @@ gcal_week_view_add (GtkContainer *container,
GList *l;
gint day;
icaltimetype *date;
GcalWeekViewChild *new_child;
GDateTime *date;
GcalEvent *event;
g_return_if_fail (GCAL_IS_WEEK_VIEW (container));
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));
/* Check if it's already added for date */
date = gcal_event_widget_get_date (GCAL_EVENT_WIDGET (widget));
day = (icaltime_day_of_week (*date) - priv->first_weekday + 6) % 7;
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (widget));
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)
{
@@ -1164,7 +1166,7 @@ gcal_week_view_add (GtkContainer *container,
new_child->widget = widget;
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;
if (gtk_widget_get_window (widget) != NULL)
@@ -1173,7 +1175,7 @@ gcal_week_view_add (GtkContainer *container,
}
else
{
new_child->index = date->hour;
new_child->index = g_date_time_get_hour (date);
if (priv->grid_window != NULL)
gtk_widget_set_parent_window (widget, priv->grid_window);
}
@@ -1185,7 +1187,6 @@ gcal_week_view_add (GtkContainer *container,
"activate",
G_CALLBACK (event_opened),
container);
g_free (date);
}
static void
@@ -1193,17 +1194,18 @@ gcal_week_view_remove (GtkContainer *container,
GtkWidget *widget)
{
GcalWeekViewPrivate *priv;
GcalEvent *event;
GDateTime *date;
GList *l;
icaltimetype *date;
gint day;
gboolean was_visible;
g_return_if_fail (GCAL_IS_WEEK_VIEW (container));
g_return_if_fail (gtk_widget_get_parent (widget) == GTK_WIDGET (container));
priv = gcal_week_view_get_instance_private (GCAL_WEEK_VIEW (container));
date = gcal_event_widget_get_date (GCAL_EVENT_WIDGET (widget));
day = (icaltime_day_of_week (*date) - priv->first_weekday + 6) % 7;
event = gcal_event_widget_get_event (GCAL_EVENT_WIDGET (widget));
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)
{
@@ -1347,10 +1349,13 @@ gcal_week_view_get_by_uuid (GcalSubscriberView *subscriber_view,
for (l = priv->days[i]; l != NULL; l = l->next)
{
GcalWeekViewChild *child;
GcalEvent *event;
const gchar* widget_uuid;
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)
return child->widget;
}
+19 -28
View File
@@ -773,7 +773,7 @@ new_event_entry_text_changed (GObject *object,
static gboolean blocked = TRUE;
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);
@@ -1083,18 +1083,13 @@ create_event (gpointer user_data,
window->event_creation_data->end_date);
if (widget == window->new_event_details_button)
{
GcalEventData *edata;
GcalEvent *event;
edata = g_new0 (GcalEventData, 1);
edata->source = source;
edata->event_component = comp;
event = gcal_event_new (source, comp);
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_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE);
gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (window->edit_dialog), event);
g_object_unref (comp);
g_free (edata);
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);
}
g_object_unref (source);
g_clear_object (&source);
g_clear_object (&event);
g_clear_object (&comp);
}
static void
@@ -1114,19 +1111,18 @@ create_event_detailed_cb (GcalView *view,
gpointer user_data)
{
GcalWindow *window = GCAL_WINDOW (user_data);
GcalEventData *edata;
ECalComponent *comp;
GcalEvent *event;
edata = g_new0 (GcalEventData, 1);
edata->source = gcal_manager_get_default_source (window->manager);
edata->event_component = build_component_from_details ("", (icaltimetype*) start_span, (icaltimetype*) end_span);
comp = build_component_from_details ("", (icaltimetype*) start_span, (icaltimetype*) end_span);
event = gcal_event_new (gcal_manager_get_default_source (window->manager), comp);
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);
g_object_unref (edata->event_component);
g_free (edata);
gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (window->edit_dialog), event);
gtk_dialog_run (GTK_DIALOG (window->edit_dialog));
g_clear_object (&comp);
}
static void
@@ -1135,16 +1131,11 @@ event_activated (GcalView *view,
gpointer user_data)
{
GcalWindow *window = GCAL_WINDOW (user_data);
GcalEventData *data;
GcalEvent *event;
data = gcal_event_widget_get_data (event_widget);
gcal_edit_dialog_set_event_is_new (
GCAL_EDIT_DIALOG (window->edit_dialog),
FALSE);
gcal_edit_dialog_set_event_data (
GCAL_EDIT_DIALOG (window->edit_dialog),
data);
g_free (data);
event = gcal_event_widget_get_event (event_widget);
gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), FALSE);
gcal_edit_dialog_set_event (GCAL_EDIT_DIALOG (window->edit_dialog), event);
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->month = selected_data.start_month + 1;
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->month = selected_data.end_month + 1;
year_view->end_selected_date->year = year_view->date->year;
year_view->end_selected_date->hour = 23;
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));
}
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->hour = 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->hour = 23;
@@ -254,50 +257,59 @@ update_no_events_page (GcalYearView *year_view)
static void
add_event_to_day_array (GcalYearView *year_view,
GcalEventData *event_data,
GcalEvent *event,
GList **days_widgets_array,
gint days_span)
{
GtkWidget *child_widget;
const icaltimetype *dt_start, *dt_end;
icaltimetype date, second_date;
GDateTime *dt_start, *dt_end;
GDateTime *date, *second_date;
GTimeZone *tz;
gint i;
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_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_end = gcal_event_widget_peek_end_date (GCAL_EVENT_WIDGET (child_widget));
dt_start = gcal_event_get_date_start (event);
dt_end = gcal_event_get_date_end (event);
/* normalize date on each new event */
date = *(year_view->start_selected_date);
second_date = *(year_view->start_selected_date);
second_date.hour = 23;
second_date.minute = 59;
date = icaltime_to_datetime (year_view->start_selected_date, &tz);
second_date = g_date_time_new (tz,
g_date_time_get_year (date),
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 */
for (i = 0; i < days_span; i++)
{
GtkWidget *cloned_child = child_widget;
GDateTime *aux;
GtkWidget *cloned_child;
gint start_comparison, end_comparison;
if (i != 0)
{
icaltime_adjust (&date, 1, 0, 0, 0);
icaltime_adjust (&second_date, 1, 0, 0, 0);
}
cloned_child = child_widget;
start_comparison = datetime_compare_date (dt_start, date);
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));
{
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
child_widget_used = TRUE;
{
child_widget_used = TRUE;
}
}
else
{
@@ -310,21 +322,20 @@ add_event_to_day_array (GcalYearView *year_view,
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");
end_comparison = g_date_time_compare (second_date, dt_end);
if (end_comparison == 0)
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_full (events, g_object_unref);
g_free (days_widgets_array);
g_list_free_full (events, g_free);
}
static void
@@ -393,20 +404,26 @@ update_sidebar_headers (GtkListBoxRow *row,
{
GcalYearView *year_view;
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;
gint row_shift, before_shift =-1;
year_view = GCAL_YEAR_VIEW (user_data);
row_child = gtk_bin_get_child (GTK_BIN (row));
if (row_child == NULL)
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"));
if (before != NULL)
{
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"));
}
@@ -432,17 +449,20 @@ update_sidebar_headers (GtkListBoxRow *row,
gtk_container_add (GTK_CONTAINER (row_header), label);
}
if (!gcal_event_widget_is_multiday (GCAL_EVENT_WIDGET (row_child)) &&
!gcal_event_widget_get_all_day (GCAL_EVENT_WIDGET (row_child)) &&
(before_date == NULL || before_date->hour != row_date->hour))
if (!gcal_event_is_multiday (row_event) &&
!gcal_event_get_all_day (row_event) &&
(before_date == NULL || g_date_time_get_hour (before_date) != g_date_time_get_hour (row_date)))
{
gchar *time;
GtkWidget *label;
gint hour;
hour = g_date_time_get_hour (row_date);
if (year_view->use_24h_format)
time = g_strdup_printf ("%.2d:00", row_date->hour);
time = g_strdup_printf ("%.2d:00", hour);
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);
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,
VISUAL_CLUES_SIDE, VISUAL_CLUES_SIDE);
gtk_style_context_restore (context);
g_list_free_full (events, g_free);
g_list_free_full (events, g_object_unref);
}
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));
for (l = children; l != NULL; l = g_list_next (l))
{
GcalEventWidget *child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data)));
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_widget_peek_uuid (child_widget)) == 0)
GcalEventWidget *child_widget;
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);
}
g_list_free (children);
@@ -1190,7 +1216,7 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
{
GcalYearView *year_view = GCAL_YEAR_VIEW (subscriber);
GcalEventData *data;
GcalEvent *event;
GList **days_widgets_array;
GList *l;
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_widgets_array = g_new0 (GList*, days_span);
data = g_new0 (GcalEventData, 1);
data->source = e_client_get_source (E_CLIENT (client));
data->event_component = e_cal_component_clone (comp);
event = gcal_event_new (e_client_get_source (E_CLIENT (client)), comp);
/* check if event belongs to range */
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_end >= range_start && event_end <= range_end)))
{
g_object_unref (data->event_component);
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");
for (i = 0; i < days_span; i++)
@@ -1251,7 +1274,7 @@ gcal_year_view_component_added (ECalDataModelSubscriber *subscriber,
}
out:
g_free (data);
g_clear_object (&event);
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));
for (l = children; l != NULL; l = g_list_next (l))
{
GcalEventWidget *child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data)));
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_widget_peek_uuid (child_widget)) == 0)
GcalEventWidget *child_widget;
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));
}
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));
for (l = children; l != NULL; l = g_list_next (l))
{
GcalEventWidget *child_widget = GCAL_EVENT_WIDGET (gtk_bin_get_child (GTK_BIN (l->data)));
if (child_widget != NULL && g_strcmp0 (uuid, gcal_event_widget_peek_uuid (child_widget)) == 0)
GcalEventWidget *child_widget;
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)
update_sidebar_needed = TRUE;