[empathy: 17/35] contact-blocking-dialog: report errors to the user
- From: Danielle Madeley <daniellem src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy: 17/35] contact-blocking-dialog: report errors to the user
- Date: Mon, 14 Mar 2011 02:00:36 +0000 (UTC)
commit 0c363023bd77f286bc6257db3f7d90aeb4e7b0f0
Author: Danielle Madeley <danielle madeley collabora co uk>
Date: Thu Feb 10 16:23:58 2011 +1100
contact-blocking-dialog: report errors to the user
libempathy-gtk/empathy-contact-blocking-dialog.c | 55 ++++++++++++++++++++-
1 files changed, 52 insertions(+), 3 deletions(-)
---
diff --git a/libempathy-gtk/empathy-contact-blocking-dialog.c b/libempathy-gtk/empathy-contact-blocking-dialog.c
index 81fd4d9..3d0b9af 100644
--- a/libempathy-gtk/empathy-contact-blocking-dialog.c
+++ b/libempathy-gtk/empathy-contact-blocking-dialog.c
@@ -58,6 +58,8 @@ struct _EmpathyContactBlockingDialogPrivate
GtkWidget *account_chooser;
GtkWidget *add_button;
GtkWidget *add_contact_entry;
+ GtkWidget *info_bar;
+ GtkWidget *info_bar_label;
GtkWidget *remove_button;
};
@@ -406,6 +408,31 @@ contact_blocking_dialog_deny_channel_prepared (GObject *channel,
G_CALLBACK (contact_blocking_dialog_deny_channel_members_changed), self);
}
+static void
+contact_blocking_dialog_set_error (EmpathyContactBlockingDialog *self,
+ const GError *error)
+{
+ const char *msg = NULL;
+
+ if (error->domain == TP_ERRORS)
+ {
+ if (error->code == TP_ERROR_INVALID_HANDLE)
+ msg = _("Unknown or invalid identifier");
+ else if (error->code == TP_ERROR_NOT_AVAILABLE)
+ msg = _("Contact blocking temporarily unavailable");
+ else if (error->code == TP_ERROR_NOT_CAPABLE)
+ msg = _("Contact blocking unavailable");
+ else if (error->code == TP_ERROR_PERMISSION_DENIED)
+ msg = _("Permission Denied");
+ }
+
+ if (msg == NULL)
+ msg = _("Could not block contact");
+
+ gtk_label_set_text (GTK_LABEL (self->priv->info_bar_label), msg);
+ gtk_widget_show (self->priv->info_bar);
+}
+
static void contact_blocking_dialog_add_contact_got_handle (TpConnection *,
const GArray *, const GError *, gpointer, GObject *);
@@ -428,6 +455,7 @@ contact_blocking_dialog_add_contact (GtkWidget *widget,
NULL, NULL, G_OBJECT (self));
gtk_entry_set_text (GTK_ENTRY (self->priv->add_contact_entry), "");
+ gtk_widget_hide (self->priv->info_bar);
}
static void
@@ -447,7 +475,10 @@ contact_blocking_dialog_add_contact_got_handle (TpConnection *conn,
if (in_error != NULL)
{
DEBUG ("Error getting handle: %s", in_error->message);
- /* FIXME: expose error to user */
+
+ contact_blocking_dialog_set_error (
+ EMPATHY_CONTACT_BLOCKING_DIALOG (self), in_error);
+
return;
}
@@ -470,7 +501,10 @@ contact_blocking_dialog_added_contact (TpChannel *channel,
if (in_error != NULL)
{
DEBUG ("Error adding contact to deny list: %s", in_error->message);
- /* FIXME: expose error to user */
+
+ contact_blocking_dialog_set_error (
+ EMPATHY_CONTACT_BLOCKING_DIALOG (self), in_error);
+
return;
}
@@ -535,7 +569,10 @@ contact_blocking_dialog_removed_contacts (TpChannel *channel,
if (in_error != NULL)
{
DEBUG ("Error removing contacts from deny list: %s", in_error->message);
- /* FIXME: expose error to user */
+
+ contact_blocking_dialog_set_error (
+ EMPATHY_CONTACT_BLOCKING_DIALOG (self), in_error);
+
return;
}
@@ -716,6 +753,18 @@ empathy_contact_blocking_dialog_init (EmpathyContactBlockingDialog *self)
TRUE, TRUE, 0);
gtk_widget_show (self->priv->account_chooser);
+ /* add an error warning info bar */
+ self->priv->info_bar = gtk_info_bar_new ();
+ gtk_box_pack_start (GTK_BOX (contents), self->priv->info_bar, FALSE, TRUE, 0);
+ gtk_info_bar_set_message_type (GTK_INFO_BAR (self->priv->info_bar),
+ GTK_MESSAGE_ERROR);
+
+ self->priv->info_bar_label = gtk_label_new ("");
+ gtk_container_add (GTK_CONTAINER (
+ gtk_info_bar_get_content_area (GTK_INFO_BAR (self->priv->info_bar))),
+ self->priv->info_bar_label);
+ gtk_widget_show (self->priv->info_bar_label);
+
/* prepare the account manager */
am = tp_account_manager_dup ();
tp_proxy_prepare_async (am, NULL, contact_blocking_dialog_am_prepared, self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]