[gnome-calendar] manager: Handle default calendars via GcalCalendar



commit bb8d5b92ce495b1c3ae980d9db4e9648f9c8ef0b
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat May 4 11:51:39 2019 -0300

    manager: Handle default calendars via GcalCalendar

 src/core/gcal-manager.c      | 55 ++++++++++++++++++--------------------------
 src/core/gcal-manager.h      |  6 ++---
 src/gcal-quick-add-popover.c | 19 ++++-----------
 src/gcal-source-dialog.c     | 16 +++++++++----
 src/gcal-window.c            |  4 +---
 5 files changed, 43 insertions(+), 57 deletions(-)
---
diff --git a/src/core/gcal-manager.c b/src/core/gcal-manager.c
index f986b20d..6da447f5 100644
--- a/src/core/gcal-manager.c
+++ b/src/core/gcal-manager.c
@@ -335,12 +335,8 @@ on_event_created (GObject      *source_object,
     }
   else
     {
-      GcalCalendar *calendar;
-
       g_object_ref (data->event);
-
-      calendar = gcal_event_get_calendar (data->event);
-      gcal_manager_set_default_source (data->manager, gcal_calendar_get_source (calendar));
+      gcal_manager_set_default_calendar (data->manager, gcal_event_get_calendar (data->event));
       g_debug ("Event: %s created successfully", new_uid);
     }
 
@@ -636,19 +632,7 @@ gcal_manager_set_property (GObject      *object,
   switch (property_id)
     {
     case PROP_DEFAULT_CALENDAR:
-        {
-          ESource *source;
-
-          source = e_source_registry_ref_default_calendar (self->source_registry);
-          g_object_unref (source);
-
-          /* Only notify a change when they're different, otherwise we'll end up in a notify loop */
-          if (g_value_get_object (value) == source)
-            break;
-
-          e_source_registry_set_default_calendar (self->source_registry, g_value_get_object (value));
-          g_object_notify (object, "default-calendar");
-        }
+      gcal_manager_set_default_calendar (self, g_value_get_object (value));
       break;
 
     default:
@@ -671,7 +655,7 @@ gcal_manager_get_property (GObject    *object,
   switch (property_id)
     {
     case PROP_DEFAULT_CALENDAR:
-      g_value_take_object (value, e_source_registry_ref_default_calendar (self->source_registry));
+      g_value_set_object (value, gcal_manager_get_default_calendar (self));
       break;
 
     default:
@@ -700,8 +684,8 @@ gcal_manager_class_init (GcalManagerClass *klass)
   properties[PROP_DEFAULT_CALENDAR] = g_param_spec_object ("default-calendar",
                                                            "Default calendar",
                                                            "The default calendar",
-                                                           E_TYPE_SOURCE,
-                                                           G_PARAM_READWRITE);
+                                                           GCAL_TYPE_CALENDAR,
+                                                           G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
 
   g_object_class_install_properties (object_class, NUM_PROPS, properties);
 
@@ -796,34 +780,41 @@ gcal_manager_get_calendar_from_source (GcalManager *self,
 }
 
 /**
- * gcal_manager_get_default_source:
+ * gcal_manager_get_default_calendar:
  * @self: a #GcalManager
  *
- * Returns: (transfer full): an #ESource object. Free
- * with g_object_unref().
+ * Returns: (transfer none): a #GcalCalendar.
  */
-ESource*
-gcal_manager_get_default_source (GcalManager *self)
+GcalCalendar*
+gcal_manager_get_default_calendar (GcalManager *self)
 {
+  g_autoptr (ESource) default_source = NULL;
+
   g_return_val_if_fail (GCAL_IS_MANAGER (self), NULL);
 
-  return e_source_registry_ref_default_calendar (self->source_registry);
+  default_source = e_source_registry_ref_default_calendar (self->source_registry);
+  return g_hash_table_lookup (self->clients, default_source);
 }
 
 /**
- * gcal_manager_set_default_source:
+ * gcal_manager_set_default_calendar:
  * @self: a #GcalManager
- * @source: the new default source.
+ * @calendar: the new default calendar.
  *
  * Sets the default calendar.
  */
 void
-gcal_manager_set_default_source (GcalManager *self,
-                                 ESource     *source)
+gcal_manager_set_default_calendar (GcalManager  *self,
+                                   GcalCalendar *calendar)
 {
   g_return_if_fail (GCAL_IS_MANAGER (self));
 
-  e_source_registry_set_default_calendar (self->source_registry, source);
+  if (calendar == gcal_manager_get_default_calendar (self))
+    return;
+
+  e_source_registry_set_default_calendar (self->source_registry,
+                                          gcal_calendar_get_source (calendar));
+  g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DEFAULT_CALENDAR]);
 }
 
 /**
diff --git a/src/core/gcal-manager.h b/src/core/gcal-manager.h
index 3556009e..9c3036b2 100644
--- a/src/core/gcal-manager.h
+++ b/src/core/gcal-manager.h
@@ -40,10 +40,10 @@ GcalCalendar*        gcal_manager_get_calendar_from_source       (GcalManager
 
 GList*               gcal_manager_get_calendars                  (GcalManager        *self);
 
-ESource*             gcal_manager_get_default_source             (GcalManager        *self);
+GcalCalendar*        gcal_manager_get_default_calendar           (GcalManager        *self);
 
-void                 gcal_manager_set_default_source             (GcalManager        *self,
-                                                                  ESource            *source);
+void                 gcal_manager_set_default_calendar           (GcalManager        *self,
+                                                                  GcalCalendar       *calendar);
 
 void                 gcal_manager_set_subscriber                 (GcalManager        *self,
                                                                   ECalDataModelSubscriber *subscriber,
diff --git a/src/gcal-quick-add-popover.c b/src/gcal-quick-add-popover.c
index 43ea74f4..a1d7a4cf 100644
--- a/src/gcal-quick-add-popover.c
+++ b/src/gcal-quick-add-popover.c
@@ -490,16 +490,12 @@ update_default_calendar_row (GcalQuickAddPopover *self)
   GcalCalendar *default_calendar;
   GcalManager *manager;
   GtkWidget *row;
-  ESource *default_source;
 
   manager = gcal_context_get_manager (self->context);
-  default_source = gcal_manager_get_default_source (manager);
-  default_calendar = gcal_manager_get_calendar_from_source (manager, default_source);
+  default_calendar = gcal_manager_get_default_calendar (manager);
 
   row = get_row_for_calendar (self, default_calendar);
   select_row (self, GTK_LIST_BOX_ROW (row));
-
-  g_clear_object (&default_source);
 }
 
 
@@ -512,26 +508,21 @@ on_calendar_added (GcalManager         *manager,
                    GcalCalendar        *calendar,
                    GcalQuickAddPopover *self)
 {
-  ESource *default_source;
+  GcalCalendar *default_calendar;
   GtkWidget *row;
 
   /* Since we can't add on read-only calendars, lets not show them at all */
   if (gcal_calendar_is_read_only (calendar))
     return;
 
-  default_source = gcal_manager_get_default_source (manager);
+  default_calendar = gcal_manager_get_default_calendar (manager);
   row = create_calendar_row (manager, calendar);
 
   gtk_container_add (GTK_CONTAINER (self->calendars_listbox), row);
 
   /* Select the default source whe first adding events */
-  if (gcal_calendar_get_source (calendar) == default_source &&
-      !self->selected_row)
-    {
-      select_row (self, GTK_LIST_BOX_ROW (row));
-    }
-
-  g_clear_object (&default_source);
+  if (calendar == default_calendar && !self->selected_row)
+    select_row (self, GTK_LIST_BOX_ROW (row));
 }
 
 static void
diff --git a/src/gcal-source-dialog.c b/src/gcal-source-dialog.c
index 4fd10706..a4000728 100644
--- a/src/gcal-source-dialog.c
+++ b/src/gcal-source-dialog.c
@@ -558,14 +558,15 @@ default_check_toggled (GObject    *object,
 {
   GcalSourceDialog *self = GCAL_SOURCE_DIALOG (user_data);
   GcalManager *manager;
+  ESource *new_default_source;
 
   manager = gcal_context_get_manager (self->context);
 
   /* Retrieve the current default source */
   if (self->old_default_source == NULL)
     {
-      self->old_default_source = gcal_manager_get_default_source (manager);
-      g_object_unref (self->old_default_source);
+      GcalCalendar *default_calendar = gcal_manager_get_default_calendar (manager);
+      self->old_default_source = gcal_calendar_get_source (default_calendar);
     }
 
   /**
@@ -574,9 +575,12 @@ default_check_toggled (GObject    *object,
    * default source.
    */
   if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object)))
