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