Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.4
gdm.import4250
gdm-xdmcp-disconnect.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gdm-xdmcp-disconnect.patch of Package gdm.import4250
From 650465cb691a0eb52a84b0ff3eea64ac82168a43 Mon Sep 17 00:00:00 2001 From: Vincent Untz <vuntz@gnome.org> 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);
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor