diff --git a/gdm.spec b/gdm.spec index 8801cb0..fdefa1f 100644 --- a/gdm.spec +++ b/gdm.spec @@ -16,7 +16,7 @@ Summary: The GNOME Display Manager Name: gdm Version: 2.26.1 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 License: GPLv2+ Group: User Interface/X @@ -98,6 +98,9 @@ Patch13: gdm-system-keyboard.patch Patch19: gdm-2.26.1-multistack.patch +# http://bugzilla.gnome.org/show_bug.cgi?id=580189 +Patch20: session-client.patch + # Fedora-specific Patch99: gdm-2.23.1-fedora-logo.patch @@ -140,6 +143,8 @@ The GDM fingerprint plugin provides functionality necessary to use a fingerprint %patch19 -p1 -b .multistack +%patch20 -p1 -b .session-client + %patch99 -p1 -b .fedora-logo autoreconf -i -f @@ -380,6 +385,9 @@ fi %{_libdir}/gdm/simple-greeter/plugins/fingerprint.so %changelog +* Fri Apr 24 2009 Matthias Clasen - 1:2.26.1-4 +- Make the greeter a well-behaved session client (#495738) + * Wed Apr 22 2009 Ray Strode - 1:2.26.1-3 - Add temporary hack to smack down misbehaving PAM modules diff --git a/session-client.patch b/session-client.patch new file mode 100644 index 0000000..48fe746 --- /dev/null +++ b/session-client.patch @@ -0,0 +1,69 @@ +--- gdm-2.26.1/gui/simple-greeter/greeter-main.c 2009-02-19 21:45:09.000000000 -0500 ++++ hacked/gui/simple-greeter/greeter-main.c 2009-04-24 20:21:43.560229712 -0400 +@@ -155,6 +155,46 @@ + return (sm_proxy != NULL); + } + ++static void ++stop_cb (gpointer data) ++{ ++ gtk_main_quit (); ++} ++ ++static gboolean ++end_session_response (gboolean is_okay, const gchar *reason) ++{ ++ gboolean ret; ++ GError *error = NULL; ++ ++ ret = dbus_g_proxy_call (client_proxy, "EndSessionResponse", ++ &error, ++ G_TYPE_BOOLEAN, is_okay, ++ G_TYPE_STRING, reason, ++ G_TYPE_INVALID, ++ G_TYPE_INVALID); ++ ++ if (!ret) { ++ g_warning ("Failed to send session response %s", error->message); ++ g_error_free (error); ++ } ++ ++ return ret; ++} ++ ++static void ++query_end_session_cb (guint flags, gpointer data) ++{ ++ end_session_response (TRUE, NULL); ++} ++ ++static void ++end_session_cb (guint flags, gpointer data) ++{ ++ end_session_response (TRUE, NULL); ++ gtk_main_quit (); ++} ++ + static gboolean + register_client (void) + { +@@ -186,6 +226,19 @@ + SM_DBUS_NAME, + client_id, + SM_CLIENT_DBUS_INTERFACE); ++ ++ dbus_g_proxy_add_signal (client_proxy, "Stop", G_TYPE_INVALID); ++ dbus_g_proxy_connect_signal (client_proxy, "Stop", ++ G_CALLBACK (stop_cb), NULL, NULL); ++ ++ dbus_g_proxy_add_signal (client_proxy, "QueryEndSession", G_TYPE_UINT, G_TYPE_INVALID); ++ dbus_g_proxy_connect_signal (client_proxy, "QueryEndSession", ++ G_CALLBACK (query_end_session_cb), NULL, NULL); ++ ++ dbus_g_proxy_add_signal (client_proxy, "EndSession", G_TYPE_UINT, G_TYPE_INVALID); ++ dbus_g_proxy_connect_signal (client_proxy, "EndSession", ++ G_CALLBACK (end_session_cb), NULL, NULL); ++ + g_unsetenv ("DESKTOP_AUTOSTART_ID"); + + return TRUE;