user-accounts: After the add account dialog is cancelled, discard results
When closing the dialog, we cancel the cancellable, but don't wait for all the async calls to complete before closing the dialog so discard results when they come in. https://bugzilla.gnome.org/show_bug.cgi?id=700958
This commit is contained in:
parent
05147e093a
commit
bd5ab94843
1 changed files with 53 additions and 10 deletions
|
@ -396,6 +396,11 @@ on_register_user (GObject *source,
|
|||
GError *error = NULL;
|
||||
ActUser *user;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
user = act_user_manager_cache_user_finish (ACT_USER_MANAGER (source), result, &error);
|
||||
|
||||
/* This is where we're finally done */
|
||||
|
@ -425,6 +430,11 @@ on_permit_user_login (GObject *source,
|
|||
GError *error = NULL;
|
||||
gchar *login;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
common = UM_REALM_COMMON (source);
|
||||
um_realm_common_call_change_login_policy_finish (common, result, &error);
|
||||
if (error == NULL) {
|
||||
|
@ -570,6 +580,11 @@ on_join_login (GObject *source,
|
|||
GError *error = NULL;
|
||||
GBytes *creds;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
um_realm_login_finish (result, &creds, &error);
|
||||
|
||||
/* Logged in as admin successfully, use creds to join domain */
|
||||
|
@ -617,6 +632,11 @@ on_realm_joined (GObject *source,
|
|||
UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data);
|
||||
GError *error = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
um_realm_join_finish (self->selected_realm,
|
||||
result, &error);
|
||||
|
||||
|
@ -651,6 +671,11 @@ on_realm_login (GObject *source,
|
|||
GError *error = NULL;
|
||||
GBytes *creds = NULL;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
um_realm_login_finish (result, &creds, &error);
|
||||
|
||||
/*
|
||||
|
@ -732,6 +757,11 @@ on_realm_discover_input (GObject *source,
|
|||
GError *error = NULL;
|
||||
GList *realms;
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
realms = um_realm_manager_discover_finish (self->realm_manager,
|
||||
result, &error);
|
||||
|
||||
|
@ -782,6 +812,18 @@ enterprise_add_user (UmAccountDialog *self)
|
|||
}
|
||||
}
|
||||
|
||||
static void
|
||||
clear_realm_manager (UmAccountDialog *self)
|
||||
{
|
||||
if (self->realm_manager) {
|
||||
g_signal_handlers_disconnect_by_func (self->realm_manager,
|
||||
on_manager_realm_added,
|
||||
self);
|
||||
g_object_unref (self->realm_manager);
|
||||
self->realm_manager = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
on_realm_manager_created (GObject *source,
|
||||
GAsyncResult *result,
|
||||
|
@ -791,15 +833,21 @@ on_realm_manager_created (GObject *source,
|
|||
GError *error = NULL;
|
||||
GList *realms, *l;
|
||||
|
||||
g_clear_object (&self->realm_manager);
|
||||
clear_realm_manager (self);
|
||||
|
||||
self->realm_manager = um_realm_manager_new_finish (result, &error);
|
||||
if (error != NULL) {
|
||||
g_warning ("Couldn't contact realmd service: %s", error->message);
|
||||
g_object_unref (self);
|
||||
g_error_free (error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (g_cancellable_is_cancelled (self->cancellable)) {
|
||||
g_object_unref (self);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Lookup all the realm objects */
|
||||
realms = um_realm_manager_get_realms (self->realm_manager);
|
||||
for (l = realms; l != NULL; l = g_list_next (l))
|
||||
|
@ -815,6 +863,7 @@ on_realm_manager_created (GObject *source,
|
|||
/* Show the 'Enterprise Login' stuff, and update mode */
|
||||
gtk_widget_show (self->enterprise_button);
|
||||
mode_change (self, self->mode);
|
||||
g_object_unref (self);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -824,7 +873,8 @@ on_realmd_appeared (GDBusConnection *connection,
|
|||
gpointer user_data)
|
||||
{
|
||||
UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data);
|
||||
um_realm_manager_new (self->cancellable, on_realm_manager_created, self);
|
||||
um_realm_manager_new (self->cancellable, on_realm_manager_created,
|
||||
g_object_ref (self));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -834,14 +884,7 @@ on_realmd_disappeared (GDBusConnection *unused1,
|
|||
{
|
||||
UmAccountDialog *self = UM_ACCOUNT_DIALOG (user_data);
|
||||
|
||||
if (self->realm_manager) {
|
||||
g_signal_handlers_disconnect_by_func (self->realm_manager,
|
||||
on_manager_realm_added,
|
||||
self);
|
||||
g_object_unref (self->realm_manager);
|
||||
self->realm_manager = NULL;
|
||||
}
|
||||
|
||||
clear_realm_manager (self);
|
||||
gtk_list_store_clear (self->enterprise_realms);
|
||||
gtk_widget_hide (self->enterprise_button);
|
||||
mode_change (self, UM_LOCAL);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue