[gdm] greeter: inform daemon when user disconnects
- From: Ray Strode <halfline src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gdm] greeter: inform daemon when user disconnects
- Date: Thu, 3 Feb 2011 22:34:55 +0000 (UTC)
commit 650465cb691a0eb52a84b0ff3eea64ac82168a43
Author: Vincent Untz <vuntz gnome org>
Date: Thu Feb 3 15:52:49 2011 -0500
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.
gui/simple-greeter/gdm-greeter-login-window.c | 11 -----------
gui/simple-greeter/gdm-greeter-login-window.h | 1 -
gui/simple-greeter/gdm-greeter-panel.c | 25 ++++++++++++++++++++++---
gui/simple-greeter/gdm-greeter-panel.h | 1 +
gui/simple-greeter/gdm-greeter-session.c | 12 ++++++------
5 files changed, 29 insertions(+), 21 deletions(-)
---
diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c
index 9a21edd..6dc201a 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.c
+++ b/gui/simple-greeter/gdm-greeter-login-window.c
@@ -143,7 +143,6 @@ enum {
QUERY_ANSWER,
START_SESSION,
USER_SELECTED,
- DISCONNECTED,
CANCELLED,
LAST_SIGNAL
};
@@ -1571,16 +1570,6 @@ gdm_greeter_login_window_class_init (GdmGreeterLoginWindowClass *klass)
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] =
g_signal_new ("start-session",
G_TYPE_FROM_CLASS (object_class),
diff --git a/gui/simple-greeter/gdm-greeter-login-window.h b/gui/simple-greeter/gdm-greeter-login-window.h
index 504b075..a5e68ae 100644
--- a/gui/simple-greeter/gdm-greeter-login-window.h
+++ b/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;
diff --git a/gui/simple-greeter/gdm-greeter-panel.c b/gui/simple-greeter/gdm-greeter-panel.c
index 027c3e1..884102c 100644
--- a/gui/simple-greeter/gdm-greeter-panel.c
+++ b/gui/simple-greeter/gdm-greeter-panel.c
@@ -98,6 +98,13 @@ enum {
PROP_DISPLAY_IS_LOCAL
};
+enum {
+ DISCONNECTED,
+ NUMBER_OF_SIGNALS
+};
+
+static guint signals [NUMBER_OF_SIGNALS] = { 0, };
+
static void gdm_greeter_panel_class_init (GdmGreeterPanelClass *klass);
static void gdm_greeter_panel_init (GdmGreeterPanel *greeter_panel);
static void gdm_greeter_panel_finalize (GObject *object);
@@ -746,9 +753,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
@@ -892,7 +900,7 @@ add_shutdown_menu (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 ()) {
@@ -1120,6 +1128,17 @@ gdm_greeter_panel_class_init (GdmGreeterPanelClass *klass)
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));
}
diff --git a/gui/simple-greeter/gdm-greeter-panel.h b/gui/simple-greeter/gdm-greeter-panel.h
index 1354371..d383b18 100644
--- a/gui/simple-greeter/gdm-greeter-panel.h
+++ b/gui/simple-greeter/gdm-greeter-panel.h
@@ -50,6 +50,7 @@ typedef struct
void (* session_selected) (GdmGreeterPanel *panel,
const char *text);
+ void (* disconnected) (GdmGreeterPanel *panel);
} GdmGreeterPanelClass;
GType gdm_greeter_panel_get_type (void);
diff --git a/gui/simple-greeter/gdm-greeter-session.c b/gui/simple-greeter/gdm-greeter-session.c
index 3225105..3d2a067 100644
--- a/gui/simple-greeter/gdm-greeter-session.c
+++ b/gui/simple-greeter/gdm-greeter-session.c
@@ -271,8 +271,7 @@ on_cancelled (GdmGreeterLoginWindow *login_window,
}
static void
-on_disconnected (GdmGreeterLoginWindow *login_window,
- GdmGreeterSession *session)
+on_disconnected (GdmGreeterSession *session)
{
gdm_greeter_client_call_disconnect (session->priv->client);
}
@@ -350,6 +349,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);
@@ -397,10 +401,6 @@ toggle_login_window (GdmGreeterSession *session,
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);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]