rpms/gdm/F-13 accounts-service.patch,NONE,1.1 gdm.spec,1.508,1.509

Ray Strode rstrode at fedoraproject.org
Wed Mar 24 14:34:59 UTC 2010


Author: rstrode

Update of /cvs/pkgs/rpms/gdm/F-13
In directory cvs01.phx2.fedoraproject.org:/tmp/cvs-serv4712

Modified Files:
	gdm.spec 
Added Files:
	accounts-service.patch 
Log Message:
- Add accounts service patch


accounts-service.patch:
 b/gui/simple-greeter/gdm-user-chooser-widget.c |    4 
 b/gui/simple-greeter/gdm-user-manager.c        |    7 
 b/gui/simple-greeter/gdm-user-manager.h        |    2 
 b/gui/simple-greeter/gdm-user-private.h        |    2 
 b/gui/simple-greeter/gdm-user.c                |    6 
 b/gui/simple-greeter/gdm-user.h                |    2 
 b/gui/user-switch-applet/applet.c              |   29 -
 gui/simple-greeter/gdm-user-chooser-widget.c   |   58 +-
 gui/simple-greeter/gdm-user-manager.c          |  617 ++++++++++++++--------
 gui/simple-greeter/gdm-user-manager.h          |    2 
 gui/simple-greeter/gdm-user-private.h          |    8 
 gui/simple-greeter/gdm-user.c                  |  685 +++++++++++--------------
 gui/simple-greeter/gdm-user.h                  |   11 
 gui/user-switch-applet/applet.c                |   20 
 14 files changed, 783 insertions(+), 670 deletions(-)

--- NEW FILE accounts-service.patch ---
>From 05c318bd1085f307259522bdcef18275662008c9 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Thu, 11 Mar 2010 09:07:21 -0500
Subject: [PATCH 01/22] Add new gdm_user_is_logged_in method

Before we were doing

if (gdm_user_get_num_sessions > 0)

