app: move view subscription to GcalWindow
Initialize :manager property first and :active-date later. Allocate ::active_date instance on instance init vfunc.
This commit is contained in:
@@ -75,7 +75,6 @@ typedef struct
|
|||||||
|
|
||||||
/* property */
|
/* property */
|
||||||
icaltimetype *date;
|
icaltimetype *date;
|
||||||
GcalManager *manager; /* weak reference */
|
|
||||||
} GcalMonthViewPrivate;
|
} GcalMonthViewPrivate;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
@@ -639,32 +638,10 @@ gcal_month_view_set_property (GObject *object,
|
|||||||
{
|
{
|
||||||
case PROP_DATE:
|
case PROP_DATE:
|
||||||
{
|
{
|
||||||
time_t range_start, range_end;
|
|
||||||
icaltimetype *date;
|
|
||||||
icaltimezone* default_zone;
|
|
||||||
|
|
||||||
if (priv->date != NULL)
|
if (priv->date != NULL)
|
||||||
g_free (priv->date);
|
g_free (priv->date);
|
||||||
|
|
||||||
priv->date = g_value_dup_boxed (value);
|
priv->date = g_value_dup_boxed (value);
|
||||||
|
|
||||||
date = gcal_view_get_initial_date (GCAL_VIEW (object));
|
|
||||||
priv->days_delay = (icaltime_day_of_week (*date) - priv->first_weekday + 6) % 7;
|
|
||||||
|
|
||||||
default_zone =
|
|
||||||
gcal_manager_get_system_timezone (priv->manager);
|
|
||||||
range_start = icaltime_as_timet_with_zone (*date,
|
|
||||||
default_zone);
|
|
||||||
g_free (date);
|
|
||||||
date = gcal_view_get_final_date (GCAL_VIEW (object));
|
|
||||||
range_end = icaltime_as_timet_with_zone (*date,
|
|
||||||
default_zone);
|
|
||||||
g_free (date);
|
|
||||||
|
|
||||||
gcal_manager_set_subscriber (priv->manager,
|
|
||||||
E_CAL_DATA_MODEL_SUBSCRIBER (object),
|
|
||||||
range_start,
|
|
||||||
range_end);
|
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (object));
|
gtk_widget_queue_draw (GTK_WIDGET (object));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1729,15 +1706,6 @@ gcal_month_view_new (void)
|
|||||||
return g_object_new (GCAL_TYPE_MONTH_VIEW, NULL);
|
return g_object_new (GCAL_TYPE_MONTH_VIEW, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
gcal_month_view_set_manager (GcalMonthView *month_view,
|
|
||||||
GcalManager *manager)
|
|
||||||
{
|
|
||||||
GcalMonthViewPrivate *priv = gcal_month_view_get_instance_private (month_view);
|
|
||||||
|
|
||||||
priv->manager = manager;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* gcal_month_view_set_first_weekday:
|
* gcal_month_view_set_first_weekday:
|
||||||
* @view: A #GcalMonthView instance
|
* @view: A #GcalMonthView instance
|
||||||
|
|||||||
@@ -47,8 +47,6 @@ struct _GcalMonthViewClass
|
|||||||
|
|
||||||
GType gcal_month_view_get_type (void);
|
GType gcal_month_view_get_type (void);
|
||||||
GtkWidget* gcal_month_view_new (void);
|
GtkWidget* gcal_month_view_new (void);
|
||||||
void gcal_month_view_set_manager (GcalMonthView *month_view,
|
|
||||||
GcalManager *manager);
|
|
||||||
void gcal_month_view_set_first_weekday (GcalMonthView *view,
|
void gcal_month_view_set_first_weekday (GcalMonthView *view,
|
||||||
gint day_nr);
|
gint day_nr);
|
||||||
void gcal_month_view_set_use_24h_format (GcalMonthView *view,
|
void gcal_month_view_set_use_24h_format (GcalMonthView *view,
|
||||||
|
|||||||
+91
-29
@@ -112,9 +112,9 @@ enum
|
|||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_ACTIVE_VIEW,
|
PROP_ACTIVE_VIEW,
|
||||||
|
PROP_MANAGER,
|
||||||
PROP_ACTIVE_DATE,
|
PROP_ACTIVE_DATE,
|
||||||
PROP_NEW_EVENT_MODE,
|
PROP_NEW_EVENT_MODE
|
||||||
PROP_MANAGER
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SAVE_GEOMETRY_ID_TIMEOUT 100 /* ms */
|
#define SAVE_GEOMETRY_ID_TIMEOUT 100 /* ms */
|
||||||
@@ -260,12 +260,74 @@ key_pressed (GtkWidget *widget,
|
|||||||
event);
|
event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_active_date (GcalWindow *window,
|
||||||
|
icaltimetype *new_date)
|
||||||
|
{
|
||||||
|
GcalWindowPrivate *priv;
|
||||||
|
|
||||||
|
time_t range_start, range_end;
|
||||||
|
icaltimetype date;
|
||||||
|
icaltimezone* default_zone;
|
||||||
|
|
||||||
|
priv = gcal_window_get_instance_private (window);
|
||||||
|
default_zone = gcal_manager_get_system_timezone (priv->manager);
|
||||||
|
|
||||||
|
/* year_view */
|
||||||
|
if (priv->active_date->year != new_date->year)
|
||||||
|
{
|
||||||
|
date = *new_date;
|
||||||
|
date.day = 1;
|
||||||
|
date.month = 1;
|
||||||
|
date.hour = 0;
|
||||||
|
date.minute = 0;
|
||||||
|
date.second = 0;
|
||||||
|
date.is_date = 0;
|
||||||
|
range_start = icaltime_as_timet_with_zone (date, default_zone);
|
||||||
|
|
||||||
|
date.day = 31;
|
||||||
|
date.month = 12;
|
||||||
|
date.hour = 23;
|
||||||
|
date.minute = 59;
|
||||||
|
range_end = icaltime_as_timet_with_zone (date, default_zone);
|
||||||
|
|
||||||
|
gcal_manager_set_subscriber (priv->manager,
|
||||||
|
E_CAL_DATA_MODEL_SUBSCRIBER (priv->views[GCAL_WINDOW_VIEW_YEAR]),
|
||||||
|
range_start, range_end);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* month_view */
|
||||||
|
if (priv->active_date->month != new_date->month || priv->active_date->year != new_date->year)
|
||||||
|
{
|
||||||
|
date = *new_date;
|
||||||
|
date.day = 1;
|
||||||
|
date.hour = 0;
|
||||||
|
date.minute = 0;
|
||||||
|
date.second = 0;
|
||||||
|
date.is_date = 0;
|
||||||
|
range_start = icaltime_as_timet_with_zone (date, default_zone);
|
||||||
|
|
||||||
|
date.day = time_days_in_month (new_date->year, new_date->month - 1);
|
||||||
|
date.hour = 23;
|
||||||
|
date.minute = 59;
|
||||||
|
range_end = icaltime_as_timet_with_zone (date, default_zone);
|
||||||
|
|
||||||
|
gcal_manager_set_subscriber (priv->manager,
|
||||||
|
E_CAL_DATA_MODEL_SUBSCRIBER (priv->views[GCAL_WINDOW_VIEW_MONTH]),
|
||||||
|
range_start, range_end);
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (priv->active_date);
|
||||||
|
priv->active_date = new_date;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
date_updated (GtkButton *button,
|
date_updated (GtkButton *button,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GcalWindowPrivate *priv;
|
GcalWindowPrivate *priv;
|
||||||
|
|
||||||
|
icaltimetype *new_date;
|
||||||
gboolean move_back, move_today;
|
gboolean move_back, move_today;
|
||||||
|
|
||||||
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
priv = gcal_window_get_instance_private (GCAL_WINDOW (user_data));
|
||||||
@@ -273,38 +335,37 @@ date_updated (GtkButton *button,
|
|||||||
move_today = priv->today_button == (GtkWidget*) button;
|
move_today = priv->today_button == (GtkWidget*) button;
|
||||||
move_back = priv->back_button == (GtkWidget*) button;
|
move_back = priv->back_button == (GtkWidget*) button;
|
||||||
|
|
||||||
|
new_date = gcal_dup_icaltime (priv->active_date);
|
||||||
|
|
||||||
|
/* FIXME: use current_date */
|
||||||
if (move_today)
|
if (move_today)
|
||||||
{
|
{
|
||||||
*(priv->active_date) =
|
*new_date = icaltime_current_time_with_zone (gcal_manager_get_system_timezone (priv->manager));
|
||||||
icaltime_current_time_with_zone (
|
*new_date = icaltime_set_timezone (new_date, gcal_manager_get_system_timezone (priv->manager));
|
||||||
gcal_manager_get_system_timezone (priv->manager));
|
|
||||||
*(priv->active_date) =
|
|
||||||
icaltime_set_timezone (
|
|
||||||
priv->active_date,
|
|
||||||
gcal_manager_get_system_timezone (priv->manager));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (priv->active_view)
|
switch (priv->active_view)
|
||||||
{
|
{
|
||||||
case GCAL_WINDOW_VIEW_DAY:
|
case GCAL_WINDOW_VIEW_DAY:
|
||||||
priv->active_date->day += 1 * (move_back ? -1 : 1);
|
new_date->day += 1 * (move_back ? -1 : 1);
|
||||||
break;
|
break;
|
||||||
case GCAL_WINDOW_VIEW_WEEK:
|
case GCAL_WINDOW_VIEW_WEEK:
|
||||||
priv->active_date->day += 7 * (move_back ? -1 : 1);
|
new_date->day += 7 * (move_back ? -1 : 1);
|
||||||
break;
|
break;
|
||||||
case GCAL_WINDOW_VIEW_MONTH:
|
case GCAL_WINDOW_VIEW_MONTH:
|
||||||
priv->active_date->month += 1 * (move_back ? -1 : 1);
|
new_date->month += 1 * (move_back ? -1 : 1);
|
||||||
break;
|
break;
|
||||||
case GCAL_WINDOW_VIEW_YEAR:
|
case GCAL_WINDOW_VIEW_YEAR:
|
||||||
priv->active_date->year += 1 * (move_back ? -1 : 1);
|
new_date->year += 1 * (move_back ? -1 : 1);
|
||||||
break;
|
break;
|
||||||
case GCAL_WINDOW_VIEW_LIST:
|
case GCAL_WINDOW_VIEW_LIST:
|
||||||
case GCAL_WINDOW_VIEW_SEARCH:
|
case GCAL_WINDOW_VIEW_SEARCH:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*(priv->active_date) = icaltime_normalize (*(priv->active_date));
|
*new_date = icaltime_normalize (*new_date);
|
||||||
|
update_active_date (user_data, new_date);
|
||||||
g_object_notify (user_data, "active-date");
|
g_object_notify (user_data, "active-date");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1099,6 +1160,15 @@ gcal_window_class_init(GcalWindowClass *klass)
|
|||||||
GCAL_WINDOW_VIEW_MONTH,
|
GCAL_WINDOW_VIEW_MONTH,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
|
g_object_class_install_property (
|
||||||
|
object_class,
|
||||||
|
PROP_MANAGER,
|
||||||
|
g_param_spec_pointer ("manager",
|
||||||
|
"The manager object",
|
||||||
|
"A weak reference to the app manager object",
|
||||||
|
G_PARAM_CONSTRUCT_ONLY |
|
||||||
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_object_class_install_property (
|
g_object_class_install_property (
|
||||||
object_class,
|
object_class,
|
||||||
PROP_ACTIVE_DATE,
|
PROP_ACTIVE_DATE,
|
||||||
@@ -1118,15 +1188,6 @@ gcal_window_class_init(GcalWindowClass *klass)
|
|||||||
FALSE,
|
FALSE,
|
||||||
G_PARAM_READWRITE));
|
G_PARAM_READWRITE));
|
||||||
|
|
||||||
g_object_class_install_property (
|
|
||||||
object_class,
|
|
||||||
PROP_MANAGER,
|
|
||||||
g_param_spec_pointer ("manager",
|
|
||||||
"The manager object",
|
|
||||||
"A weak reference to the app manager object",
|
|
||||||
G_PARAM_CONSTRUCT_ONLY |
|
|
||||||
G_PARAM_READWRITE));
|
|
||||||
|
|
||||||
/* widgets */
|
/* widgets */
|
||||||
gtk_widget_class_bind_template_child_private (widget_class, GcalWindow, header_bar);
|
gtk_widget_class_bind_template_child_private (widget_class, GcalWindow, header_bar);
|
||||||
gtk_widget_class_bind_template_child_private (widget_class, GcalWindow, main_box);
|
gtk_widget_class_bind_template_child_private (widget_class, GcalWindow, main_box);
|
||||||
@@ -1180,6 +1241,10 @@ gcal_window_class_init(GcalWindowClass *klass)
|
|||||||
static void
|
static void
|
||||||
gcal_window_init (GcalWindow *self)
|
gcal_window_init (GcalWindow *self)
|
||||||
{
|
{
|
||||||
|
GcalWindowPrivate *priv = gcal_window_get_instance_private (self);
|
||||||
|
|
||||||
|
priv->active_date = g_new0 (icaltimetype, 1);
|
||||||
|
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1291,8 +1356,7 @@ gcal_window_finalize (GObject *object)
|
|||||||
|
|
||||||
priv = gcal_window_get_instance_private (GCAL_WINDOW (object));
|
priv = gcal_window_get_instance_private (GCAL_WINDOW (object));
|
||||||
|
|
||||||
if (priv->active_date != NULL)
|
g_free (priv->active_date);
|
||||||
g_free (priv->active_date);
|
|
||||||
|
|
||||||
if (priv->views_switcher != NULL)
|
if (priv->views_switcher != NULL)
|
||||||
g_object_unref (priv->views_switcher);
|
g_object_unref (priv->views_switcher);
|
||||||
@@ -1319,9 +1383,7 @@ gcal_window_set_property (GObject *object,
|
|||||||
priv->views[priv->active_view]);
|
priv->views[priv->active_view]);
|
||||||
return;
|
return;
|
||||||
case PROP_ACTIVE_DATE:
|
case PROP_ACTIVE_DATE:
|
||||||
if (priv->active_date != NULL)
|
update_active_date (GCAL_WINDOW (object), g_value_dup_boxed (value));
|
||||||
g_free (priv->active_date);
|
|
||||||
priv->active_date = g_value_dup_boxed (value);
|
|
||||||
return;
|
return;
|
||||||
case PROP_NEW_EVENT_MODE:
|
case PROP_NEW_EVENT_MODE:
|
||||||
set_new_event_mode (GCAL_WINDOW (object), g_value_get_boolean (value));
|
set_new_event_mode (GCAL_WINDOW (object), g_value_get_boolean (value));
|
||||||
@@ -1427,7 +1489,7 @@ gcal_window_new_with_view_and_date (GcalApplication *app,
|
|||||||
|
|
||||||
manager = gcal_application_get_manager (GCAL_APPLICATION (app));
|
manager = gcal_application_get_manager (GCAL_APPLICATION (app));
|
||||||
|
|
||||||
win = g_object_new (GCAL_TYPE_WINDOW, "application", GTK_APPLICATION (app), "active-date", date, "manager", manager,
|
win = g_object_new (GCAL_TYPE_WINDOW, "application", GTK_APPLICATION (app), "manager", manager, "active-date", date,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
/* loading size */
|
/* loading size */
|
||||||
|
|||||||
+2
-28
@@ -120,34 +120,8 @@ update_date (GcalYearView *year_view,
|
|||||||
{
|
{
|
||||||
GcalYearViewPrivate *priv = year_view->priv;
|
GcalYearViewPrivate *priv = year_view->priv;
|
||||||
|
|
||||||
if (priv->date == NULL || priv->date->year != new_date->year)
|
if (priv->date != NULL && priv->date->year != new_date->year && priv->start_selected_date->day != 0)
|
||||||
{
|
reset_sidebar (year_view);
|
||||||
time_t range_start, range_end;
|
|
||||||
icaltimetype date;
|
|
||||||
icaltimezone* default_zone = gcal_manager_get_system_timezone (priv->manager);
|
|
||||||
|
|
||||||
date = *new_date;
|
|
||||||
date.day = 1;
|
|
||||||
date.month = 1;
|
|
||||||
date.hour = 0;
|
|
||||||
date.minute = 0;
|
|
||||||
date.second = 0;
|
|
||||||
date.is_date = 0;
|
|
||||||
range_start = icaltime_as_timet_with_zone (date, default_zone);
|
|
||||||
|
|
||||||
date.day = 31;
|
|
||||||
date.month = 12;
|
|
||||||
date.hour = 23;
|
|
||||||
date.minute = 59;
|
|
||||||
date.second = 0;
|
|
||||||
range_end = icaltime_as_timet_with_zone (date, default_zone);
|
|
||||||
|
|
||||||
gcal_manager_set_subscriber (priv->manager, E_CAL_DATA_MODEL_SUBSCRIBER (year_view), range_start, range_end);
|
|
||||||
gtk_widget_queue_draw (GTK_WIDGET (year_view));
|
|
||||||
|
|
||||||
if (priv->start_selected_date->day != 0)
|
|
||||||
reset_sidebar (year_view);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (priv->date != NULL)
|
if (priv->date != NULL)
|
||||||
g_free (priv->date);
|
g_free (priv->date);
|
||||||
|
|||||||
Reference in New Issue
Block a user