~ubuntu-branches/ubuntu/oneiric/gdm3/oneiric

« back to all changes in this revision

Viewing changes to daemon/gdm-greeter-session.c

  • Committer: Bazaar Package Importer
  • Author(s): Josselin Mouette
  • Date: 2010-03-25 20:02:20 UTC
  • Revision ID: james.westby@ubuntu.com-20100325200220-12cap62s6p304nuh
Tags: upstream-2.29.92
ImportĀ upstreamĀ versionĀ 2.29.92

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
 
2
 *
 
3
 * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
 
4
 *
 
5
 * This program is free software; you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License as published by
 
7
 * the Free Software Foundation; either version 2 of the License, or
 
8
 * (at your option) any later version.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program; if not, write to the Free Software
 
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
18
 *
 
19
 */
 
20
 
 
21
#include "config.h"
 
22
 
 
23
#include <stdlib.h>
 
24
#include <stdio.h>
 
25
#include <fcntl.h>
 
26
#include <unistd.h>
 
27
#include <string.h>
 
28
#include <sys/types.h>
 
29
#include <sys/wait.h>
 
30
#include <errno.h>
 
31
#include <ctype.h>
 
32
#include <pwd.h>
 
33
#include <grp.h>
 
34
#include <signal.h>
 
35
 
 
36
#include <glib.h>
 
37
#include <glib/gi18n.h>
 
38
#include <glib-object.h>
 
39
 
 
40
#include "gdm-welcome-session.h"
 
41
#include "gdm-greeter-session.h"
 
42
 
 
43
#define GDM_GREETER_SERVER_DBUS_PATH      "/org/gnome/DisplayManager/GreeterServer"
 
44
#define GDM_GREETER_SERVER_DBUS_INTERFACE "org.gnome.DisplayManager.GreeterServer"
 
45
 
 
46
#define GDM_GREETER_SESSION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_GREETER_SESSION, GdmGreeterSessionPrivate))
 
47
 
 
48
struct GdmGreeterSessionPrivate
 
49
{
 
50
        gpointer dummy;
 
51
};
 
52
 
 
53
enum {
 
54
        PROP_0,
 
55
};
 
56
 
 
57
static void     gdm_greeter_session_class_init    (GdmGreeterSessionClass *klass);
 
58
static void     gdm_greeter_session_init  (GdmGreeterSession      *greeter_session);
 
59
static void     gdm_greeter_session_finalize      (GObject         *object);
 
60
 
 
61
G_DEFINE_TYPE (GdmGreeterSession, gdm_greeter_session, GDM_TYPE_WELCOME_SESSION)
 
62
 
 
63
static void
 
64
gdm_greeter_session_set_property (GObject      *object,
 
65
                                  guint         prop_id,
 
66
                                  const GValue *value,
 
67
                                  GParamSpec   *pspec)
 
68
{
 
69
        switch (prop_id) {
 
70
        default:
 
71
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 
72
                break;
 
73
        }
 
74
}
 
75
 
 
76
static void
 
77
gdm_greeter_session_get_property (GObject    *object,
 
78
                                  guint       prop_id,
 
79
                                  GValue     *value,
 
80
                                  GParamSpec *pspec)
 
81
{
 
82
        switch (prop_id) {
 
83
        default:
 
84
                G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 
85
                break;
 
86
        }
 
87
}
 
88
 
 
89
static GObject *
 
90
gdm_greeter_session_constructor (GType                  type,
 
91
                                 guint                  n_construct_properties,
 
92
                                 GObjectConstructParam *construct_properties)
 
93
{
 
94
        GdmGreeterSession      *greeter_session;
 
95
        GdmGreeterSessionClass *klass;
 
96
 
 
97
        klass = GDM_GREETER_SESSION_CLASS (g_type_class_peek (GDM_TYPE_GREETER_SESSION));
 
98
 
 
99
        greeter_session = GDM_GREETER_SESSION (G_OBJECT_CLASS (gdm_greeter_session_parent_class)->constructor (type,
 
100
                                                                                                               n_construct_properties,
 
101
                                                                                                               construct_properties));
 
102
 
 
103
        return G_OBJECT (greeter_session);
 
104
}
 
105
 
 
106
static void
 
107
gdm_greeter_session_class_init (GdmGreeterSessionClass *klass)
 
108
{
 
109
        GObjectClass    *object_class = G_OBJECT_CLASS (klass);
 
110
 
 
111
        object_class->get_property = gdm_greeter_session_get_property;
 
112
        object_class->set_property = gdm_greeter_session_set_property;
 
113
        object_class->constructor = gdm_greeter_session_constructor;
 
114
        object_class->finalize = gdm_greeter_session_finalize;
 
115
 
 
116
        g_type_class_add_private (klass, sizeof (GdmGreeterSessionPrivate));
 
117
}
 
118
 
 
119
static void
 
120
gdm_greeter_session_init (GdmGreeterSession *greeter_session)
 
121
{
 
122
 
 
123
        greeter_session->priv = GDM_GREETER_SESSION_GET_PRIVATE (greeter_session);
 
124
}
 
125
 
 
126
static void
 
127
gdm_greeter_session_finalize (GObject *object)
 
128
{
 
129
        GdmGreeterSession *greeter_session;
 
130
 
 
131
        g_return_if_fail (object != NULL);
 
132
        g_return_if_fail (GDM_IS_GREETER_SESSION (object));
 
133
 
 
134
        greeter_session = GDM_GREETER_SESSION (object);
 
135
 
 
136
        g_return_if_fail (greeter_session->priv != NULL);
 
137
 
 
138
        G_OBJECT_CLASS (gdm_greeter_session_parent_class)->finalize (object);
 
139
}
 
140
 
 
141
GdmGreeterSession *
 
142
gdm_greeter_session_new (const char *display_name,
 
143
                         const char *display_device,
 
144
                         const char *display_hostname,
 
145
                         gboolean    display_is_local)
 
146
{
 
147
        GObject *object;
 
148
 
 
149
        object = g_object_new (GDM_TYPE_GREETER_SESSION,
 
150
                               "command", BINDIR "/gnome-session --autostart="DATADIR"/gdm/autostart/LoginWindow/",
 
151
                               "server-dbus-path", GDM_GREETER_SERVER_DBUS_PATH,
 
152
                               "server-dbus-interface", GDM_GREETER_SERVER_DBUS_INTERFACE,
 
153
                               "server-env-var-name", "GDM_GREETER_DBUS_ADDRESS",
 
154
                               "register-ck-session", TRUE,
 
155
                               "x11-display-name", display_name,
 
156
                               "x11-display-device", display_device,
 
157
                               "x11-display-hostname", display_hostname,
 
158
                               "x11-display-is-local", display_is_local,
 
159
                               "runtime-dir", GDM_SCREENSHOT_DIR,
 
160
                               NULL);
 
161
 
 
162
        return GDM_GREETER_SESSION (object);
 
163
}