all over the place.  This is slightly
more clear.
---
 gui/simple-greeter/gdm-user-chooser-widget.c |    4 ++--
 gui/simple-greeter/gdm-user.c                |    6 ++++++
 gui/simple-greeter/gdm-user.h                |    1 +
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/gui/simple-greeter/gdm-user-chooser-widget.c b/gui/simple-greeter/gdm-user-chooser-widget.c
index 77e06a7..9658c2b 100644
--- a/gui/simple-greeter/gdm-user-chooser-widget.c
+++ b/gui/simple-greeter/gdm-user-chooser-widget.c
@@ -385,7 +385,7 @@ add_user (GdmUserChooserWidget *widget,
         tooltip = g_strdup_printf (_("Log in as %s"),
                                    gdm_user_get_user_name (user));
 
-        is_logged_in = gdm_user_get_num_sessions (user) > 0;
+        is_logged_in = gdm_user_is_logged_in (user);
 
         g_debug ("GdmUserChooserWidget: User added name:%s logged-in:%d pixbuf:%p",
                  gdm_user_get_user_name (user),
@@ -453,7 +453,7 @@ on_user_is_logged_in_changed (GdmUserManager       *manager,
         g_debug ("GdmUserChooserWidget: User logged in changed: %s", gdm_user_get_user_name (user));
 
         user_name = gdm_user_get_user_name (user);
-        is_logged_in = gdm_user_get_num_sessions (user) > 0;
+        is_logged_in = gdm_user_is_logged_in (user);
 
         gdm_chooser_widget_set_item_in_use (GDM_CHOOSER_WIDGET (widget),
                                             user_name,
diff --git a/gui/simple-greeter/gdm-user.c b/gui/simple-greeter/gdm-user.c
index e2b612f..e880fc5 100644
--- a/gui/simple-greeter/gdm-user.c
+++ b/gui/simple-greeter/gdm-user.c
@@ -1080,6 +1080,12 @@ frame_pixbuf (GdkPixbuf *source)
         return dest;
 }
 
+gboolean
+gdm_user_is_logged_in (GdmUser *user)
+{
+        return user->sessions != NULL;
+}
+
 GdkPixbuf *
 gdm_user_render_icon (GdmUser   *user,
                       gint       icon_size)
diff --git a/gui/simple-greeter/gdm-user.h b/gui/simple-greeter/gdm-user.h
index 9f153d9..c0b27ca 100644
--- a/gui/simple-greeter/gdm-user.h
+++ b/gui/simple-greeter/gdm-user.h
@@ -47,6 +47,7 @@ G_CONST_RETURN char  *gdm_user_get_home_directory  (GdmUser   *user);
 G_CONST_RETURN char  *gdm_user_get_shell           (GdmUser   *user);
 guint                 gdm_user_get_num_sessions    (GdmUser   *user);
 GList                *gdm_user_get_sessions        (GdmUser   *user);
+gboolean              gdm_user_is_logged_in        (GdmUser   *user);
 gulong                gdm_user_get_login_frequency (GdmUser   *user);
 
 GdkPixbuf            *gdm_user_render_icon         (GdmUser   *user,
-- 
1.6.5.2


>From 5b2e2563d0554bb0af2ff86798ef70de3e443fda Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Mon, 15 Mar 2010 13:21:24 -0400
Subject: [PATCH 02/22] Don't match users as dupes of themselves

---
 gui/simple-greeter/gdm-user-manager.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index 58def68..e5b64b9 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -757,9 +757,9 @@ match_real_name_cmpfunc (gconstpointer a,
 static gboolean
 match_real_name_hrfunc (gpointer key,
                         gpointer value,
-                        gpointer user_data)
+                        gpointer user)
 {
-        return (g_strcmp0 (user_data, gdm_user_get_real_name (value)) == 0);
+        return (value != user && g_strcmp0 (gdm_user_get_real_name (user), gdm_user_get_real_name (value)) == 0);
 }
 
 static void
@@ -771,7 +771,7 @@ add_user (GdmUserManager *manager,
         add_sessions_for_user (manager, user);
         dup = g_hash_table_find (manager->priv->users,
                                  match_real_name_hrfunc,
-                                 (char *) gdm_user_get_real_name (user));
+                                 user);
         if (dup != NULL) {
                 _gdm_user_show_full_display_name (user);
                 _gdm_user_show_full_display_name (dup);
-- 
1.6.5.2


>From 20a172c85d5bd75f9c529aa4a5b4ba07887adb3e Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Mon, 15 Mar 2010 13:56:38 -0400
Subject: [PATCH 03/22] Move get_primary_session_id to gdm-user.h

It makes more sense there, and this will allow
us to drop get_sessions eventually.
---
 gui/simple-greeter/gdm-user-manager.c |   61 +++++---------------------------
 gui/simple-greeter/gdm-user.c         |   30 ++++++++++++++++
 gui/simple-greeter/gdm-user.h         |    1 +
 3 files changed, 41 insertions(+), 51 deletions(-)

diff --git a/gui/simple-greeter/gdm-user-manager.c b/gui/simple-greeter/gdm-user-manager.c
index e5b64b9..d5865da 100644
--- a/gui/simple-greeter/gdm-user-manager.c
+++ b/gui/simple-greeter/gdm-user-manager.c
@@ -150,55 +150,6 @@ start_new_login_session (GdmUserManager *manager)
         return res;
 }
 
-/* needs to stay in sync with gdm-slave */
-static char *
-_get_primary_user_session_id (GdmUserManager *manager,
-                              GdmUser        *user)
-{
-        gboolean    can_activate_sessions;
-        GList      *sessions;
-        GList      *l;
-        char       *primary_ssid;
-
-        if (manager->priv->seat_id == NULL || manager->priv->seat_id[0] == '\0') {
-                g_debug ("GdmUserManager: display seat ID is not set; can't switch sessions");
-                return NULL;
-        }
-
-        primary_ssid = NULL;
-        sessions = NULL;
-
-        can_activate_sessions = gdm_user_manager_can_switch (manager);
-
-        if (! can_activate_sessions) {
-                g_debug ("GdmUserManager: seat is unable to activate sessions");
-                goto out;
-        }
-
-        sessions = gdm_user_get_sessions (user);
-        if (sessions == NULL) {
-                g_warning ("unable to determine sessions for user: %s",
-                           gdm_user_get_user_name (user));
-                goto out;
-        }
-
-        for (l = sessions; l != NULL; l = l->next) {
-                const char *ssid;
-
-                ssid = l->data;
-
-                /* FIXME: better way to choose? */
-                if (ssid != NULL) {
-                        primary_ssid = g_strdup (ssid);
-                        break;
-                }
-        }
-
- out:
-
-        return primary_ssid;
-}
-
 static gboolean
 activate_session_id (GdmUserManager *manager,
                      const char     *seat_id,
@@ -439,15 +390,23 @@ gdm_user_manager_activate_user_session (GdmUserManager *manager,
                                         GdmUser        *user)
 {
         gboolean ret;
-        char    *ssid;
+        const char *ssid;
         gboolean res;
 
+        gboolean can_activate_sessions;
         g_return_val_if_fail (GDM_IS_USER_MANAGER (manager), FALSE);
         g_return_val_if_fail (GDM_IS_USER (user), FALSE);
 
         ret = FALSE;
 
-        ssid = _get_primary_user_session_id (manager, user);
+        can_activate_sessions = gdm_user_manager_can_switch (manager);
[...2580 lines suppressed...]
+        } else if (strcmp (key, "RealName") == 0) {
+                g_free (user->real_name);
+                user->real_name = g_value_dup_string (value);
+        } else if (strcmp (key, "AccountType") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "Email") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "Language") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "Location") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "LoginFrequency") == 0) {
+                user->login_frequency = g_value_get_uint64 (value);
+        } else if (strcmp (key, "IconFile") == 0) {
+                g_free (user->icon_file);
+                user->icon_file = g_value_dup_string (value);
+        } else if (strcmp (key, "Locked") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "AutomaticLogin") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "PasswordMode") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "PasswordHint") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "HomeDirectory") == 0) {
+                /* ignore */
+        } else if (strcmp (key, "Shell") == 0) {
+                /* ignore */
+        } else {
+                handled = FALSE;
+        }
+
+        if (!handled) {
+                g_debug ("unhandled property %s", key);
+        }
+}
+
+static gboolean
+update_info (GdmUser *user)
+{
+        GError *error;
+        DBusGProxy *proxy;
+        GHashTable *hash_table;
+        gboolean retval;
+
+        proxy = dbus_g_proxy_new_for_name (user->connection,
+                                           USER_ACCOUNTS_NAME,
+                                           user->object_path,
+                                           DBUS_INTERFACE_PROPERTIES);
+
+        error = NULL;
+        if (!dbus_g_proxy_call (proxy,
+                                "GetAll",
+                                &error,
+                                G_TYPE_STRING,
+                                USER_ACCOUNTS_INTERFACE,
+                                G_TYPE_INVALID,
+                                dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
+                                &hash_table,
+                                G_TYPE_INVALID)) {
+                g_debug ("Error calling GetAll() when retrieving properties for %s: %s", user->object_path, error->message);
+                g_error_free (error);
+                retval = FALSE;
+                goto out;
+        }
+        g_hash_table_foreach (hash_table, (GHFunc) collect_props, user);
+        g_hash_table_unref (hash_table);
+
+        retval = TRUE;
+ out:
+        g_object_unref (proxy);
+        return retval;
+}
+
+static void
+changed_handler (DBusGProxy *proxy,
+                 gpointer   *data)
+{
+        GdmUser *user = GDM_USER (data);
+
+        if (update_info (user)) {
+                g_signal_emit (user, signals[CHANGED], 0);
+        }
+}
+
+GdmUser *
+gdm_user_new_from_object_path (const gchar *object_path)
+{
+        GdmUser *user;
+
+        user = (GdmUser *)g_object_new (GDM_TYPE_USER, NULL);
+        user->object_path = g_strdup (object_path);
+
+        user->accounts_proxy = dbus_g_proxy_new_for_name (user->connection,
+                                                          USER_ACCOUNTS_NAME,
+                                                          user->object_path,
+                                                          USER_ACCOUNTS_INTERFACE);
+        dbus_g_proxy_set_default_timeout (user->accounts_proxy, INT_MAX);
+        dbus_g_proxy_add_signal (user->accounts_proxy, "Changed", G_TYPE_INVALID);
+
+        dbus_g_proxy_connect_signal (user->accounts_proxy, "Changed",
+                                     G_CALLBACK (changed_handler), user, NULL);
+
+        if (!update_info (user)) {
+                goto error;
+        }
+
+        return user;
+
+ error:
+        g_object_unref (user);
+        return NULL;
+}
diff --git a/gui/simple-greeter/gdm-user.h b/gui/simple-greeter/gdm-user.h
index 6b51ffb..8514f2f 100644
--- a/gui/simple-greeter/gdm-user.h
+++ b/gui/simple-greeter/gdm-user.h
@@ -39,6 +39,9 @@ typedef struct _GdmUser GdmUser;
 
 GType                 gdm_user_get_type            (void) G_GNUC_CONST;
 
