aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanielle Madeley <danielle.madeley@collabora.co.uk>2011-04-29 16:33:24 +0800
committerDanielle Madeley <danielle.madeley@collabora.co.uk>2011-04-29 16:33:24 +0800
commit8123f40eae27171f76026fa67264af98c7f2fdb8 (patch)
treed2235265e1e111b2420c18aa2cbbe13071519267
parent06863eee3979fbe2d11dd7fe5acd689bdfdd354b (diff)
parent8f3a98ca5438bedd5efbef7a2914035c317e0273 (diff)
downloadgsoc2013-empathy-8123f40eae27171f76026fa67264af98c7f2fdb8.tar
gsoc2013-empathy-8123f40eae27171f76026fa67264af98c7f2fdb8.tar.gz
gsoc2013-empathy-8123f40eae27171f76026fa67264af98c7f2fdb8.tar.bz2
gsoc2013-empathy-8123f40eae27171f76026fa67264af98c7f2fdb8.tar.lz
gsoc2013-empathy-8123f40eae27171f76026fa67264af98c7f2fdb8.tar.xz
gsoc2013-empathy-8123f40eae27171f76026fa67264af98c7f2fdb8.tar.zst
gsoc2013-empathy-8123f40eae27171f76026fa67264af98c7f2fdb8.zip
Merge branch 'double-eula-121' into empathy-skype
-rw-r--r--data/.gitignore1
-rw-r--r--libempathy-gtk/empathy-account-widget-skype.c74
-rw-r--r--src/empathy-account-assistant.c5
3 files changed, 52 insertions, 28 deletions
diff --git a/data/.gitignore b/data/.gitignore
index 7ec3d4d81..902e80747 100644
--- a/data/.gitignore
+++ b/data/.gitignore
@@ -7,3 +7,4 @@ org.freedesktop.Telepathy.Client.Empathy.AudioVideo.service
empathy-accounts.desktop
empathy-accounts.desktop.in
org.freedesktop.Telepathy.Client.Empathy.Auth.service
+org.freedesktop.Telepathy.Client.Empathy.Call.service
diff --git a/libempathy-gtk/empathy-account-widget-skype.c b/libempathy-gtk/empathy-account-widget-skype.c
index 2b6a769e8..288fc039a 100644
--- a/libempathy-gtk/empathy-account-widget-skype.c
+++ b/libempathy-gtk/empathy-account-widget-skype.c
@@ -149,7 +149,6 @@ auth_observer_observe_channels (TpSimpleObserver *auth_observer,
TpChannel *channel;
GHashTable *props;
GStrv available_mechanisms;
- GtkWidget *password_entry = user_data;
const char *password = NULL;
gboolean remember;
@@ -157,11 +156,11 @@ auth_observer_observe_channels (TpSimpleObserver *auth_observer,
if (tp_strdiff (
tp_connection_get_connection_manager_name (connection),
"psyke"))
- goto except;
+ goto finally;
/* can only deal with one channel */
if (g_list_length (channels) != 1)
- goto except;
+ goto finally;
channel = channels->data;
props = tp_channel_borrow_immutable_properties (channel);
@@ -172,18 +171,14 @@ auth_observer_observe_channels (TpSimpleObserver *auth_observer,
/* must support X-TELEPATHY-PASSWORD */
if (!tp_strv_contains ((const char * const *) available_mechanisms,
"X-TELEPATHY-PASSWORD"))
- goto except;
+ goto finally;
- /* do we have a password */
- if (g_object_get_data (G_OBJECT (password_entry), "fake-password") == NULL)
- password = gtk_entry_get_text (GTK_ENTRY (password_entry));
+ password = g_object_get_data (G_OBJECT (auth_observer), "password");
+ remember = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (auth_observer),
+ "remember-password"));
if (tp_str_empty (password))
- goto except;
-
- /* do we want to remember it */
- remember = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (
- g_object_get_data (G_OBJECT (password_entry), "remember-password")));
+ goto finally;
DEBUG ("claiming auth channel");
@@ -191,12 +186,12 @@ auth_observer_observe_channels (TpSimpleObserver *auth_observer,
auth_observer_claim_cb,
observe_channels_data_new (account, channel, password, remember));
-except:
+finally:
tp_observe_channels_context_accept (context);
}
static TpBaseClient *
-auth_observer_new (GtkWidget *password_entry)
+auth_observer_new (void)
{
TpDBusDaemon *dbus;
TpBaseClient *auth_observer;
@@ -212,7 +207,7 @@ auth_observer_new (GtkWidget *password_entry)
}
auth_observer = tp_simple_observer_new (dbus, FALSE, "Empathy.PsykePreAuth",
- FALSE, auth_observer_observe_channels, password_entry, NULL);
+ FALSE, auth_observer_observe_channels, NULL, NULL);
tp_base_client_set_observer_delay_approvers (auth_observer, TRUE);
tp_base_client_take_observer_filter (auth_observer, tp_asv_new (
@@ -365,7 +360,7 @@ account_widget_build_skype_get_password_saved_cb (TpProxy *account,
gpointer user_data,
GObject *password_entry)
{
- GtkWidget *remember_password;
+ GtkWidget *remember_password = user_data;
gboolean password_saved;
if (in_error != NULL)
@@ -385,9 +380,6 @@ account_widget_build_skype_get_password_saved_cb (TpProxy *account,
!tp_str_empty (gtk_entry_get_text (GTK_ENTRY (password_entry))))
return;
- remember_password =
- GTK_WIDGET (g_object_get_data (password_entry, "remember-password"));
-
gtk_entry_set_text (GTK_ENTRY (password_entry),
password_saved ? "xxxxxxxxxxxx": "");
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (remember_password),
@@ -417,7 +409,7 @@ account_widget_build_skype_account_properties_changed_cb (TpProxy *account,
return;
account_widget_build_skype_get_password_saved_cb (account, value, NULL,
- NULL, password_entry);
+ user_data, password_entry);
}
static void
@@ -453,6 +445,26 @@ account_widget_skype_additional_apply_async (EmpathyAccountWidget *self,
TpAccount *account = empathy_account_settings_get_account (priv->settings);
GSimpleAsyncResult *simple = g_simple_async_result_new (G_OBJECT (self),
callback, user_data, NULL);
+ GtkWidget *password_entry, *remember_password;
+ GObject *auth_observer;
+ const char *password = NULL;
+ gboolean remember;
+
+ /* sync the password with the observer */
+ auth_observer = g_object_get_data (G_OBJECT (self), "auth-observer");
+ password_entry = g_object_get_data (G_OBJECT (self), "password-entry");
+ remember_password = g_object_get_data (G_OBJECT (self), "remember-password");
+
+ if (g_object_get_data (G_OBJECT (password_entry), "fake-password") == NULL)
+ password = gtk_entry_get_text (GTK_ENTRY (password_entry));
+
+ remember = gtk_toggle_button_get_active (
+ GTK_TOGGLE_BUTTON (remember_password));
+
+ g_object_set_data_full (auth_observer, "password",
+ g_strdup (password), g_free);
+ g_object_set_data (auth_observer, "remember-password",
+ GUINT_TO_POINTER (remember));
/* we have to forget the password, else psyke won't query for the new one */
emp_cli_account_interface_external_password_storage_call_forget_password (
@@ -782,6 +794,7 @@ void
empathy_account_widget_build_skype (EmpathyAccountWidget *self,
const char *filename)
{
+ static TpBaseClient *auth_observer = NULL;
EmpathyAccountWidgetPriv *priv = GET_PRIV (self);
TpAccount *account = empathy_account_settings_get_account (priv->settings);
GtkWidget *password_entry, *remember_password;
@@ -854,12 +867,17 @@ empathy_account_widget_build_skype (EmpathyAccountWidget *self,
self->ui_details->default_focus = g_strdup ("entry_id");
}
- /* create the Psyke pre-authentication observer --
- * tie the lifetime of the observer to the lifetime of the widget */
- g_object_set_data_full (G_OBJECT (self->ui_details->widget), "auth-observer",
- auth_observer_new (password_entry), g_object_unref);
- g_object_set_data (G_OBJECT (password_entry), "remember-password",
- remember_password);
+ /* create the Psyke pre-authentication observer */
+ if (auth_observer == NULL)
+ {
+ /* the auth observer lives for the lifetime of the process */
+ DEBUG ("Creating Psyke authentication observer");
+ auth_observer = auth_observer_new ();
+ }
+
+ g_object_set_data (G_OBJECT (self), "auth-observer", auth_observer);
+ g_object_set_data (G_OBJECT (self), "password-entry", password_entry);
+ g_object_set_data (G_OBJECT (self), "remember-password", remember_password);
g_object_bind_property (remember_password, "active",
password_entry, "sensitive", G_BINDING_SYNC_CREATE);
@@ -872,10 +890,10 @@ empathy_account_widget_build_skype (EmpathyAccountWidget *self,
EMP_IFACE_ACCOUNT_INTERFACE_EXTERNAL_PASSWORD_STORAGE,
"PasswordSaved",
account_widget_build_skype_get_password_saved_cb,
- NULL, NULL, G_OBJECT (password_entry));
+ remember_password, NULL, G_OBJECT (password_entry));
tp_cli_dbus_properties_connect_to_properties_changed (account,
account_widget_build_skype_account_properties_changed_cb,
- NULL, NULL, G_OBJECT (password_entry), NULL);
+ remember_password, NULL, G_OBJECT (password_entry), NULL);
}
/* if the user changes the password, it's probably no longer a fake
diff --git a/src/empathy-account-assistant.c b/src/empathy-account-assistant.c
index f7753bdb3..e3fffc2ed 100644
--- a/src/empathy-account-assistant.c
+++ b/src/empathy-account-assistant.c
@@ -565,6 +565,11 @@ account_assistant_finish_enter_or_create_page (EmpathyAccountAssistant *self,
_("Enter the details for the new account"));
}
+ /* if someone clicked 'Back' this signal handler can be connected twice:
+ * disconnect any existing handlers */
+ g_signal_handlers_disconnect_by_func (priv->chooser,
+ account_assistant_protocol_changed_cb, self);
+
g_signal_connect (priv->chooser, "changed",
G_CALLBACK (account_assistant_protocol_changed_cb), self);