From c098c90ebb80d4072ac1ebabc26204fd0067a4b1 Mon Sep 17 00:00:00 2001 From: Rodrigo Moya Date: Mon, 7 Oct 2002 09:20:44 +0000 Subject: Fixes #15892 2002-10-04 Rodrigo Moya Fixes #15892 * idl/evolution-calendar.idl: added notifyErrorOccurred method to the Listener interface, so that backends can notify clients of errors that can't be reported otherwise. * pcs/cal.[ch] (cal_notify_error): new function. * pcs/cal-backend-file.c (save): made to save to temporary file and then moved to the correct file, so that we don't lose any data if there's a problem while saving. (notify_error): new function for notifying error messages to clients. * cal-client/cal-listener.[ch]: added new callback function for getting error messages from backends. (impl_notifyErrorOccurred): new method implementation. (cal_listener_class_init): initialize new epv member. (cal_listener_init, cal_listener_destroy, cal_listener_construct, cal_listener_new): initialize new function pointer. * cal-client/cal-client.[ch]: adapted to changes in CalListener class. (cal_client_class_init): added "backend_error" signal to CalClient class. (backend_error_cb): callback for "error_occurred" signal on the CalListener, which just emits the "backend_error" signal of CalClient. * gui/gnome-cal.c (gnome_calendar_construct): connect to "backend_error" signal on the CalClient's we create. (backend_error_cb): display error message on error from backend. * gui/e-tasks.c: likewise. svn path=/trunk/; revision=18329 --- calendar/gui/e-tasks.c | 19 +++++++++++++++++++ calendar/gui/gnome-cal.c | 22 +++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) (limited to 'calendar/gui') diff --git a/calendar/gui/e-tasks.c b/calendar/gui/e-tasks.c index d0097cc015..17cce37bd2 100644 --- a/calendar/gui/e-tasks.c +++ b/calendar/gui/e-tasks.c @@ -67,6 +67,7 @@ static void setup_widgets (ETasks *tasks); static void e_tasks_destroy (GtkObject *object); static void cal_opened_cb (CalClient *client, CalClientOpenStatus status, gpointer data); +static void backend_error_cb (CalClient *client, const char *message, gpointer data); /* Signal IDs */ enum { @@ -248,6 +249,8 @@ e_tasks_construct (ETasks *tasks) gtk_signal_connect (GTK_OBJECT (priv->client), "cal_opened", GTK_SIGNAL_FUNC (cal_opened_cb), tasks); + gtk_signal_connect (GTK_OBJECT (priv->client), "backend_error", + GTK_SIGNAL_FUNC (backend_error_cb), tasks); gtk_signal_connect (GTK_OBJECT (priv->client), "categories_changed", GTK_SIGNAL_FUNC (client_categories_changed_cb), tasks); @@ -452,6 +455,22 @@ cal_opened_cb (CalClient *client, } } +/* Callback from the calendar client when an error occurs in the backend */ +static void +backend_error_cb (CalClient *client, const char *message, gpointer data) +{ + ETasks *tasks; + ETasksPrivate *priv; + char *errmsg; + + tasks = E_TASKS (data); + priv = tasks->priv; + + errmsg = g_strdup_printf (_("Error on %s:\n %s"), cal_client_get_uri (client), message); + gnome_error_dialog_parented (errmsg, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (tasks)))); + g_free (errmsg); +} + /** * e_tasks_get_cal_client: * @tasks: An #ETasks. diff --git a/calendar/gui/gnome-cal.c b/calendar/gui/gnome-cal.c index 32f6cd15ed..5885185e73 100644 --- a/calendar/gui/gnome-cal.c +++ b/calendar/gui/gnome-cal.c @@ -1730,6 +1730,22 @@ client_categories_changed_cb (CalClient *client, GPtrArray *categories, gpointer free_categories (merged); } +/* Callback when we get an error message from the backend */ +static void +backend_error_cb (CalClient *client, const char *message, gpointer data) +{ + GnomeCalendar *gcal; + GnomeCalendarPrivate *priv; + char *errmsg; + + gcal = GNOME_CALENDAR (data); + priv = gcal->priv; + + errmsg = g_strdup_printf (_("Error on %s:\n %s"), cal_client_get_uri (client), message); + gnome_error_dialog_parented (errmsg, GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (gcal)))); + g_free (errmsg); +} + /* Callback when the backend dies */ static void backend_died_cb (CalClient *client, gpointer data) @@ -1779,6 +1795,8 @@ gnome_calendar_construct (GnomeCalendar *gcal) gtk_signal_connect (GTK_OBJECT (priv->client), "cal_opened", GTK_SIGNAL_FUNC (client_cal_opened_cb), gcal); + gtk_signal_connect (GTK_OBJECT (priv->client), "backend_error", + GTK_SIGNAL_FUNC (backend_error_cb), gcal); gtk_signal_connect (GTK_OBJECT (priv->client), "categories_changed", GTK_SIGNAL_FUNC (client_categories_changed_cb), gcal); gtk_signal_connect (GTK_OBJECT (priv->client), "backend_died", @@ -1801,7 +1819,9 @@ gnome_calendar_construct (GnomeCalendar *gcal) return NULL; gtk_signal_connect (GTK_OBJECT (priv->task_pad_client), "cal_opened", - GTK_SIGNAL_FUNC (client_cal_opened_cb), gcal); + GTK_SIGNAL_FUNC (client_cal_opened_cb), gcal); + gtk_signal_connect (GTK_OBJECT (priv->client), "backend_error", + GTK_SIGNAL_FUNC (backend_error_cb), gcal); gtk_signal_connect (GTK_OBJECT (priv->task_pad_client), "categories_changed", GTK_SIGNAL_FUNC (client_categories_changed_cb), gcal); gtk_signal_connect (GTK_OBJECT (priv->task_pad_client), "backend_died", -- cgit v1.2.3