aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-shell-window.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@src.gnome.org>2008-08-19 10:55:45 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2008-08-19 10:55:45 +0800
commit035744f29bdea64cfb38f2e507020d5914cd666e (patch)
tree98f062db0de5a09700524fe219d0a377f30a706a /shell/e-shell-window.c
parent4187293731274274e4283d9039f6e30c95578118 (diff)
downloadgsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.tar
gsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.tar.gz
gsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.tar.bz2
gsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.tar.lz
gsoc2013-evolution-035744f29bdea64cfb38f2e507020d5914cd666e.tar.xz
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.c180
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);
+ }
}