[gnome-calendar/gnome-3-28] manager: Move GcalClock to GcalApplication



commit 970273fc6aca8b13cd9698a3b7d5ee50d4e69176
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Fri May 4 21:37:53 2018 -0300

    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 <libical/icaltime.h>
@@ -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


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]