1
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
3
* Copyright (C) 2007 William Jon McCann <mccann@jhu.edu>
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.
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.
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.
30
#include <sys/types.h>
31
#include <sys/socket.h>
34
#include <glib/gi18n.h>
35
#include <glib-object.h>
37
#include "gdm-display.h"
38
#include "gdm-static-factory-display.h"
39
#include "gdm-static-factory-display-glue.h"
41
#define GDM_STATIC_FACTORY_DISPLAY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_STATIC_FACTORY_DISPLAY, GdmStaticFactoryDisplayPrivate))
43
#define DEFAULT_SLAVE_COMMAND LIBEXECDIR"/gdm-factory-slave"
45
struct GdmStaticFactoryDisplayPrivate
54
static void gdm_static_factory_display_class_init (GdmStaticFactoryDisplayClass *klass);
55
static void gdm_static_factory_display_init (GdmStaticFactoryDisplay *static_factory_display);
56
static void gdm_static_factory_display_finalize (GObject *object);
58
G_DEFINE_TYPE (GdmStaticFactoryDisplay, gdm_static_factory_display, GDM_TYPE_DISPLAY)
61
gdm_static_factory_display_add_user_authorization (GdmDisplay *display,
66
return GDM_DISPLAY_CLASS (gdm_static_factory_display_parent_class)->add_user_authorization (display, username, filename, error);
70
gdm_static_factory_display_remove_user_authorization (GdmDisplay *display,
74
return GDM_DISPLAY_CLASS (gdm_static_factory_display_parent_class)->remove_user_authorization (display, username, error);
78
gdm_static_factory_display_create_authority (GdmDisplay *display)
80
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
82
GDM_DISPLAY_CLASS (gdm_static_factory_display_parent_class)->create_authority (display);
88
gdm_static_factory_display_manage (GdmDisplay *display)
90
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
92
GDM_DISPLAY_CLASS (gdm_static_factory_display_parent_class)->manage (display);
98
gdm_static_factory_display_finish (GdmDisplay *display)
100
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
102
GDM_DISPLAY_CLASS (gdm_static_factory_display_parent_class)->finish (display);
104
/* restart static displays */
105
gdm_display_unmanage (display);
106
gdm_display_manage (display);
112
gdm_static_factory_display_unmanage (GdmDisplay *display)
114
g_return_val_if_fail (GDM_IS_DISPLAY (display), FALSE);
116
GDM_DISPLAY_CLASS (gdm_static_factory_display_parent_class)->unmanage (display);
122
gdm_static_factory_display_set_property (GObject *object,
129
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
135
gdm_static_factory_display_get_property (GObject *object,
142
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
148
gdm_static_factory_display_constructor (GType type,
149
guint n_construct_properties,
150
GObjectConstructParam *construct_properties)
152
GdmStaticFactoryDisplay *display;
154
display = GDM_STATIC_FACTORY_DISPLAY (G_OBJECT_CLASS (gdm_static_factory_display_parent_class)->constructor (type,
155
n_construct_properties,
156
construct_properties));
158
return G_OBJECT (display);
162
gdm_static_factory_display_class_init (GdmStaticFactoryDisplayClass *klass)
164
GObjectClass *object_class = G_OBJECT_CLASS (klass);
165
GdmDisplayClass *display_class = GDM_DISPLAY_CLASS (klass);
167
object_class->get_property = gdm_static_factory_display_get_property;
168
object_class->set_property = gdm_static_factory_display_set_property;
169
object_class->constructor = gdm_static_factory_display_constructor;
170
object_class->finalize = gdm_static_factory_display_finalize;
172
display_class->create_authority = gdm_static_factory_display_create_authority;
173
display_class->add_user_authorization = gdm_static_factory_display_add_user_authorization;
174
display_class->remove_user_authorization = gdm_static_factory_display_remove_user_authorization;
175
display_class->manage = gdm_static_factory_display_manage;
176
display_class->finish = gdm_static_factory_display_finish;
177
display_class->unmanage = gdm_static_factory_display_unmanage;
179
g_type_class_add_private (klass, sizeof (GdmStaticFactoryDisplayPrivate));
181
dbus_g_object_type_install_info (GDM_TYPE_STATIC_FACTORY_DISPLAY, &dbus_glib_gdm_static_factory_display_object_info);
185
gdm_static_factory_display_init (GdmStaticFactoryDisplay *static_factory_display)
188
static_factory_display->priv = GDM_STATIC_FACTORY_DISPLAY_GET_PRIVATE (static_factory_display);
192
gdm_static_factory_display_finalize (GObject *object)
194
GdmStaticFactoryDisplay *static_factory_display;
196
g_return_if_fail (object != NULL);
197
g_return_if_fail (GDM_IS_STATIC_FACTORY_DISPLAY (object));
199
static_factory_display = GDM_STATIC_FACTORY_DISPLAY (object);
201
g_return_if_fail (static_factory_display->priv != NULL);
203
G_OBJECT_CLASS (gdm_static_factory_display_parent_class)->finalize (object);
207
gdm_static_factory_display_new (int display_number)
212
x11_display = g_strdup_printf (":%d", display_number);
213
object = g_object_new (GDM_TYPE_STATIC_FACTORY_DISPLAY,
214
"slave-command", DEFAULT_SLAVE_COMMAND,
215
"x11-display-number", display_number,
216
"x11-display-name", x11_display,
218
g_free (x11_display);
220
return GDM_DISPLAY (object);