From e0c501b7018f12d37b10e32923f95b7a01c7982c Mon Sep 17 00:00:00 2001 From: Matthew Barnes 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 v1.2.3