[gnome-calendar] manager: hold a reference of the application's settings
- From: Erick Pérez Castellanos <erickpc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] manager: hold a reference of the application's settings
- Date: Mon, 22 Dec 2014 13:42:32 +0000 (UTC)
commit 9af65c8f1fbcc6d7235fdd33dc553fe71b4008db
Author: Erick Pérez Castellanos <erick red gmail com>
Date: Sun Dec 21 13:06:47 2014 -0500
manager: hold a reference of the application's settings
We need to keep on the settings the list of the disabled sources
Moved code from ::init vfunc to ::constructed vfunc in order to wait for
construction properties to be set
src/gcal-application.c | 2 +-
src/gcal-manager.c | 131 +++++++++++++++++++++++++++++++++++++-----------
src/gcal-manager.h | 2 +-
3 files changed, 103 insertions(+), 32 deletions(-)
---
diff --git a/src/gcal-application.c b/src/gcal-application.c
index 91e473d..798931c 100644
--- a/src/gcal-application.c
+++ b/src/gcal-application.c
@@ -211,7 +211,7 @@ gcal_application_startup (GApplication *app)
g_object_unref (priv->provider);
}
- priv->manager = gcal_manager_new ();
+ priv->manager = gcal_manager_new_with_settings (priv->settings);
gcal_application_set_app_menu (app);
}
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index 275da1b..0cdfce0 100644
--- a/src/gcal-manager.c
+++ b/src/gcal-manager.c
@@ -51,8 +51,12 @@ typedef struct
GCancellable *async_ops;
+ gchar **disabled_sources;
/* timezone */
icaltimezone *system_timezone;
+
+ /* property */
+ GSettings *settings;
} GcalManagerPrivate;
struct _MoveEventData
@@ -68,6 +72,12 @@ typedef struct _MoveEventData MoveEventData;
enum
{
+ PROP_0,
+ PROP_SETTINGS,
+};
+
+enum
+{
SOURCE_ACTIVATED,
SOURCE_ADDED,
SOURCE_REMOVED,
@@ -112,8 +122,20 @@ static void remove_source (GcalManager *mana
/* class_init && init vfuncs */
+static void gcal_manager_constructed (GObject *object);
+
static void gcal_manager_finalize (GObject *object);
+static void gcal_manager_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec);
+
+static void gcal_manager_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec);
+
G_DEFINE_TYPE_WITH_PRIVATE (GcalManager, gcal_manager, G_TYPE_OBJECT)
/* -- start: threading related code provided by Milan Crha */
@@ -443,7 +465,18 @@ remove_source (GcalManager *manager,
static void
gcal_manager_class_init (GcalManagerClass *klass)
{
+ G_OBJECT_CLASS (klass)->constructed = gcal_manager_constructed;
G_OBJECT_CLASS (klass)->finalize = gcal_manager_finalize;
+ G_OBJECT_CLASS (klass)->set_property = gcal_manager_set_property;
+ G_OBJECT_CLASS (klass)->get_property = gcal_manager_get_property;
+
+ /* properties */
+ g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_SETTINGS,
+ g_param_spec_object ("settings",
+ "Application settings",
+ "The settings of the application passed down from
GcalApplication",
+ G_TYPE_SETTINGS,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
/* signals */
signals[SOURCE_ACTIVATED] = g_signal_new ("source-activated", GCAL_TYPE_MANAGER, G_SIGNAL_RUN_LAST,
@@ -465,23 +498,26 @@ gcal_manager_class_init (GcalManagerClass *klass)
static void
gcal_manager_init (GcalManager *self)
{
+ ;
+}
+
+static void
+gcal_manager_constructed (GObject *object)
+{
GcalManagerPrivate *priv;
- GError *error;
- GList *sources;
- GList *l;
+ GList *sources, *l;
+ GError *error = NULL;
- priv = gcal_manager_get_instance_private (self);
+ priv = gcal_manager_get_instance_private (GCAL_MANAGER (object));
+ priv->disabled_sources = g_settings_get_strv (priv->settings, "disabled-sources");
priv->system_timezone = e_cal_util_get_system_timezone ();
- priv->clients = g_hash_table_new_full ((GHashFunc) e_source_hash,
- (GEqualFunc) e_source_equal,
- g_object_unref,
- (GDestroyNotify) free_unit_data);
+ priv->clients = g_hash_table_new_full ((GHashFunc) e_source_hash, (GEqualFunc) e_source_equal,
+ g_object_unref, (GDestroyNotify) free_unit_data);
/* reading sources and schedule its connecting */
- error = NULL;
priv->source_registry = e_source_registry_new_sync (NULL, &error);
if (priv->source_registry == NULL)
{
@@ -490,34 +526,22 @@ gcal_manager_init (GcalManager *self)
return;
}
- sources = e_source_registry_list_enabled (priv->source_registry,
- E_SOURCE_EXTENSION_CALENDAR);
-
+ sources = e_source_registry_list_enabled (priv->source_registry, E_SOURCE_EXTENSION_CALENDAR);
for (l = sources; l != NULL; l = l->next)
- load_source (self, l->data);
-
+ load_source (GCAL_MANAGER (object), l->data);
g_list_free (sources);
- g_signal_connect_swapped (priv->source_registry,
- "source-added",
- G_CALLBACK (load_source),
- self);
-
- g_signal_connect_swapped (priv->source_registry,
- "source-removed",
- G_CALLBACK (remove_source),
- self);
+ g_signal_connect_swapped (priv->source_registry, "source-added", G_CALLBACK (load_source), object);
+ g_signal_connect_swapped (priv->source_registry, "source-removed", G_CALLBACK (remove_source), object);
/* create data model */
priv->e_data_model = e_cal_data_model_new (submit_thread_job);
priv->search_data_model = e_cal_data_model_new (submit_thread_job);
e_cal_data_model_set_expand_recurrences (priv->e_data_model, TRUE);
- e_cal_data_model_set_timezone (priv->e_data_model,
- priv->system_timezone);
+ e_cal_data_model_set_timezone (priv->e_data_model, priv->system_timezone);
e_cal_data_model_set_expand_recurrences (priv->search_data_model, TRUE);
- e_cal_data_model_set_timezone (priv->search_data_model,
- priv->system_timezone);
+ e_cal_data_model_set_timezone (priv->search_data_model, priv->system_timezone);
}
static void
@@ -527,6 +551,10 @@ gcal_manager_finalize (GObject *object)
priv = gcal_manager_get_instance_private (GCAL_MANAGER (object));
+ if (priv->settings != NULL)
+ g_object_unref (priv->settings);
+ g_strfreev (priv->disabled_sources);
+
if (priv->e_data_model != NULL)
g_object_unref (priv->e_data_model);
if (priv->search_data_model != NULL)
@@ -535,18 +563,61 @@ gcal_manager_finalize (GObject *object)
g_hash_table_destroy (priv->clients);
}
+static void
+gcal_manager_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GcalManagerPrivate *priv;
+
+ priv = gcal_manager_get_instance_private (GCAL_MANAGER (object));
+
+ switch (property_id)
+ {
+ case PROP_SETTINGS:
+ if (priv->settings != NULL)
+ g_object_unref (priv->settings);
+ priv->settings = g_value_dup_object (value);
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
+static void
+gcal_manager_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GcalManagerPrivate *priv;
+
+ priv = gcal_manager_get_instance_private (GCAL_MANAGER (object));
+
+ switch (property_id)
+ {
+ case PROP_SETTINGS:
+ g_value_set_object (value, priv->settings);
+ return;
+ }
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+}
+
/* Public API */
/**
- * gcal_manager_new:
+ * gcal_manager_new_with_settings:
+ * @settings:
*
* Since: 0.0.1
* Return value: the new #GcalManager
* Returns: (transfer full):
**/
GcalManager*
-gcal_manager_new (void)
+gcal_manager_new_with_settings (GSettings *settings)
{
- return GCAL_MANAGER (g_object_new (GCAL_TYPE_MANAGER, NULL));
+ return GCAL_MANAGER (g_object_new (GCAL_TYPE_MANAGER, "settings", settings, NULL));
}
/**
diff --git a/src/gcal-manager.h b/src/gcal-manager.h
index 94475ea..44edfcb 100644
--- a/src/gcal-manager.h
+++ b/src/gcal-manager.h
@@ -59,7 +59,7 @@ typedef struct
GType gcal_manager_get_type (void);
-GcalManager* gcal_manager_new (void);
+GcalManager* gcal_manager_new_with_settings (GSettings *settings);
GList* gcal_manager_get_sources (GcalManager *manager);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]