aboutsummaryrefslogtreecommitdiffstats
path: root/shell/e-shell-window-private.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@src.gnome.org>2008-07-17 03:37:02 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2008-07-17 03:37:02 +0800
commit03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8 (patch)
tree39d9a26ea8438f161ca413b197cf62a070b21385 /shell/e-shell-window-private.c
parentac0c655f3f2a8e47b0cca877aabae66421c58187 (diff)
downloadgsoc2013-evolution-03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8.tar
gsoc2013-evolution-03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8.tar.gz
gsoc2013-evolution-03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8.tar.bz2
gsoc2013-evolution-03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8.tar.lz
gsoc2013-evolution-03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8.tar.xz
gsoc2013-evolution-03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8.tar.zst
gsoc2013-evolution-03a3e6f84638c62c7848eee4d6f71cc4b1a7c1b8.zip
Disable all components and plugins. Begin rewriting the shell.
svn path=/branches/kill-bonobo/; revision=35748
Diffstat (limited to 'shell/e-shell-window-private.c')
-rw-r--r--shell/e-shell-window-private.c282
1 files changed, 282 insertions, 0 deletions
diff --git a/shell/e-shell-window-private.c b/shell/e-shell-window-private.c
new file mode 100644
index 0000000000..bdf0dc3484
--- /dev/null
+++ b/shell/e-shell-window-private.c
@@ -0,0 +1,282 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
+ * e-shell-window-private.c
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of version 2 of the GNU General Public
+ * License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "e-shell-window-private.h"
+
+#include "e-util/gconf-bridge.h"
+
+#ifdef NM_SUPPORT_GLIB
+void e_shell_nm_glib_initialise (EShellWindow *window);
+void e_shell_nm_glib_dispose (EShellWindow *window);
+#elif NM_SUPPORT
+void e_shell_dbus_initialise (EShellWindow *window);
+void e_shell_dbus_dispose (EShellWindow *window);
+#endif
+
+static void
+shell_window_menu_item_select_cb (EShellWindow *window,
+ GtkWidget *menu_item)
+{
+ GtkAction *action;
+ GtkLabel *label;
+ gchar *tooltip;
+
+ action = g_object_get_data (G_OBJECT (menu_item), "action");
+ g_return_if_fail (GTK_IS_ACTION (action));
+
+ g_object_get (action, "tooltip", &tooltip, NULL);
+
+ if (tooltip == NULL)
+ return;
+
+ label = GTK_LABEL (window->priv->tooltip_label);
+ gtk_label_set_text (label, tooltip);
+ g_free (tooltip);
+
+ gtk_widget_show (window->priv->tooltip_label);
+ gtk_widget_hide (window->priv->status_notebook);
+}
+
+static void
+shell_window_menu_item_deselect_cb (EShellWindow *window)
+{
+ gtk_widget_hide (window->priv->tooltip_label);
+ gtk_widget_show (window->priv->status_notebook);
+}
+
+static void
+shell_window_connect_proxy_cb (EShellWindow *window,
+ GtkAction *action,
+ GtkWidget *proxy)
+{
+ if (!GTK_IS_MENU_ITEM (proxy))
+ return;
+
+ g_object_set_data_full (
+ G_OBJECT (proxy), "action", action,
+ (GDestroyNotify) g_object_unref);
+
+ g_signal_connect_swapped (
+ proxy, "select",
+ G_CALLBACK (shell_window_menu_item_select_cb), window);
+
+ g_signal_connect_swapped (
+ proxy, "deselect",
+ G_CALLBACK (shell_window_menu_item_deselect_cb), window);
+}
+
+static void
+shell_window_online_button_clicked_cb (EOnlineButton *button,
+ EShellWindow *window)
+{
+ if (e_online_button_get_online (button))
+ gtk_action_activate (ACTION (WORK_OFFLINE));
+ else
+ gtk_action_activate (ACTION (WORK_ONLINE));
+}
+
+void
+e_shell_window_private_init (EShellWindow *window)
+{
+ EShellWindowPrivate *priv = window->priv;
+ GConfBridge *bridge;
+ GtkWidget *container;
+ GtkWidget *widget;
+ GObject *object;
+ const gchar *key;
+ gint height;
+
+ priv->manager = gtk_ui_manager_new ();
+ priv->shell_actions = gtk_action_group_new ("shell");
+ priv->new_item_actions = gtk_action_group_new ("new-item");
+ priv->new_group_actions = gtk_action_group_new ("new-group");
+ priv->new_source_actions = gtk_action_group_new ("new-source");
+ priv->shell_view_actions = gtk_action_group_new ("shell-view");
+
+ priv->shell_views = g_ptr_array_new ();
+
+ /* XXX Load UI file. */
+
+ e_shell_window_actions_init (window);
+
+ gtk_window_add_accel_group (
+ GTK_WINDOW (window),
+ gtk_ui_manager_get_accel_group (priv->manager));
+
+ g_signal_connect_swapped (
+ priv->manager, "connect-proxy",
+ G_CALLBACK (shell_window_connect_proxy_cb), window);
+
+ /* Construct window widgets. */
+
+ widget = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (window), widget);
+
+ container = widget;
+
+ widget = e_shell_window_get_managed_widget (window, "/main-menu");
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ priv->main_menu = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ widget = e_shell_window_get_managed_widget (window, "/main-toolbar");
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ priv->main_toolbar = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ widget = gtk_hpaned_new ();
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ priv->content_pane = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ widget = gtk_hbox_new (FALSE, 2);
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, FALSE, 0);
+ priv->status_area = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ /* Make the status area as large as the task bar. */
+ gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, NULL, &height);
+ gtk_widget_set_size_request (widget, -1, height * 2);
+
+ container = priv->content_pane;
+
+ widget = e_sidebar_new ();
+ gtk_paned_pack1 (GTK_PANED (container), widget, TRUE, FALSE);
+ priv->sidebar = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ widget = gtk_notebook_new ();
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE);
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (widget), FALSE);
+ gtk_paned_pack2 (GTK_PANED (container), widget, TRUE, FALSE);
+ priv->content_notebook = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ container = priv->sidebar;
+
+ widget = gtk_notebook_new ();
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE);
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (widget), FALSE);
+ gtk_container_add (GTK_CONTAINER (container), widget);
+ priv->sidebar_notebook = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ container = priv->status_area;
+
+ widget = e_online_button_new ();
+ g_signal_connect (
+ widget, "clicked",
+ G_CALLBACK (shell_window_online_button_clicked_cb), window);
+ gtk_box_pack_start (GTK_BOX (container), widget, FALSE, TRUE, 0);
+ priv->online_button = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ widget = gtk_label_new ("");
+ gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);
+ gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
+ priv->tooltip_label = g_object_ref (widget);
+ gtk_widget_hide (widget);
+
+ widget = gtk_notebook_new ();
+ gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE);
+ gtk_notebook_set_show_border (GTK_NOTEBOOK (widget), FALSE);
+ gtk_box_pack_start (GTK_BOX (container), widget, TRUE, TRUE, 0);
+ priv->status_notebook = g_object_ref (widget);
+ gtk_widget_show (widget);
+
+ /* Bind GObject properties to GConf keys. */
+
+ bridge = gconf_bridge_get ();
+
+ key = "/apps/evolution/shell/view_defaults/window";
+ gconf_bridge_bind_window (
+ bridge, key, GTK_WINDOW (window), TRUE, FALSE);
+
+ object = G_OBJECT (priv->content_pane);
+ key = "/apps/evolution/shell/view_defaults/folder_bar/width";
+ gconf_bridge_bind_property_delayed (bridge, key, object, "position");
+
+ object = G_OBJECT (ACTION (SHOW_BUTTONS));
+ key = "/apps/evolution/shell/view-defaults/buttons_visible";
+ gconf_bridge_bind_property (bridge, key, object, "active");
+
+ object = G_OBJECT (ACTION (SHOW_SIDEBAR));
+ key = "/apps/evolution/shell/view-defaults/sidebar_visible";
+ gconf_bridge_bind_property (bridge, key, object, "active");
+
+ object = G_OBJECT (ACTION (SHOW_STATUSBAR));
+ key = "/apps/evolution/shell/view_defaults/statusbar_visible";
+ gconf_bridge_bind_property (bridge, key, object, "active");
+
+ object = G_OBJECT (ACTION (SHOW_TOOLBAR));
+ key = "/apps/evolution/shell/view_defaults/toolbar_visible";
+ gconf_bridge_bind_property (bridge, key, object, "active");
+
+ /* NetworkManager integration. */
+
+#ifdef NM_SUPPORT_GLIB
+ e_shell_nm_glib_initialise (window);
+#elif NM_SUPPORT
+ e_shell_dbus_initialise (window);
+#endif
+
+ /* Initialize shell views */
+
+ e_shell_window_create_shell_view_actions (window);
+}
+
+void
+e_shell_window_private_dispose (EShellWindow *window)
+{
+ EShellWindowPrivate *priv = window->priv;
+
+ DISPOSE (priv->manager);
+ DISPOSE (priv->shell_actions);
+ DISPOSE (priv->new_item_actions);
+ DISPOSE (priv->new_group_actions);
+ DISPOSE (priv->new_source_actions);
+ DISPOSE (priv->shell_view_actions);
+
+ DISPOSE (priv->main_menu);
+ DISPOSE (priv->main_toolbar);
+ DISPOSE (priv->content_pane);
+ DISPOSE (priv->content_notebook);
+ DISPOSE (priv->sidebar);
+ DISPOSE (priv->sidebar_notebook);
+ DISPOSE (priv->status_area);
+ DISPOSE (priv->online_button);
+ DISPOSE (priv->tooltip_label);
+ DISPOSE (priv->status_notebook);
+
+#ifdef NM_SUPPORT_GLIB
+ e_shell_nm_glib_dispose (E_SHELL_WINDOW (object));
+#elif NM_SUPPORT
+ e_shell_dbus_dispose (E_SHELL_WINDOW (object));
+#endif
+}
+
+void
+e_shell_window_private_finalize (EShellWindow *window)
+{
+ EShellWindowPrivate *priv = window->priv;
+
+ g_ptr_array_foreach (priv->shell_views, (GFunc) g_object_unref, NULL);
+ g_ptr_array_free (priv->shell_views, TRUE);
+}