[gnome-control-center/gnome-3-6] user-accounts: Don't have domains	twice in the drop down
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc: 
- Subject: [gnome-control-center/gnome-3-6] user-accounts: Don't have domains	twice in the drop down
- Date: Fri, 19 Oct 2012 09:03:37 +0000 (UTC)
commit b9b2f6a91fa45bcd387d468daf5d48c8343aa8b9
Author: Stef Walter <stefw gnome org>
Date:   Thu Oct 18 18:37:24 2012 +0200
    user-accounts: Don't have domains twice in the drop down
    
    If we discover domains again, don't add them twice to the drop
    down and confuse the user. This is especially important if we
    receive two realms from realmd for the same domain for use with
    different clients (ie: sssd/winbind). We only want to offer the
    first choice
    
    https://bugzilla.gnome.org/show_bug.cgi?id=686397
 panels/user-accounts/um-account-dialog.c |   34 ++++++++++++++++++++++++++---
 1 files changed, 30 insertions(+), 4 deletions(-)
---
diff --git a/panels/user-accounts/um-account-dialog.c b/panels/user-accounts/um-account-dialog.c
index 0505b64..36a0e43 100644
--- a/panels/user-accounts/um-account-dialog.c
+++ b/panels/user-accounts/um-account-dialog.c
@@ -326,20 +326,46 @@ static void
 enterprise_add_realm (UmAccountDialog *self,
                       UmRealmObject *realm)
 {
+        GtkTreeModel *model;
         GtkTreeIter iter;
         UmRealmCommon *common;
-
-        g_debug ("Adding new realm to drop down: %s",
-                 g_dbus_object_get_object_path (G_DBUS_OBJECT (realm)));
+        const gchar *realm_name;
+        gboolean match;
+        gboolean ret;
+        gchar *name;
 
         common = um_realm_object_get_common (realm);
+        realm_name = um_realm_common_get_name (common);
+
+        /*
+         * Don't add a second realm if we already have one with this name.
+         * Sometimes realmd returns to realms for the same name, if it has
+         * different ways to use that realm. The first one that realmd
+         * returns is the one it prefers.
+         */
+
+        model = GTK_TREE_MODEL (self->enterprise_realms);
+        ret = gtk_tree_model_get_iter_first (model, &iter);
+        while (ret) {
+                gtk_tree_model_get (model, &iter, 0, &name, -1);
+                match = (g_strcmp0 (name, realm_name) == 0);
+                g_free (name);
+                if (match) {
+                        g_debug ("ignoring duplicate realm: %s", realm_name);
+                        return;
+                }
+                ret = gtk_tree_model_iter_next (model, &iter);
+        }
 
         gtk_list_store_append (self->enterprise_realms, &iter);
         gtk_list_store_set (self->enterprise_realms, &iter,
-                            0, um_realm_common_get_name (common),
+                            0, realm_name,
                             1, realm,
                             -1);
 
+        g_debug ("added realm to drop down: %s %s", realm_name,
+                 g_dbus_object_get_object_path (G_DBUS_OBJECT (realm)));
+
         if (!self->enterprise_domain_chosen && um_realm_is_configured (realm))
                 gtk_combo_box_set_active_iter (self->enterprise_domain, &iter);
 
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]