-    gcal_manager_set_default_source (manager, self->source);
+    new_default_source = self->source;
   else
-    gcal_manager_set_default_source (manager, self->old_default_source);
+    new_default_source = self->old_default_source;
+
+  gcal_manager_set_default_calendar (manager,
+                                     gcal_manager_get_calendar_from_source (manager, new_default_source));
 }
 
 static gboolean
@@ -865,11 +869,13 @@ stack_visible_child_name_changed (GObject    *object,
    */
   if (visible_child == self->edit_grid && self->source != NULL)
     {
+      GcalCalendar *default_calendar;
       ESource *default_source;
       gchar *parent_name;
       gboolean creation_mode, is_goa, is_file, is_remote;
 
-      default_source = gcal_manager_get_default_source (manager);
+      default_calendar = gcal_manager_get_default_calendar (manager);
+      default_source = gcal_calendar_get_source (default_calendar);
       creation_mode = (self->mode == GCAL_SOURCE_DIALOG_MODE_CREATE ||
                        self->mode == GCAL_SOURCE_DIALOG_MODE_CREATE_WEB);
       is_goa = is_goa_source (GCAL_SOURCE_DIALOG (user_data), self->source);
diff --git a/src/gcal-window.c b/src/gcal-window.c
index 45687b41..06b22dcb 100644
--- a/src/gcal-window.c
+++ b/src/gcal-window.c
@@ -672,7 +672,6 @@ create_event_detailed_cb (GcalView *view,
                           gpointer  end_span,
                           gpointer  user_data)
 {
-  g_autoptr (ESource) default_source = NULL;
   GcalWindow *window = GCAL_WINDOW (user_data);
   GcalCalendar *default_calendar;
   GcalManager *manager;
@@ -681,8 +680,7 @@ create_event_detailed_cb (GcalView *view,
 
   manager = gcal_context_get_manager (window->context);
   comp = build_component_from_details ("", start_span, end_span);
-  default_source = gcal_manager_get_default_source (manager);
-  default_calendar = gcal_manager_get_calendar_from_source (manager, default_source);
+  default_calendar = gcal_manager_get_default_calendar (manager);
   event = gcal_event_new (default_calendar, comp, NULL);
 
   gcal_edit_dialog_set_event_is_new (GCAL_EDIT_DIALOG (window->edit_dialog), TRUE);


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