aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/component/e-book-shell-view-private.c
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@src.gnome.org>2008-08-30 06:32:46 +0800
committerMatthew Barnes <mbarnes@src.gnome.org>2008-08-30 06:32:46 +0800
commite0c501b7018f12d37b10e32923f95b7a01c7982c (patch)
tree0114cbe9529000ec06dbe4ebe927e8c6cafbf0ba /addressbook/gui/component/e-book-shell-view-private.c
parent02a9eb68308537fe712e757017ae4bb372863a8c (diff)
downloadgsoc2013-evolution-e0c501b7018f12d37b10e32923f95b7a01c7982c.tar
gsoc2013-evolution-e0c501b7018f12d37b10e32923f95b7a01c7982c.tar.gz
gsoc2013-evolution-e0c501b7018f12d37b10e32923f95b7a01c7982c.tar.bz2
gsoc2013-evolution-e0c501b7018f12d37b10e32923f95b7a01c7982c.tar.lz
gsoc2013-evolution-e0c501b7018f12d37b10e32923f95b7a01c7982c.tar.xz
gsoc2013-evolution-e0c501b7018f12d37b10e32923f95b7a01c7982c.tar.zst
gsoc2013-evolution-e0c501b7018f12d37b10e32923f95b7a01c7982c.zip
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
Diffstat (limited to 'addressbook/gui/component/e-book-shell-view-private.c')
-rw-r--r--addressbook/gui/component/e-book-shell-view-private.c124
1 files changed, 121 insertions, 3 deletions
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);
+}