#include <libaccounts-glib/ag-service.h>
#include <libaccounts-glib/ag-account-service.h>
-#include <libempathy-gtk/empathy-account-widget.h>
+#include "empathy-account-widget.h"
G_DEFINE_TYPE (EmpathyAccountsPluginWidget, empathy_accounts_plugin_widget, GTK_TYPE_BOX)
AgService *service;
GList *services;
AgAccountService *account_service;
- GValue v = G_VALUE_INIT;
+ GVariant *v;
gchar *manager = NULL, *protocol = NULL;
EmpathyAccountSettings *settings;
account_service = ag_account_service_new (account, service);
- g_value_init (&v, G_TYPE_STRING);
- if (ag_account_service_get_value (account_service,
- "telepathy/manager", &v) != AG_SETTING_SOURCE_NONE)
- manager = g_value_dup_string (&v);
- g_value_unset (&v);
+ v = ag_account_service_get_variant (account_service,
+ "telepathy/manager", NULL);
+ if (v != NULL)
+ manager = g_variant_dup_string (v, NULL);
- g_value_init (&v, G_TYPE_STRING);
- if (ag_account_service_get_value (account_service,
- "telepathy/protocol", &v) != AG_SETTING_SOURCE_NONE)
- protocol = g_value_dup_string (&v);
- g_value_unset (&v);
+ v = ag_account_service_get_variant (account_service,
+ "telepathy/protocol", NULL);
+ if (v != NULL)
+ protocol = g_variant_dup_string (v, NULL);
g_return_val_if_fail (manager != NULL, NULL);
g_return_val_if_fail (protocol != NULL, NULL);
gint response,
EmpathyAccountsPluginWidget *self)
{
+ if (!self->priv->account_widget)
+ {
+ // widget might not be ready yet
+ g_signal_emit (self, signals[SIG_DONE], 0);
+ return;
+ }
if (response == GTK_RESPONSE_OK)
{
empathy_account_widget_apply_and_log_in (self->priv->account_widget);
}
else
{
- g_signal_connect_swapped (self->priv->settings, "notify::ready",
- G_CALLBACK (add_account_widget), self);
+ tp_g_signal_connect_object (self->priv->settings, "notify::ready",
+ G_CALLBACK (add_account_widget), self, G_CONNECT_SWAPPED);
}
}
goto out;
}
- accounts = tp_account_manager_get_valid_accounts (manager);
+ accounts = tp_account_manager_dup_valid_accounts (manager);
while (accounts != NULL)
{
TpAccount *account = accounts->data;
accounts = g_list_delete_link (accounts, accounts);
}
- g_list_free (accounts);
+ g_list_free_full (accounts, g_object_unref);
out:
tp_weak_ref_destroy (wr);