[gnome-todo] manager: add GtdManager:default-task-list property
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] manager: add GtdManager:default-task-list property
- Date: Sat, 22 Apr 2017 14:11:40 +0000 (UTC)
commit 4f9a1310870133e8ddd8cdb9615a68c6f31f53b8
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Apr 22 10:37:23 2017 -0300
manager: add GtdManager:default-task-list property
And the auxiliary getter and setter.
src/engine/gtd-manager.c | 124 ++++++++++++++++++++++++++++++++++++++++++---
src/engine/gtd-manager.h | 5 ++
2 files changed, 120 insertions(+), 9 deletions(-)
---
diff --git a/src/engine/gtd-manager.c b/src/engine/gtd-manager.c
index 88e03f2..84ff314 100644
--- a/src/engine/gtd-manager.c
+++ b/src/engine/gtd-manager.c
@@ -82,6 +82,7 @@ enum
{
PROP_0,
PROP_DEFAULT_PROVIDER,
+ PROP_DEFAULT_TASKLIST,
PROP_PLUGIN_MANAGER,
LAST_PROP
};
@@ -99,11 +100,7 @@ check_provider_is_default (GtdManager *manager,
default_provider = g_settings_get_string (priv->settings, "default-provider");
if (g_strcmp0 (default_provider, gtd_provider_get_id (provider)) == 0)
- {
- g_set_object (&priv->default_provider, provider);
-
- g_object_notify (G_OBJECT (manager), "default-provider");
- }
+ gtd_manager_set_default_provider (manager, provider);
g_free (default_provider);
}
@@ -145,6 +142,10 @@ gtd_manager_get_property (GObject *object,
g_value_set_object (value, priv->default_provider);
break;
+ case PROP_DEFAULT_TASKLIST:
+ g_value_set_object (value, gtd_provider_get_default_task_list (priv->default_provider));
+ break;
+
case PROP_PLUGIN_MANAGER:
g_value_set_object (value, priv->plugin_manager);
break;
@@ -160,7 +161,11 @@ gtd_manager_set_property (GObject *object,
const GValue *value,
GParamSpec *pspec)
{
- GtdManagerPrivate *priv = gtd_manager_get_instance_private (GTD_MANAGER (object));
+ GtdManagerPrivate *priv;
+ GtdManager *self;
+
+ self = GTD_MANAGER (object);
+ priv = gtd_manager_get_instance_private (self);
switch (prop_id)
{
@@ -169,6 +174,10 @@ gtd_manager_set_property (GObject *object,
g_object_notify (object, "default-provider");
break;
+ case PROP_DEFAULT_TASKLIST:
+ gtd_manager_set_default_task_list (self, g_value_get_object (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -198,6 +207,20 @@ gtd_manager_class_init (GtdManagerClass *klass)
G_PARAM_READWRITE));
/**
+ * GtdManager::default-task-list:
+ *
+ * The default provider.
+ */
+ g_object_class_install_property (
+ object_class,
+ PROP_DEFAULT_TASKLIST,
+ g_param_spec_object ("default-task-list",
+ "The default task list of the application",
+ "The default task list of the application",
+ GTD_TYPE_TASK_LIST,
+ G_PARAM_READWRITE));
+
+ /**
* GtdManager::plugin-manager:
*
* The plugin manager.
@@ -367,6 +390,14 @@ gtd_manager_class_init (GtdManagerClass *klass)
}
static void
+gtd_manager__default_list_changed_cb (GtdProvider *provider,
+ GParamSpec *pspec,
+ GtdManager *self)
+{
+ g_object_notify (G_OBJECT (self), "default-task-list");
+}
+
+static void
gtd_manager__task_list_modified (GtdTaskList *list,
GtdTask *task,
GtdManager *self)
@@ -507,8 +538,13 @@ gtd_manager__provider_removed (GtdPluginManager *plugin_manager,
for (l = lists; l != NULL; l = l->next)
gtd_manager__list_removed (provider, l->data, self);
+ g_signal_handlers_disconnect_by_func (provider,
+ gtd_manager__default_list_changed_cb,
+ self);
+
g_signal_emit (self, signals[PROVIDER_REMOVED], 0, provider);
}
+
static void
gtd_manager_init (GtdManager *self)
{
@@ -749,21 +785,23 @@ gtd_manager_get_default_provider (GtdManager *manager)
}
/**
- * gtd_manager_set_default_storage:
+ * gtd_manager_set_default_provider:
* @manager: a #GtdManager
- * @default_storage: (nullable): the default storage location.
+ * @provider: (nullable): the default provider.
*
- * Sets the default storage location id.
+ * Sets the provider.
*/
void
gtd_manager_set_default_provider (GtdManager *manager,
GtdProvider *provider)
{
GtdManagerPrivate *priv;
+ GtdProvider *previous;
g_return_if_fail (GTD_IS_MANAGER (manager));
priv = manager->priv;
+ previous = priv->default_provider;
if (g_set_object (&priv->default_provider, provider))
{
@@ -771,11 +809,79 @@ gtd_manager_set_default_provider (GtdManager *manager,
"default-provider",
provider ? gtd_provider_get_id (provider) : "local");
+ /* Disconnect the previous provider... */
+ if (previous)
+ {
+ g_signal_handlers_disconnect_by_func (previous,
+ gtd_manager__default_list_changed_cb,
+ manager);
+ }
+
+ /* ... and connect the current one */
+ if (provider)
+ {
+ g_signal_connect (provider,
+ "notify::default-task-list",
+ G_CALLBACK (gtd_manager__default_list_changed_cb),
+ manager);
+ }
+
g_object_notify (G_OBJECT (manager), "default-provider");
+ g_object_notify (G_OBJECT (manager), "default-task-list");
}
}
/**
+ * gtd_manager_get_default_task_list:
+ * @self: a #GtdManager
+ *
+ * Retrieves the default tasklist of the default provider.
+ *
+ * Returns: (transfer none)(nullable): a #GtdTaskList
+ */
+GtdTaskList*
+gtd_manager_get_default_task_list (GtdManager *self)
+{
+ GtdManagerPrivate *priv;
+
+ g_return_val_if_fail (GTD_IS_MANAGER (self), NULL);
+
+ priv = gtd_manager_get_instance_private (self);
+
+ if (!priv->default_provider)
+ return NULL;
+
+ return gtd_provider_get_default_task_list (priv->default_provider);
+}
+
+/**
+ * gtd_manager_set_default_task_list:
+ * @self: a #GtdManager
+ * @list: (nullable): a #GtdTaskList, or %NULL
+ *
+ * Sets the default task list of the application.
+ */
+void
+gtd_manager_set_default_task_list (GtdManager *self,
+ GtdTaskList *list)
+{
+ g_return_if_fail (GTD_IS_MANAGER (self));
+ g_return_if_fail (GTD_IS_TASK_LIST (list));
+
+ if (list)
+ {
+ GtdProvider *provider;
+
+ provider = gtd_task_list_get_provider (list);
+
+ gtd_manager_set_default_provider (self, provider);
+ gtd_provider_set_default_task_list (provider, list);
+ }
+
+ g_object_notify (G_OBJECT (self), "default-task-list");
+}
+
+/**
* gtd_manager_get_settings:
* @manager: a #GtdManager
*
diff --git a/src/engine/gtd-manager.h b/src/engine/gtd-manager.h
index d2136aa..6e7f12e 100644
--- a/src/engine/gtd-manager.h
+++ b/src/engine/gtd-manager.h
@@ -66,6 +66,11 @@ GtdProvider* gtd_manager_get_default_provider (GtdManager
void gtd_manager_set_default_provider (GtdManager *manager,
GtdProvider *provider);
+GtdTaskList* gtd_manager_get_default_task_list (GtdManager *self);
+
+void gtd_manager_set_default_task_list (GtdManager *self,
+ GtdTaskList *list);
+
GSettings* gtd_manager_get_settings (GtdManager *manager);
gboolean gtd_manager_get_is_first_run (GtdManager *manager);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]