From 09fe510937e01561524c8fc819e6be242b84c841 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Tue, 16 May 2017 14:44:39 -0300 Subject: [PATCH] views: use the new GcalClock to redraw Instead of having each view manage it's own timeout (or even worse, making GcalWindow manage it), use the newly introduced GcalClock API to do that. --- src/gcal-window.c | 24 ------------------------ src/views/gcal-month-view.c | 5 +++++ src/views/gcal-week-grid.c | 28 +++++----------------------- src/views/gcal-week-header.c | 28 +++++----------------------- src/views/gcal-year-view.c | 5 +++++ 5 files changed, 20 insertions(+), 70 deletions(-) diff --git a/src/gcal-window.c b/src/gcal-window.c index 6007c878..ac726692 100644 --- a/src/gcal-window.c +++ b/src/gcal-window.c @@ -159,7 +159,6 @@ struct _GcalWindow gint refresh_timeout; gint refresh_timeout_id; gint open_edit_dialog_timeout_id; - gint update_current_date_timeout_id; /* temp to keep event_creation */ gboolean open_edit_dialog; @@ -492,21 +491,6 @@ key_pressed (GtkWidget *widget, event); } -static gboolean -update_current_date (GcalWindow *self) -{ - GCAL_ENTRY; - - if (self->update_current_date_timeout_id == 0) - self->update_current_date_timeout_id = g_timeout_add_seconds (60, (GSourceFunc) update_current_date, self); - - gtk_widget_queue_draw (self->views[GCAL_WINDOW_VIEW_WEEK]); - gtk_widget_queue_draw (self->views[GCAL_WINDOW_VIEW_MONTH]); - gtk_widget_queue_draw (self->views[GCAL_WINDOW_VIEW_YEAR]); - - GCAL_RETURN (G_SOURCE_CONTINUE); -} - static void search_event_selected (GcalSearchView *search_view, icaltimetype *date, @@ -1293,12 +1277,6 @@ gcal_window_finalize (GObject *object) window->open_edit_dialog_timeout_id = 0; } - if (window->update_current_date_timeout_id > 0) - { - g_source_remove (window->update_current_date_timeout_id); - window->update_current_date_timeout_id = 0; - } - /* If we have a queued event to delete, remove it now */ if (window->event_to_delete) { @@ -1657,8 +1635,6 @@ gcal_window_init (GcalWindow *self) gcal_window_add_accelerator (app, "win.change-view(1)", "1") gcal_window_add_accelerator (app, "win.change-view(2)", "2"); gcal_window_add_accelerator (app, "win.change-view(3)", "3"); - - update_current_date (self); } /* Public API */ diff --git a/src/views/gcal-month-view.c b/src/views/gcal-month-view.c index 80db0d81..280b0421 100644 --- a/src/views/gcal-month-view.c +++ b/src/views/gcal-month-view.c @@ -2307,4 +2307,9 @@ gcal_month_view_set_manager (GcalMonthView *self, g_return_if_fail (GCAL_IS_MONTH_VIEW (self)); self->manager = manager; + + g_signal_connect_swapped (gcal_manager_get_clock (manager), + "day-changed", + G_CALLBACK (gtk_widget_queue_draw), + self); } diff --git a/src/views/gcal-week-grid.c b/src/views/gcal-week-grid.c index 68d0d871..20ddb48e 100644 --- a/src/views/gcal-week-grid.c +++ b/src/views/gcal-week-grid.c @@ -59,7 +59,6 @@ struct _GcalWeekGrid GcalRangeTree *events; gboolean children_changed; - gint redraw_timeout_id; /* * These fields are "cells" rather than minutes. Each cell @@ -250,12 +249,6 @@ gcal_week_grid_finalize (GObject *object) g_clear_pointer (&self->events, gcal_range_tree_unref); g_clear_pointer (&self->active_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); } @@ -418,14 +411,6 @@ get_today_column (GcalWeekGrid *self) return days_diff; } -static gboolean -on_redraw_timeout_cb (gpointer data) -{ - gtk_widget_queue_draw (data); - - return G_SOURCE_CONTINUE; -} - static gboolean gcal_week_grid_draw (GtkWidget *widget, cairo_t *cr) @@ -588,14 +573,6 @@ gcal_week_grid_draw (GtkWidget *widget, gtk_style_context_restore (context); } - /* Fire the redraw timeout if needed */ - if (self->redraw_timeout_id == 0) - { - self->redraw_timeout_id = g_timeout_add_seconds (5, - on_redraw_timeout_cb, - self); - } - return FALSE; } @@ -1124,6 +1101,11 @@ gcal_week_grid_set_manager (GcalWeekGrid *self, g_return_if_fail (GCAL_IS_WEEK_GRID (self)); self->manager = manager; + + g_signal_connect_swapped (gcal_manager_get_clock (manager), + "minute-changed", + G_CALLBACK (gtk_widget_queue_draw), + self); } void diff --git a/src/views/gcal-week-header.c b/src/views/gcal-week-header.c index d305b83d..9d10841a 100644 --- a/src/views/gcal-week-header.c +++ b/src/views/gcal-week-header.c @@ -67,7 +67,6 @@ struct _GcalWeekHeader gboolean expanded; gboolean use_24h_format; - gint redraw_timeout_id; icaltimetype *active_date; @@ -976,14 +975,6 @@ on_expand_action_activated (GcalWeekHeader *self, header_expand (self); } -static gboolean -on_redraw_timeout_cb (gpointer data) -{ - gtk_widget_queue_draw (data); - - return G_SOURCE_CONTINUE; -} - /* Drawing area content and size */ static gdouble get_weekday_names_height (GtkWidget *widget) @@ -1038,12 +1029,6 @@ gcal_week_header_finalize (GObject *object) g_clear_pointer (&self->active_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]); } @@ -1292,14 +1277,6 @@ 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) on_redraw_timeout_cb, - self); - } - g_clear_pointer (&week_start, g_date_time_unref); g_clear_pointer (&week_end, g_date_time_unref); @@ -1526,6 +1503,11 @@ gcal_week_header_set_manager (GcalWeekHeader *self, g_return_if_fail (GCAL_IS_WEEK_HEADER (self)); self->manager = manager; + + g_signal_connect_swapped (gcal_manager_get_clock (manager), + "day-changed", + G_CALLBACK (gtk_widget_queue_draw), + self); } void diff --git a/src/views/gcal-year-view.c b/src/views/gcal-year-view.c index 982c0c66..0b0554ec 100644 --- a/src/views/gcal-year-view.c +++ b/src/views/gcal-year-view.c @@ -2035,6 +2035,11 @@ gcal_year_view_set_manager (GcalYearView *year_view, GcalManager *manager) { year_view->manager = manager; + + g_signal_connect_swapped (gcal_manager_get_clock (manager), + "day-changed", + G_CALLBACK (gtk_widget_queue_draw), + year_view->navigator); } void