+GdmUser              *gdm_user_new_from_object_path (const gchar *path);
+const char           *gdm_user_get_object_path      (GdmUser *user);
+
 uid_t                 gdm_user_get_uid             (GdmUser   *user);
 G_CONST_RETURN char  *gdm_user_get_user_name       (GdmUser   *user);
 G_CONST_RETURN char  *gdm_user_get_real_name       (GdmUser   *user);
@@ -46,6 +49,7 @@ G_CONST_RETURN char  *gdm_user_get_display_name    (GdmUser   *user);
 guint                 gdm_user_get_num_sessions    (GdmUser   *user);
 gboolean              gdm_user_is_logged_in        (GdmUser   *user);
 gulong                gdm_user_get_login_frequency (GdmUser   *user);
+G_CONST_RETURN char  *gdm_user_get_icon_file       (GdmUser   *user);
 G_CONST_RETURN char  *gdm_user_get_primary_session_id (GdmUser *user);
 
 GdkPixbuf            *gdm_user_render_icon         (GdmUser   *user,
diff --git a/gui/user-switch-applet/applet.c b/gui/user-switch-applet/applet.c
index 89c2b69..436207d 100644
--- a/gui/user-switch-applet/applet.c
+++ b/gui/user-switch-applet/applet.c
@@ -800,9 +800,12 @@ on_account_activate (GtkMenuItem   *item,
         GdkScreen *screen;
         gboolean   res;
 
-        args[0] = g_find_program_in_path ("gnome-about-me");
+        args[0] = g_find_program_in_path ("accounts-dialog");
         if (args[0] == NULL) {
-                return;
+                args[0] = g_find_program_in_path ("gnome-about-me");
+                if (args[0] == NULL) {
+                        return;
+                }
         }
         args[1] = NULL;
 
-- 
1.6.5.2


>From e6a8252327c7540170fe2a30722269fb28385570 Mon Sep 17 00:00:00 2001
From: Ray Strode <rstrode at redhat.com>
Date: Thu, 18 Mar 2010 08:59:45 -0400
Subject: [PATCH 22/22] Don't crash when adding multiple user switchers

Before we were blowing an assertion because settings client was
getting initialized twice.
---
 gui/user-switch-applet/applet.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/gui/user-switch-applet/applet.c b/gui/user-switch-applet/applet.c
index 436207d..3b20884 100644
--- a/gui/user-switch-applet/applet.c
+++ b/gui/user-switch-applet/applet.c
@@ -1409,17 +1409,18 @@ fill_applet (PanelApplet *applet)
                                      "widget \"*.gdm-user-switch-applet\" style \"gdm-user-switch-applet-style\"\n");
                 gtk_window_set_default_icon_name ("stock_people");
                 g_set_application_name (_("User Switch Applet"));
+
+                if (! gdm_settings_client_init (GDMCONFDIR "/gdm.schemas", "/")) {
+                        g_critical ("Unable to initialize settings client");
+                        exit (1);
+                }
+
         }
 
         adata = g_new0 (GdmAppletData, 1);
         adata->applet = applet;
         adata->panel_size = 24;
 
