From e0c501b7018f12d37b10e32923f95b7a01c7982c Mon Sep 17 00:00:00 2001
From: Matthew Barnes <mbarnes@src.gnome.org>
Date: Fri, 29 Aug 2008 22:32:46 +0000
Subject: Progress update:

	- Contacts module partially working!

	- Implement UI merging.  Also merge EInfoLabel into ESidebar.
	  The shell window now manages the icon and labels and keeps
	  them up-to-date via EShellView properties.


svn path=/branches/kill-bonobo/; revision=36214
---
 .../gui/component/e-book-shell-view-private.c      | 124 ++++++++++++++++++++-
 1 file changed, 121 insertions(+), 3 deletions(-)

(limited to 'addressbook/gui/component/e-book-shell-view-private.c')

diff --git a/addressbook/gui/component/e-book-shell-view-private.c b/addressbook/gui/component/e-book-shell-view-private.c
index cfc12662f0..0bf0832c58 100644
--- a/addressbook/gui/component/e-book-shell-view-private.c
+++ b/addressbook/gui/component/e-book-shell-view-private.c
@@ -20,12 +20,70 @@
 
 #include "e-book-shell-view-private.h"
 
+static gboolean
+book_shell_view_show_popup_menu (GdkEventButton *event,
+                                 EShellView *shell_view)
+{
+	GtkWidget *menu;
+	EShellWindow *shell_window;
+	const gchar *widget_path;
+
+	widget_path = "/address-book-popup";
+	shell_window = e_shell_view_get_window (shell_view);
+	menu = e_shell_window_get_managed_widget (shell_window, widget_path);
+
+	if (event != NULL)
+		gtk_menu_popup (
+			GTK_MENU (menu), NULL, NULL, NULL, NULL,
+			event->button, event->time);
+	else
+		gtk_menu_popup (
+			GTK_MENU (menu), NULL, NULL, NULL, NULL,
+			0, gtk_get_current_event_time ());
+
+	return TRUE;
+}
+
+static gboolean
+book_shell_view_selector_button_press_event_cb (EShellView *shell_view,
+                                                GdkEventButton *event)
+{
+	if (event->button == 3 && event->type == GDK_BUTTON_PRESS)
+		return book_shell_view_show_popup_menu (event, shell_view);
+
+	return FALSE;
+}
+
+static gboolean
+book_shell_view_selector_popup_menu_cb (EShellView *shell_view)
+{
+	return book_shell_view_show_popup_menu (NULL, shell_view);
+}
+
+static gboolean
+book_shell_view_selector_key_press_event_cb (EShellView *shell_view,
+                                             GdkEventKey *event)
+{
+	EShellWindow *shell_window;
+
+	/* Needed for the ACTION() macro. */
+	shell_window = e_shell_view_get_window (shell_view);
+
+	if (event->keyval == GDK_Delete) {
+		gtk_action_activate (ACTION (ADDRESS_BOOK_DELETE));
+		return TRUE;
+	}
+
+	return FALSE;
+}
+
 void
 e_book_shell_view_private_init (EBookShellView *book_shell_view)
 {
 	EBookShellViewPrivate *priv = book_shell_view->priv;
 	GHashTable *uid_to_view;
 	GHashTable *uid_to_editor;
+	GtkWidget *container;
 	GtkWidget *widget;
 
 	uid_to_view = g_hash_table_new_full (
@@ -39,8 +97,11 @@ e_book_shell_view_private_init (EBookShellView *book_shell_view)
 		(GDestroyNotify) g_free);
 
 	priv->contact_actions = gtk_action_group_new ("contacts");
+	priv->activity_handler = e_activity_handler_new ();
+	priv->uid_to_view = uid_to_view;
+	priv->uid_to_editor = uid_to_editor;
 
-	e_book_shell_view_actions_init (book_shell_view);
+	e_book_get_addressbooks (&priv->source_list, NULL);
 
 	widget = gtk_notebook_new ();
 	gtk_notebook_set_show_tabs (GTK_NOTEBOOK (widget), FALSE);
@@ -48,7 +109,43 @@ e_book_shell_view_private_init (EBookShellView *book_shell_view)
 	priv->notebook = g_object_ref_sink (widget);
 	gtk_widget_show (widget);
 
-	e_book_get_addressbooks (&priv->source_list, NULL);
+	widget = e_task_bar_new ();
+	e_activity_handler_attach_task_bar (
+		priv->activity_handler, E_TASK_BAR (widget));
+	priv->task_bar = g_object_ref (widget);
+	gtk_widget_show (widget);
+
+	widget = gtk_scrolled_window_new (NULL, NULL);
+	gtk_scrolled_window_set_policy (
+		GTK_SCROLLED_WINDOW (widget),
+		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+	gtk_scrolled_window_set_shadow_type (
+		GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN);
+	priv->scrolled_window = g_object_ref_sink (widget);
+	gtk_widget_show (widget);
+
+	container = widget;
+
+	widget = e_source_selector_new (priv->source_list);
+	e_source_selector_show_selection (E_SOURCE_SELECTOR (widget), FALSE);
+	gtk_container_add (GTK_CONTAINER (container), widget);
+	priv->selector = g_object_ref (widget);
+	gtk_widget_show (widget);
+
+	g_signal_connect_swapped (
+		widget, "button-press-event",
+		G_CALLBACK (book_shell_view_selector_button_press_event_cb),
+		book_shell_view);
+
+	g_signal_connect_swapped (
+		widget, "key-press-event",
+		G_CALLBACK (book_shell_view_selector_key_press_event_cb),
+		book_shell_view);
+
+	g_signal_connect_swapped (
+		widget, "popup-menu",
+		G_CALLBACK (book_shell_view_selector_popup_menu_cb),
+		book_shell_view);
 }
 
 void
@@ -56,11 +153,20 @@ e_book_shell_view_private_dispose (EBookShellView *book_shell_view)
 {
 	EBookShellViewPrivate *priv = book_shell_view->priv;
 
+	DISPOSE (priv->contact_actions);
+
 	DISPOSE (priv->notebook);
-	DISPOSE (priv->source_list);
+	DISPOSE (priv->scrolled_window);
+	DISPOSE (priv->selector);
+	DISPOSE (priv->task_bar);
+
+	DISPOSE (priv->activity_handler);
 
 	g_hash_table_remove_all (priv->uid_to_view);
 	g_hash_table_remove_all (priv->uid_to_editor);
+
+	DISPOSE (priv->book);
+	DISPOSE (priv->source_list);
 }
 
 void
@@ -70,6 +176,8 @@ e_book_shell_view_private_finalize (EBookShellView *book_shell_view)
 
 	g_hash_table_destroy (priv->uid_to_view);
 	g_hash_table_destroy (priv->uid_to_editor);
+
+	g_free (priv->password);
 }
 
 EABView *
@@ -87,3 +195,13 @@ e_book_shell_view_get_current_view (EBookShellView *book_shell_view)
 
 	return EAB_VIEW (widget);
 }
+
+void
+e_book_shell_view_editor_weak_notify (EditorUidClosure *closure,
+                                      GObject *where_the_object_was)
+{
+	GHashTable *hash_table;
+
+	hash_table = closure->view->priv->uid_to_editor;
+	g_hash_table_remove (hash_table, closure->uid);
+}
-- 
cgit