2 * empathy-password-dialog.c - Source for EmpathyPasswordDialog
3 * Copyright (C) 2010 Collabora Ltd.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #include "empathy-password-dialog.h"
24 #include <glib/gi18n-lib.h>
26 #define DEBUG_FLAG EMPATHY_DEBUG_SASL
27 #include <libempathy/empathy-debug.h>
28 #include <libempathy/empathy-utils.h>
30 G_DEFINE_TYPE (EmpathyPasswordDialog
, empathy_password_dialog
,
31 EMPATHY_TYPE_BASE_PASSWORD_DIALOG
)
39 struct _EmpathyPasswordDialogPriv
{
40 EmpathyServerSASLHandler
*handler
;
44 empathy_password_dialog_get_property (GObject
*object
,
49 EmpathyPasswordDialog
*self
= (EmpathyPasswordDialog
*) object
;
54 g_value_set_object (value
, self
->priv
->handler
);
57 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, property_id
, pspec
);
63 empathy_password_dialog_set_property (GObject
*object
,
68 EmpathyPasswordDialog
*self
= (EmpathyPasswordDialog
*) object
;
73 g_assert (self
->priv
->handler
== NULL
); /* construct only */
74 self
->priv
->handler
= g_value_dup_object (value
);
77 G_OBJECT_WARN_INVALID_PROPERTY_ID (object
, property_id
, pspec
);
83 empathy_password_dialog_dispose (GObject
*object
)
85 EmpathyPasswordDialog
*self
= (EmpathyPasswordDialog
*) object
;
87 tp_clear_object (&self
->priv
->handler
);
89 G_OBJECT_CLASS (empathy_password_dialog_parent_class
)->dispose (object
);
93 password_dialog_response_cb (GtkDialog
*dialog
,
97 EmpathyPasswordDialog
*self
= (EmpathyPasswordDialog
*) dialog
;
98 EmpathyBasePasswordDialog
*base
= (EmpathyBasePasswordDialog
*) dialog
;
100 if (response
== GTK_RESPONSE_OK
)
102 empathy_server_sasl_handler_provide_password (self
->priv
->handler
,
103 gtk_entry_get_text (GTK_ENTRY (base
->entry
)),
104 gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (base
->ticky
)));
108 empathy_server_sasl_handler_cancel (self
->priv
->handler
);
111 gtk_widget_destroy (GTK_WIDGET (dialog
));
115 password_dialog_handler_invalidated_cb (EmpathyServerSASLHandler
*handler
,
116 EmpathyPasswordDialog
*dialog
)
118 gtk_widget_destroy (GTK_WIDGET (dialog
));
122 empathy_password_dialog_constructed (GObject
*object
)
124 EmpathyPasswordDialog
*self
= (EmpathyPasswordDialog
*) object
;
125 EmpathyBasePasswordDialog
*base
= (EmpathyBasePasswordDialog
*) object
;
128 G_OBJECT_CLASS (empathy_password_dialog_parent_class
)->constructed (object
);
130 tp_g_signal_connect_object (self
->priv
->handler
, "invalidated",
131 G_CALLBACK (password_dialog_handler_invalidated_cb
),
134 text
= g_strdup_printf (_("Enter your password for account\n<b>%s</b>"),
135 tp_account_get_display_name (base
->account
));
136 gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (self
), text
);
139 /* only show it if we actually support it */
140 if (empathy_server_sasl_handler_can_save_response_somewhere (
141 self
->priv
->handler
))
142 gtk_widget_show (base
->ticky
);
144 g_signal_connect (self
, "response",
145 G_CALLBACK (password_dialog_response_cb
), self
);
149 empathy_password_dialog_init (EmpathyPasswordDialog
*self
)
151 self
->priv
= G_TYPE_INSTANCE_GET_PRIVATE (self
,
152 EMPATHY_TYPE_PASSWORD_DIALOG
, EmpathyPasswordDialogPriv
);
156 empathy_password_dialog_class_init (EmpathyPasswordDialogClass
*klass
)
159 GObjectClass
*oclass
= G_OBJECT_CLASS (klass
);
161 g_type_class_add_private (klass
, sizeof (EmpathyPasswordDialogPriv
));
163 oclass
->set_property
= empathy_password_dialog_set_property
;
164 oclass
->get_property
= empathy_password_dialog_get_property
;
165 oclass
->dispose
= empathy_password_dialog_dispose
;
166 oclass
->constructed
= empathy_password_dialog_constructed
;
168 pspec
= g_param_spec_object ("handler", "The EmpathyServerSASLHandler",
169 "The EmpathyServerSASLHandler to be used.",
170 EMPATHY_TYPE_SERVER_SASL_HANDLER
,
171 G_PARAM_CONSTRUCT_ONLY
| G_PARAM_READWRITE
| G_PARAM_STATIC_STRINGS
);
172 g_object_class_install_property (oclass
, PROP_HANDLER
, pspec
);
176 empathy_password_dialog_new (EmpathyServerSASLHandler
*handler
)
178 g_assert (EMPATHY_IS_SERVER_SASL_HANDLER (handler
));
180 return g_object_new (EMPATHY_TYPE_PASSWORD_DIALOG
,
182 "account", empathy_server_sasl_handler_get_account (handler
),