aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/gui/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'addressbook/gui/widgets')
-rw-r--r--addressbook/gui/widgets/e-addressbook-model.c27
-rw-r--r--addressbook/gui/widgets/e-addressbook-model.h3
-rw-r--r--addressbook/gui/widgets/e-addressbook-view.c17
3 files changed, 45 insertions, 2 deletions
diff --git a/addressbook/gui/widgets/e-addressbook-model.c b/addressbook/gui/widgets/e-addressbook-model.c
index 881a8e4eed..7f59c2313c 100644
--- a/addressbook/gui/widgets/e-addressbook-model.c
+++ b/addressbook/gui/widgets/e-addressbook-model.c
@@ -44,6 +44,7 @@ enum {
CARD_CHANGED,
MODEL_CHANGED,
STOP_STATE_CHANGED,
+ BACKEND_DIED,
LAST_SIGNAL
};
@@ -260,6 +261,14 @@ writable_status (EBook *book,
}
static void
+backend_died (EBook *book,
+ EAddressbookModel *model)
+{
+ gtk_signal_emit (GTK_OBJECT (model),
+ e_addressbook_model_signals [BACKEND_DIED]);
+}
+
+static void
e_addressbook_model_class_init (GtkObjectClass *object_class)
{
parent_class = gtk_type_class (PARENT_TYPE);
@@ -347,6 +356,14 @@ e_addressbook_model_class_init (GtkObjectClass *object_class)
gtk_marshal_NONE__NONE,
GTK_TYPE_NONE, 0);
+ e_addressbook_model_signals [BACKEND_DIED] =
+ gtk_signal_new ("backend_died",
+ GTK_RUN_LAST,
+ object_class->type,
+ GTK_SIGNAL_OFFSET (EAddressbookModelClass, backend_died),
+ gtk_marshal_NONE__NONE,
+ GTK_TYPE_NONE, 0);
+
gtk_object_class_add_signals (object_class, e_addressbook_model_signals, LAST_SIGNAL);
}
@@ -363,6 +380,7 @@ e_addressbook_model_init (GtkObject *object)
model->modify_card_id = 0;
model->status_message_id = 0;
model->writable_status_id = 0;
+ model->backend_died_id = 0;
model->sequence_complete_id = 0;
model->data = NULL;
model->data_count = 0;
@@ -481,9 +499,13 @@ e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
if (model->writable_status_id)
gtk_signal_disconnect(GTK_OBJECT (model->book),
model->writable_status_id);
-
model->writable_status_id = 0;
+ if (model->backend_died_id)
+ gtk_signal_disconnect(GTK_OBJECT (model->book),
+ model->backend_died_id);
+ model->backend_died_id = 0;
+
gtk_object_unref(GTK_OBJECT(model->book));
}
model->book = E_BOOK(GTK_VALUE_OBJECT (*arg));
@@ -495,6 +517,9 @@ e_addressbook_model_set_arg (GtkObject *o, GtkArg *arg, guint arg_id)
gtk_signal_connect (GTK_OBJECT(model->book),
"writable_status",
writable_status, model);
+ gtk_signal_connect (GTK_OBJECT(model->book),
+ "backend_died",
+ backend_died, model);
}
break;
case ARG_QUERY:
diff --git a/addressbook/gui/widgets/e-addressbook-model.h b/addressbook/gui/widgets/e-addressbook-model.h
index 57644dbca6..eb1004499a 100644
--- a/addressbook/gui/widgets/e-addressbook-model.h
+++ b/addressbook/gui/widgets/e-addressbook-model.h
@@ -29,7 +29,7 @@ struct _EAddressbookModel {
int data_count;
int allocated_count;
- int create_card_id, remove_card_id, modify_card_id, status_message_id, writable_status_id, sequence_complete_id;
+ int create_card_id, remove_card_id, modify_card_id, status_message_id, writable_status_id, sequence_complete_id, backend_died_id;
guint search_in_progress : 1;
guint editable : 1;
@@ -53,6 +53,7 @@ struct _EAddressbookModelClass {
void (*card_changed) (EAddressbookModel *model, gint index);
void (*model_changed) (EAddressbookModel *model);
void (*stop_state_changed) (EAddressbookModel *model);
+ void (*backend_died) (EAddressbookModel *model);
};
diff --git a/addressbook/gui/widgets/e-addressbook-view.c b/addressbook/gui/widgets/e-addressbook-view.c
index c8052b4216..f12a324953 100644
--- a/addressbook/gui/widgets/e-addressbook-view.c
+++ b/addressbook/gui/widgets/e-addressbook-view.c
@@ -83,6 +83,7 @@ static void search_result (GtkObject *object, EBookViewStatus status, EAddr
static void folder_bar_message (GtkObject *object, const gchar *status, EAddressbookView *eav);
static void stop_state_changed (GtkObject *object, EAddressbookView *eav);
static void writable_status (GtkObject *object, gboolean writable, EAddressbookView *eav);
+static void backend_died (GtkObject *object, EAddressbookView *eav);
static void command_state_change (EAddressbookView *eav);
static void alphabet_state_change (EAddressbookView *eav, gunichar letter);
@@ -252,6 +253,11 @@ e_addressbook_view_init (EAddressbookView *eav)
GTK_SIGNAL_FUNC (writable_status),
eav);
+ gtk_signal_connect (GTK_OBJECT(eav->model),
+ "backend_died",
+ GTK_SIGNAL_FUNC (backend_died),
+ eav);
+
eav->editable = FALSE;
eav->book = NULL;
eav->query = g_strdup (SHOW_ALL_SEARCH);
@@ -1361,6 +1367,17 @@ alphabet_state_change (EAddressbookView *eav, gunichar letter)
}
static void
+backend_died (GtkObject *object, EAddressbookView *eav)
+{
+ char *message = g_strdup_printf (_("The addressbook backend for\n%s\nhas crashed. "
+ "You will have to restart Evolution in order "
+ "to use it again"),
+ e_book_get_uri (eav->book));
+ gnome_error_dialog_parented (message, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (eav))));
+ g_free (message);
+}
+
+static void
create_table_view (EAddressbookView *view)
{
ETableModel *adapter;