From 7ee6ef65f1019389c172478a80b8f0aa73a1453e Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Sat, 13 Sep 2008 04:02:09 +0000 Subject: Allow EShellContent, EShellSidebar, and EShellTaskbar to be subclassed, and begin doing so for Calendars, Memos and Tasks. Makes the code cleaner. svn path=/branches/kill-bonobo/; revision=36317 --- shell/e-shell-view.c | 122 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 89 insertions(+), 33 deletions(-) (limited to 'shell/e-shell-view.c') diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c index 5d14834721..15e658cd68 100644 --- a/shell/e-shell-view.c +++ b/shell/e-shell-view.c @@ -41,9 +41,9 @@ struct _EShellViewPrivate { gint page_num; GtkAction *action; - GtkWidget *content; - GtkWidget *sidebar; - GtkWidget *taskbar; + GtkWidget *shell_content; + GtkWidget *shell_sidebar; + GtkWidget *shell_taskbar; GalViewInstance *view_instance; }; @@ -53,6 +53,9 @@ enum { PROP_ACTION, PROP_PAGE_NUM, PROP_TITLE, + PROP_SHELL_CONTENT, + PROP_SHELL_SIDEBAR, + PROP_SHELL_TASKBAR, PROP_SHELL_WINDOW, PROP_VIEW_INSTANCE }; @@ -166,6 +169,24 @@ shell_view_get_property (GObject *object, E_SHELL_VIEW (object))); return; + case PROP_SHELL_CONTENT: + g_value_set_object ( + value, e_shell_view_get_shell_content ( + E_SHELL_VIEW (object))); + return; + + case PROP_SHELL_SIDEBAR: + g_value_set_object ( + value, e_shell_view_get_shell_sidebar ( + E_SHELL_VIEW (object))); + return; + + case PROP_SHELL_TASKBAR: + g_value_set_object ( + value, e_shell_view_get_shell_taskbar ( + E_SHELL_VIEW (object))); + return; + case PROP_SHELL_WINDOW: g_value_set_object ( value, e_shell_view_get_shell_window ( @@ -195,19 +216,19 @@ shell_view_dispose (GObject *object) priv->shell_window = NULL; } - if (priv->content != NULL) { - g_object_unref (priv->content); - priv->content = NULL; + if (priv->shell_content != NULL) { + g_object_unref (priv->shell_content); + priv->shell_content = NULL; } - if (priv->sidebar != NULL) { - g_object_unref (priv->sidebar); - priv->sidebar = NULL; + if (priv->shell_sidebar != NULL) { + g_object_unref (priv->shell_sidebar); + priv->shell_sidebar = NULL; } - if (priv->taskbar != NULL) { - g_object_unref (priv->taskbar); - priv->taskbar = NULL; + if (priv->shell_taskbar != NULL) { + g_object_unref (priv->shell_taskbar); + priv->shell_taskbar = NULL; } if (priv->view_instance != NULL) { @@ -236,27 +257,25 @@ static void shell_view_constructed (GObject *object) { EShellView *shell_view; + EShellViewClass *class; GtkWidget *widget; shell_view = E_SHELL_VIEW (object); + class = E_SHELL_VIEW_GET_CLASS (object); - widget = e_shell_content_new (shell_view); - shell_view->priv->content = g_object_ref_sink (widget); - gtk_widget_show (widget); + /* Invoke factory methods. */ - widget = e_shell_sidebar_new (shell_view); - shell_view->priv->sidebar = g_object_ref_sink (widget); + widget = class->new_shell_content (shell_view); + shell_view->priv->shell_content = g_object_ref_sink (widget); gtk_widget_show (widget); - widget = e_shell_taskbar_new (shell_view); - shell_view->priv->taskbar = g_object_ref_sink (widget); + widget = class->new_shell_sidebar (shell_view); + shell_view->priv->shell_sidebar = g_object_ref_sink (widget); gtk_widget_show (widget); - /* XXX GObjectClass doesn't implement constructed(), so we will. - * Then subclasses won't have to check the function pointer - * before chaining up. - * - * http://bugzilla.gnome.org/show_bug?id=546593 */ + widget = class->new_shell_taskbar (shell_view); + shell_view->priv->shell_taskbar = g_object_ref_sink (widget); + gtk_widget_show (widget); } static void @@ -274,6 +293,11 @@ shell_view_class_init (EShellViewClass *class) object_class->finalize = shell_view_finalize; object_class->constructed = shell_view_constructed; + /* Default Factories */ + class->new_shell_content = e_shell_content_new; + class->new_shell_sidebar = e_shell_sidebar_new; + class->new_shell_taskbar = e_shell_taskbar_new; + g_object_class_install_property ( object_class, PROP_ACTION, @@ -308,6 +332,39 @@ shell_view_class_init (EShellViewClass *class) NULL, G_PARAM_READWRITE)); + g_object_class_install_property ( + object_class, + PROP_SHELL_CONTENT, + g_param_spec_object ( + "shell-content", + _("Shell Content Widget"), + _("The content widget appears in " + "a shell window's right pane"), + E_TYPE_SHELL_CONTENT, + G_PARAM_READABLE)); + + g_object_class_install_property ( + object_class, + PROP_SHELL_SIDEBAR, + g_param_spec_object ( + "shell-sidebar", + _("Shell Sidebar Widget"), + _("The sidebar widget appears in " + "a shell window's left pane"), + E_TYPE_SHELL_SIDEBAR, + G_PARAM_READABLE)); + + g_object_class_install_property ( + object_class, + PROP_SHELL_TASKBAR, + g_param_spec_object ( + "shell-taskbar", + _("Shell Taskbar Widget"), + _("The taskbar widget appears at " + "the bottom of a shell window"), + E_TYPE_SHELL_TASKBAR, + G_PARAM_READABLE)); + g_object_class_install_property ( object_class, PROP_SHELL_WINDOW, @@ -379,11 +436,10 @@ e_shell_view_get_name (EShellView *shell_view) g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - /* Switcher actions have a secret "view-name" data value. - * This gets set in e_shell_window_create_switcher_actions(). */ - action = e_shell_view_get_action (shell_view); + /* Switcher actions have a secret "view-name" data value. + * This gets set in e_shell_window_create_switcher_actions(). */ return g_object_get_data (G_OBJECT (action), "view-name"); } @@ -482,27 +538,27 @@ e_shell_view_get_page_num (EShellView *shell_view) } EShellContent * -e_shell_view_get_content (EShellView *shell_view) +e_shell_view_get_shell_content (EShellView *shell_view) { g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - return E_SHELL_CONTENT (shell_view->priv->content); + return E_SHELL_CONTENT (shell_view->priv->shell_content); } EShellSidebar * -e_shell_view_get_sidebar (EShellView *shell_view) +e_shell_view_get_shell_sidebar (EShellView *shell_view) { g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - return E_SHELL_SIDEBAR (shell_view->priv->sidebar); + return E_SHELL_SIDEBAR (shell_view->priv->shell_sidebar); } EShellTaskbar * -e_shell_view_get_taskbar (EShellView *shell_view) +e_shell_view_get_shell_taskbar (EShellView *shell_view) { g_return_val_if_fail (E_IS_SHELL_VIEW (shell_view), NULL); - return E_SHELL_TASKBAR (shell_view->priv->taskbar); + return E_SHELL_TASKBAR (shell_view->priv->shell_taskbar); } void -- cgit v1.2.3