diff options
author | Chris Toshok <toshok@ximian.com> | 2002-08-29 17:48:02 +0800 |
---|---|---|
committer | Chris Toshok <toshok@src.gnome.org> | 2002-08-29 17:48:02 +0800 |
commit | 0ec1895bf3f7b64938df35de8266b6fc3d9f60d9 (patch) | |
tree | 638cc671c66fc792b4c60e1ea86af16b6b91e118 /addressbook/backend/ebook | |
parent | 7f3d3493a3bfb3cec85609d6951565fead6796bc (diff) | |
download | gsoc2013-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')
-rw-r--r-- | addressbook/backend/ebook/e-book.c | 30 | ||||
-rw-r--r-- | addressbook/backend/ebook/e-book.h | 1 |
2 files changed, 31 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); diff --git a/addressbook/backend/ebook/e-book.h b/addressbook/backend/ebook/e-book.h index e917279775..be90f52c04 100644 --- a/addressbook/backend/ebook/e-book.h +++ b/addressbook/backend/ebook/e-book.h @@ -38,6 +38,7 @@ struct _EBookClass { void (* open_progress) (EBook *book, const char *msg, short percent); void (* link_status) (EBook *book, gboolean connected); void (* writable_status) (EBook *book, gboolean writable); + void (* backend_died) (EBook *book); }; /* Callbacks for asynchronous functions. */ |