summaryrefslogtreecommitdiff
path: root/daemon/gdm-server.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gdm-server.c')
-rw-r--r--daemon/gdm-server.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c
index e973c984..0909e014 100644
--- a/daemon/gdm-server.c
+++ b/daemon/gdm-server.c
@@ -100,6 +100,8 @@ enum {
enum {
READY,
+ EXITED,
+ DIED,
LAST_SIGNAL
};
@@ -575,6 +577,14 @@ server_child_watch (GPid pid,
: WIFSIGNALED (status) ? WTERMSIG (status)
: -1);
+ if (WIFEXITED (status)) {
+ int code = WEXITSTATUS (status);
+ g_signal_emit (server, signals [EXITED], 0, code);
+ } else if (WIFSIGNALED (status)) {
+ int num = WTERMSIG (status);
+ g_signal_emit (server, signals [DIED], 0, num);
+ }
+
g_spawn_close_pid (server->priv->pid);
server->priv->pid = -1;
}
@@ -853,6 +863,28 @@ gdm_server_class_init (GdmServerClass *klass)
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE,
0);
+ signals [EXITED] =
+ g_signal_new ("exited",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmServerClass, exited),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_INT);
+ signals [DIED] =
+ g_signal_new ("died",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (GdmServerClass, died),
+ NULL,
+ NULL,
+ g_cclosure_marshal_VOID__INT,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_INT);
g_object_class_install_property (object_class,
PROP_DISPLAY_NAME,