From c3268be7377a8d44216abc778d4f42169493cb0c Mon Sep 17 00:00:00 2001 From: Matthew Barnes Date: Fri, 15 Feb 2013 18:32:11 -0500 Subject: EBookShellView: Handle error signals from address book backends. --- modules/addressbook/e-book-shell-view-private.c | 42 +++++++++++++++++++++++++ modules/addressbook/e-book-shell-view-private.h | 3 ++ 2 files changed, 45 insertions(+) (limited to 'modules') diff --git a/modules/addressbook/e-book-shell-view-private.c b/modules/addressbook/e-book-shell-view-private.c index 82b339596f..6f23d4faed 100644 --- a/modules/addressbook/e-book-shell-view-private.c +++ b/modules/addressbook/e-book-shell-view-private.c @@ -416,6 +416,30 @@ book_shell_view_selector_popup_menu_cb (EShellView *shell_view) return book_shell_view_show_popup_menu (NULL, shell_view); } +static void +book_shell_view_backend_error_cb (EClientCache *client_cache, + EClient *client, + EAlert *alert, + EBookShellView *book_shell_view) +{ + EBookShellContent *book_shell_content; + ESource *source; + const gchar *extension_name; + + book_shell_content = book_shell_view->priv->book_shell_content; + + source = e_client_get_source (client); + extension_name = E_SOURCE_EXTENSION_ADDRESS_BOOK; + + /* Only submit alerts from address book backends. */ + if (e_source_has_extension (source, extension_name)) { + EAlertSink *alert_sink; + + alert_sink = E_ALERT_SINK (book_shell_content); + e_alert_sink_submit_alert (alert_sink, alert); + } +} + static void book_shell_view_source_removed_cb (ESourceRegistry *registry, ESource *source, @@ -547,6 +571,10 @@ e_book_shell_view_private_constructed (EBookShellView *book_shell_view) priv->book_shell_content = g_object_ref (shell_content); priv->book_shell_sidebar = g_object_ref (shell_sidebar); + /* Keep our own reference to this so we can + * disconnect our signal handler in dispose(). */ + priv->client_cache = g_object_ref (e_shell_get_client_cache (shell)); + /* Keep our own reference to this so we can * disconnect our signal handler in dispose(). */ priv->registry = g_object_ref (e_shell_get_registry (shell)); @@ -554,6 +582,12 @@ e_book_shell_view_private_constructed (EBookShellView *book_shell_view) selector = e_book_shell_sidebar_get_selector ( E_BOOK_SHELL_SIDEBAR (shell_sidebar)); + handler_id = g_signal_connect ( + priv->client_cache, "backend-error", + G_CALLBACK (book_shell_view_backend_error_cb), + book_shell_view); + priv->backend_error_handler_id = handler_id; + handler_id = g_signal_connect ( priv->registry, "source-removed", G_CALLBACK (book_shell_view_source_removed_cb), @@ -589,6 +623,13 @@ e_book_shell_view_private_dispose (EBookShellView *book_shell_view) { EBookShellViewPrivate *priv = book_shell_view->priv; + if (priv->backend_error_handler_id > 0) { + g_signal_handler_disconnect ( + priv->client_cache, + priv->backend_error_handler_id); + priv->backend_error_handler_id = 0; + } + if (priv->source_removed_handler_id > 0) { g_signal_handler_disconnect ( priv->registry, @@ -600,6 +641,7 @@ e_book_shell_view_private_dispose (EBookShellView *book_shell_view) g_clear_object (&priv->book_shell_content); g_clear_object (&priv->book_shell_sidebar); + g_clear_object (&priv->client_cache); g_clear_object (&priv->registry); g_hash_table_remove_all (priv->uid_to_view); diff --git a/modules/addressbook/e-book-shell-view-private.h b/modules/addressbook/e-book-shell-view-private.h index 108677b790..a3fe09ac84 100644 --- a/modules/addressbook/e-book-shell-view-private.h +++ b/modules/addressbook/e-book-shell-view-private.h @@ -84,6 +84,9 @@ struct _EBookShellViewPrivate { EBookShellContent *book_shell_content; EBookShellSidebar *book_shell_sidebar; + EClientCache *client_cache; + gulong backend_error_handler_id; + ESourceRegistry *registry; gulong source_removed_handler_id; -- cgit v1.2.3