[gnome-todo] manager: Add GtdWorkspace APIs
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-todo] manager: Add GtdWorkspace APIs
- Date: Tue, 28 Apr 2020 16:59:52 +0000 (UTC)
commit 0d9ff14a288e366cfbd7b68c27a51c7094a6de3f
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Mon Apr 27 01:25:34 2020 -0300
manager: Add GtdWorkspace APIs
src/engine/gtd-manager.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++
src/engine/gtd-manager.h | 8 ++++
2 files changed, 119 insertions(+)
---
diff --git a/src/engine/gtd-manager.c b/src/engine/gtd-manager.c
index 5aab998..35c58ee 100644
--- a/src/engine/gtd-manager.c
+++ b/src/engine/gtd-manager.c
@@ -22,6 +22,7 @@
#include "models/gtd-task-model-private.h"
#include "interfaces/gtd-provider.h"
#include "interfaces/gtd-panel.h"
+#include "interfaces/gtd-workspace.h"
#include "notification/gtd-notification.h"
#include "gtd-clock.h"
#include "gtd-debug.h"
@@ -60,6 +61,7 @@ struct _GtdManager
GListModel *tasks_model;
GListModel *unarchived_tasks_model;
+ GHashTable *workspaces;
GList *providers;
GList *panels;
GtdProvider *default_provider;
@@ -84,6 +86,8 @@ enum
PANEL_REMOVED,
PROVIDER_ADDED,
PROVIDER_REMOVED,
+ WORKSPACE_ADDED,
+ WORKSPACE_REMOVED,
NUM_SIGNALS
};
@@ -355,6 +359,8 @@ gtd_manager_finalize (GObject *object)
g_clear_object (&self->unarchived_tasks_model);
g_clear_object (&self->lists_model);
+ g_clear_pointer (&self->workspaces, g_hash_table_destroy);
+
G_OBJECT_CLASS (gtd_manager_parent_class)->finalize (object);
}
@@ -631,12 +637,49 @@ gtd_manager_class_init (GtdManagerClass *klass)
G_TYPE_NONE,
1,
GTD_TYPE_PROVIDER);
+
+ /**
+ * GtdManager::workspace-added:
+ * @manager: a #GtdManager
+ * @workspace: a #GtdWorkspace
+ *
+ * Emitted after @workspace is ADDED.
+ */
+ signals[WORKSPACE_ADDED] = g_signal_new ("workspace-added",
+ GTD_TYPE_MANAGER,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 1,
+ GTD_TYPE_WORKSPACE);
+
+ /**
+ * GtdManager::workspace-removed:
+ * @manager: a #GtdManager
+ * @workspace: a #GtdWorkspace
+ *
+ * Emitted after @workspace is removed.
+ */
+ signals[WORKSPACE_REMOVED] = g_signal_new ("workspace-removed",
+ GTD_TYPE_MANAGER,
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL,
+ NULL,
+ NULL,
+ G_TYPE_NONE,
+ 1,
+ GTD_TYPE_WORKSPACE);
}
static void
gtd_manager_init (GtdManager *self)
{
+ self->workspaces = g_hash_table_new_full (NULL, NULL, g_object_unref, NULL);
self->settings = g_settings_new ("org.gnome.todo");
self->plugin_manager = gtd_plugin_manager_new ();
self->clock = gtd_clock_new ();
@@ -965,6 +1008,74 @@ gtd_manager_get_tasks_model (GtdManager *self)
return self->unarchived_tasks_model;
}
+/**
+ * gtd_manager_get_workspaces:
+ * @self: a #GtdManager
+ *
+ * Retrieves the current list of workspaces.
+ *
+ * Returns: (transfer full): a #GPtrArray
+ */
+GPtrArray*
+gtd_manager_get_workspaces (GtdManager *self)
+{
+ g_autoptr (GPtrArray) workspaces = NULL;
+ g_autoptr (GList) keys = NULL;
+ GList *l;
+
+ g_return_val_if_fail (GTD_IS_MANAGER (self), NULL);
+
+ workspaces = g_ptr_array_new_with_free_func (g_object_unref);
+ keys = g_hash_table_get_keys (self->workspaces);
+
+ for (l = keys; l; l = l->next)
+ g_ptr_array_add (workspaces, g_object_ref (l->data));
+
+ return g_steal_pointer (&workspaces);
+}
+
+/**
+ * gtd_manager_add_workspace:
+ * @self: a #GtdManager
+ * @workspace: a #GtdWorkspace
+ *
+ * Adds @workspace to the list of workspace. If @workspace
+ * is already added, does nothing.
+ */
+void
+gtd_manager_add_workspace (GtdManager *self,
+ GtdWorkspace *workspace)
+{
+ g_return_if_fail (GTD_IS_MANAGER (self));
+ g_return_if_fail (GTD_IS_WORKSPACE (workspace));
+
+ if (g_hash_table_add (self->workspaces, g_object_ref (workspace)))
+ g_signal_emit (self, signals[WORKSPACE_ADDED], 0, workspace);
+}
+
+/**
+ * gtd_manager_remove_workspace:
+ * @self: a #GtdManager
+ * @workspace: a #GtdWorkspace
+ *
+ * Removes @workspace from the list of workspace. If @workspace
+ * is not added, does nothing.
+ */
+void
+gtd_manager_remove_workspace (GtdManager *self,
+ GtdWorkspace *workspace)
+{
+ g_return_if_fail (GTD_IS_MANAGER (self));
+ g_return_if_fail (GTD_IS_WORKSPACE (workspace));
+
+ g_object_ref (workspace);
+
+ if (g_hash_table_remove (self->workspaces, workspace))
+ g_signal_emit (self, signals[WORKSPACE_REMOVED], 0, workspace);
+
+ g_object_unref (workspace);
+}
+
void
gtd_manager_load_plugins (GtdManager *self)
{
diff --git a/src/engine/gtd-manager.h b/src/engine/gtd-manager.h
index 09e71d1..3d601b8 100644
--- a/src/engine/gtd-manager.h
+++ b/src/engine/gtd-manager.h
@@ -75,4 +75,12 @@ GListModel* gtd_manager_get_all_tasks_model (GtdManager
GListModel* gtd_manager_get_tasks_model (GtdManager *self);
+GPtrArray* gtd_manager_get_workspaces (GtdManager *self);
+
+void gtd_manager_add_workspace (GtdManager *self,
+ GtdWorkspace *workspace);
+
+void gtd_manager_remove_workspace (GtdManager *self,
+ GtdWorkspace *workspace);
+
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]