EmpathyAccountManager *account_manager;
EmpathyConnectionManagers *cms;
- EmpathyAccount *selected_account;
GtkWindow *parent_window;
+ EmpathyAccount *initial_selection;
} EmpathyAccountsDialogPriv;
enum {
};
enum {
- PROP_SELECTED_ACCOUNT = 1,
- PROP_PARENT
+ PROP_PARENT = 1
};
static void accounts_dialog_update (EmpathyAccountsDialog *dialog,
g_object_unref (dialog);
}
+static void
+accounts_dialog_set_selected_account (EmpathyAccountsDialog *dialog,
+ EmpathyAccount *account)
+{
+ GtkTreeSelection *selection;
+ GtkTreeIter iter;
+ EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
+ if (accounts_dialog_get_account_iter (dialog, account, &iter)) {
+ gtk_tree_selection_select_iter (selection, &iter);
+ }
+}
+
static void
accounts_dialog_cms_ready_cb (EmpathyConnectionManagers *cms,
GParamSpec *pspec,
EmpathyAccountsDialog *dialog)
{
+ EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+
if (empathy_connection_managers_is_ready (cms)) {
accounts_dialog_update_settings (dialog, NULL);
+
+ if (priv->initial_selection != NULL) {
+ accounts_dialog_set_selected_account (dialog, priv->initial_selection);
+ priv->initial_selection = NULL;
+ }
}
}
case PROP_PARENT:
g_value_set_object (value, priv->parent_window);
break;
- case PROP_SELECTED_ACCOUNT:
- g_value_set_object (value, priv->selected_account);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
case PROP_PARENT:
priv->parent_window = g_value_get_object (value);
break;
- case PROP_SELECTED_ACCOUNT:
- priv->selected_account = g_value_get_object (value);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
G_CALLBACK (accounts_dialog_cms_ready_cb), dialog);
}
- if (priv->selected_account) {
- GtkTreeSelection *selection;
- GtkTreeIter iter;
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->treeview));
- if (accounts_dialog_get_account_iter (dialog, priv->selected_account, &iter)) {
- gtk_tree_selection_select_iter (selection, &iter);
- }
-
- priv->selected_account = NULL;
- } else {
- accounts_dialog_model_select_first (dialog);
- }
+ accounts_dialog_model_select_first (dialog);
empathy_conf_get_bool (empathy_conf_get (),
EMPATHY_PREFS_IMPORT_ASKED, &import_asked);
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
g_object_class_install_property (oclass, PROP_PARENT, param_spec);
- param_spec = g_param_spec_object ("selected-account",
- "selected-account", "The account selected by default",
- EMPATHY_TYPE_ACCOUNT,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY);
- g_object_class_install_property (oclass, PROP_SELECTED_ACCOUNT, param_spec);
-
-
g_type_class_add_private (klass, sizeof (EmpathyAccountsDialogPriv));
}
EmpathyAccountsDialogPriv *priv;
dialog = g_object_new (EMPATHY_TYPE_ACCOUNTS_DIALOG,
- "parent", parent, "selected-account", selected_account, NULL);
+ "parent", parent, NULL);
priv = GET_PRIV (dialog);
+ if (selected_account && empathy_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
+ * becomes ready.
+ */
+ priv->initial_selection = selected_account;
+ }
+
gtk_window_present (GTK_WINDOW (priv->window));
return priv->window;