aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/cc-empathy-accounts-page.c24
-rw-r--r--src/empathy-accounts-dialog.c30
-rw-r--r--src/empathy-accounts-dialog.h4
3 files changed, 53 insertions, 5 deletions
diff --git a/src/cc-empathy-accounts-page.c b/src/cc-empathy-accounts-page.c
index ef9b17557..383e20d41 100644
--- a/src/cc-empathy-accounts-page.c
+++ b/src/cc-empathy-accounts-page.c
@@ -28,6 +28,7 @@
#include <glib/gi18n-lib.h>
#include <telepathy-glib/account-manager.h>
+#include <libempathy/empathy-utils.h>
#include <libempathy/empathy-connection-managers.h>
#include <libempathy-gtk/empathy-ui-utils.h>
@@ -75,6 +76,20 @@ page_pack_with_accounts_dialog (CcEmpathyAccountsPage *page)
}
static void
+account_assistant_closed_cb (GtkWidget *widget,
+ gpointer user_data)
+{
+ CcEmpathyAccountsPage *page = CC_EMPATHY_ACCOUNTS_PAGE (user_data);
+
+ if (empathy_accounts_dialog_is_creating (
+ EMPATHY_ACCOUNTS_DIALOG (page->priv->accounts_window)))
+ {
+ empathy_account_dialog_cancel (
+ EMPATHY_ACCOUNTS_DIALOG (page->priv->accounts_window));
+ }
+}
+
+static void
connection_managers_prepare (GObject *source,
GAsyncResult *result,
gpointer user_data)
@@ -96,7 +111,14 @@ connection_managers_prepare (GObject *source,
empathy_accounts_import (account_mgr, cm_mgr);
if (!empathy_accounts_has_non_salut_accounts (account_mgr))
- empathy_account_assistant_show (NULL, cm_mgr);
+ {
+ GtkWidget *w;
+ w = empathy_account_assistant_show (NULL, cm_mgr);
+
+ empathy_signal_connect_weak (w, "hide",
+ G_CALLBACK (account_assistant_closed_cb),
+ G_OBJECT (page));
+ }
out:
/* remove ref from active_changed() */
diff --git a/src/empathy-accounts-dialog.c b/src/empathy-accounts-dialog.c
index d8489ee92..75357be9c 100644
--- a/src/empathy-accounts-dialog.c
+++ b/src/empathy-accounts-dialog.c
@@ -346,10 +346,8 @@ accounts_dialog_update_status_infobar (EmpathyAccountsDialog *dialog,
g_free (message_markup);
}
-static void
-empathy_account_dialog_widget_cancelled_cb (
- EmpathyAccountWidget *widget_object,
- EmpathyAccountsDialog *dialog)
+void
+empathy_account_dialog_cancel (EmpathyAccountsDialog *dialog)
{
GtkTreeView *view;
GtkTreeModel *model;
@@ -394,6 +392,14 @@ empathy_account_dialog_widget_cancelled_cb (
}
static void
+empathy_account_dialog_widget_cancelled_cb (
+ EmpathyAccountWidget *widget_object,
+ EmpathyAccountsDialog *dialog)
+{
+ empathy_account_dialog_cancel (dialog);
+}
+
+static void
empathy_account_dialog_account_created_cb (EmpathyAccountWidget *widget_object,
TpAccount *account,
EmpathyAccountsDialog *dialog)
@@ -2344,3 +2350,19 @@ empathy_accounts_dialog_show_application (GdkScreen *screen,
g_free (account_option);
g_free (path);
}
+
+gboolean
+empathy_account_dialog_is_creating (EmpathyAccountsDialog *dialog)
+{
+ EmpathyAccountsDialogPriv *priv = GET_PRIV (dialog);
+ gboolean result = FALSE;
+
+ if (priv->setting_widget_object == NULL)
+ goto out;
+
+ g_object_get (priv->setting_widget_object,
+ "creating-account", &result, NULL);
+
+out:
+ return result;
+}
diff --git a/src/empathy-accounts-dialog.h b/src/empathy-accounts-dialog.h
index c171e3d24..8f33add8d 100644
--- a/src/empathy-accounts-dialog.h
+++ b/src/empathy-accounts-dialog.h
@@ -56,6 +56,10 @@ typedef struct {
GType empathy_accounts_dialog_get_type (void);
GtkWidget *empathy_accounts_dialog_show (GtkWindow *parent,
TpAccount *selected_account);
+
+void empathy_account_dialog_cancel (EmpathyAccountsDialog *dialog);
+gboolean empathy_account_dialog_is_creating (EmpathyAccountsDialog *dialog);
+
void empathy_accounts_dialog_show_application (GdkScreen *screen,
GChildWatchFunc application_exit_cb,
gpointer user_data,