static void manager_prepared_cb (GObject *source, GAsyncResult *result, gpointer user_data) { TpWeakRef *wr = user_data; EmpathyAppPluginWidget *self = tp_weak_ref_dup_object (wr); TpAccountManager *manager = (TpAccountManager *) source; GList *accounts; GError *error = NULL; if (self == NULL) { tp_weak_ref_destroy (wr); return; } if (!tp_proxy_prepare_finish (manager, result, &error)) { g_debug ("Error preparing Account Manager: %s", error->message); g_clear_error (&error); goto out; } accounts = tp_account_manager_dup_valid_accounts (manager); while (accounts != NULL) { TpAccount *account = accounts->data; const GValue *value; value = tp_account_get_storage_identifier (account); if (G_VALUE_HOLDS_UINT (value) && g_value_get_uint (value) == self->priv->account->id) { GtkWidget *alig; alig = gtk_alignment_new (0.5, 0, 0, 0); self->priv->user_info = tpaw_user_info_new (account); gtk_container_add (GTK_CONTAINER (alig), self->priv->user_info); gtk_widget_show (self->priv->user_info); gtk_box_pack_start (GTK_BOX (self), alig, TRUE, TRUE, 0); gtk_widget_show (alig); break; } accounts = g_list_delete_link (accounts, accounts); } g_list_free_full (accounts, g_object_unref); out: tp_weak_ref_destroy (wr); g_object_unref (self); }
static gboolean edit_personal_details (GoaObject *goa_object, GtkWindow *parent, GError **error) { EditPersonalDetailsData data; TpAccount *tp_account = NULL; GtkWidget *dialog = NULL; GtkWidget *user_info = NULL; GtkWidget *align = NULL; GtkWidget *content_area = NULL; gint response; gboolean ret = FALSE; memset (&data, 0, sizeof (EditPersonalDetailsData)); data.loop = g_main_loop_new (NULL, FALSE); tp_account = find_tp_account (goa_object, data.loop, &data.error); if (tp_account == NULL) goto out; dialog = gtk_dialog_new_with_buttons (_("Personal Details"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_OK"), GTK_RESPONSE_OK, NULL); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); user_info = tpaw_user_info_new (tp_account); gtk_widget_show (user_info); align = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 0, 6, 6); gtk_widget_show (align); gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (user_info)); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_box_pack_start (GTK_BOX (content_area), align, TRUE, TRUE, 0); g_timeout_add (100, personal_details_timeout_cb, &data); g_main_loop_run (data.loop); response = gtk_dialog_run (GTK_DIALOG (dialog)); if (response == GTK_RESPONSE_OK) { tpaw_user_info_apply_async (TPAW_USER_INFO (user_info), user_info_apply_cb, &data); g_main_loop_run (data.loop); if (data.error != NULL) goto out; } else { g_set_error (&data.error, GOA_ERROR, GOA_ERROR_DIALOG_DISMISSED, _("Dialog was dismissed")); goto out; } ret = TRUE; out: if (data.error != NULL) { g_propagate_error (error, data.error); } g_clear_pointer (&dialog, gtk_widget_destroy); g_clear_object (&tp_account); g_clear_pointer (&data.loop, g_main_loop_unref); return ret; }