From e18f9eb725e0be78db138e9eb0d58ed4d3370c82 Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 8 May 2009 18:18:58 -0400 Subject: Adapt tasks to EShellBackend changes. --- calendar/modules/e-task-shell-backend.c | 167 +++++++++++++++++++++++++++----- 1 file changed, 144 insertions(+), 23 deletions(-) (limited to 'calendar/modules/e-task-shell-backend.c') diff --git a/calendar/modules/e-task-shell-backend.c b/calendar/modules/e-task-shell-backend.c index 1dba011c96..6a89a27938 100644 --- a/calendar/modules/e-task-shell-backend.c +++ b/calendar/modules/e-task-shell-backend.c @@ -19,6 +19,8 @@ * */ +#include "e-task-shell-backend.h" + #include #include #include @@ -37,19 +39,31 @@ #include "calendar/gui/dialogs/calendar-setup.h" #include "calendar/gui/dialogs/task-editor.h" +#include "e-task-shell-migrate.h" #include "e-task-shell-view.h" -#include "e-task-shell-backend-migrate.h" -#define MODULE_NAME "tasks" -#define MODULE_ALIASES "" -#define MODULE_SCHEMES "task" -#define MODULE_SORT_ORDER 600 +#define E_TASK_SHELL_BACKEND_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_TASK_SHELL_BACKEND, ETaskShellBackendPrivate)) #define WEB_BASE_URI "webcal://" #define PERSONAL_RELATIVE_URI "system" +struct _ETaskShellBackendPrivate { + ESourceList *source_list; +}; + +enum { + PROP_0, + PROP_SOURCE_LIST +}; + /* Module Entry Point */ -void e_shell_backend_init (GTypeModule *type_module); +void e_module_load (GTypeModule *type_module); +void e_module_unload (GTypeModule *type_module); + +GType e_task_shell_backend_type = 0; +static gpointer parent_class; static void task_module_ensure_sources (EShellBackend *shell_backend) @@ -484,32 +498,49 @@ task_module_window_created_cb (EShellBackend *shell_backend, source_entries, G_N_ELEMENTS (source_entries)); } -static EShellBackendInfo module_info = { +static void +task_shell_backend_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + switch (property_id) { + case PROP_SOURCE_LIST: + g_value_set_object ( + value, + e_task_shell_backend_get_source_list ( + E_TASK_SHELL_BACKEND (object))); + return; + } - MODULE_NAME, - MODULE_ALIASES, - MODULE_SCHEMES, - MODULE_SORT_ORDER, + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); +} - /* start */ NULL, - /* is_busy */ NULL, - /* shutdown */ NULL, - e_task_shell_backend_migrate -}; +static void +task_shell_backend_dispose (GObject *object) +{ + ETaskShellBackendPrivate *priv; -void -e_shell_backend_init (GTypeModule *type_module) + priv = E_TASK_SHELL_BACKEND_GET_PRIVATE (object); + + if (priv->source_list != NULL) { + g_object_unref (priv->source_list); + priv->source_list = NULL; + } + + /* Chain up to parent's dispose() method. */ + G_OBJECT_CLASS (parent_class)->dispose (object); +} + +static void +task_shell_backend_constructed (GObject *object) { EShell *shell; EShellBackend *shell_backend; - shell_backend = E_SHELL_BACKEND (type_module); + shell_backend = E_SHELL_BACKEND (object); shell = e_shell_backend_get_shell (shell_backend); - e_shell_backend_set_info ( - shell_backend, &module_info, - e_task_shell_view_get_type (type_module)); - task_module_ensure_sources (shell_backend); g_signal_connect_swapped ( @@ -520,3 +551,93 @@ e_shell_backend_init (GTypeModule *type_module) shell, "window-created", G_CALLBACK (task_module_window_created_cb), shell_backend); } + +static void +task_shell_backend_class_init (ETaskShellBackendClass *class) +{ + GObjectClass *object_class; + EShellBackendClass *shell_backend_class; + + parent_class = g_type_class_peek_parent (class); + g_type_class_add_private (class, sizeof (ETaskShellBackendPrivate)); + + object_class = G_OBJECT_CLASS (class); + object_class->get_property = task_shell_backend_get_property; + object_class->dispose = task_shell_backend_dispose; + object_class->constructed = task_shell_backend_constructed; + + shell_backend_class = E_SHELL_BACKEND_CLASS (class); + shell_backend_class->name = "tasks"; + shell_backend_class->aliases = ""; + shell_backend_class->schemes = "task"; + shell_backend_class->sort_order = 600; + shell_backend_class->view_type = E_TYPE_TASK_SHELL_VIEW; + shell_backend_class->start = NULL; + shell_backend_class->is_busy = NULL; + shell_backend_class->shutdown = NULL; + shell_backend_class->migrate = e_task_shell_backend_migrate; + + g_object_class_install_property ( + object_class, + PROP_SOURCE_LIST, + g_param_spec_object ( + "source-list", + _("Source List"), + _("The registry of task lists"), + E_TYPE_SOURCE_LIST, + G_PARAM_READABLE)); +} + +static void +task_shell_backend_init (ETaskShellBackend *task_shell_backend) +{ + task_shell_backend->priv = + E_TASK_SHELL_BACKEND_GET_PRIVATE (task_shell_backend); +} + +GType +e_task_shell_backend_get_type (GTypeModule *type_module) +{ + if (e_task_shell_backend_type == 0) { + const GTypeInfo type_info = { + sizeof (ETaskShellBackendClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) task_shell_backend_class_init, + (GClassFinalizeFunc) NULL, + NULL, /* class_data */ + sizeof (ETaskShellBackend), + 0, /* n_preallocs */ + (GInstanceInitFunc) task_shell_backend_init, + NULL /* value_table */ + }; + + e_task_shell_backend_type = + g_type_module_register_type ( + type_module, E_TYPE_SHELL_BACKEND, + "ETaskShellBackend", &type_info, 0); + } + + return e_task_shell_backend_type; +} + +ESourceList * +e_task_shell_backend_get_source_list (ETaskShellBackend *task_shell_backend) +{ + g_return_val_if_fail ( + E_IS_TASK_SHELL_BACKEND (task_shell_backend), NULL); + + return task_shell_backend->priv->source_list; +} + +void +e_module_load (GTypeModule *type_module) +{ + e_task_shell_backend_get_type (type_module); + e_task_shell_view_get_type (type_module); +} + +void +e_module_unload (GTypeModule *type_module) +{ +} -- cgit v1.2.3