From 5100c4873c3c02077492aa7e30112f6be66083476aafee696aa49183608a5c0c Mon Sep 17 00:00:00 2001 From: Dominique Leuenberger Date: Wed, 16 Feb 2011 10:23:21 +0000 Subject: [PATCH] Accepting request 61251 from home:vuntz:branches:GNOME:Factory OBS-URL: https://build.opensuse.org/request/show/61251 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gdm?expand=0&rev=154 --- gdm-xdmcp-disconnect.patch | 189 +++++++++++++++++++++++++++++++++++++ gdm.changes | 7 ++ gdm.spec | 3 + 3 files changed, 199 insertions(+) create mode 100644 gdm-xdmcp-disconnect.patch diff --git a/gdm-xdmcp-disconnect.patch b/gdm-xdmcp-disconnect.patch new file mode 100644 index 0000000..b4d6de0 --- /dev/null +++ b/gdm-xdmcp-disconnect.patch @@ -0,0 +1,189 @@ +From 650465cb691a0eb52a84b0ff3eea64ac82168a43 Mon Sep 17 00:00:00 2001 +From: Vincent Untz +Date: Thu, 03 Feb 2011 20:52:49 +0000 +Subject: greeter: inform daemon when user disconnects + +This is so the daemon knows the user is intentionally +disconnecting and it's not just the greeter tanking. +--- +Index: gdm-2.32.0/gui/simple-greeter/gdm-greeter-login-window.c +=================================================================== +--- gdm-2.32.0.orig/gui/simple-greeter/gdm-greeter-login-window.c ++++ gdm-2.32.0/gui/simple-greeter/gdm-greeter-login-window.c +@@ -143,7 +143,6 @@ enum { + QUERY_ANSWER, + START_SESSION, + USER_SELECTED, +- DISCONNECTED, + CANCELLED, + LAST_SIGNAL + }; +@@ -1519,16 +1518,6 @@ gdm_greeter_login_window_class_init (Gdm + NULL, + NULL, + g_cclosure_marshal_VOID__VOID, +- G_TYPE_NONE, +- 0); +- signals [DISCONNECTED] = +- g_signal_new ("disconnected", +- G_TYPE_FROM_CLASS (object_class), +- G_SIGNAL_RUN_LAST, +- G_STRUCT_OFFSET (GdmGreeterLoginWindowClass, disconnected), +- NULL, +- NULL, +- g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, + 0); + signals [START_SESSION] = +Index: gdm-2.32.0/gui/simple-greeter/gdm-greeter-login-window.h +=================================================================== +--- gdm-2.32.0.orig/gui/simple-greeter/gdm-greeter-login-window.h ++++ gdm-2.32.0/gui/simple-greeter/gdm-greeter-login-window.h +@@ -56,7 +56,6 @@ typedef struct + void (* user_selected) (GdmGreeterLoginWindow *login_window, + const char *text); + void (* cancelled) (GdmGreeterLoginWindow *login_window); +- void (* disconnected) (GdmGreeterLoginWindow *login_window); + void (* start_session) (GdmGreeterLoginWindow *login_window); + + } GdmGreeterLoginWindowClass; +Index: gdm-2.32.0/gui/simple-greeter/gdm-greeter-panel.c +=================================================================== +--- gdm-2.32.0.orig/gui/simple-greeter/gdm-greeter-panel.c ++++ gdm-2.32.0/gui/simple-greeter/gdm-greeter-panel.c +@@ -105,6 +105,7 @@ enum { + LANGUAGE_SELECTED, + LAYOUT_SELECTED, + SESSION_SELECTED, ++ DISCONNECTED, + NUMBER_OF_SIGNALS + }; + +@@ -633,9 +634,10 @@ do_system_stop (void) + } + + static void +-do_disconnect (void) ++do_disconnect (GtkWidget *widget, ++ GdmGreeterPanel *panel) + { +- gtk_main_quit (); ++ g_signal_emit (panel, signals[DISCONNECTED], 0); + } + + static gboolean +@@ -818,7 +820,7 @@ setup_panel (GdmGreeterPanel *panel) + + if (! panel->priv->display_is_local) { + menu_item = gtk_menu_item_new_with_label ("Disconnect"); +- g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_disconnect), NULL); ++ g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (do_disconnect), panel); + gtk_menu_shell_append (GTK_MENU_SHELL (panel->priv->shutdown_menu), menu_item); + } else if (get_show_restart_buttons (panel)) { + if (can_suspend ()) { +@@ -982,6 +984,17 @@ gdm_greeter_panel_class_init (GdmGreeter + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); + ++ signals [DISCONNECTED] = ++ g_signal_new ("disconnected", ++ G_TYPE_FROM_CLASS (object_class), ++ G_SIGNAL_RUN_LAST, ++ G_STRUCT_OFFSET (GdmGreeterPanelClass, disconnected), ++ NULL, ++ NULL, ++ g_cclosure_marshal_VOID__VOID, ++ G_TYPE_NONE, ++ 0); ++ + g_type_class_add_private (klass, sizeof (GdmGreeterPanelPrivate)); + } + +Index: gdm-2.32.0/gui/simple-greeter/gdm-greeter-panel.h +=================================================================== +--- gdm-2.32.0.orig/gui/simple-greeter/gdm-greeter-panel.h ++++ gdm-2.32.0/gui/simple-greeter/gdm-greeter-panel.h +@@ -53,6 +53,7 @@ typedef struct + + void (* session_selected) (GdmGreeterPanel *panel, + const char *text); ++ void (* disconnected) (GdmGreeterPanel *panel); + } GdmGreeterPanelClass; + + GType gdm_greeter_panel_get_type (void); +Index: gdm-2.32.0/gui/simple-greeter/gdm-greeter-session.c +=================================================================== +--- gdm-2.32.0.orig/gui/simple-greeter/gdm-greeter-session.c ++++ gdm-2.32.0/gui/simple-greeter/gdm-greeter-session.c +@@ -296,8 +296,7 @@ on_cancelled (GdmGreeterLoginWindow *log + } + + static void +-on_disconnected (GdmGreeterLoginWindow *login_window, +- GdmGreeterSession *session) ++on_disconnected (GdmGreeterSession *session) + { + gdm_greeter_client_call_disconnect (session->priv->client); + } +@@ -380,6 +379,11 @@ toggle_panel (GdmGreeterSession *session + G_CALLBACK (on_select_session), + session); + ++ g_signal_connect_swapped (session->priv->panel, ++ "disconnected", ++ G_CALLBACK (on_disconnected), ++ session); ++ + gtk_widget_show (session->priv->panel); + } else { + gtk_widget_destroy (session->priv->panel); +@@ -427,10 +431,6 @@ toggle_login_window (GdmGreeterSession * + G_CALLBACK (on_cancelled), + session); + g_signal_connect (session->priv->login_window, +- "disconnected", +- G_CALLBACK (on_disconnected), +- session); +- g_signal_connect (session->priv->login_window, + "start-session", + G_CALLBACK (on_start_session), + session); +Index: gdm-2.32.0/daemon/gdm-simple-slave.c +=================================================================== +--- gdm-2.32.0.orig/daemon/gdm-simple-slave.c ++++ gdm-2.32.0/daemon/gdm-simple-slave.c +@@ -921,6 +921,23 @@ on_greeter_connected (GdmGreeterServer * + } + + static void ++on_greeter_disconnected (GdmGreeterServer *greeter_server, ++ GdmSimpleSlave *slave) ++{ ++ gboolean display_is_local; ++ ++ g_debug ("GdmSimpleSlave: Greeter disconnected"); ++ ++ g_object_get (slave, ++ "display-is-local", &display_is_local, ++ NULL); ++ ++ if ( ! display_is_local) { ++ gdm_slave_stopped (GDM_SLAVE (slave)); ++ } ++} ++ ++static void + on_start_session_when_ready (GdmGreeterServer *session, + GdmSimpleSlave *slave) + { +@@ -1116,6 +1133,10 @@ start_greeter (GdmSimpleSlave *slave) + G_CALLBACK (on_greeter_connected), + slave); + g_signal_connect (slave->priv->greeter_server, ++ "disconnected", ++ G_CALLBACK (on_greeter_disconnected), ++ slave); ++ g_signal_connect (slave->priv->greeter_server, + "cancelled", + G_CALLBACK (on_greeter_cancel), + slave); diff --git a/gdm.changes b/gdm.changes index 64f791b..d860804 100644 --- a/gdm.changes +++ b/gdm.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Feb 15 13:31:41 CET 2011 - vuntz@opensuse.org + +- Add gdm-xdmcp-disconnect.patch: the Disconnect option should tell + the gdm daemon to disconnect, instead of just making the greeter + exit. And the daemon should exit. Taken from git. Fix bnc#669392. + ------------------------------------------------------------------- Sun Feb 13 14:08:04 CET 2011 - vuntz@opensuse.org diff --git a/gdm.spec b/gdm.spec index 5fc659a..35a339b 100644 --- a/gdm.spec +++ b/gdm.spec @@ -69,6 +69,8 @@ Patch8: gdm-sysconfig-settings.patch Patch9: gdm-passwordless-login.patch # PATCH-NEEDS-REBASE gdm-domain-logon.patch hpj@novell.com -- Add UI to log in a specific domain (was: PATCH_FEATURE-SLED bnc#627575) Patch10: gdm-domain-logon.patch +# PATCH-FIX-UPSTREAM gdm-xdmcp-disconnect.patch vuntz@opensuse.org -- Make XDMCP disconnect work, taken from git. +Patch11: gdm-xdmcp-disconnect.patch # PATCH-FIX-UPSTREAM gdm-greeter-greater-ui.patch bnc436431 bgo560508 vuntz@novell.com -- Improve the layout of the greeter. Note: the patch contains a patched glade file *and* the result glade file (for reference only, in case we need to rebase the patch) Patch15: gdm-greeter-greater-ui.patch # PATCH-FIX-UPSTREAM gdm-always-reflect-keyboard-layout.patch bnc438159 bgo561771 hpj@novell.com -- Make keyboard selector not neglect to apply the selected keyboard in some situations. @@ -159,6 +161,7 @@ translation-update-upstream %patch8 -p1 %patch9 -p1 #%patch10 -p1 +%patch11 -p1 %patch15 -p1 %patch18 -p1 %patch20 -p1