diff options
author | Matthew Barnes <mbarnes@src.gnome.org> | 2008-08-19 10:55:45 +0800 |
---|---|---|
committer | Matthew Barnes <mbarnes@src.gnome.org> | 2008-08-19 10:55:45 +0800 |
commit | 035744f29bdea64cfb38f2e507020d5914cd666e (patch) | |
tree | 98f062db0de5a09700524fe219d0a377f30a706a /shell/e-shell-window.c | |
parent | 4187293731274274e4283d9039f6e30c95578118 (diff) | |
download | gsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.tar.gz gsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.tar.zst gsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.zip |
Committing the day's progress.
Realized the "New" menu construction algorithm needs to live independently of
shell view instances since we lazy load the shell views but have to display
all possible "New" items immediately.
Prototype the mechanisms for managing the various shell views and keeping
track of which one is current.
Various other tightening up and rethinking of APIs.
svn path=/branches/kill-bonobo/; revision=36022
Diffstat (limited to 'shell/e-shell-window.c')
-rw-r--r-- | shell/e-shell-window.c | 180 |
1 files changed, 154 insertions, 26 deletions
diff --git a/shell/e-shell-window.c b/shell/e-shell-window.c index 45c1fa2637..ca7776c201 100644 --- a/shell/e-shell-window.c +++ b/shell/e-shell-window.c @@ -41,6 +41,7 @@ enum { PROP_0, + PROP_CURRENT_VIEW, PROP_SAFE_MODE }; @@ -53,11 +54,17 @@ shell_window_set_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_CURRENT_VIEW: + e_shell_window_set_current_view ( + E_SHELL_WINDOW (object), + g_value_get_string (value)); + return; + case PROP_SAFE_MODE: e_shell_window_set_safe_mode ( E_SHELL_WINDOW (object), g_value_get_boolean (value)); - break; + return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -70,11 +77,17 @@ shell_window_get_property (GObject *object, GParamSpec *pspec) { switch (property_id) { + case PROP_CURRENT_VIEW: + g_value_set_string ( + value, e_shell_window_get_current_view ( + E_SHELL_WINDOW (object))); + return; + case PROP_SAFE_MODE: g_value_set_boolean ( value, e_shell_window_get_safe_mode ( E_SHELL_WINDOW (object))); - break; + return; } G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); @@ -114,6 +127,17 @@ shell_window_class_init (EShellWindowClass *class) g_object_class_install_property ( object_class, + PROP_CURRENT_VIEW, + g_param_spec_string ( + "current-view", + NULL, + NULL, + NULL, + G_PARAM_READWRITE | + G_PARAM_CONSTRUCT)); + + g_object_class_install_property ( + object_class, PROP_SAFE_MODE, g_param_spec_boolean ( "safe-mode", @@ -125,18 +149,18 @@ shell_window_class_init (EShellWindowClass *class) } static void -shell_window_init (EShellWindow *window) +shell_window_init (EShellWindow *shell_window) { GtkUIManager *manager; - window->priv = E_SHELL_WINDOW_GET_PRIVATE (window); + shell_window->priv = E_SHELL_WINDOW_GET_PRIVATE (shell_window); - e_shell_window_private_init (window); + e_shell_window_private_init (shell_window); - manager = e_shell_window_get_ui_manager (window); + manager = e_shell_window_get_ui_manager (shell_window); e_plugin_ui_register_manager ( - "org.gnome.evolution.shell", manager, window); + "org.gnome.evolution.shell", manager, shell_window); } GType @@ -173,25 +197,25 @@ e_shell_window_new (gboolean safe_mode) } GtkUIManager * -e_shell_window_get_ui_manager (EShellWindow *window) +e_shell_window_get_ui_manager (EShellWindow *shell_window) { - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL); + g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), NULL); - return window->priv->manager; + return shell_window->priv->manager; } GtkAction * -e_shell_window_get_action (EShellWindow *window, +e_shell_window_get_action (EShellWindow *shell_window, const gchar *action_name) { GtkUIManager *manager; GtkAction *action = NULL; GList *iter; - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL); + g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), NULL); g_return_val_if_fail (action_name != NULL, NULL); - manager = e_shell_window_get_ui_manager (window); + manager = e_shell_window_get_ui_manager (shell_window); iter = gtk_ui_manager_get_action_groups (manager); while (iter != NULL && action == NULL) { @@ -208,16 +232,16 @@ e_shell_window_get_action (EShellWindow *window, } GtkActionGroup * -e_shell_window_get_action_group (EShellWindow *window, +e_shell_window_get_action_group (EShellWindow *shell_window, const gchar *group_name) { GtkUIManager *manager; GList *iter; - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL); + g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), NULL); g_return_val_if_fail (group_name != NULL, NULL); - manager = e_shell_window_get_ui_manager (window); + manager = e_shell_window_get_ui_manager (shell_window); iter = gtk_ui_manager_get_action_groups (manager); while (iter != NULL) { @@ -235,16 +259,16 @@ e_shell_window_get_action_group (EShellWindow *window, } GtkWidget * -e_shell_window_get_managed_widget (EShellWindow *window, +e_shell_window_get_managed_widget (EShellWindow *shell_window, const gchar *widget_path) { GtkUIManager *manager; GtkWidget *widget; - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), NULL); + g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), NULL); g_return_val_if_fail (widget_path != NULL, NULL); - manager = e_shell_window_get_ui_manager (window); + manager = e_shell_window_get_ui_manager (shell_window); widget = gtk_ui_manager_get_widget (manager, widget_path); g_return_val_if_fail (widget != NULL, NULL); @@ -252,21 +276,125 @@ e_shell_window_get_managed_widget (EShellWindow *window, return widget; } +const gchar * +e_shell_window_get_current_view (EShellWindow *shell_window) +{ + g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), NULL); + + return shell_window->priv->current_view; +} + +void +e_shell_window_set_current_view (EShellWindow *shell_window, + const gchar *name_or_alias) +{ + const gchar *current_view; + + g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); + + if (name_or_alias != NULL) + current_view = + e_shell_registry_get_canonical_name (name_or_alias); + + if (current_view == NULL) + current_view = shell_window->priv->default_view; + + shell_window->priv->current_view = current_view; + + g_object_notify (G_OBJECT (shell_window), "current-view"); +} + gboolean -e_shell_window_get_safe_mode (EShellWindow *window) +e_shell_window_get_safe_mode (EShellWindow *shell_window) { - g_return_val_if_fail (E_IS_SHELL_WINDOW (window), FALSE); + g_return_val_if_fail (E_IS_SHELL_WINDOW (shell_window), FALSE); - return window->priv->safe_mode; + return shell_window->priv->safe_mode; } void -e_shell_window_set_safe_mode (EShellWindow *window, +e_shell_window_set_safe_mode (EShellWindow *shell_window, gboolean safe_mode) { - g_return_if_fail (E_IS_SHELL_WINDOW (window)); + g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); - window->priv->safe_mode = safe_mode; + shell_window->priv->safe_mode = safe_mode; - g_object_notify (G_OBJECT (window), "safe-mode"); + g_object_notify (G_OBJECT (shell_window), "safe-mode"); +} + +void +e_shell_window_register_new_item_actions (EShellWindow *shell_window, + const gchar *module_name, + const GtkActionEntry *entries, + guint n_entries) +{ + GtkActionGroup *action_group; + guint ii; + + g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); + g_return_if_fail (module_name != NULL); + g_return_if_fail (entries != NULL); + + action_group = shell_window->priv->new_item_actions; + module_name = g_intern_string (module_name); + + gtk_action_group_add_actions ( + action_group, entries, n_entries, shell_window); + + /* Tag each action with the name of the shell module that + * registered it. This is used to help sort actions in the + * "New" menu. */ + + for (ii = 0; ii < n_entries; ii++) { + const gchar *action_name; + GtkAction *action; + + action_name = entries[ii].name; + + action = gtk_action_group_get_action ( + action_group, action_name); + + g_object_set_data ( + G_OBJECT (action), + "module-name", (gpointer) module_name); + } +} + +void +e_shell_window_register_new_source_actions (EShellWindow *shell_window, + const gchar *module_name, + const GtkActionEntry *entries, + guint n_entries) +{ + GtkActionGroup *action_group; + guint ii; + + g_return_if_fail (E_IS_SHELL_WINDOW (shell_window)); + g_return_if_fail (module_name != NULL); + g_return_if_fail (entries != NULL); + + action_group = shell_window->priv->new_source_actions; + module_name = g_intern_string (module_name); + + gtk_action_group_add_actions ( + action_group, entries, n_entries, shell_window); + + /* Tag each action with the name of the shell module that + * registered it. This is used to help sort actions in the + * "New" menu. */ + + for (ii = 0; ii < n_entries; ii++) { + const gchar *action_name; + GtkAction *action; + + action_name = entries[ii].name; + + action = gtk_action_group_get_action ( + action_group, action_name); + + g_object_set_data ( + G_OBJECT (action), + "module-name", (gpointer) module_name); + } } |