* Danielle Madeley <danielle.madeley@collabora.co.uk>
*/
-#include <config.h>
-
-#include <string.h>
-#include <stdlib.h>
+#include "config.h"
+#include "empathy-accounts-dialog.h"
-#include <gtk/gtk.h>
#include <glib/gi18n-lib.h>
-#include <dbus/dbus-glib.h>
-#include <gio/gdesktopappinfo.h>
-
-#include <telepathy-glib/account-manager.h>
-#include <telepathy-glib/defs.h>
-#include <telepathy-glib/util.h>
-
-#include <libempathy/empathy-utils.h>
-#include <libempathy/empathy-connection-managers.h>
-#include <libempathy/empathy-pkg-kit.h>
-#include <libempathy/empathy-tp-contact-factory.h>
-
-#include <libempathy-gtk/empathy-ui-utils.h>
-#include <libempathy-gtk/empathy-protocol-chooser.h>
-#include <libempathy-gtk/empathy-account-widget.h>
-#include <libempathy-gtk/empathy-account-widget-irc.h>
-#include <libempathy-gtk/empathy-account-widget-sip.h>
-#include <libempathy-gtk/empathy-cell-renderer-activatable.h>
-#include <libempathy-gtk/empathy-contact-widget.h>
-#include <libempathy-gtk/empathy-images.h>
-#include <libempathy-gtk/empathy-local-xmpp-assistant-widget.h>
-#include <libempathy-gtk/empathy-new-account-dialog.h>
+#include <tp-account-widgets/tpaw-account-widget.h>
+#include <tp-account-widgets/tpaw-builder.h>
+#include <tp-account-widgets/tpaw-user-info.h>
+#include <tp-account-widgets/tpaw-pixbuf-utils.h>
+#include <tp-account-widgets/tpaw-utils.h>
#include "empathy-accounts-common.h"
-#include "empathy-accounts-dialog.h"
#include "empathy-import-dialog.h"
#include "empathy-import-utils.h"
+#include "empathy-local-xmpp-assistant-widget.h"
+#include "empathy-new-account-dialog.h"
+#include "empathy-pkg-kit.h"
+#include "empathy-ui-utils.h"
+#include "empathy-utils.h"
#define DEBUG_FLAG EMPATHY_DEBUG_ACCOUNT
-#include <libempathy/empathy-debug.h>
+#include "empathy-debug.h"
/* Flashing delay for icons (milliseconds). */
#define FLASH_TIMEOUT 500
/* The primary text of the dialog shown to the user when he is about to lose
* unsaved changes */
#define PENDING_CHANGES_QUESTION_PRIMARY_TEXT \
- _("There are unsaved modifications to your %s account.")
+ _("There are unsaved modifications to your %.50s account.")
/* The primary text of the dialog shown to the user when he is about to lose
* an unsaved new account */
#define UNSAVED_NEW_ACCOUNT_QUESTION_PRIMARY_TEXT \
GtkWidget *label_name;
GtkWidget *label_type;
GtkWidget *dialog_content;
+ GtkWidget *user_info;
GtkWidget *notebook_account;
GtkWidget *spinner;
gboolean loading;
- /* We have to keep a weak reference on the actual EmpathyAccountWidget, not
+ /* We have to keep a weak reference on the actual TpawAccountWidget, not
* just its GtkWidget. It is the only reliable source we can query to know if
* there are any unsaved changes to the currently selected account. We can't
* look at the account settings because it does not contain everything that
- * can be changed using the EmpathyAccountWidget. For instance, it does not
+ * can be changed using the TpawAccountWidget. For instance, it does not
* contain the state of the "Enabled" checkbox.
*
* Even if we create it ourself, we just get a weak ref and not a strong one
- * as EmpathyAccountWidget unrefs itself when the GtkWidget is destroyed.
+ * as TpawAccountWidget unrefs itself when the GtkWidget is destroyed.
* That's kinda ugly; cf bgo #640417.
*
* */
- EmpathyAccountWidget *setting_widget;
+ TpawAccountWidget *setting_widget;
gboolean connecting_show;
guint connecting_id;
gulong settings_ready_id;
- EmpathyAccountSettings *settings_ready;
+ TpawAccountSettings *settings_ready;
TpAccountManager *account_manager;
- EmpathyConnectionManagers *cms;
+ TpawConnectionManagers *cms;
GNetworkMonitor *connectivity;
GtkWindow *parent_window;
* EmpathyAccountsDialog object. */
gboolean force_change_row;
GtkTreeRowReference *destination_row;
+
+ GHashTable *icons_cache;
} EmpathyAccountsDialogPriv;
enum {
PROP_PARENT = 1
};
-static EmpathyAccountSettings * accounts_dialog_model_get_selected_settings (
+static TpawAccountSettings * accounts_dialog_model_get_selected_settings (
EmpathyAccountsDialog *dialog);
static void accounts_dialog_model_select_first (EmpathyAccountsDialog *dialog);
static void accounts_dialog_update_settings (EmpathyAccountsDialog *dialog,
- EmpathyAccountSettings *settings);
+ TpawAccountSettings *settings);
static void accounts_dialog_model_set_selected (EmpathyAccountsDialog *dialog,
TpAccount *account);
static gboolean accounts_dialog_has_pending_change (
EmpathyAccountsDialog *dialog, TpAccount **account);
-static void
-accounts_dialog_update_name_label (EmpathyAccountsDialog *dialog,
- const gchar *display_name)
-{
- gchar *text;
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
-
- text = g_markup_printf_escaped ("<b>%s</b>", display_name);
- gtk_label_set_markup (GTK_LABEL (priv->label_name), text);
-
- g_free (text);
-}
-
static void
accounts_dialog_status_infobar_set_message (EmpathyAccountsDialog *dialog,
const gchar *message)
{
am = tp_account_manager_dup ();
- empathy_connect_new_account (account, am);
+ tpaw_connect_new_account (account, am);
g_object_unref (am);
}
}
GParamSpec *spec,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
TpAccount *account;
gboolean enable;
if (settings == NULL)
return;
- account = empathy_account_settings_get_account (settings);
+ account = tpaw_account_settings_get_account (settings);
if (account == NULL)
return;
return FALSE;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+ if (selection == NULL)
+ return FALSE;
if (!gtk_tree_selection_get_selected (selection, &model, &iter))
return FALSE;
return FALSE;
/* Butterfly accounts shouldn't be used any more */
- if (!tp_strdiff (tp_account_get_connection_manager (account),
+ if (!tp_strdiff (tp_account_get_cm_name (account),
"butterfly"))
return FALSE;
if (account != NULL)
{
+ gchar *text;
+
status = tp_account_get_connection_status (account, &reason);
presence = tp_account_get_current_presence (account, NULL, &status_message);
account_enabled = tp_account_is_enabled (account);
presence = TP_CONNECTION_PRESENCE_TYPE_OFFLINE;
display_switch = account_can_be_enabled (account);
+
+ text = g_markup_printf_escaped ("<b>%.50s</b>",
+ tp_account_get_display_name (account));
+ gtk_label_set_markup (GTK_LABEL (priv->label_name), text);
+ g_free (text);
}
else
{
}
else
{
- if (!tp_strdiff (tp_account_get_connection_manager (account),
+ if (!tp_strdiff (tp_account_get_cm_name (account),
"butterfly"))
{
const gchar *packages[] = { "telepathy-haze", NULL };
GtkTreeModel *model;
GtkTreeSelection *selection;
GtkTreeIter iter;
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
TpAccount *account;
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
COL_ACCOUNT_SETTINGS, &settings,
COL_ACCOUNT, &account, -1);
- empathy_account_widget_discard_pending_changes (priv->setting_widget);
+ tpaw_account_widget_discard_pending_changes (priv->setting_widget);
if (account == NULL)
{
static void
empathy_account_dialog_widget_cancelled_cb (
- EmpathyAccountWidget *widget_object,
+ TpawAccountWidget *widget_object,
EmpathyAccountsDialog *dialog)
{
empathy_account_dialog_cancel (dialog);
account_dialog_create_edit_params_dialog (EmpathyAccountsDialog *dialog)
{
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
GtkWidget *subdialog, *content_area, *align;
settings = accounts_dialog_model_get_selected_settings (dialog);
GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
NULL, NULL);
- priv->setting_widget = (EmpathyAccountWidget *)
- empathy_account_widget_new_for_protocol (settings, FALSE);
+ gtk_window_set_resizable (GTK_WINDOW (subdialog), FALSE);
+
+ priv->setting_widget = (TpawAccountWidget *)
+ tpaw_account_widget_new_for_protocol (settings, NULL, FALSE);
g_object_add_weak_pointer (G_OBJECT (priv->setting_widget),
(gpointer *) &priv->setting_widget);
if (accounts_dialog_has_valid_accounts (dialog))
- empathy_account_widget_set_other_accounts_exist (
+ tpaw_account_widget_set_other_accounts_exist (
priv->setting_widget, TRUE);
g_signal_connect (priv->setting_widget, "cancelled",
gtk_widget_show (subdialog);
}
-static void
-start_external_app (GAppInfo *app_info)
-{
- GError *error = NULL;
- GdkAppLaunchContext *context = NULL;
- GdkDisplay *display;
-
- display = gdk_display_get_default ();
- context = gdk_display_get_app_launch_context (display);
-
- if (!g_app_info_launch (app_info, NULL, (GAppLaunchContext *) context,
- &error))
- {
- g_critical ("Failed to bisho: %s", error->message);
- g_clear_error (&error);
- }
-
- tp_clear_object (&context);
-}
-
static void
use_external_storage_provider (EmpathyAccountsDialog *self,
TpAccount *account)
provider = tp_account_get_storage_provider (account);
if (!tp_strdiff (provider, "com.meego.libsocialweb"))
{
- GDesktopAppInfo *desktop_info;
- gchar *cmd;
- GAppInfo *app_info;
- GError *error = NULL;
-
- desktop_info = g_desktop_app_info_new ("gnome-control-center.desktop");
- if (desktop_info == NULL)
- {
- g_critical ("Could not locate 'gnome-control-center.desktop'");
- return;
- }
-
- /* glib doesn't have API to start a desktop file with args... (#637875) */
- cmd = g_strdup_printf ("%s bisho.desktop", g_app_info_get_commandline (
- (GAppInfo *) desktop_info));
-
- app_info = g_app_info_create_from_commandline (cmd, NULL, 0, &error);
-
- if (app_info == NULL)
- {
- DEBUG ("Failed to create app info: %s", error->message);
- g_error_free (error);
- }
- else
- {
- start_external_app (app_info);
- g_object_unref (app_info);
- }
-
- g_object_unref (desktop_info);
- g_free (cmd);
+ empathy_launch_external_app ("gnome-control-center.desktop",
+ "bisho.desktop", NULL);
return;
}
- else if (!tp_strdiff (provider, "org.gnome.OnlineAccounts"))
+ else if (!tp_strdiff (provider, EMPATHY_GOA_PROVIDER))
{
- GDesktopAppInfo *desktop_info;
-
- desktop_info = g_desktop_app_info_new (
- "gnome-online-accounts-panel.desktop");
- if (desktop_info == NULL)
- {
- g_critical ("Could not locate 'gnome-online-accounts-panel.desktop'");
- }
- else
- {
- start_external_app (G_APP_INFO (desktop_info));
- g_object_unref (desktop_info);
- }
-
+ empathy_launch_external_app ("gnome-online-accounts-panel.desktop",
+ NULL, NULL);
+ return;
+ }
+ else if (!tp_strdiff (provider, EMPATHY_UOA_PROVIDER))
+ {
+ empathy_launch_external_app ("gnome-credentials-panel.desktop",
+ NULL, NULL);
return;
}
else
account_dialow_show_edit_params_dialog (EmpathyAccountsDialog *dialog,
GtkButton *button)
{
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
TpAccount *account;
TpStorageRestrictionFlags storage_restrictions;
if (settings == NULL)
return;
- account = empathy_account_settings_get_account (settings);
+ account = tpaw_account_settings_get_account (settings);
g_return_if_fail (account != NULL);
storage_restrictions = tp_account_get_storage_restrictions (account);
}
}
-static void
-account_dialog_show_contact_details_failed (EmpathyAccountsDialog *dialog,
- gboolean error)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- GtkWidget *infobar, *label;
-
- infobar = gtk_info_bar_new ();
-
- if (error)
- {
- gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_ERROR);
- label = gtk_label_new (_("Failed to retrieve your personal information "
- "from the server."));
- }
- else
- {
- gtk_info_bar_set_message_type (GTK_INFO_BAR (infobar), GTK_MESSAGE_INFO);
- label = gtk_label_new (_("Go online to edit your personal information."));
- }
-
- gtk_container_add (
- GTK_CONTAINER (gtk_info_bar_get_content_area (GTK_INFO_BAR (infobar))),
- label);
- gtk_box_pack_start (GTK_BOX (priv->dialog_content), infobar, FALSE, FALSE, 0);
- gtk_widget_show_all (infobar);
-}
-
-static void
-create_contact_info_editor (EmpathyAccountsDialog *self,
- TpConnection *conn)
-{
- EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
- GtkWidget *editor, *alig;
- EmpathyContact *contact;
-
- contact = empathy_contact_dup_from_tp_contact (
- tp_connection_get_self_contact (conn));
-
- alig = gtk_alignment_new (0.5, 0, 1, 1);
-
- /* create the contact info editor for this account */
- editor = empathy_contact_widget_new (contact,
- EMPATHY_CONTACT_WIDGET_EDIT_ALIAS |
- EMPATHY_CONTACT_WIDGET_EDIT_AVATAR |
- EMPATHY_CONTACT_WIDGET_NO_STATUS |
- EMPATHY_CONTACT_WIDGET_EDIT_DETAILS |
- EMPATHY_CONTACT_WIDGET_NO_ACCOUNT);
-
- gtk_box_pack_start (GTK_BOX (priv->dialog_content), alig, TRUE, TRUE, 0);
- gtk_container_add (GTK_CONTAINER (alig), editor);
- gtk_widget_show (alig);
- gtk_widget_show (editor);
- g_object_unref (contact);
-}
-
static void
account_dialog_create_dialog_content (EmpathyAccountsDialog *dialog,
- EmpathyAccountSettings *settings)
+ TpawAccountSettings *settings)
{
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
const gchar *icon_name;
TpAccount *account;
- TpConnection *conn = NULL;
GtkWidget *bbox, *button;
+ GtkWidget *alig;
- account = empathy_account_settings_get_account (settings);
+ account = tpaw_account_settings_get_account (settings);
priv->dialog_content = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
gtk_container_add (GTK_CONTAINER (priv->alignment_settings),
priv->dialog_content);
gtk_widget_show (priv->dialog_content);
- /* request the self contact */
- if (account != NULL)
- conn = tp_account_get_connection (account);
-
- if (conn != NULL &&
- tp_proxy_get_invalidated (conn) == NULL)
- {
- create_contact_info_editor (dialog, conn);
- }
- else
- {
- account_dialog_show_contact_details_failed (dialog, FALSE);
- }
+ alig = gtk_alignment_new (0.5, 0, 1, 1);
+ priv->user_info = tpaw_user_info_new (account);
+ gtk_container_add (GTK_CONTAINER (alig), priv->user_info);
+ gtk_box_pack_start (GTK_BOX (priv->dialog_content), alig, TRUE, TRUE, 0);
+ gtk_widget_show (alig);
+ gtk_widget_show (priv->user_info);
bbox = gtk_button_box_new (GTK_ORIENTATION_HORIZONTAL);
gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END);
gtk_box_pack_end (GTK_BOX (priv->dialog_content), bbox, FALSE, TRUE, 0);
gtk_widget_show (bbox);
- button = gtk_button_new_with_mnemonic (_("_Edit Connection Parameters..."));
+ button = gtk_button_new_with_mnemonic (_("_Edit Connection Parameters…"));
gtk_box_pack_start (GTK_BOX (bbox), button, FALSE, TRUE, 0);
gtk_widget_show (button);
g_signal_connect_swapped (button, "clicked",
G_CALLBACK (account_dialow_show_edit_params_dialog), dialog);
- icon_name = empathy_account_settings_get_icon_name (settings);
+ icon_name = tpaw_account_settings_get_icon_name (settings);
if (!gtk_icon_theme_has_icon (gtk_icon_theme_get_default (),
icon_name))
gtk_image_set_from_icon_name (GTK_IMAGE (priv->image_type),
icon_name, GTK_ICON_SIZE_DIALOG);
gtk_widget_set_tooltip_text (priv->image_type,
- empathy_protocol_name_to_display_name
- (empathy_account_settings_get_protocol (settings)));
+ tpaw_protocol_name_to_display_name
+ (tpaw_account_settings_get_protocol (settings)));
gtk_widget_show (priv->image_type);
- accounts_dialog_update_name_label (dialog,
- empathy_account_settings_get_display_name (settings));
-
accounts_dialog_update_status_infobar (dialog, account);
}
static void
-account_dialog_settings_ready_cb (EmpathyAccountSettings *settings,
+account_dialog_settings_ready_cb (TpawAccountSettings *settings,
GParamSpec *spec,
EmpathyAccountsDialog *dialog)
{
- if (empathy_account_settings_is_ready (settings))
+ if (tpaw_account_settings_is_ready (settings))
account_dialog_create_dialog_content (dialog, settings);
}
gtk_tree_model_get (model, &iter, COL_ACCOUNT, account, -1);
return priv->setting_widget != NULL
- && empathy_account_widget_contains_pending_changes (
+ && tpaw_account_widget_contains_pending_changes (
priv->setting_widget);
}
if (response == GTK_RESPONSE_APPLY)
{
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
TpAccount *account;
settings = empathy_new_account_dialog_get_settings (
/* The newly created account has already been added by
* accounts_dialog_account_validity_changed_cb so we just
* have to select it. */
- account = empathy_account_settings_get_account (settings);
+ account = tpaw_account_settings_get_account (settings);
accounts_dialog_model_set_selected (self, account);
}
static void
accounts_dialog_update_settings (EmpathyAccountsDialog *dialog,
- EmpathyAccountSettings *settings)
+ TpawAccountSettings *settings)
{
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
return;
}
- /* No account and no profile, warn the user */
+ /* No account selected */
gtk_widget_hide (priv->vbox_details);
- gtk_widget_set_sensitive (priv->button_add, FALSE);
+ gtk_widget_set_sensitive (priv->button_add, TRUE);
+ gtk_widget_set_sensitive (priv->button_remove, FALSE);
gtk_notebook_set_current_page (GTK_NOTEBOOK (priv->notebook_account),
NOTEBOOK_PAGE_NO_PROTOCOL);
* one for the account selected */
gtk_widget_show (priv->vbox_details);
+ if (priv->user_info != NULL)
+ {
+ tpaw_user_info_apply_async ((TpawUserInfo *) priv->user_info,
+ NULL, NULL);
+ priv->user_info = NULL;
+ }
if (priv->dialog_content)
{
gtk_widget_destroy (priv->dialog_content);
priv->dialog_content = NULL;
}
- if (empathy_account_settings_is_ready (settings))
+ if (tpaw_account_settings_is_ready (settings))
{
account_dialog_create_dialog_content (dialog, settings);
}
return empathy_icon_name_for_presence (presence);
}
+static GdkPixbuf *
+ensure_icon (EmpathyAccountsDialog *self,
+ const gchar *icon_name)
+{
+ EmpathyAccountsDialogPriv *priv = GET_PRIV (self);
+ GdkPixbuf *pixbuf;
+
+ pixbuf = g_hash_table_lookup (priv->icons_cache, icon_name);
+ if (pixbuf == NULL)
+ {
+ pixbuf = tpaw_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON);
+
+ if (pixbuf == NULL)
+ return NULL;
+
+ g_hash_table_insert (priv->icons_cache, g_strdup (icon_name),
+ pixbuf);
+ }
+
+ return g_object_ref (pixbuf);
+}
+
static void
accounts_dialog_model_status_pixbuf_data_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
EmpathyAccountsDialog *dialog)
{
TpAccount *account;
+ const gchar *icon_name;
+ GdkPixbuf *pixbuf;
gtk_tree_model_get (model, iter, COL_ACCOUNT, &account, -1);
+ icon_name = get_status_icon_for_account (dialog, account);
+ pixbuf = ensure_icon (dialog, icon_name);
+
g_object_set (cell,
- "icon-name", get_status_icon_for_account (dialog, account),
+ "pixbuf", pixbuf,
NULL);
if (account != NULL)
g_object_unref (account);
+
+ if (pixbuf != NULL)
+ g_object_unref (pixbuf);
}
static void
GtkTreeIter *iter,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
gchar *icon_name;
GdkPixbuf *pixbuf;
TpConnectionStatus status;
COL_ACCOUNT_SETTINGS, &settings,
-1);
- icon_name = empathy_account_settings_get_icon_name (settings);
- pixbuf = empathy_pixbuf_from_icon_name (icon_name, GTK_ICON_SIZE_BUTTON);
+ icon_name = tpaw_account_settings_get_icon_name (settings);
+ pixbuf = ensure_icon (dialog, icon_name);
g_object_set (cell,
"visible", TRUE,
gchar *new_text,
EmpathyAccountsDialog *dialog)
{
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
GtkTreeModel *model;
GtkTreePath *treepath;
GtkTreeIter iter;
-1);
gtk_tree_path_free (treepath);
- empathy_account_settings_set_display_name_async (settings, new_text,
+ tpaw_account_settings_set_display_name_async (settings, new_text,
NULL, NULL);
g_object_set (settings, "display-name-overridden", TRUE, NULL);
g_object_unref (settings);
}
question_dialog_primary_text = g_strdup_printf (
- _("Do you want to remove %s from your computer?"),
+ _("Do you want to remove %.50s from your computer?"),
tp_account_get_display_name (account));
accounts_dialog_show_question_dialog (dialog, question_dialog_primary_text,
g_object_set (priv->name_renderer, "ypad", 4, NULL);
}
-static EmpathyAccountSettings *
+static TpawAccountSettings *
accounts_dialog_model_get_selected_settings (EmpathyAccountsDialog *dialog)
{
GtkTreeView *view;
GtkTreeModel *model;
GtkTreeSelection *selection;
GtkTreeIter iter;
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
view = GTK_TREE_VIEW (priv->treeview);
EmpathyAccountsDialog *dialog)
{
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
GtkTreeModel *model;
GtkTreeIter iter;
gboolean is_selection;
GtkTreeSelection *selection;
priv->force_change_row = TRUE;
- empathy_account_widget_discard_pending_changes (
+ tpaw_account_widget_discard_pending_changes (
priv->setting_widget);
path = gtk_tree_row_reference_get_path (priv->destination_row);
G_TYPE_STRING, /* name */
G_TYPE_UINT, /* status */
TP_TYPE_ACCOUNT, /* account */
- EMPATHY_TYPE_ACCOUNT_SETTINGS); /* settings */
+ TPAW_TYPE_ACCOUNT_SETTINGS); /* settings */
gtk_tree_view_set_model (GTK_TREE_VIEW (priv->treeview),
GTK_TREE_MODEL (store));
static void
reload_account_widget (EmpathyAccountsDialog *self)
{
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
settings = accounts_dialog_model_get_selected_settings (self);
accounts_dialog_update_settings (self, settings);
static void
accounts_dialog_account_display_name_changed_cb (TpAccount *account,
GParamSpec *pspec,
- gpointer user_data)
+ EmpathyAccountsDialog *dialog)
{
- const gchar *display_name;
- GtkTreeIter iter;
- GtkTreeModel *model;
- EmpathyAccountSettings *settings;
- TpAccount *selected_account;
- EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (user_data);
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+ GtkTreeModel *model;
+ GtkTreeIter iter;
- display_name = tp_account_get_display_name (account);
model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->treeview));
- settings = accounts_dialog_model_get_selected_settings (dialog);
- if (settings == NULL)
- return;
-
- selected_account = empathy_account_settings_get_account (settings);
-
if (accounts_dialog_get_account_iter (dialog, account, &iter))
{
gtk_list_store_set (GTK_LIST_STORE (model), &iter,
- COL_NAME, display_name,
+ COL_NAME, tp_account_get_display_name (account),
-1);
}
- if (selected_account == account)
- accounts_dialog_update_name_label (dialog, display_name);
-
- g_object_unref (settings);
+ accounts_dialog_update_status_infobar (dialog, account);
}
static void
accounts_dialog_add_account (EmpathyAccountsDialog *dialog,
TpAccount *account)
{
- EmpathyAccountSettings *settings;
+ TpawAccountSettings *settings;
GtkTreeModel *model;
GtkTreeIter iter;
TpConnectionStatus status;
status = tp_account_get_connection_status (account, NULL);
name = tp_account_get_display_name (account);
- settings = empathy_account_settings_new_for_account (account);
+ settings = tpaw_account_settings_new_for_account (account);
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
if (priv->setting_widget != NULL &&
accounts_dialog_has_valid_accounts (dialog))
{
- empathy_account_widget_set_other_accounts_exist (
+ tpaw_account_widget_set_other_accounts_exist (
priv->setting_widget, TRUE);
}
}
if (priv->setting_widget != NULL &&
!accounts_dialog_has_valid_accounts (dialog))
{
- empathy_account_widget_set_other_accounts_exist (
+ tpaw_account_widget_set_other_accounts_exist (
priv->setting_widget, FALSE);
}
}
GAsyncResult *result,
gpointer user_data)
{
- EmpathyConnectionManagers *cms = EMPATHY_CONNECTION_MANAGERS (source);
+ TpawConnectionManagers *cms = TPAW_CONNECTION_MANAGERS (source);
EmpathyAccountsDialog *dialog = user_data;
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
- if (!empathy_connection_managers_prepare_finish (cms, result, NULL))
+ if (!tpaw_connection_managers_prepare_finish (cms, result, NULL))
goto out;
/* No need to update the settings if we are already preparing one */
dialog);
/* Add existing accounts */
- accounts = tp_account_manager_get_valid_accounts (priv->account_manager);
+ accounts = tp_account_manager_dup_valid_accounts (priv->account_manager);
for (l = accounts; l; l = l->next)
{
accounts_dialog_add_account (dialog, l->data);
}
- g_list_free (accounts);
+ g_list_free_full (accounts, g_object_unref);
- priv->cms = empathy_connection_managers_dup_singleton ();
+ priv->cms = tpaw_connection_managers_dup_singleton ();
- empathy_connection_managers_prepare_async (priv->cms,
+ tpaw_connection_managers_prepare_async (priv->cms,
accounts_dialog_cms_prepare_cb, dialog);
accounts_dialog_model_select_first (dialog);
filename = empathy_file_lookup ("empathy-accounts-dialog.ui", "src");
- gui = empathy_builder_get_file (filename,
+ gui = tpaw_builder_get_file (filename,
"accounts_dialog_hbox", &top_hbox,
"vbox_details", &priv->vbox_details,
"alignment_settings", &priv->alignment_settings,
NULL);
g_free (filename);
- empathy_builder_connect (gui, dialog,
+ tpaw_builder_connect (gui, dialog,
"button_add", "clicked", accounts_dialog_button_add_clicked_cb,
"button_remove", "clicked", accounts_dialog_button_remove_clicked_cb,
"button_import", "clicked", accounts_dialog_button_import_clicked_cb,
/* first row */
priv->label_name = gtk_label_new (NULL);
+ gtk_label_set_ellipsize (GTK_LABEL (priv->label_name), PANGO_ELLIPSIZE_END);
gtk_grid_attach (GTK_GRID (grid), priv->label_name, 1, 0, 1, 1);
/* second row */
EmpathyAccountsDialog *dialog = EMPATHY_ACCOUNTS_DIALOG (obj);
EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+ if (priv->user_info != NULL)
+ {
+ tpaw_user_info_apply_async ((TpawUserInfo *) priv->user_info,
+ NULL, NULL);
+ priv->user_info = NULL;
+ }
+
if (priv->connecting_id != 0)
{
g_source_remove (priv->connecting_id);
priv->initial_selection = NULL;
}
+ tp_clear_pointer (&priv->icons_cache, g_hash_table_unref);
+
G_OBJECT_CLASS (empathy_accounts_dialog_parent_class)->dispose (obj);
}
EMPATHY_TYPE_ACCOUNTS_DIALOG,
EmpathyAccountsDialogPriv);
dialog->priv = priv;
+
+ priv->icons_cache = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, g_object_unref);
}
/* public methods */
if (selected_account)
{
- if (priv->cms != NULL && empathy_connection_managers_is_ready (priv->cms))
+ if (priv->cms != NULL && tpaw_connection_managers_is_ready (priv->cms))
accounts_dialog_set_selected_account (dialog, selected_account);
else
/* save the selection to set it later when the cms
return GTK_WIDGET (dialog);
}
-void
-empathy_accounts_dialog_show_application (GdkScreen *screen,
- TpAccount *selected_account,
+#ifdef HAVE_UOA
+typedef struct
+{
+ TpAccount *account;
+ gboolean if_needed;
+} LaunchUOACtx;
+
+static LaunchUOACtx *
+launch_uoa_ctx_new (TpAccount *account,
+ gboolean if_needed)
+{
+ LaunchUOACtx *ctx;
+
+ ctx = g_slice_new0 (LaunchUOACtx);
+ if (account != NULL)
+ ctx->account = g_object_ref (account);
+ ctx->if_needed = if_needed;
+
+ return ctx;
+}
+
+static void
+launch_uoa_ctx_free (LaunchUOACtx *ctx)
+{
+ g_clear_object (&ctx->account);
+ g_slice_free (LaunchUOACtx, ctx);
+}
+
+static void
+am_prepare_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ TpAccountManager *manager = TP_ACCOUNT_MANAGER (source);
+ GError *error = NULL;
+ LaunchUOACtx *ctx = user_data;
+ gchar *args = NULL;
+
+ if (!tp_proxy_prepare_finish (manager, result, &error))
+ {
+ DEBUG ("Failed to prepare account manager: %s", error->message);
+ g_error_free (error);
+ goto out;
+ }
+
+ if (ctx->if_needed && empathy_accounts_has_non_salut_accounts (manager))
+ goto out;
+
+ if (ctx->account != NULL)
+ {
+ const GValue *value;
+
+ value = tp_account_get_storage_identifier (ctx->account);
+
+ if (G_VALUE_HOLDS_UINT (value))
+ args = g_strdup_printf ("account-details=%u", g_value_get_uint (value));
+ }
+
+ empathy_launch_external_app ("gnome-credentials-panel.desktop", args, NULL);
+
+ g_free (args);
+out:
+ launch_uoa_ctx_free (ctx);
+}
+
+static void
+launch_uoa_panel (TpAccount *selected_account,
+ gboolean if_needed,
+ gboolean hidden)
+{
+ TpAccountManager *manager;
+
+ if (hidden)
+ /* Nothing to do */
+ return;
+
+ manager = tp_account_manager_dup ();
+
+ tp_proxy_prepare_async (manager, NULL, am_prepare_cb,
+ launch_uoa_ctx_new (selected_account, if_needed));
+
+ g_object_unref (manager);
+}
+
+#else /* HAVE_UOA */
+
+static void
+launch_empathy_accounts (TpAccount *selected_account,
gboolean if_needed,
gboolean hidden)
{
g_string_free (args, TRUE);
}
+#endif /* HAVE_UOA */
+
+void
+empathy_accounts_dialog_show_application (GdkScreen *screen,
+ TpAccount *selected_account,
+ gboolean if_needed,
+ gboolean hidden)
+{
+#ifdef HAVE_UOA
+ launch_uoa_panel (selected_account, if_needed, hidden);
+#else
+ launch_empathy_accounts (selected_account, if_needed, hidden);
+#endif
+}
gboolean
empathy_accounts_dialog_is_creating (EmpathyAccountsDialog *dialog)