]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Don't subclass session - we don't know the session type until after authentication
authorRobert Ancell <robert.ancell@canonical.com>
Tue, 23 Jul 2013 04:55:26 +0000 (16:55 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Tue, 23 Jul 2013 04:55:26 +0000 (16:55 +1200)
25 files changed:
src/Makefile.am
src/display-server.c
src/display-server.h
src/greeter.c
src/greeter.h
src/mir-greeter.c [deleted file]
src/mir-greeter.h [deleted file]
src/mir-server.c
src/mir-session.c [deleted file]
src/mir-session.h [deleted file]
src/seat-unity.c
src/seat-xdmcp-session.c
src/seat-xlocal.c
src/seat-xremote.c
src/seat-xvnc.c
src/seat.c
src/session-config.c
src/session-config.h
src/session.c
src/session.h
src/xgreeter.c [deleted file]
src/xgreeter.h [deleted file]
src/xserver.c
src/xsession.c [deleted file]
src/xsession.h [deleted file]

index 3866c199482db4d4664b53c5e067d559a1886a5b..82bf2c1823c1118cb9d5dedbe0d5c086691ca961 100644 (file)
@@ -20,12 +20,8 @@ lightdm_SOURCES = \
        lightdm.c \
        login1.c \
        login1.h \
-       mir-greeter.c \
-       mir-greeter.h \
        mir-server.c \
        mir-server.h \
-       mir-session.c \
-       mir-session.h \
        plymouth.c \
        plymouth.h \
        privileges.c \
@@ -63,8 +59,6 @@ lightdm_SOURCES = \
        xdmcp-session.c \
        xdmcp-session.h \
        xdmcp-session-private.h \
-       xgreeter.c \
-       xgreeter.h \
        xserver-local.c \
        xserver-local.h \
        xserver-remote.c \
@@ -72,9 +66,7 @@ lightdm_SOURCES = \
        xserver-xvnc.c \
        xserver-xvnc.h \
        xserver.c \
-       xserver.h \
-       xsession.c \
-       xsession.h
+       xserver.h
 
 lightdm_CFLAGS = \
        $(LIGHTDM_CFLAGS) \
index 318c9a0bbfe070b27dd1a06ab04cb8bef9cfa937..1c5182c647259858b358d6aaddbc09d1f64b76ba 100644 (file)
@@ -92,6 +92,17 @@ display_server_real_start (DisplayServer *server)
     return TRUE;
 }
 
