week-header, week-grid: update drawing when time changes

When minutes change, the week grid should update the today strip
if it's visible and, if the day change, week header should update
the blue week name.
This commit is contained in:
Georges Basile Stavracas Neto
2016-12-08 19:33:20 -02:00
parent 23010afa1a
commit 6d4f719829
2 changed files with 32 additions and 0 deletions
+17
View File
@@ -58,6 +58,7 @@ struct _GcalWeekGrid
GcalRangeTree *events;
gboolean children_changed;
gint redraw_timeout_id;
GcalManager *manager;
};
@@ -172,6 +173,12 @@ gcal_week_grid_finalize (GObject *object)
g_clear_pointer (&self->active_date, g_free);
g_clear_pointer (&self->current_date, g_free);
if (self->redraw_timeout_id > 0)
{
g_source_remove (self->redraw_timeout_id);
self->redraw_timeout_id = 0;
}
G_OBJECT_CLASS (gcal_week_grid_parent_class)->finalize (object);
}
@@ -364,6 +371,7 @@ gcal_week_grid_draw (GtkWidget *widget,
{
GtkStyleContext *context;
GtkStateFlags state;
GcalWeekGrid *self;
GtkBorder padding;
GdkRGBA color;
@@ -372,6 +380,7 @@ gcal_week_grid_draw (GtkWidget *widget,
PangoLayout *layout;
PangoFontDescription *font_desc;
self = GCAL_WEEK_GRID (widget);
context = gtk_widget_get_style_context (widget);
state = gtk_widget_get_state_flags (widget);
@@ -450,6 +459,14 @@ gcal_week_grid_draw (GtkWidget *widget,
GTK_WIDGET_CLASS (gcal_week_grid_parent_class)->draw (widget, cr);
/* Fire the redraw timeout if needed */
if (self->redraw_timeout_id == 0)
{
self->redraw_timeout_id = g_timeout_add_seconds (5,
(GSourceFunc) gtk_widget_queue_draw,
self);
}
return FALSE;
}
+15
View File
@@ -64,6 +64,7 @@ struct _GcalWeekHeader
gboolean expanded;
gboolean use_24h_format;
gint redraw_timeout_id;
icaltimetype *active_date;
icaltimetype *current_date;
@@ -921,6 +922,12 @@ gcal_week_header_finalize (GObject *object)
g_clear_pointer (&self->active_date, g_free);
g_clear_pointer (&self->current_date, g_free);
if (self->redraw_timeout_id > 0)
{
g_source_remove (self->redraw_timeout_id);
self->redraw_timeout_id = 0;
}
for (i = 0; i < 7; i++)
g_list_free (self->events[i]);
}
@@ -1143,6 +1150,14 @@ gcal_week_header_draw (GtkWidget *widget,
GTK_WIDGET_CLASS (gcal_week_header_parent_class)->draw (widget, cr);
/* Fire the redraw timeout if needed */
if (self->redraw_timeout_id == 0)
{
self->redraw_timeout_id = g_timeout_add_seconds (5,
(GSourceFunc) gtk_widget_queue_draw,
self);
}
g_clear_pointer (&week_start, g_date_time_unref);
g_clear_pointer (&week_end, g_date_time_unref);