-        if (! gdm_settings_client_init (GDMCONFDIR "/gdm.schemas", "/")) {
-                g_critical ("Unable to initialize settings client");
-                exit (1);
-        }
-
         adata->client = gconf_client_get_default ();
 
         gtk_widget_set_tooltip_text (GTK_WIDGET (applet), _("Change account settings and status"));
-- 
1.6.5.2



Index: gdm.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdm/F-13/gdm.spec,v
retrieving revision 1.508
retrieving revision 1.509
diff -u -p -r1.508 -r1.509
--- gdm.spec	24 Mar 2010 04:31:50 -0000	1.508
+++ gdm.spec	24 Mar 2010 14:34:58 -0000	1.509
@@ -15,7 +15,7 @@
 Summary: The GNOME Display Manager
 Name: gdm
 Version: 2.29.92
-Release: 4%{?dist}
+Release: 5%{?dist}
 Epoch: 1
 License: GPLv2+
 Group: User Interface/X
@@ -93,6 +93,9 @@ Provides: service(graphical-login) = %{n
 Requires: audit-libs >= %{libauditver}
 Patch2: plymouth.patch
 
+# https://bugzilla.gnome.org/show_bug.cgi?id=610179
+Patch3: accounts-service.patch
+
 Patch96: gdm-multistack.patch
 # Fedora-specific
 Patch97: gdm-bubble-location.patch
@@ -138,6 +141,7 @@ The GDM fingerprint plugin provides func
 %prep
 %setup -q
 %patch2 -p1 -b .plymouth
+%patch3 -p1 -b .accounts-service
 %patch96 -p1 -b .multistack
 %patch97 -p1 -b .bubble-location
 %patch98 -p1 -b .tray-padding
@@ -400,6 +404,9 @@ fi
 %{_libdir}/gdm/simple-greeter/plugins/fingerprint.so
 
 %changelog
+* Wed Mar 24 2010 Ray Strode <rstrode at redhat.com> 2.29.92-5
+- Add accounts service patch
+
 * Wed Mar 24 2010 Matthias Clasen <mclasen at redhat.com> 2.29.92-4
 - Drop hal dependency
 



More information about the scm-commits mailing list