+void
+display_server_setup_session (DisplayServer *server, Session *session)
+{
+    return DISPLAY_SERVER_GET_CLASS (server)->setup_session (server, session);
+}
+
+static void
+display_server_real_setup_session (DisplayServer *server, Session *session)
+{
+}
+
 void
 display_server_stop (DisplayServer *server)
 {
@@ -129,6 +140,7 @@ display_server_class_init (DisplayServerClass *klass)
 {
     klass->get_vt = display_server_real_get_vt;
     klass->start = display_server_real_start;
+    klass->setup_session = display_server_real_setup_session;
     klass->stop = display_server_real_stop;
 
     g_type_class_add_private (klass, sizeof (DisplayServerPrivate));
index f6e86ca9470c41c7fbe6f34141e19ca792e4f8a9..7d40723a82c437fc479bf585e35c36d97be0ef4c 100644 (file)
 
 #include <glib-object.h>
 
+typedef struct DisplayServer DisplayServer;
+
+#include "session.h"
+
 G_BEGIN_DECLS
 
 #define DISPLAY_SERVER_TYPE (display_server_get_type())
@@ -23,11 +27,11 @@ G_BEGIN_DECLS
 
 typedef struct DisplayServerPrivate DisplayServerPrivate;
 
-typedef struct
+struct DisplayServer
 {
     GObject               parent_instance;
     DisplayServerPrivate *priv;
-} DisplayServer;
+};
 
 typedef struct
 {
@@ -38,6 +42,7 @@ typedef struct
 
     gint (*get_vt)(DisplayServer *server);
     gboolean (*start)(DisplayServer *server);
+    void (*setup_session)(DisplayServer *server, Session *session);
     void (*stop)(DisplayServer *server);
 } DisplayServerClass;
 
@@ -55,6 +60,8 @@ gboolean display_server_get_start_local_sessions (DisplayServer *server);
 
 gboolean display_server_start (DisplayServer *server);
 
+void display_server_setup_session (DisplayServer *server, Session *session);
+
 void display_server_stop (DisplayServer *server);
 
 gboolean display_server_get_is_stopping (DisplayServer *server);
index 6a796b70280d698a65441ef7d98ef01c3ceb1251..52bf5987e16f7e9242f4716540a9634b1317d611 100644 (file)
@@ -94,6 +94,12 @@ typedef enum
 
 static gboolean read_cb (GIOChannel *source, GIOCondition condition, gpointer data);
 
+Greeter *
+greeter_new (void)
+{
+    return g_object_new (GREETER_TYPE, NULL);
+}
+
 void
 greeter_set_pam_services (Greeter *greeter, const gchar *pam_service, const gchar *autologin_pam_service)
 {
index aa9fbc8ea1dafa0309d9969d812c49bc185729b6..db60e3c24a29098f6e92c4868b4187897e87c6d2 100644 (file)
@@ -40,6 +40,8 @@ typedef struct
 
 GType greeter_get_type (void);
 
+Greeter *greeter_new (void);
+
 void greeter_set_pam_services (Greeter *greeter, const gchar *pam_service, const gchar *autologin_pam_service);
 
 void greeter_set_allow_guest (Greeter *greeter, gboolean allow_guest);
diff --git a/src/mir-greeter.c b/src/mir-greeter.c
deleted file mode 100644 (file)
index e85ad49..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2013 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#include "mir-greeter.h"
-
-G_DEFINE_TYPE (MirGreeter, mir_greeter, GREETER_TYPE);
-
-MirGreeter *
-mir_greeter_new (void)
-{
-    return g_object_new (MIR_GREETER_TYPE, NULL);
-}
-
-static void
-mir_greeter_init (MirGreeter *session)
-{
-}
-
-static void
-mir_greeter_class_init (MirGreeterClass *klass)
-{
-}
diff --git a/src/mir-greeter.h b/src/mir-greeter.h
deleted file mode 100644 (file)
index 7a74bd4..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2013 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#ifndef MIR_GREETER_H_
-#define MIR_GREETER_H_
-
-#include "greeter.h"
-
-G_BEGIN_DECLS
-
-#define MIR_GREETER_TYPE (mir_greeter_get_type())
-#define MIR_GREETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIR_GREETER_TYPE, MirGreeter))
-
-typedef struct MirGreeterPrivate MirGreeterPrivate;
-
-typedef struct
-{
-    Greeter          parent_instance;
-    MirGreeterPrivate *priv;
-} MirGreeter;
-
-typedef struct
-{
-    GreeterClass parent_class;
-} MirGreeterClass;
-
-GType mir_greeter_get_type (void);
-
-MirGreeter *mir_greeter_new (void);
-
-G_END_DECLS
-
-#endif /* MIR_GREETER_H_ */
index b9469a3a92e2b1c643eab4998ebc6b1abce51bcf..65617a8cf43c8165272125a4e6cdc49dcebb7460 100644 (file)
@@ -12,7 +12,6 @@
 #include <string.h>
 
 #include "mir-server.h"
-#include "mir-session.h"
 
 struct MirServerPrivate
 {  
@@ -40,10 +39,6 @@ mir_server_init (MirServer *server)
 static void
 mir_server_finalize (GObject *object)
 {
-    MirServer *self;
-
-    self = MIR_SERVER (object);
-
     G_OBJECT_CLASS (mir_server_parent_class)->finalize (object);
 }
 
diff --git a/src/mir-session.c b/src/mir-session.c
deleted file mode 100644 (file)
index 79d8734..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#include "mir-session.h"
-#include "mir-server.h"
-
-G_DEFINE_TYPE (MirSession, mir_session, SESSION_TYPE);
-
-MirSession *
-mir_session_new (void)
-{
-    MirSession *session;
-
-    session = g_object_new (MIR_SESSION_TYPE, NULL);
-    session_set_log_file (SESSION (session), ".session-errors");
-
-    return session;
-}
-
-static void
-mir_session_init (MirSession *session)
-{
-}
-
-static void
-mir_session_class_init (MirSessionClass *klass)
-{
-}
diff --git a/src/mir-session.h b/src/mir-session.h
deleted file mode 100644 (file)
index d8b87d3..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#ifndef MIR_SESSION_H_
-#define MIR_SESSION_H_
-
-#include "session.h"
-
-G_BEGIN_DECLS
-
-#define MIR_SESSION_TYPE (mir_session_get_type())
-#define MIR_SESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MIR_SESSION_TYPE, MirSession))
-
-typedef struct MirSessionPrivate MirSessionPrivate;
-
-typedef struct
-{
-    Session            parent_instance;
-    MirSessionPrivate *priv;
-} MirSession;
-
-typedef struct
-{
-    SessionClass parent_class;
-} MirSessionClass;
-
-GType mir_session_get_type (void);
-
-MirSession *mir_session_new (void);
-
-G_END_DECLS
-
-#endif /* MIR_SESSION_H_ */
index c4736104ba45f56f0c352732956faf82ca30e805..51434581c36c60f7453640c6c41042638b5023b0 100644 (file)
@@ -17,8 +17,6 @@
 #include "seat-unity.h"
 #include "configuration.h"
 #include "xserver-local.h"
-#include "xgreeter.h"
-#include "xsession.h"
 #include "mir-server.h"
 #include "vt.h"
 #include "plymouth.h"
@@ -491,23 +489,23 @@ seat_unity_create_display_server (Seat *seat, const gchar *session_type)
 static Greeter *
 seat_unity_create_greeter_session (Seat *seat)
 {
-    XGreeter *greeter_session;
+    Greeter *greeter_session;
 
-    greeter_session = xgreeter_new ();
+    greeter_session = greeter_new ();
     session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");
 
-    return GREETER (greeter_session);
+    return greeter_session;
 }
 
 static Session *
 seat_unity_create_session (Seat *seat)
 {
-    XSession *session;
+    Session *session;
 
-    session = xsession_new ();
-    session_set_env (SESSION (session), "XDG_SEAT", "seat0");
+    session = session_new ();
+    session_set_env (session, "XDG_SEAT", "seat0");
 
-    return SESSION (session);
+    return session;
 }
 
 static void
index 930dceb2ed56d0cfeaf2efd2e32bb9eec6d470bf..66b482a7aebc38d76493e4c632b5bc9e69ed0d46 100644 (file)
@@ -13,8 +13,6 @@
 
 #include "seat-xdmcp-session.h"
 #include "xserver-remote.h"
-#include "xgreeter.h"
-#include "xsession.h"
 
 struct SeatXDMCPSessionPrivate
 {
@@ -56,18 +54,6 @@ seat_xdmcp_session_create_display_server (Seat *seat, const gchar *session_type)
     return DISPLAY_SERVER (xserver);
 }
 
-static Greeter *
-seat_xdmcp_session_create_greeter_session (Seat *seat)
-{
-    return GREETER (xgreeter_new ());
-}
-
-static Session *
-seat_xdmcp_session_create_session (Seat *seat)
-{
-    return SESSION (xsession_new ());
-}
-
 static void
 seat_xdmcp_session_init (SeatXDMCPSession *seat)
 {
@@ -93,8 +79,6 @@ seat_xdmcp_session_class_init (SeatXDMCPSessionClass *klass)
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
     seat_class->create_display_server = seat_xdmcp_session_create_display_server;
-    seat_class->create_greeter_session = seat_xdmcp_session_create_greeter_session;
-    seat_class->create_session = seat_xdmcp_session_create_session;
     object_class->finalize = seat_xdmcp_session_finalize;
 
     g_type_class_add_private (klass, sizeof (SeatXDMCPSessionPrivate));
index 4129b919e32fccaca5856680685420d9eb04f989..bf63d658262583e9216fe45ce8d6e89204b370bf 100644 (file)
@@ -14,8 +14,6 @@
 #include "seat-xlocal.h"
 #include "configuration.h"
 #include "xserver-local.h"
-#include "xgreeter.h"
-#include "xsession.h"
 #include "mir-server.h"
 #include "vt.h"
 
@@ -124,23 +122,23 @@ seat_xlocal_create_display_server (Seat *seat, const gchar *session_type)
 static Greeter *
 seat_xlocal_create_greeter_session (Seat *seat)
 {
-    XGreeter *greeter_session;
+    Greeter *greeter_session;
 
-    greeter_session = xgreeter_new ();
+    greeter_session = SEAT_CLASS (seat_xlocal_parent_class)->create_greeter_session (seat);
     session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");
 
-    return GREETER (greeter_session);
+    return greeter_session;
 }
 
 static Session *
 seat_xlocal_create_session (Seat *seat)
 {
-    XSession *session;
+    Session *session;
 
-    session = xsession_new ();
+    session = SEAT_CLASS (seat_xlocal_parent_class)->create_session (seat);
     session_set_env (SESSION (session), "XDG_SEAT", "seat0");
 
-    return SESSION (session);
+    return session;
 }
 
 static void
index e06950f40a3978d1ada916f028d8e00f276fb297..f4452b65fcbf43dec1819e3916c662b5319ed867 100644 (file)
@@ -14,8 +14,6 @@
 #include "seat-xremote.h"
 #include "configuration.h"
 #include "xserver-remote.h"
-#include "xgreeter.h"
-#include "xsession.h"
 
 G_DEFINE_TYPE (SeatXRemote, seat_xremote, SEAT_TYPE);
 
@@ -54,18 +52,23 @@ seat_xremote_create_display_server (Seat *seat, const gchar *session_type)
 static Greeter *
 seat_xremote_create_greeter_session (Seat *seat)
 {
-    XGreeter *greeter_session;
+    Greeter *greeter_session;
 
-    greeter_session = xgreeter_new ();
+    greeter_session = SEAT_CLASS (seat_xremote_parent_class)->create_greeter_session (seat);
     session_set_env (SESSION (greeter_session), "XDG_SEAT", "seat0");
 
-    return GREETER (greeter_session);
+    return greeter_session;
 }
 
 static Session *
 seat_xremote_create_session (Seat *seat)
 {
-    return SESSION (xsession_new ());
+    Session *session;
+
+    session = SEAT_CLASS (seat_xremote_parent_class)->create_session (seat);
+    session_set_env (SESSION (session), "XDG_SEAT", "seat0");
+
+    return session;
 }
 
 static void
index 7966e6ea6bfe4ad8a4b9ff86c4ba38cf22b85e12..b85d9e16a668c72f4a8d430d02e2406af0ba3254 100644 (file)
@@ -13,8 +13,6 @@
 
 #include "seat-xvnc.h"
 #include "xserver-xvnc.h"
-#include "xgreeter.h"
-#include "xsession.h"
 #include "configuration.h"
 
 G_DEFINE_TYPE (SeatXVNC, seat_xvnc, SEAT_TYPE);
@@ -74,18 +72,6 @@ seat_xvnc_create_display_server (Seat *seat, const gchar *session_type)
     return DISPLAY_SERVER (xserver);
 }
 
-static Greeter *
-seat_xvnc_create_greeter_session (Seat *seat)
-{
-    return GREETER (xgreeter_new ());
-}
-
-static Session *
-seat_xvnc_create_session (Seat *seat)
-{
-    return SESSION (xsession_new ());
-}
-
 static void
 seat_xvnc_run_script (Seat *seat, DisplayServer *display_server, Process *script)
 {
@@ -134,8 +120,6 @@ seat_xvnc_class_init (SeatXVNCClass *klass)
     GObjectClass *object_class = G_OBJECT_CLASS (klass);
 
     seat_class->create_display_server = seat_xvnc_create_display_server;
-    seat_class->create_greeter_session = seat_xvnc_create_greeter_session;
-    seat_class->create_session = seat_xvnc_create_session;
     seat_class->run_script = seat_xvnc_run_script;
     object_class->finalize = seat_xdmcp_session_finalize;
 
index 426700b13169c36bbeed87e9f59b87a2c8da9d0a..f82ed6f2d0522e512bcdfc19a346bbe8e71d1f50 100644 (file)
@@ -711,6 +711,7 @@ create_user_session (Seat *seat, const gchar *username)
         gchar **argv;
 
         session = create_session (seat, TRUE);
+        session_set_session_type (session, session_config_get_session_type (session_config));
         session_set_env (session, "DESKTOP_SESSION", session_name);
         session_set_env (session, "GDMSESSION", session_name);
         if (language && language[0] != '\0')
@@ -751,6 +752,7 @@ create_guest_session (Seat *seat)
     }
 
     session = create_session (seat, TRUE);
+    session_set_session_type (session, session_config_get_session_type (session_config));
     session_set_do_authenticate (session, TRUE);
     session_set_is_guest (session, TRUE);
     argv = get_session_argv (session_config, seat_get_string_property (seat, "session-wrapper"));
@@ -767,6 +769,7 @@ greeter_create_session_cb (Greeter *greeter, Seat *seat)
     Session *session;
 
     session = create_session (seat, FALSE);
+    session_set_session_type (session, session_get_session_type (SESSION (greeter)));
     session_set_display_server (session, session_get_display_server (SESSION (greeter)));
 
     return g_object_ref (session);
@@ -1339,6 +1342,18 @@ seat_real_start (Seat *seat)
     return TRUE;
 }
 
+static Greeter *
+seat_real_create_greeter_session (Seat *seat)
+{
+    return greeter_new ();
+}
+
+static Session *
+seat_real_create_session (Seat *seat)
+{
+    return session_new ();
+}
+
 static void
 seat_real_set_active_session (Seat *seat, Session *session)
 {
@@ -1431,6 +1446,8 @@ seat_class_init (SeatClass *klass)
 
     klass->setup = seat_real_setup;
     klass->start = seat_real_start;
+    klass->create_greeter_session = seat_real_create_greeter_session;
+    klass->create_session = seat_real_create_session;
     klass->set_active_session = seat_real_set_active_session;
     klass->get_active_session = seat_real_get_active_session;
     klass->run_script = seat_real_run_script;
index c80530192bd1c73b93e50d55c48836ebf51e8de1..a445ca853b63a1d52b3e843a785f17d0b7feee51 100644 (file)
@@ -13,6 +13,9 @@
 
 struct SessionConfigPrivate
 {
+    /* Session type */
+    gchar *session_type;
+
     /* Command to run */
     gchar *command;
 };
@@ -42,6 +45,7 @@ session_config_new_from_file (const gchar *filename, GError **error)
 
     config = g_object_new (SESSION_CONFIG_TYPE, NULL);
     config->priv->command = command;
+    config->priv->session_type = g_key_file_get_string (desktop_file, G_KEY_FILE_DESKTOP_GROUP, "X-LightDM-Session-Type", NULL);
 
     return config;
 }
@@ -50,10 +54,16 @@ const gchar *
 session_config_get_command (SessionConfig *config)
 {
     g_return_val_if_fail (config != NULL, NULL);
-
     return config->priv->command;
 }
 
+const gchar *
+session_config_get_session_type (SessionConfig *config)
+{
+    g_return_val_if_fail (config != NULL, NULL);
+    return config->priv->session_type;
+}
+
 static void
 session_config_init (SessionConfig *config)
 {
@@ -65,6 +75,7 @@ session_config_finalize (GObject *object)
 {
     SessionConfig *self = SESSION_CONFIG (object);
 
+    g_free (self->priv->session_type);
     g_free (self->priv->command);
 
     G_OBJECT_CLASS (session_config_parent_class)->finalize (object);
index a219f47584ed7e89326ef39732491e4078bf807c..c9387306868274f0e0806badda9449b162907db3 100644 (file)
@@ -40,6 +40,8 @@ SessionConfig *session_config_new_from_file (const gchar *filename, GError **err
 
 const gchar *session_config_get_command (SessionConfig *config);
 
+const gchar *session_config_get_session_type (SessionConfig *config);
+
 G_END_DECLS
 
 #endif /* SESSION_CONFIG_H_ */
index 301663acb6ae9827c77a40c0e10ed46623ffd1a2..4c86bf854348ea11d47a6f0974bf49a0ce0b96c7 100644 (file)
@@ -119,6 +119,17 @@ struct SessionPrivate
 
 G_DEFINE_TYPE (Session, session, G_TYPE_OBJECT);
 
+Session *
+session_new (void)
+{
+    return g_object_new (SESSION_TYPE, NULL);
+}
+
+void
+session_set_session_type (Session *session, const gchar *session_type)
+{
+}
+
 const gchar *
 session_get_session_type (Session *session)
 {
@@ -476,6 +487,8 @@ session_real_start (Session *session)
 
     g_return_val_if_fail (session->priv->pid == 0, FALSE);
 
+    display_server_setup_session (session->priv->display_server, session);
+
     /* Create pipes to talk to the child */
     if (pipe (to_child_pipe) < 0 || pipe (from_child_pipe) < 0)
     {
@@ -655,6 +668,8 @@ session_real_run (Session *session)
     g_return_if_fail (session->priv->argv != NULL);
     g_return_if_fail (session->priv->pid != 0);
 
+    display_server_setup_session (session->priv->display_server, session);
+
     session->priv->command_run = TRUE;
 
     command = g_strjoinv (" ", session->priv->argv);
@@ -769,6 +784,7 @@ static void
 session_init (Session *session)
 {
     session->priv = G_TYPE_INSTANCE_GET_PRIVATE (session, SESSION_TYPE, SessionPrivate);
+    session->priv->log_filename = g_strdup (".xsession-errors");
 }
 
 static void
index fc81d289f79e5fed63ac7314f9a06cf38fa67791..d7c4b0c517d2f0130536c129ba93450c023fe265 100644 (file)
@@ -16,6 +16,8 @@
 
 #include <security/pam_appl.h>
 
+typedef struct Session Session;
+
 #include "display-server.h"
 #include "accounts.h"
 #include "xauthority.h"
@@ -29,11 +31,11 @@ G_BEGIN_DECLS
 
 typedef struct SessionPrivate SessionPrivate;
 
-typedef struct
+struct Session
 {
     GObject         parent_instance;
     SessionPrivate *priv;
-} Session;
+};
 
 typedef struct
 {
@@ -60,6 +62,10 @@ typedef enum
 
 GType session_get_type (void);
 
+Session *session_new (void);
+
+void session_set_session_type (Session *session, const gchar *session_type);
+
 const gchar *session_get_session_type (Session *session);
 
 void session_set_pam_service (Session *session, const gchar *pam_service);
diff --git a/src/xgreeter.c b/src/xgreeter.c
deleted file mode 100644 (file)
index 5840890..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2013 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include "xgreeter.h"
-#include "xserver.h"
-#include "configuration.h"
-
-G_DEFINE_TYPE (XGreeter, xgreeter, GREETER_TYPE);
-
-XGreeter *
-xgreeter_new (void)
-{
-    return g_object_new (XGREETER_TYPE, NULL);
-}
-
-static void
-setup_env (XGreeter *xgreeter)
-{
-    DisplayServer *display_server;
-    gint vt;
-
-    display_server = session_get_display_server (SESSION (xgreeter));
-
-    vt = display_server_get_vt (display_server);
-    if (vt > 0)
-    {
-        gchar *t;
-
-        t = g_strdup_printf ("/dev/tty%d", vt);
-        session_set_tty (SESSION (xgreeter), t);
-        g_free (t);
-
-        t = g_strdup_printf ("%d", vt);
-        session_set_env (SESSION (xgreeter), "XDG_VTNR", t);
-        g_free (t);
-    }
-
-    session_set_env (SESSION (xgreeter), "DISPLAY", xserver_get_address (XSERVER (display_server)));
-    session_set_tty (SESSION (xgreeter), xserver_get_address (XSERVER (display_server)));
-    session_set_xdisplay (SESSION (xgreeter), xserver_get_address (XSERVER (display_server)));
-    session_set_remote_host_name (SESSION (xgreeter), xserver_get_hostname (XSERVER (display_server)));
-    session_set_xauthority (SESSION (xgreeter),
-                            xserver_get_authority (XSERVER (display_server)),
-                            config_get_boolean (config_get_instance (), "LightDM", "user-authority-in-system-dir"));
-}
-
-static gboolean
-xgreeter_start (Session *session)
-{
-    setup_env (XGREETER (session));
-    return SESSION_CLASS (xgreeter_parent_class)->start (session);
-}
-
-static void
-xgreeter_run (Session *session)
-{
-    setup_env (XGREETER (session));
-    SESSION_CLASS (xgreeter_parent_class)->run (session);
-}
-
-static void
-xgreeter_init (XGreeter *session)
-{
-}
-
-static void
-xgreeter_class_init (XGreeterClass *klass)
-{
-    SessionClass *session_class = SESSION_CLASS (klass);
-
-    session_class->start = xgreeter_start;
-    session_class->run = xgreeter_run;
-}
diff --git a/src/xgreeter.h b/src/xgreeter.h
deleted file mode 100644 (file)
index 20e5ebc..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2013 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#ifndef XGREETER_H_
-#define XGREETER_H_
-
-#include "greeter.h"
-
-G_BEGIN_DECLS
-
-#define XGREETER_TYPE (xgreeter_get_type())
-#define XGREETER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XGREETER_TYPE, XGreeter))
-
-typedef struct XGreeterPrivate XGreeterPrivate;
-
-typedef struct
-{
-    Greeter          parent_instance;
-    XGreeterPrivate *priv;
-} XGreeter;
-
-typedef struct
-{
-    GreeterClass parent_class;
-} XGreeterClass;
-
-GType xgreeter_get_type (void);
-
-XGreeter *xgreeter_new (void);
-
-G_END_DECLS
-
-#endif /* XGREETER_H_ */
index d6ffafbf900d8a3844952061d8bfe4b635e4aa81..a465947ddd63176a9ce8cdf7b94da158235a0661 100644 (file)
@@ -14,7 +14,7 @@
 #include <xcb/xcb.h>
 
 #include "xserver.h"
-#include "xsession.h"
+#include "configuration.h"
 
 struct XServerPrivate
 {  
@@ -132,6 +132,36 @@ xserver_start (DisplayServer *display_server)
     return DISPLAY_SERVER_CLASS (xserver_parent_class)->start (display_server);
 }
 
+static void
+xserver_setup_session (DisplayServer *display_server, Session *session)
+{
+    gint vt;
+
+    display_server = session_get_display_server (session);
+
+    vt = display_server_get_vt (display_server);
+    if (vt > 0)
+    {
+        gchar *t;
+
+        t = g_strdup_printf ("/dev/tty%d", vt);
+        session_set_tty (session, t);
+        g_free (t);
+
+        t = g_strdup_printf ("%d", vt);
+        session_set_env (session, "XDG_VTNR", t);
+        g_free (t);
+    }
+
+    session_set_env (session, "DISPLAY", xserver_get_address (XSERVER (display_server)));
+    session_set_tty (session, xserver_get_address (XSERVER (display_server)));
+    session_set_xdisplay (session, xserver_get_address (XSERVER (display_server)));
+    session_set_remote_host_name (session, xserver_get_hostname (XSERVER (display_server)));
+    session_set_xauthority (session,
+                            xserver_get_authority (XSERVER (display_server)),
+                            config_get_boolean (config_get_instance (), "LightDM", "user-authority-in-system-dir"));
+}
+
 static void
 xserver_init (XServer *server)
 {
@@ -162,6 +192,7 @@ xserver_class_init (XServerClass *klass)
     DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
 
     display_server_class->start = xserver_start;
+    display_server_class->setup_session = xserver_setup_session;
     object_class->finalize = xserver_finalize;
 
     g_type_class_add_private (klass, sizeof (XServerPrivate));
diff --git a/src/xsession.c b/src/xsession.c
deleted file mode 100644 (file)
index d4eb558..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#include <errno.h>
-#include <string.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-
-#include "xsession.h"
-#include "xserver.h"
-#include "configuration.h"
-
-G_DEFINE_TYPE (XSession, xsession, SESSION_TYPE);
-
-XSession *
-xsession_new (void)
-{
-    XSession *session;
-
-    session = g_object_new (XSESSION_TYPE, NULL);
-    session_set_log_file (SESSION (session), ".xsession-errors");
-
-    return session;
-}
-
-static void
-setup_env (XSession *xsession)
-{
-    DisplayServer *display_server;
-    gint vt;
-
-    display_server = session_get_display_server (SESSION (xsession));
-
-    vt = display_server_get_vt (display_server);
-    if (vt > 0)
-    {
-        gchar *t;
-
-        t = g_strdup_printf ("/dev/tty%d", vt);
-        session_set_tty (SESSION (xsession), t);
-        g_free (t);
-
-        t = g_strdup_printf ("%d", vt);
-        session_set_env (SESSION (xsession), "XDG_VTNR", t);
-        g_free (t);
-    }
-
-    session_set_env (SESSION (xsession), "DISPLAY", xserver_get_address (XSERVER (display_server)));
-    session_set_tty (SESSION (xsession), xserver_get_address (XSERVER (display_server)));
-    session_set_xdisplay (SESSION (xsession), xserver_get_address (XSERVER (display_server)));
-    session_set_remote_host_name (SESSION (xsession), xserver_get_hostname (XSERVER (display_server)));
-    session_set_xauthority (SESSION (xsession),
-                            xserver_get_authority (XSERVER (display_server)),
-                            config_get_boolean (config_get_instance (), "LightDM", "user-authority-in-system-dir"));
-}
-
-static gboolean
-xsession_start (Session *session)
-{
-    setup_env (XSESSION (session));
-    return SESSION_CLASS (xsession_parent_class)->start (session);
-}
-
-static void
-xsession_run (Session *session)
-{
-    setup_env (XSESSION (session));
-    SESSION_CLASS (xsession_parent_class)->run (session);
-}
-
-static void
-xsession_init (XSession *session)
-{
-}
-
-static void
-xsession_class_init (XSessionClass *klass)
-{
-    SessionClass *session_class = SESSION_CLASS (klass);
-
-    session_class->start = xsession_start;
-    session_class->run = xsession_run;
-}
diff --git a/src/xsession.h b/src/xsession.h
deleted file mode 100644 (file)
index 599fe90..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2010-2011 Robert Ancell.
- * Author: Robert Ancell <robert.ancell@canonical.com>
- * 
- * This program is free software: you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation, either version 3 of the License, or (at your option) any later
- * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
- * license.
- */
-
-#ifndef XSESSION_H_
-#define XSESSION_H_
-
-#include "session.h"
-
-G_BEGIN_DECLS
-
-#define XSESSION_TYPE (xsession_get_type())
-#define XSESSION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), XSESSION_TYPE, XSession))
-
-typedef struct XSessionPrivate XSessionPrivate;
-
-typedef struct
-{
-    Session          parent_instance;
-    XSessionPrivate *priv;
-} XSession;
-
-typedef struct
-{
-    SessionClass parent_class;
-} XSessionClass;
-
-GType xsession_get_type (void);
-
-XSession *xsession_new (void);
-
-G_END_DECLS
-
-#endif /* XSESSION_H_ */