From 7f75f25ac7e93e198e23421298b619e6b92992da Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Wed, 2 Nov 2011 14:41:56 +0100 Subject: [PATCH] add empathy-bad-password-dialog https://bugzilla.gnome.org/show_bug.cgi?id=661640 --- libempathy-gtk/Makefile.am | 2 + libempathy-gtk/empathy-bad-password-dialog.c | 192 +++++++++++++++++++ libempathy-gtk/empathy-bad-password-dialog.h | 68 +++++++ po/POTFILES.in | 1 + 4 files changed, 263 insertions(+) create mode 100644 libempathy-gtk/empathy-bad-password-dialog.c create mode 100644 libempathy-gtk/empathy-bad-password-dialog.h diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am index 960153cf..0d3762af 100644 --- a/libempathy-gtk/Makefile.am +++ b/libempathy-gtk/Makefile.am @@ -33,6 +33,7 @@ libempathy_gtk_handwritten_source = \ empathy-account-widget.c \ empathy-avatar-chooser.c \ empathy-avatar-image.c \ + empathy-bad-password-dialog.c \ empathy-base-password-dialog.c \ empathy-call-utils.c \ empathy-cell-renderer-activatable.c \ @@ -101,6 +102,7 @@ libempathy_gtk_headers = \ empathy-account-widget.h \ empathy-avatar-chooser.h \ empathy-avatar-image.h \ + empathy-bad-password-dialog.h \ empathy-base-password-dialog.h \ empathy-call-utils.h \ empathy-cell-renderer-activatable.h \ diff --git a/libempathy-gtk/empathy-bad-password-dialog.c b/libempathy-gtk/empathy-bad-password-dialog.c new file mode 100644 index 00000000..2209ff06 --- /dev/null +++ b/libempathy-gtk/empathy-bad-password-dialog.c @@ -0,0 +1,192 @@ +/* + * empathy-bad-password-dialog.c - Source for EmpathyBadPasswordDialog + * Copyright (C) 2010 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include "empathy-bad-password-dialog.h" + +#include + +#define DEBUG_FLAG EMPATHY_DEBUG_SASL +#include +#include + +G_DEFINE_TYPE (EmpathyBadPasswordDialog, empathy_bad_password_dialog, + EMPATHY_TYPE_BASE_PASSWORD_DIALOG) + +enum { + PROP_PASSWORD = 1, + + LAST_PROPERTY, +}; + +/* signal enum */ +enum { + RETRY, + LAST_SIGNAL, +}; + +static guint signals[LAST_SIGNAL] = {0}; + +struct _EmpathyBadPasswordDialogPriv { + gchar *password; +}; + +static void +empathy_bad_password_dialog_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object; + + switch (property_id) + { + case PROP_PASSWORD: + g_value_set_string (value, self->priv->password); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +empathy_bad_password_dialog_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object; + + switch (property_id) + { + case PROP_PASSWORD: + g_assert (self->priv->password == NULL); /* construct only */ + self->priv->password = g_value_dup_string (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +empathy_bad_password_dialog_finalize (GObject *object) +{ + EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object; + + tp_clear_pointer (&self->priv->password, g_free); + + G_OBJECT_CLASS (empathy_bad_password_dialog_parent_class)->finalize (object); +} + +static void +bad_password_dialog_response_cb (GtkDialog *dialog, + gint response, + gpointer user_data) +{ + EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) dialog; + EmpathyBasePasswordDialog *base = (EmpathyBasePasswordDialog *) dialog; + + if (response == GTK_RESPONSE_OK) + { + const gchar *password; + + password = gtk_entry_get_text (GTK_ENTRY (base->entry)); + + g_signal_emit (self, signals[RETRY], 0, base->account, password); + } + + gtk_widget_destroy (GTK_WIDGET (dialog)); +} + +static void +empathy_bad_password_dialog_constructed (GObject *object) +{ + EmpathyBadPasswordDialog *self = (EmpathyBadPasswordDialog *) object; + EmpathyBasePasswordDialog *base = (EmpathyBasePasswordDialog *) object; + gchar *text; + + G_OBJECT_CLASS (empathy_bad_password_dialog_parent_class)->constructed ( + object); + + text = g_strdup_printf (_("Authentification failed for account %s"), + tp_account_get_display_name (base->account)); + gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (self), text); + g_free (text); + + if (self->priv->password != NULL) + { + gtk_entry_set_text (GTK_ENTRY (base->entry), self->priv->password); + + gtk_editable_select_region (GTK_EDITABLE (base->entry), 0, -1); + } + + gtk_button_set_label (GTK_BUTTON (base->ok_button), _("Retry")); + + g_signal_connect (self, "response", + G_CALLBACK (bad_password_dialog_response_cb), self); +} + +static void +empathy_bad_password_dialog_init (EmpathyBadPasswordDialog *self) +{ + self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, + EMPATHY_TYPE_BAD_PASSWORD_DIALOG, EmpathyBadPasswordDialogPriv); +} + +static void +empathy_bad_password_dialog_class_init (EmpathyBadPasswordDialogClass *klass) +{ + GParamSpec *pspec; + GObjectClass *oclass = G_OBJECT_CLASS (klass); + + g_type_class_add_private (klass, sizeof (EmpathyBadPasswordDialogPriv)); + + oclass->set_property = empathy_bad_password_dialog_set_property; + oclass->get_property = empathy_bad_password_dialog_get_property; + oclass->finalize = empathy_bad_password_dialog_finalize; + oclass->constructed = empathy_bad_password_dialog_constructed; + + pspec = g_param_spec_string ("password", "Password", + "The wrong password", + NULL, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS); + g_object_class_install_property (oclass, PROP_PASSWORD, pspec); + + signals[RETRY] = g_signal_new ("retry", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, 0, + NULL, NULL, + g_cclosure_marshal_generic, + G_TYPE_NONE, 2, TP_TYPE_ACCOUNT, G_TYPE_STRING); +} + +GtkWidget * +empathy_bad_password_dialog_new (TpAccount *account, + const gchar *password) +{ + g_return_val_if_fail (TP_IS_ACCOUNT (account), NULL); + + return g_object_new (EMPATHY_TYPE_BAD_PASSWORD_DIALOG, + "account", account, + "password", password, + NULL); +} diff --git a/libempathy-gtk/empathy-bad-password-dialog.h b/libempathy-gtk/empathy-bad-password-dialog.h new file mode 100644 index 00000000..5cf1c71c --- /dev/null +++ b/libempathy-gtk/empathy-bad-password-dialog.h @@ -0,0 +1,68 @@ +/* + * empathy-bad-password-dialog.h - Header for EmpathyBadPasswordDialog + * Copyright (C) 2010 Collabora Ltd. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef __EMPATHY_BAD_PASSWORD_DIALOG_H__ +#define __EMPATHY_BAD_PASSWORD_DIALOG_H__ + +#include +#include + +#include + +#include + +G_BEGIN_DECLS + +typedef struct _EmpathyBadPasswordDialog EmpathyBadPasswordDialog; +typedef struct _EmpathyBadPasswordDialogClass EmpathyBadPasswordDialogClass; +typedef struct _EmpathyBadPasswordDialogPriv EmpathyBadPasswordDialogPriv; + +struct _EmpathyBadPasswordDialogClass { + EmpathyBasePasswordDialogClass parent_class; +}; + +struct _EmpathyBadPasswordDialog { + EmpathyBasePasswordDialog parent; + EmpathyBadPasswordDialogPriv *priv; +}; + +GType empathy_bad_password_dialog_get_type (void); + +#define EMPATHY_TYPE_BAD_PASSWORD_DIALOG \ + (empathy_bad_password_dialog_get_type ()) +#define EMPATHY_BAD_PASSWORD_DIALOG(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), EMPATHY_TYPE_BAD_PASSWORD_DIALOG, \ + EmpathyBadPasswordDialog)) +#define EMPATHY_BAD_PASSWORD_DIALOG_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), EMPATHY_TYPE_BAD_PASSWORD_DIALOG, \ + EmpathyBadPasswordDialogClass)) +#define EMPATHY_IS_BAD_PASSWORD_DIALOG(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), EMPATHY_TYPE_BAD_PASSWORD_DIALOG)) +#define EMPATHY_IS_BAD_PASSWORD_DIALOG_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), EMPATHY_TYPE_BAD_PASSWORD_DIALOG)) +#define EMPATHY_BAD_PASSWORD_DIALOG_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS ((obj), EMPATHY_TYPE_BAD_PASSWORD_DIALOG, \ + EmpathyBadPasswordDialogClass)) + +GtkWidget * empathy_bad_password_dialog_new (TpAccount *account, + const gchar *password); + +G_END_DECLS + +#endif /* #ifndef __EMPATHY_BAD_PASSWORD_DIALOG_H__*/ diff --git a/po/POTFILES.in b/po/POTFILES.in index 17e9aeae..d3a29fc3 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -58,6 +58,7 @@ libempathy-gtk/empathy-log-window.c [type: gettext/glade]libempathy-gtk/empathy-log-window.ui libempathy-gtk/empathy-new-message-dialog.c libempathy-gtk/empathy-new-call-dialog.c +libempathy-gtk/empathy-bad-password-dialog.c libempathy-gtk/empathy-base-password-dialog.c libempathy-gtk/empathy-password-dialog.c libempathy-gtk/empathy-presence-chooser.c -- 2.39.2