[gnome-todo] provider: add :set_default_task_list() vfunc
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] provider: add :set_default_task_list() vfunc
- Date: Sat, 22 Apr 2017 14:11:35 +0000 (UTC)
commit ea6263145aa951919e50fff773faeeb92110d7ef
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Sat Apr 22 10:35:39 2017 -0300
provider: add :set_default_task_list() vfunc
It'll be used in the future by the new list selector
inside the New Task row.
plugins/eds/gtd-provider-eds.c | 112 ++++++++++++++++++------------
plugins/eds/gtd-provider-eds.h | 3 +
plugins/eds/gtd-provider-goa.c | 20 +++++-
plugins/eds/gtd-provider-local.c | 36 +++++++++-
plugins/todo-txt/gtd-provider-todo-txt.c | 12 +++-
src/interfaces/gtd-provider.c | 31 ++++++++
src/interfaces/gtd-provider.h | 6 ++
7 files changed, 173 insertions(+), 47 deletions(-)
---
diff --git a/plugins/eds/gtd-provider-eds.c b/plugins/eds/gtd-provider-eds.c
index 114c34e..1688470 100644
--- a/plugins/eds/gtd-provider-eds.c
+++ b/plugins/eds/gtd-provider-eds.c
@@ -147,56 +147,21 @@ gtd_provider_eds_on_client_connected (GObject *source_object,
{
GtdProviderEdsPrivate *priv;
GtdProviderEds *self;
+ GtdTaskListEds *list;
ECalClient *client;
+ TaskData *data;
+ ESource *default_source;
ESource *source;
- GError *error = NULL;
+ ESource *parent;
+ GError *error;
self = GTD_PROVIDER_EDS (user_data);
priv = gtd_provider_eds_get_instance_private (self);
+ error = NULL;
source = e_client_get_source (E_CLIENT (source_object));
client = E_CAL_CLIENT (e_cal_client_connect_finish (result, &error));
- if (!error)
- {
- GtdTaskListEds *list;
- TaskData *data;
- ESource *parent;
-
- /* parent source's display name is list's origin */
- parent = e_source_registry_ref_source (priv->source_registry, e_source_get_parent (source));
-
- /* creates a new task list */
- list = gtd_task_list_eds_new (GTD_PROVIDER (self), source);
-
- /* it's not ready until we fetch the list of tasks from client */
- gtd_object_set_ready (GTD_OBJECT (list), FALSE);
-
- /* async data */
- data = task_data_new (user_data, (gpointer) list);
-
- /* asyncronously fetch the task list */
- e_cal_client_get_object_list_as_comps (client,
- "contains? \"any\" \"\"",
- NULL,
- gtd_provider_eds_fill_task_list,
- data);
-
- priv->task_lists = g_list_append (priv->task_lists, list);
-
- g_object_set_data (G_OBJECT (source), "task-list", list);
- g_hash_table_insert (priv->clients, source, client);
-
- /* Emit LIST_ADDED signal */
- g_signal_emit_by_name (self, "list-added", list);
-
- g_object_unref (parent);
-
- g_debug ("%s: %s (%s)",
- G_STRFUNC,
- _("Task list source successfully connected"),
- e_source_get_display_name (source));
- }
- else
+ if (error)
{
g_debug ("%s: %s (%s): %s",
G_STRFUNC,
@@ -212,6 +177,47 @@ gtd_provider_eds_on_client_connected (GObject *source_object,
return;
}
+ /* parent source's display name is list's origin */
+ parent = e_source_registry_ref_source (priv->source_registry, e_source_get_parent (source));
+
+ /* creates a new task list */
+ list = gtd_task_list_eds_new (GTD_PROVIDER (self), source);
+
+ /* it's not ready until we fetch the list of tasks from client */
+ gtd_object_set_ready (GTD_OBJECT (list), FALSE);
+
+ /* async data */
+ data = task_data_new (user_data, (gpointer) list);
+
+ /* asyncronously fetch the task list */
+ e_cal_client_get_object_list_as_comps (client,
+ "contains? \"any\" \"\"",
+ NULL,
+ gtd_provider_eds_fill_task_list,
+ data);
+
+ priv->task_lists = g_list_append (priv->task_lists, list);
+
+ g_object_set_data (G_OBJECT (source), "task-list", list);
+ g_hash_table_insert (priv->clients, source, client);
+
+ /* Check if the current list is the default one */
+ default_source = e_source_registry_ref_default_task_list (priv->source_registry);
+
+ if (default_source == source)
+ g_object_notify (G_OBJECT (self), "default-task-list");
+
+ g_clear_object (&default_source);
+
+ /* Emit LIST_ADDED signal */
+ g_signal_emit_by_name (self, "list-added", list);
+
+ g_object_unref (parent);
+
+ g_debug ("%s: %s (%s)",
+ G_STRFUNC,
+ _("Task list source successfully connected"),
+ e_source_get_display_name (source));
}
typedef struct
@@ -1039,8 +1045,26 @@ gtd_provider_eds_get_default_task_list (GtdProviderEds *provider)
g_clear_object (&default_source);
- if (gtd_task_list_get_provider (default_task_list) != GTD_PROVIDER (provider))
- return NULL;
+ if (default_task_list &&
+ gtd_task_list_get_provider (default_task_list) != GTD_PROVIDER (provider))
+ {
+ return NULL;
+ }
return default_task_list;
}
+
+void
+gtd_provider_eds_set_default_task_list (GtdProviderEds *provider,
+ GtdTaskList *list)
+{
+ GtdProviderEdsPrivate *priv;
+ ESource *source;
+
+ priv = gtd_provider_eds_get_instance_private (provider);
+ source = g_object_get_data (G_OBJECT (list), "task-list");
+
+ e_source_registry_set_default_task_list (priv->source_registry, source);
+
+ g_object_notify (G_OBJECT (provider), "default-task-list");
+}
diff --git a/plugins/eds/gtd-provider-eds.h b/plugins/eds/gtd-provider-eds.h
index 2b48d44..59c9b82 100644
--- a/plugins/eds/gtd-provider-eds.h
+++ b/plugins/eds/gtd-provider-eds.h
@@ -64,6 +64,9 @@ GList* gtd_provider_eds_get_task_lists (GtdProviderEds
GtdTaskList* gtd_provider_eds_get_default_task_list (GtdProviderEds *provider);
+void gtd_provider_eds_set_default_task_list (GtdProviderEds *provider,
+ GtdTaskList *list);
+
G_END_DECLS
#endif /* GTD_PROVIDER_EDS_H */
diff --git a/plugins/eds/gtd-provider-goa.c b/plugins/eds/gtd-provider-goa.c
index 27a507a..43337d3 100644
--- a/plugins/eds/gtd-provider-goa.c
+++ b/plugins/eds/gtd-provider-goa.c
@@ -40,11 +40,12 @@ G_DEFINE_TYPE_WITH_CODE (GtdProviderGoa, gtd_provider_goa, GTD_TYPE_PROVIDER_EDS
enum {
PROP_0,
PROP_ACCOUNT,
+ PROP_DEFAULT_TASKLIST,
+ PROP_DESCRIPTION,
PROP_ENABLED,
PROP_ICON,
PROP_ID,
PROP_NAME,
- PROP_DESCRIPTION,
N_PROPS
};
@@ -169,6 +170,13 @@ gtd_provider_goa_get_default_task_list (GtdProvider *provider)
}
static void
+gtd_provider_goa_set_default_task_list (GtdProvider *provider,
+ GtdTaskList *list)
+{
+ gtd_provider_eds_set_default_task_list (GTD_PROVIDER_EDS (provider), list);
+}
+
+static void
gtd_provider_iface_init (GtdProviderInterface *iface)
{
iface->get_id = gtd_provider_goa_get_id;
@@ -185,6 +193,7 @@ gtd_provider_iface_init (GtdProviderInterface *iface)
iface->remove_task_list = gtd_provider_goa_remove_task_list;
iface->get_task_lists = gtd_provider_goa_get_task_lists;
iface->get_default_task_list = gtd_provider_goa_get_default_task_list;
+ iface->set_default_task_list = gtd_provider_goa_set_default_task_list;
}
static void
@@ -248,6 +257,10 @@ gtd_provider_goa_get_property (GObject *object,
g_value_set_object (value, self->account);
break;
+ case PROP_DEFAULT_TASKLIST:
+ g_value_set_object (value, gtd_provider_goa_get_default_task_list (provider));
+ break;
+
case PROP_DESCRIPTION:
g_value_set_string (value, gtd_provider_goa_get_description (provider));
break;
@@ -287,6 +300,10 @@ gtd_provider_goa_set_property (GObject *object,
gtd_provider_goa_set_account (self, g_value_get_object (value));
break;
+ case PROP_DEFAULT_TASKLIST:
+ gtd_provider_goa_set_default_task_list (GTD_PROVIDER (self), g_value_get_object (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
@@ -347,6 +364,7 @@ gtd_provider_goa_class_init (GtdProviderGoaClass *klass)
object_class->get_property = gtd_provider_goa_get_property;
object_class->set_property = gtd_provider_goa_set_property;
+ g_object_class_override_property (object_class, PROP_DEFAULT_TASKLIST, "default-task-list");
g_object_class_override_property (object_class, PROP_DESCRIPTION, "description");
g_object_class_override_property (object_class, PROP_ENABLED, "enabled");
g_object_class_override_property (object_class, PROP_ICON, "icon");
diff --git a/plugins/eds/gtd-provider-local.c b/plugins/eds/gtd-provider-local.c
index 116e16e..168877a 100644
--- a/plugins/eds/gtd-provider-local.c
+++ b/plugins/eds/gtd-provider-local.c
@@ -38,10 +38,11 @@ G_DEFINE_TYPE_WITH_CODE (GtdProviderLocal, gtd_provider_local, GTD_TYPE_PROVIDER
enum {
PROP_0,
PROP_ENABLED,
+ PROP_DEFAULT_TASKLIST,
+ PROP_DESCRIPTION,
PROP_ICON,
PROP_ID,
PROP_NAME,
- PROP_DESCRIPTION,
LAST_PROP
};
@@ -187,6 +188,13 @@ gtd_provider_local_get_default_task_list (GtdProvider *provider)
}
static void
+gtd_provider_local_set_default_task_list (GtdProvider *provider,
+ GtdTaskList *list)
+{
+ gtd_provider_eds_set_default_task_list (GTD_PROVIDER_EDS (provider), list);
+}
+
+static void
gtd_provider_iface_init (GtdProviderInterface *iface)
{
iface->get_id = gtd_provider_local_get_id;
@@ -203,6 +211,7 @@ gtd_provider_iface_init (GtdProviderInterface *iface)
iface->remove_task_list = gtd_provider_local_remove_task_list;
iface->get_task_lists = gtd_provider_local_get_task_lists;
iface->get_default_task_list = gtd_provider_local_get_default_task_list;
+ iface->set_default_task_list = gtd_provider_local_set_default_task_list;
}
GtdProviderLocal*
@@ -233,6 +242,10 @@ gtd_provider_local_get_property (GObject *object,
switch (prop_id)
{
+ case PROP_DEFAULT_TASKLIST:
+ g_value_set_object (value, gtd_provider_local_get_default_task_list (provider));
+ break;
+
case PROP_DESCRIPTION:
g_value_set_string (value, gtd_provider_local_get_description (provider));
break;
@@ -258,6 +271,25 @@ gtd_provider_local_get_property (GObject *object,
}
}
+static void
+gtd_provider_local_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GtdProvider *provider = GTD_PROVIDER (object);
+
+ switch (prop_id)
+ {
+ case PROP_DEFAULT_TASKLIST:
+ gtd_provider_local_set_default_task_list (provider, g_value_get_object (value));
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ }
+}
+
static gboolean
gtd_provider_local_should_load_source (GtdProviderEds *provider,
ESource *source)
@@ -278,7 +310,9 @@ gtd_provider_local_class_init (GtdProviderLocalClass *klass)
object_class->finalize = gtd_provider_local_finalize;
object_class->get_property = gtd_provider_local_get_property;
+ object_class->set_property = gtd_provider_local_set_property;
+ g_object_class_override_property (object_class, PROP_DEFAULT_TASKLIST, "default-task-list");
g_object_class_override_property (object_class, PROP_DESCRIPTION, "description");
g_object_class_override_property (object_class, PROP_ENABLED, "enabled");
g_object_class_override_property (object_class, PROP_ICON, "icon");
diff --git a/plugins/todo-txt/gtd-provider-todo-txt.c b/plugins/todo-txt/gtd-provider-todo-txt.c
index 3661e81..293f050 100644
--- a/plugins/todo-txt/gtd-provider-todo-txt.c
+++ b/plugins/todo-txt/gtd-provider-todo-txt.c
@@ -52,11 +52,12 @@ G_DEFINE_TYPE_WITH_CODE (GtdProviderTodoTxt, gtd_provider_todo_txt, GTD_TYPE_OBJ
enum {
PROP_0,
+ PROP_DEFAULT_TASKLIST,
+ PROP_DESCRIPTION,
PROP_ENABLED,
PROP_ICON,
PROP_ID,
PROP_NAME,
- PROP_DESCRIPTION,
PROP_SOURCE,
LAST_PROP
};
@@ -999,6 +1000,13 @@ gtd_provider_todo_txt_get_default_task_list (GtdProvider *provider)
}
static void
+gtd_provider_todo_txt_set_default_task_list (GtdProvider *provider,
+ GtdTaskList *list)
+{
+ /* FIXME: implement me */
+}
+
+static void
gtd_provider_iface_init (GtdProviderInterface *iface)
{
iface->get_id = gtd_provider_todo_txt_get_id;
@@ -1015,6 +1023,7 @@ gtd_provider_iface_init (GtdProviderInterface *iface)
iface->remove_task_list = gtd_provider_todo_txt_remove_task_list;
iface->get_task_lists = gtd_provider_todo_txt_get_task_lists;
iface->get_default_task_list = gtd_provider_todo_txt_get_default_task_list;
+ iface->set_default_task_list = gtd_provider_todo_txt_set_default_task_list;
}
GtdProviderTodoTxt*
@@ -1115,6 +1124,7 @@ gtd_provider_todo_txt_class_init (GtdProviderTodoTxtClass *klass)
G_TYPE_OBJECT,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_override_property (object_class, PROP_DEFAULT_TASKLIST, "default-task-list");
g_object_class_override_property (object_class, PROP_DESCRIPTION, "description");
g_object_class_override_property (object_class, PROP_ENABLED, "enabled");
g_object_class_override_property (object_class, PROP_ICON, "icon");
diff --git a/src/interfaces/gtd-provider.c b/src/interfaces/gtd-provider.c
index 6ff3626..abaa733 100644
--- a/src/interfaces/gtd-provider.c
+++ b/src/interfaces/gtd-provider.c
@@ -111,6 +111,18 @@ gtd_provider_default_init (GtdProviderInterface *iface)
G_PARAM_READABLE));
/**
+ * GtdProvider::default-task-list:
+ *
+ * The default #GtdTaskList of the provider.
+ */
+ g_object_interface_install_property (iface,
+ g_param_spec_object ("default-task-list",
+ "Default tasklist of the provider",
+ "The default tasklist of the provider",
+ GTD_TYPE_TASK_LIST,
+ G_PARAM_READWRITE));
+
+ /**
* GtdProvider::list-added:
* @provider: a #GtdProvider
* @list: a #GtdTaskList
@@ -399,3 +411,22 @@ gtd_provider_get_default_task_list (GtdProvider *provider)
return GTD_PROVIDER_GET_IFACE (provider)->get_default_task_list (provider);
}
+
+/**
+ * gtd_provider_set_default_task_list:
+ * @provider: a #GtdProvider
+ * @list: a #GtdTaskList
+ *
+ * Sets the default tasklist of @provider.
+ */
+void
+gtd_provider_set_default_task_list (GtdProvider *provider,
+ GtdTaskList *list)
+{
+ g_return_if_fail (GTD_IS_PROVIDER (provider));
+ g_return_if_fail (GTD_IS_TASK_LIST (provider));
+ g_return_if_fail (gtd_task_list_get_provider (list) == provider);
+ g_return_if_fail (GTD_PROVIDER_GET_IFACE (provider)->set_default_task_list);
+
+ return GTD_PROVIDER_GET_IFACE (provider)->set_default_task_list (provider, list);
+}
diff --git a/src/interfaces/gtd-provider.h b/src/interfaces/gtd-provider.h
index 24983b5..874ed7a 100644
--- a/src/interfaces/gtd-provider.h
+++ b/src/interfaces/gtd-provider.h
@@ -72,6 +72,9 @@ struct _GtdProviderInterface
GList* (*get_task_lists) (GtdProvider *provider);
GtdTaskList* (*get_default_task_list) (GtdProvider *provider);
+
+ void (*set_default_task_list) (GtdProvider *provider,
+ GtdTaskList *list);
};
const gchar* gtd_provider_get_id (GtdProvider *provider);
@@ -108,6 +111,9 @@ GList* gtd_provider_get_task_lists (GtdProvider
GtdTaskList* gtd_provider_get_default_task_list (GtdProvider *provider);
+void gtd_provider_set_default_task_list (GtdProvider *provider,
+ GtdTaskList *list);
+
G_END_DECLS
#endif /* GTD_PROVIDER_H */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]