From cfa8794313e9ca3cb53817e00424a90e7f9021d2 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 4 May 2018 21:37:53 -0300 Subject: [PATCH] manager: Move GcalClock to GcalApplication GcalManager is basically an object that is shared among classes that need to modify calendars, while GcalClock is just a wall clock implementation. Move it to GcalApplication, so that objects without access to GcalManager can still access the clock. --- src/gcal-application.c | 23 +++++++++++++++++++++++ src/gcal-application.h | 3 +++ src/gcal-manager.c | 32 -------------------------------- src/gcal-manager.h | 4 ---- src/views/gcal-month-cell.c | 26 +++++++++++++++++--------- src/views/gcal-month-view.c | 21 ++++++++++++++++----- src/views/gcal-week-grid.c | 20 +++++++++++++++----- src/views/gcal-week-header.c | 20 +++++++++++++++----- src/views/gcal-year-view.c | 20 ++++++++++++++------ 9 files changed, 103 insertions(+), 66 deletions(-) diff --git a/src/gcal-application.c b/src/gcal-application.c index 94e06c8e..31d95513 100644 --- a/src/gcal-application.c +++ b/src/gcal-application.c @@ -55,6 +55,8 @@ struct _GcalApplication GcalWeatherService *weather_service; GcalShellSearchProvider *search_provider; + + GcalClock *clock; }; static void gcal_application_create_new_event (GSimpleAction *new_event, @@ -121,6 +123,7 @@ static const GActionEntry gcal_app_entries[] = { enum { PROP_0, + PROP_CLOCK, PROP_MANAGER, PROP_TIME_FORMAT, PROP_WEATHER_SERVICE, @@ -229,6 +232,7 @@ gcal_application_finalize (GObject *object) g_clear_pointer (&self->initial_date, g_free); g_clear_pointer (&self->uuid, g_free); g_clear_object (&self->colors_provider); + g_clear_object (&self->clock); g_clear_object (&self->desktop_settings); g_clear_object (&self->manager); g_clear_object (&self->provider); @@ -250,6 +254,10 @@ gcal_application_get_property (GObject *object, switch (property_id) { + case PROP_CLOCK: + g_value_set_object (value, self->clock); + break; + case PROP_MANAGER: g_value_set_object (value, self->manager); break; @@ -506,6 +514,12 @@ gcal_application_class_init (GcalApplicationClass *klass) application_class->dbus_register = gcal_application_dbus_register; application_class->dbus_unregister = gcal_application_dbus_unregister; + properties[PROP_CLOCK] = g_param_spec_object ("clock", + "Clock", + "The internal clock of Calendar", + GCAL_TYPE_CLOCK, + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + properties[PROP_MANAGER] = g_param_spec_object ("manager", "The manager object", "The manager object", @@ -533,6 +547,7 @@ gcal_application_init (GcalApplication *self) { g_application_add_main_option_entries (G_APPLICATION (self), gcal_application_goptions); + self->clock = gcal_clock_new (); self->manager = gcal_manager_new (); g_signal_connect_swapped (self->manager, "source-added", G_CALLBACK (process_sources), self); g_signal_connect_swapped (self->manager, "source-changed", G_CALLBACK (process_sources), self); @@ -729,3 +744,11 @@ gcal_application_set_initial_date (GcalApplication *self, g_clear_pointer (&self->initial_date, g_date_time_unref); self->initial_date = datetime_to_icaltime (initial_date); } + +GcalClock* +gcal_application_get_clock (GcalApplication *self) +{ + g_return_val_if_fail (GCAL_IS_APPLICATION (self), NULL); + + return self->clock; +} diff --git a/src/gcal-application.h b/src/gcal-application.h index 224f1929..7caa9aff 100644 --- a/src/gcal-application.h +++ b/src/gcal-application.h @@ -20,6 +20,7 @@ #ifndef _GCAL_APPLICATION_H_ #define _GCAL_APPLICATION_H_ +#include "gcal-clock.h" #include "gcal-weather-service.h" #include "gcal-manager.h" @@ -43,6 +44,8 @@ void gcal_application_set_uuid (GcalApplicatio void gcal_application_set_initial_date (GcalApplication *self, GDateTime *initial_date); +GcalClock* gcal_application_get_clock (GcalApplication *self); + G_END_DECLS #endif /* _GCAL_APPLICATION_H_ */ diff --git a/src/gcal-manager.c b/src/gcal-manager.c index d36b07da..54131aa8 100644 --- a/src/gcal-manager.c +++ b/src/gcal-manager.c @@ -90,8 +90,6 @@ struct _GcalManager GoaClient *goa_client; - GcalClock *clock; - /* state flags */ gboolean goa_client_ready; gint sources_at_launch; @@ -108,7 +106,6 @@ G_DEFINE_TYPE (GcalManager, gcal_manager, G_TYPE_OBJECT) enum { PROP_0, - PROP_CLOCK, PROP_DEFAULT_CALENDAR, PROP_LOADING, PROP_SETTINGS, @@ -776,7 +773,6 @@ gcal_manager_finalize (GObject *object) GCAL_ENTRY; - g_clear_object (&self->clock); g_clear_object (&self->settings); g_clear_object (&self->goa_client); g_clear_object (&self->e_data_model); @@ -871,17 +867,6 @@ gcal_manager_class_init (GcalManagerClass *klass) object_class->set_property = gcal_manager_set_property; object_class->get_property = gcal_manager_get_property; - /** - * GcalManager:clock: - * - * The internal clock of Calendar. - */ - properties[PROP_CLOCK] = g_param_spec_object ("clock", - "Clock", - "The internal clock of Calendar", - GCAL_TYPE_CLOCK, - G_PARAM_READWRITE); - /** * GcalManager:default-calendar: * @@ -964,7 +949,6 @@ gcal_manager_class_init (GcalManagerClass *klass) static void gcal_manager_init (GcalManager *self) { - self->clock = gcal_clock_new (); self->settings = g_settings_new ("org.gnome.calendar"); self->system_timezone = e_cal_util_get_system_timezone (); } @@ -1856,22 +1840,6 @@ gcal_manager_get_loading (GcalManager *self) return !self->goa_client_ready || self->sources_at_launch > 0; } -/** - * gcal_manager_get_clock: - * @self: a #GcalManager - * - * Retrieves the internal #GcalClock of @self. - * - * Returns: (transfer none): a #GcalClock. - */ -GcalClock* -gcal_manager_get_clock (GcalManager *self) -{ - g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL); - - return self->clock; -} - /** * gcal_manager_get_event_from_shell_search: * @self: a #GcalManager diff --git a/src/gcal-manager.h b/src/gcal-manager.h index 56f44555..ce47016e 100644 --- a/src/gcal-manager.h +++ b/src/gcal-manager.h @@ -20,7 +20,6 @@ #define __GCAL_MANAGER_H__ #include "e-cal-data-model.h" -#include "gcal-clock.h" #include "gcal-event.h" #include @@ -107,9 +106,6 @@ GList* gcal_manager_get_events (GcalManager gboolean gcal_manager_get_loading (GcalManager *self); -/* Clock */ -GcalClock* gcal_manager_get_clock (GcalManager *self); - /* Online Accounts */ GoaClient* gcal_manager_get_goa_client (GcalManager *self); diff --git a/src/views/gcal-month-cell.c b/src/views/gcal-month-cell.c index cf6d7140..652b15de 100644 --- a/src/views/gcal-month-cell.c +++ b/src/views/gcal-month-cell.c @@ -20,6 +20,8 @@ #define G_LOG_DOMAIN "GcalMonthCell" #include "config.h" +#include "gcal-application.h" +#include "gcal-clock.h" #include "gcal-event-widget.h" #include "gcal-utils.h" #include "gcal-month-cell.h" @@ -445,8 +447,9 @@ gcal_month_cell_class_init (GcalMonthCellClass *klass) static void gcal_month_cell_init (GcalMonthCell *self) { - gtk_widget_init_template (GTK_WIDGET (self)); + GcalApplication *application; + gtk_widget_init_template (GTK_WIDGET (self)); /* Setup the month cell as a drag n' drop destination */ gtk_drag_dest_set (GTK_WIDGET (self), @@ -454,6 +457,18 @@ gcal_month_cell_init (GcalMonthCell *self) NULL, 0, GDK_ACTION_MOVE); + + /* Connect to the wall clock */ + application = GCAL_APPLICATION (g_application_get_default ()); + + g_assert (application != NULL); + + g_signal_connect_object (gcal_application_get_clock (application), + "day-changed", + G_CALLBACK (day_changed_cb), + self, + 0); + } GtkWidget* @@ -576,14 +591,7 @@ gcal_month_cell_set_manager (GcalMonthCell *self, g_return_if_fail (GCAL_IS_MONTH_CELL (self)); if (g_set_object (&self->manager, manager)) - { - g_signal_connect_swapped (gcal_manager_get_clock (manager), - "day-changed", - G_CALLBACK (day_changed_cb), - self); - - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_MANAGER]); - } + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_MANAGER]); } guint diff --git a/src/views/gcal-month-view.c b/src/views/gcal-month-view.c index 723288a4..18d27044 100644 --- a/src/views/gcal-month-view.c +++ b/src/views/gcal-month-view.c @@ -21,6 +21,8 @@ #include "config.h" #include "e-cal-data-model-subscriber.h" +#include "gcal-application.h" +#include "gcal-clock.h" #include "gcal-debug.h" #include "gcal-month-cell.h" #include "gcal-month-popover.h" @@ -2087,11 +2089,6 @@ gcal_month_view_set_property (GObject *object, case PROP_MANAGER: self->manager = g_value_dup_object (value); - g_signal_connect_swapped (gcal_manager_get_clock (self->manager), - "day-changed", - G_CALLBACK (update_month_cells), - self); - for (i = 0; i < 42; i++) gcal_month_cell_set_manager (GCAL_MONTH_CELL (self->month_cell[i / 7][i % 7]), self->manager); @@ -2220,6 +2217,8 @@ gcal_month_view_class_init (GcalMonthViewClass *klass) static void gcal_month_view_init (GcalMonthView *self) { + GcalApplication *application; + gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); @@ -2254,5 +2253,17 @@ gcal_month_view_init (GcalMonthView *self) G_BINDING_DEFAULT); g_signal_connect (self->overflow_popover, "event-activated", G_CALLBACK (on_month_popover_event_activated_cb), self); + + + /* Connect to the wall clock */ + application = GCAL_APPLICATION (g_application_get_default ()); + + g_assert (application != NULL); + + g_signal_connect_object (gcal_application_get_clock (application), + "day-changed", + G_CALLBACK (update_month_cells), + self, + G_CONNECT_SWAPPED); } diff --git a/src/views/gcal-week-grid.c b/src/views/gcal-week-grid.c index 1bb091f1..89252cf9 100644 --- a/src/views/gcal-week-grid.c +++ b/src/views/gcal-week-grid.c @@ -19,6 +19,8 @@ #define G_LOG_DOMAIN "GcalWeekGrid" +#include "gcal-application.h" +#include "gcal-clock.h" #include "gcal-debug.h" #include "gcal-week-grid.h" #include "gcal-week-view.h" @@ -1109,6 +1111,8 @@ gcal_week_grid_class_init (GcalWeekGridClass *klass) static void gcal_week_grid_init (GcalWeekGrid *self) { + GcalApplication *application; + gtk_widget_set_has_window (GTK_WIDGET (self), FALSE); self->selection_start = -1; @@ -1123,6 +1127,17 @@ gcal_week_grid_init (GcalWeekGrid *self) NULL, 0, GDK_ACTION_MOVE); + + /* Connect to the wall clock */ + application = GCAL_APPLICATION (g_application_get_default ()); + + g_assert (application != NULL); + + g_signal_connect_object (gcal_application_get_clock (application), + "minute-changed", + G_CALLBACK (gtk_widget_queue_draw), + self, + G_CONNECT_SWAPPED); } /* Public API */ @@ -1133,11 +1148,6 @@ 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 a62744c8..c2ef011d 100644 --- a/src/views/gcal-week-header.c +++ b/src/views/gcal-week-header.c @@ -21,6 +21,8 @@ #define G_LOG_DOMAIN "GcalWeekHeader" +#include "gcal-application.h" +#include "gcal-clock.h" #include "gcal-debug.h" #include "gcal-event-widget.h" #include "gcal-utils.h" @@ -1664,6 +1666,8 @@ gcal_week_header_class_init (GcalWeekHeaderClass *kclass) static void gcal_week_header_init (GcalWeekHeader *self) { + GcalApplication *application; + self->expanded = FALSE; self->selection_start = -1; self->selection_end = -1; @@ -1683,6 +1687,17 @@ G_GNUC_END_IGNORE_DEPRECATIONS NULL, 0, GDK_ACTION_MOVE); + + /* Connect to the wall clock */ + application = GCAL_APPLICATION (g_application_get_default ()); + + g_assert (application != NULL); + + g_signal_connect_object (gcal_application_get_clock (application), + "day-changed", + G_CALLBACK (gtk_widget_queue_draw), + self, + G_CONNECT_SWAPPED); } /* Private API */ @@ -1813,11 +1828,6 @@ 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 1fb64e8e..14f5b9de 100644 --- a/src/views/gcal-year-view.c +++ b/src/views/gcal-year-view.c @@ -18,6 +18,8 @@ #define G_LOG_DOMAIN "GcalYearView" +#include "gcal-application.h" +#include "gcal-clock.h" #include "gcal-debug.h" #include "gcal-year-view.h" #include "gcal-view.h" @@ -1662,12 +1664,6 @@ gcal_year_view_set_property (GObject *object, case PROP_MANAGER: self->manager = g_value_dup_object (value); - - g_signal_connect_swapped (gcal_manager_get_clock (self->manager), - "day-changed", - G_CALLBACK (gtk_widget_queue_draw), - self->navigator); - g_object_notify (object, "manager"); break; @@ -2011,6 +2007,7 @@ gcal_year_view_class_init (GcalYearViewClass *klass) static void gcal_year_view_init (GcalYearView *self) { + GcalApplication *application; guint i; self->weather_service = NULL; @@ -2053,6 +2050,17 @@ gcal_year_view_init (GcalYearView *self) NULL, 0, GDK_ACTION_MOVE); + + /* Connect to the wall clock */ + application = GCAL_APPLICATION (g_application_get_default ()); + + g_assert (application != NULL); + + g_signal_connect_object (gcal_application_get_clock (application), + "day-changed", + G_CALLBACK (gtk_widget_queue_draw), + self, + G_CONNECT_SWAPPED); } static void