aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-shell-view.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2009-05-07 19:21:57 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-05-07 19:21:57 +0800
commitcaa862135195b828d2e8355436fdd6eb0ec2443e (patch)
tree40198708ccf89ca4246c7da11a718fa5cc39de52 /shell/e-shell-view.c
parent19b29348068e367efc105732e9707cdb4132b4ee (diff)
downloadgsoc2013-evolution-caa862135195b828d2e8355436fdd6eb0ec2443e.tar
gsoc2013-evolution-caa862135195b828d2e8355436fdd6eb0ec2443e.tar.gz
gsoc2013-evolution-caa862135195b828d2e8355436fdd6eb0ec2443e.tar.bz2
gsoc2013-evolution-caa862135195b828d2e8355436fdd6eb0ec2443e.tar.lz
gsoc2013-evolution-caa862135195b828d2e8355436fdd6eb0ec2443e.tar.xz
gsoc2013-evolution-caa862135195b828d2e8355436fdd6eb0ec2443e.tar.zst
gsoc2013-evolution-caa862135195b828d2e8355436fdd6eb0ec2443e.zip
Convert EShellModule to EShellBackend
Split the GTypeModule loader out of EShellModule as EModule, and rename EShellModule to EShellBackend. Backends (formerly modules) should now subclass EShellBackend. This commit converts EShell but breaks all the shell backends.
Diffstat (limited to 'shell/e-shell-view.c')
-rw-r--r--shell/e-shell-view.c152
1 files changed, 85 insertions, 67 deletions
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index d7a564c567..454e517f90 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -27,11 +27,6 @@
#include "e-util/e-util.h"
#include "e-util/e-plugin-ui.h"
-#include "e-shell-content.h"
-#include "e-shell-module.h"
-#include "e-shell-sidebar.h"
-#include "e-shell-taskbar.h"
-#include "e-shell-window.h"
#include "e-shell-window-actions.h"
#define E_SHELL_VIEW_GET_PRIVATE(obj) \
@@ -40,6 +35,7 @@
struct _EShellViewPrivate {
+ gpointer shell_backend; /* weak pointer */
gpointer shell_window; /* weak pointer */
gchar *title;
@@ -59,8 +55,8 @@ enum {
PROP_ACTION,
PROP_PAGE_NUM,
PROP_TITLE,
+ PROP_SHELL_BACKEND,
PROP_SHELL_CONTENT,
- PROP_SHELL_MODULE,
PROP_SHELL_SIDEBAR,
PROP_SHELL_TASKBAR,
PROP_SHELL_WINDOW,
@@ -77,31 +73,36 @@ static gpointer parent_class;
static gulong signals[LAST_SIGNAL];
static void
-shell_view_init_view_collection (EShellViewClass *class)
+shell_view_init_view_collection (EShellView *shell_view)
{
- EShellModule *shell_module;
+ EShellViewClass *view_class;
+ EShellBackendClass *backend_class;
+ EShellBackend *shell_backend;
const gchar *base_dir;
- const gchar *module_name;
+ const gchar *backend_name;
gchar *system_dir;
gchar *local_dir;
- shell_module = E_SHELL_MODULE (class->type_module);
- module_name = class->type_module->name;
+ view_class = E_SHELL_VIEW_GET_CLASS (shell_view);
+
+ shell_backend = e_shell_view_get_shell_backend (shell_view);
+ backend_class = E_SHELL_BACKEND_GET_CLASS (shell_backend);
+ backend_name = backend_class->name;
base_dir = EVOLUTION_GALVIEWSDIR;
- system_dir = g_build_filename (base_dir, module_name, NULL);
+ system_dir = g_build_filename (base_dir, backend_name, NULL);
- base_dir = e_shell_module_get_data_dir (shell_module);
+ base_dir = e_shell_backend_get_data_dir (shell_backend);
local_dir = g_build_filename (base_dir, "views", NULL);
/* The view collection is never destroyed. */
- class->view_collection = gal_view_collection_new ();
+ view_class->view_collection = gal_view_collection_new ();
gal_view_collection_set_title (
- class->view_collection, class->label);
+ view_class->view_collection, view_class->label);
gal_view_collection_set_storage_directories (
- class->view_collection, system_dir, local_dir);
+ view_class->view_collection, system_dir, local_dir);
g_free (system_dir);
g_free (local_dir);
@@ -147,6 +148,19 @@ shell_view_set_action (EShellView *shell_view,
}
static void
+shell_view_set_shell_backend (EShellView *shell_view,
+ EShellBackend *shell_backend)
+{
+ g_return_if_fail (shell_view->priv->shell_backend == NULL);
+
+ shell_view->priv->shell_backend = shell_backend;
+
+ g_object_add_weak_pointer (
+ G_OBJECT (shell_backend),
+ &shell_view->priv->shell_backend);
+}
+
+static void
shell_view_set_shell_window (EShellView *shell_view,
GtkWidget *shell_window)
{
@@ -184,6 +198,12 @@ shell_view_set_property (GObject *object,
g_value_get_string (value));
return;
+ case PROP_SHELL_BACKEND:
+ shell_view_set_shell_backend (
+ E_SHELL_VIEW (object),
+ g_value_get_object (value));
+ return;
+
case PROP_SHELL_WINDOW:
shell_view_set_shell_window (
E_SHELL_VIEW (object),
@@ -225,16 +245,16 @@ shell_view_get_property (GObject *object,
E_SHELL_VIEW (object)));
return;
- case PROP_SHELL_CONTENT:
+ case PROP_SHELL_BACKEND:
g_value_set_object (
- value, e_shell_view_get_shell_content (
+ value, e_shell_view_get_shell_backend (
E_SHELL_VIEW (object)));
- return;
- case PROP_SHELL_MODULE:
+ case PROP_SHELL_CONTENT:
g_value_set_object (
- value, e_shell_view_get_shell_module (
+ value, e_shell_view_get_shell_content (
E_SHELL_VIEW (object)));
+ return;
case PROP_SHELL_SIDEBAR:
g_value_set_object (
@@ -271,6 +291,12 @@ shell_view_dispose (GObject *object)
priv = E_SHELL_VIEW_GET_PRIVATE (object);
+ if (priv->shell_backend != NULL) {
+ g_object_remove_weak_pointer (
+ G_OBJECT (priv->shell_backend), &priv->shell_backend);
+ priv->shell_backend = NULL;
+ }
+
if (priv->shell_window != NULL) {
g_object_remove_weak_pointer (
G_OBJECT (priv->shell_window), &priv->shell_window);
@@ -328,6 +354,9 @@ shell_view_constructed (GObject *object)
shell_view = E_SHELL_VIEW (object);
class = E_SHELL_VIEW_GET_CLASS (object);
+ if (class->view_collection == NULL)
+ shell_view_init_view_collection (shell_view);
+
shell_window = e_shell_view_get_shell_window (shell_view);
ui_manager = e_shell_window_get_ui_manager (shell_window);
id = class->ui_manager_id;
@@ -450,6 +479,22 @@ shell_view_class_init (EShellViewClass *class)
G_PARAM_READWRITE));
/**
+ * EShellView::shell-backend
+ *
+ * The #EShellBackend for this shell view.
+ **/
+ g_object_class_install_property (
+ object_class,
+ PROP_SHELL_BACKEND,
+ g_param_spec_object (
+ "shell-backend",
+ _("Shell Backend"),
+ _("The EShellBackend for this shell view"),
+ E_TYPE_SHELL_BACKEND,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY));
+
+ /**
* EShellView:shell-content
*
* The content widget appears in an #EShellWindow<!-- -->'s
@@ -467,21 +512,6 @@ shell_view_class_init (EShellViewClass *class)
G_PARAM_READABLE));
/**
- * EShellView::shell-module
- *
- * The #EShellModule for this shell view.
- **/
- g_object_class_install_property (
- object_class,
- PROP_SHELL_MODULE,
- g_param_spec_object (
- "shell-module",
- _("Shell Module"),
- _("The EShellModule for this shell view"),
- E_TYPE_SHELL_MODULE,
- G_PARAM_READABLE));
-
- /**
* EShellView:shell-sidebar
*
* The sidebar widget appears in an #EShellWindow<!-- -->'s
@@ -591,8 +621,7 @@ shell_view_class_init (EShellViewClass *class)
}
static void
-shell_view_init (EShellView *shell_view,
- EShellViewClass *class)
+shell_view_init (EShellView *shell_view)
{
GtkSizeGroup *size_group;
@@ -600,9 +629,6 @@ shell_view_init (EShellView *shell_view,
shell_view->priv = E_SHELL_VIEW_GET_PRIVATE (shell_view);
shell_view->priv->size_group = size_group;
-
- if (class->view_collection == NULL)
- shell_view_init_view_collection (class);
}
GType
@@ -637,8 +663,8 @@ e_shell_view_get_type (void)
* @shell_view: an #EShellView
*
* Returns the view name for @shell_view, which is also the name of
- * the corresponding #EShellModule (see the <structfield>name</structfield>
- * field in #EShellModuleInfo).
+ * the corresponding #EShellBackend (see the <structfield>name</structfield>
+ * field in #EShellBackendInfo).
*
* Returns: the view name for @shell_view
**/
@@ -786,30 +812,6 @@ e_shell_view_get_shell_window (EShellView *shell_view)
}
/**
- * e_shell_view_get_shell_module:
- * @shell_view: an #EShellView
- *
- * Returns the corresponding #EShellModule for @shell_view.
- *
- * Returns: the corresponding #EShellModule for @shell_view
- **/
-EShellModule *
-e_shell_view_get_shell_module (EShellView *shell_view)
-{
- EShellViewClass *class;
-
- g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
-
- /* Calling this function during the shell view's instance
- * initialization function will return the wrong result,
- * so watch for that and emit a warning. */
- class = E_SHELL_VIEW_GET_CLASS (shell_view);
- g_return_val_if_fail (E_IS_SHELL_VIEW_CLASS (class), NULL);
-
- return E_SHELL_MODULE (class->type_module);
-}
-
-/**
* e_shell_view_is_active:
* @shell_view: an #EShellView
*
@@ -891,6 +893,22 @@ e_shell_view_get_size_group (EShellView *shell_view)
}
/**
+ * e_shell_view_get_shell_backend:
+ * @shell_view: an #EShellView
+ *
+ * Returns the corresponding #EShellBackend for @shell_view.
+ *
+ * Returns: the corresponding #EShellBackend for @shell_view
+ **/
+EShellBackend *
+e_shell_view_get_shell_backend (EShellView *shell_view)
+{
+ g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL);
+
+ return E_SHELL_BACKEND (shell_view->priv->shell_backend);
+}
+
+/**
* e_shell_view_get_shell_content:
* @shell_view: an #EShellView
*