[gnome-todo/wip/lists] manager: use GtdStorage as function param



commit b9257322bc9298e0764b3dfec579b2f991c72610
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Sat Jun 20 23:34:32 2015 -0300

    manager: use GtdStorage as function param

 src/gtd-initial-setup-window.c |    2 +-
 src/gtd-manager.c              |   71 ++++++++++++++++++++++++++++++++++------
 src/gtd-manager.h              |    4 +-
 src/gtd-storage-selector.c     |   46 +++++++++++++++++++++++++-
 4 files changed, 109 insertions(+), 14 deletions(-)
---
diff --git a/src/gtd-initial-setup-window.c b/src/gtd-initial-setup-window.c
index 286ede1..9ab26ce 100644
--- a/src/gtd-initial-setup-window.c
+++ b/src/gtd-initial-setup-window.c
@@ -70,7 +70,7 @@ gtd_initial_setup_window__location_selected (GtdInitialSetupWindow *window,
   gtk_widget_set_sensitive (priv->done_button, storage != NULL);
 
   if (storage)
-    gtd_manager_set_default_storage (priv->manager, gtd_storage_get_id (storage));
+    gtd_manager_set_default_storage (priv->manager, storage);
 }
 
 static void
diff --git a/src/gtd-manager.c b/src/gtd-manager.c
index 5dad4dd..318ed40 100644
--- a/src/gtd-manager.c
+++ b/src/gtd-manager.c
@@ -66,6 +66,7 @@ const gchar *supported_providers[] = {
 
 enum
 {
+  DEFAULT_STORAGE_CHANGED,
   LIST_ADDED,
   LIST_CHANGED,
   LIST_REMOVED,
@@ -128,7 +129,7 @@ gtd_manager__setup_url (GtdManager *manager,
           /* Found an ESourceGoa with the same uid of storage */
           if (g_strcmp0 (e_source_goa_get_account_id (goa_ext), gtd_storage_get_id (storage)) == 0)
             {
-              gtd_storage_set_url (storage, e_source_goa_get_calendar_url (goa_ext));
+              gtd_storage_set_parent (storage, e_source_get_uid (source));
               break;
             }
         }
@@ -955,6 +956,25 @@ gtd_manager_class_init (GtdManagerClass *klass)
                             G_PARAM_READABLE));
 
   /**
+   * GtdManager::default-storage-changed:
+   *
+   * The ::default-storage-changed signal is emmited when a new #GtdStorage
+   * is set as default.
+   */
+  signals[DEFAULT_STORAGE_CHANGED] =
+                  g_signal_new ("default-storage-changed",
+                                GTD_TYPE_MANAGER,
+                                G_SIGNAL_RUN_LAST,
+                                0,
+                                NULL,
+                                NULL,
+                                NULL,
+                                G_TYPE_NONE,
+                                2,
+                                GTD_TYPE_STORAGE,
+                                GTD_TYPE_STORAGE);
+
+  /**
    * GtdManager::list-added:
    *
    * The ::list-added signal is emmited after a #GtdTaskList
@@ -1311,16 +1331,27 @@ gtd_manager_get_storage_locations (GtdManager *manager)
  * gtd_manager_get_default_storage:
  * @manager: a #GtdManager
  *
- * Retrieves the default storage location id. Default is "local".
+ * Retrieves the default storage location. Default is "local".
  *
- * Returns: (transfer full): the default storage id. Free with @g_free after use.
+ * Returns: (transfer none): the default storage.
  */
-gchar*
+GtdStorage*
 gtd_manager_get_default_storage (GtdManager *manager)
 {
+  GtdManagerPrivate *priv;
+  GtdStorage *storage;
+  GList *l;
+  gchar *storage_id;
+
   g_return_val_if_fail (GTD_IS_MANAGER (manager), NULL);
 
-  return g_settings_get_string (manager->priv->settings, "srotage-location");
+  priv = manager->priv;
+  storage = NULL;
+  storage_id = g_settings_get_string (priv->settings, "storage-location");
+
+  g_free (storage_id);
+
+  return storage;
 }
 
 /**
@@ -1333,14 +1364,34 @@ gtd_manager_get_default_storage (GtdManager *manager)
  * Returns:
  */
 void
