aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libempathy-gtk/empathy-account-widget.c28
-rw-r--r--libempathy/empathy-utils.c37
-rw-r--r--libempathy/empathy-utils.h4
3 files changed, 42 insertions, 27 deletions
diff --git a/libempathy-gtk/empathy-account-widget.c b/libempathy-gtk/empathy-account-widget.c
index a7b272c58..8ce6b5f52 100644
--- a/libempathy-gtk/empathy-account-widget.c
+++ b/libempathy-gtk/empathy-account-widget.c
@@ -668,9 +668,6 @@ account_widget_account_enabled_cb (GObject *source_object,
TpAccount *account = TP_ACCOUNT (source_object);
EmpathyAccountWidget *widget = EMPATHY_ACCOUNT_WIDGET (user_data);
EmpathyAccountWidgetPriv *priv = GET_PRIV (widget);
- TpConnectionPresenceType presence;
- gchar *message = NULL;
- gchar *status = NULL;
tp_account_set_enabled_finish (account, res, &error);
@@ -681,34 +678,11 @@ account_widget_account_enabled_cb (GObject *source_object,
}
else
{
- /* only force presence if presence was offline, unknown or unset */
- presence = tp_account_get_requested_presence (account, NULL, NULL);
- switch (presence)
- {
- case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
- case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
- case TP_CONNECTION_PRESENCE_TYPE_UNSET:
- presence = tp_account_manager_get_most_available_presence (
- priv->account_manager, &status, &message);
-
- if (presence == TP_CONNECTION_PRESENCE_TYPE_OFFLINE)
- /* Global presence is offline; we force it so user doesn't have to
- * manually change the presence to connect his new account. */
- presence = TP_CONNECTION_PRESENCE_TYPE_AVAILABLE;
-
- tp_account_request_presence_async (account, presence,
- status, NULL, NULL, NULL);
- break;
- default:
- /* do nothing if the presence is not offline */
- break;
- }
+ empathy_connect_new_account (account, priv->account_manager);
}
/* unref widget - part of the workaround */
g_object_unref (widget);
- g_free (message);
- g_free (status);
}
static void
diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c
index fedb14b98..7d169ff94 100644
--- a/libempathy/empathy-utils.c
+++ b/libempathy/empathy-utils.c
@@ -606,3 +606,40 @@ empathy_account_manager_get_accounts_connected (gboolean *connecting)
return out_connected;
}
+
+/* Change the RequestedPresence of a newly created account to ensure that it
+ * is actually connected. */
+void
+empathy_connect_new_account (TpAccount *account,
+ TpAccountManager *account_manager)
+{
+ TpConnectionPresenceType presence;
+ gchar *status, *message;
+
+ /* only force presence if presence was offline, unknown or unset */
+ presence = tp_account_get_requested_presence (account, NULL, NULL);
+ switch (presence)
+ {
+ case TP_CONNECTION_PRESENCE_TYPE_OFFLINE:
+ case TP_CONNECTION_PRESENCE_TYPE_UNKNOWN:
+ case TP_CONNECTION_PRESENCE_TYPE_UNSET:
+ presence = tp_account_manager_get_most_available_presence (
+ account_manager, &status, &message);
+
+ if (presence == TP_CONNECTION_PRESENCE_TYPE_OFFLINE)
+ /* Global presence is offline; we force it so user doesn't have to
+ * manually change the presence to connect his new account. */
+ presence = TP_CONNECTION_PRESENCE_TYPE_AVAILABLE;
+
+ tp_account_request_presence_async (account, presence,
+ status, NULL, NULL, NULL);
+
+ g_free (status);
+ g_free (message);
+ break;
+
+ default:
+ /* do nothing if the presence is not offline */
+ break;
+ }
+}
diff --git a/libempathy/empathy-utils.h b/libempathy/empathy-utils.h
index 0fc6fc2a9..0ab905282 100644
--- a/libempathy/empathy-utils.h
+++ b/libempathy/empathy-utils.h
@@ -31,6 +31,7 @@
#include <libxml/parser.h>
#include <libxml/tree.h>
+#include <telepathy-glib/account-manager.h>
#include "empathy-contact.h"
@@ -90,6 +91,9 @@ TpAccount * empathy_get_account_for_connection (TpConnection *connection);
gboolean empathy_account_manager_get_accounts_connected (gboolean *connecting);
+void empathy_connect_new_account (TpAccount *account,
+ TpAccountManager *account_manager);
+
G_END_DECLS
#endif /* __EMPATHY_UTILS_H__ */