aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend/ebook/e-book.c
diff options
context:
space:
mode:
authorChris Toshok <toshok@ximian.com>2002-08-29 17:48:02 +0800
committerChris Toshok <toshok@src.gnome.org>2002-08-29 17:48:02 +0800
commit0ec1895bf3f7b64938df35de8266b6fc3d9f60d9 (patch)
tree638cc671c66fc792b4c60e1ea86af16b6b91e118 /addressbook/backend/ebook/e-book.c
parent7f3d3493a3bfb3cec85609d6951565fead6796bc (diff)
downloadgsoc2013-evolution-0ec1895bf3f7b64938df35de8266b6fc3d9f60d9.tar
gsoc2013-evolution-0ec1895bf3f7b64938df35de8266b6fc3d9f60d9.tar.gz
gsoc2013-evolution-0ec1895bf3f7b64938df35de8266b6fc3d9f60d9.tar.bz2
gsoc2013-evolution-0ec1895bf3f7b64938df35de8266b6fc3d9f60d9.tar.lz
gsoc2013-evolution-0ec1895bf3f7b64938df35de8266b6fc3d9f60d9.tar.xz
gsoc2013-evolution-0ec1895bf3f7b64938df35de8266b6fc3d9f60d9.tar.zst
gsoc2013-evolution-0ec1895bf3f7b64938df35de8266b6fc3d9f60d9.zip
[ fixes #20347 ] hook up the backend_died signal. (backend_died): new
2002-08-29 Chris Toshok <toshok@ximian.com> [ fixes #20347 ] * gui/widgets/e-addressbook-view.c (e_addressbook_view_init): hook up the backend_died signal. (backend_died): new function, pop up an error dialog saying the backend died. * gui/widgets/e-addressbook-model.c (backend_died): new function, emit the backend_died signal. (e_addressbook_model_class_init): create the backend_died signal. (e_addressbook_model_init): init backend_died_id (e_addressbook_model_set_arg): disconnect the backend_died signal from the old book and hook it up to the new book. * gui/widgets/e-addressbook-model.h: add the backend_died signal. * backend/ebook/e-book.c (backend_died_cb): new function, emit the backend_died signal. (e_book_do_response_open): create the component listener and hook up the backend_died signal. (e_book_destroy): disconnect the component listener and unref it. * backend/ebook/e-book.h: add backend_died signal. svn path=/trunk/; revision=17918
Diffstat (limited to 'addressbook/backend/ebook/e-book.c')
-rw-r--r--addressbook/backend/ebook/e-book.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/addressbook/backend/ebook/e-book.c b/addressbook/backend/ebook/e-book.c
index fd9f233d8c..cad203ad44 100644
--- a/addressbook/backend/ebook/e-book.c
+++ b/addressbook/backend/ebook/e-book.c
@@ -18,6 +18,7 @@
#include "e-card-cursor.h"
#include "e-book-listener.h"
#include "e-book.h"
+#include "e-util/e-component-listener.h"
GtkObjectClass *e_book_parent_class;
@@ -34,6 +35,7 @@ struct _EBookPrivate {
GList *iter;
EBookListener *listener;
+ EComponentListener *comp_listener;
GNOME_Evolution_Addressbook_Book corba_book;
@@ -55,6 +57,7 @@ enum {
OPEN_PROGRESS,
WRITABLE_STATUS,
LINK_STATUS,
+ BACKEND_DIED,
LAST_SIGNAL
};
@@ -397,6 +400,15 @@ e_book_do_response_get_changes (EBook *book,
}
static void
+backend_died_cb (EComponentListener *cl, gpointer user_data)
+{
+ EBook *book = user_data;
+
+ book->priv->load_state = URINotLoaded;
+ gtk_signal_emit (GTK_OBJECT (book), e_book_signals [BACKEND_DIED]);
+}
+
+static void
e_book_do_response_open (EBook *book,
EBookListenerResponse *resp)
{
@@ -405,6 +417,10 @@ e_book_do_response_open (EBook *book,
if (resp->status == E_BOOK_STATUS_SUCCESS) {
book->priv->corba_book = resp->book;
book->priv->load_state = URILoaded;
+
+ book->priv->comp_listener = e_component_listener_new (book->priv->corba_book, 0);
+ gtk_signal_connect (GTK_OBJECT (book->priv->comp_listener), "component_died",
+ GTK_SIGNAL_FUNC (backend_died_cb), book);
}
op = e_book_pop_op (book);
@@ -1474,6 +1490,12 @@ e_book_destroy (GtkObject *object)
}
}
+ if (book->priv->comp_listener) {
+ gtk_signal_disconnect_by_data (GTK_OBJECT (book->priv->comp_listener), book);
+ gtk_object_unref (GTK_OBJECT (book->priv->comp_listener));
+ book->priv->comp_listener = NULL;
+ }
+
g_free (book->priv->uri);
g_free (book->priv);
@@ -1506,6 +1528,14 @@ e_book_class_init (EBookClass *klass)
GTK_TYPE_NONE, 1,
GTK_TYPE_BOOL);
+ e_book_signals [BACKEND_DIED] =
+ gtk_signal_new ("backend_died",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EBookClass, backend_died),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
+
gtk_object_class_add_signals (object_class, e_book_signals,
LAST_SIGNAL);