-gtd_manager_set_default_storage (GtdManager  *manager,
-                                 const gchar *default_storage)
+gtd_manager_set_default_storage (GtdManager *manager,
+                                 GtdStorage *default_storage)
 {
   g_return_if_fail (GTD_IS_MANAGER (manager));
 
-  g_settings_set_string (manager->priv->settings,
-                         "storage-location",
-                         default_storage);
+  if (!gtd_storage_get_is_default (default_storage))
+    {
+      GtdStorage *previus_default = NULL;
+      GList *l;
+
+      g_settings_set_string (manager->priv->settings,
+                             "storage-location",
+                             gtd_storage_get_id (default_storage));
+
+      for (l = manager->priv->storage_locations; l != NULL; l = l->next)
+        {
+          if (gtd_storage_get_is_default (l->data))
+            previus_default = l->data;
+
+          gtd_storage_set_is_default (l->data, l->data == default_storage);
+        }
+
+      g_signal_emit (manager,
+                     signals[DEFAULT_STORAGE_CHANGED],
+                     0,
+                     default_storage,
+                     previus_default);
+    }
 }
 
 /**
diff --git a/src/gtd-manager.h b/src/gtd-manager.h
index 41e5058..70ab3d5 100644
--- a/src/gtd-manager.h
+++ b/src/gtd-manager.h
@@ -63,10 +63,10 @@ GoaClient*              gtd_manager_get_goa_client        (GtdManager
 gboolean                gtd_manager_is_goa_client_ready   (GtdManager           *manager);
 
 /* Settings */
-gchar*                  gtd_manager_get_default_storage   (GtdManager           *manager);
+GtdStorage*             gtd_manager_get_default_storage   (GtdManager           *manager);
 
 void                    gtd_manager_set_default_storage   (GtdManager           *manager,
-                                                           const gchar          *default_storage);
+                                                           GtdStorage           *default_storage);
 
 gboolean                gtd_manager_get_is_first_run      (GtdManager           *manager);
 
diff --git a/src/gtd-storage-selector.c b/src/gtd-storage-selector.c
index b3f0cd6..fddefaf 100644
--- a/src/gtd-storage-selector.c
+++ b/src/gtd-storage-selector.c
@@ -98,6 +98,43 @@ display_header_func (GtkListBoxRow *row,
 }
 
 static void
+gtd_storage_selector__default_storage_changed (GtdStorageSelector *selector,
+                                               GtdStorage         *current,
+                                               GtdStorage         *previous)
+{
+  GtdStorageSelectorPrivate *priv;
+  GList *children;
+  GList *l;
+
+  g_return_if_fail (GTD_IS_STORAGE_SELECTOR (selector));
+  g_return_if_fail (GTD_IS_STORAGE (previous));
+  g_return_if_fail (GTD_IS_STORAGE (current));
+
+  priv = selector->priv;
+
+  if (!priv->select_default)
+    return;
+
+  children = gtk_container_get_children (GTK_CONTAINER (priv->listbox));
+
+  for (l = children; l != NULL; l = l->next)
+    {
+      GtdStorage *storage;
+
+      if (!GTD_IS_STORAGE_ROW (l->data))
+        continue;
+
+      storage = gtd_storage_row_get_storage (l->data);
+
+      gtd_storage_row_set_selected (l->data, storage == current);
+    }
+
+  g_list_free (children);
+
+  g_signal_emit (selector, signals[STORAGE_SELECTED], 0, current);
+}
+
+static void
 gtd_storage_selector__listbox_row_activated (GtdStorageSelector *selector,
                                              GtkWidget          *row)
 {
@@ -412,6 +449,11 @@ gtd_storage_selector_set_property (GObject      *object,
       gtd_storage_selector__fill_accounts (self);
 
       g_signal_connect_swapped (self->priv->manager,
+                                "default-storage-changed",
+                                G_CALLBACK (gtd_storage_selector__default_storage_changed),
+                                object);
+
+      g_signal_connect_swapped (self->priv->manager,
                                 "storage-added",
                                 G_CALLBACK (gtd_storage_selector__add_storage),
                                 object);
@@ -580,7 +622,9 @@ gtd_storage_selector_show_local (GtdStorageSelector *selector,
       priv->show_local_storage = show;
 
       gtk_widget_set_visible (priv->local_check, !show);
-      gtk_widget_set_visible (priv->local_row, show);
+
+      if (priv->local_row)
+        gtk_widget_set_visible (priv->local_row, show);
 
       g_object_notify (G_OBJECT (selector), "show-local");
     }


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