OBS-URL: https://build.opensuse.org/request/show/61251 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gdm?expand=0&rev=154
190 lines
8.0 KiB
Diff
190 lines
8.0 KiB
Diff
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);
|