]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - src/display-server.c
Match seat configuration using globbing
[sojka/lightdm.git] / src / display-server.c
1 /*
2  * Copyright (C) 2010-2011 Robert Ancell.
3  * Author: Robert Ancell <robert.ancell@canonical.com>
4  *
5  * This program is free software: you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License as published by the Free Software
7  * Foundation, either version 3 of the License, or (at your option) any later
8  * version. See http://www.gnu.org/copyleft/gpl.html the full text of the
9  * license.
10  */
11
12 #include <config.h>
13
14 #include "display-server.h"
15
16 enum {
17     READY,
18     STOPPED,
19     LAST_SIGNAL
20 };
21 static guint signals[LAST_SIGNAL] = { 0 };
22
23 struct DisplayServerPrivate
24 {
25     /* Unique name for this display server */
26     gchar *name;
27
28     /* TRUE when being stopped */
29     gboolean stopping;
30
31     /* TRUE when the display server has stopped */
32     gboolean stopped;
33 };
34
35 static void display_server_logger_iface_init (LoggerInterface *iface);
36
37 G_DEFINE_TYPE_WITH_CODE (DisplayServer, display_server, G_TYPE_OBJECT,
38                          G_IMPLEMENT_INTERFACE (
39                              LOGGER_TYPE, display_server_logger_iface_init));
40
41 void
42 display_server_set_name (DisplayServer *server, const gchar *name)
43 {
44     g_return_if_fail (server != NULL);
45     g_free (server->priv->name);
46     server->priv->name = g_strdup (name);
47 }
48
49 const gchar *
50 display_server_get_name (DisplayServer *server)
51 {
52     g_return_val_if_fail (server != NULL, NULL);
53     return server->priv->name;
54 }
55
56 const gchar *
57 display_server_get_session_type (DisplayServer *server)
58 {
59     return DISPLAY_SERVER_GET_CLASS (server)->get_session_type (server);
60 }
61
62 gboolean
63 display_server_get_can_share (DisplayServer *server)
64 {
65     return DISPLAY_SERVER_GET_CLASS (server)->get_can_share (server);
66 }
67
68 static gboolean
69 display_server_real_get_can_share (DisplayServer *server)
70 {
71     return FALSE;
72 }
73
74 gint
75 display_server_get_vt (DisplayServer *server)
76 {
77     g_return_val_if_fail (server != NULL, -1);
78     return DISPLAY_SERVER_GET_CLASS (server)->get_vt (server);
79 }
80
81 static gint
82 display_server_real_get_vt (DisplayServer *server)
83 {
84     return -1;
85 }
86
87 gboolean
88 display_server_start (DisplayServer *server)
89 {
90     g_return_val_if_fail (server != NULL, FALSE);
91     return DISPLAY_SERVER_GET_CLASS (server)->start (server);
92 }
93
94 static gboolean
95 display_server_real_start (DisplayServer *server)
96 {
97     g_signal_emit (server, signals[READY], 0);
98     return TRUE;
99 }
100
101 void
102 display_server_connect_session (DisplayServer *server, Session *session)
103 {
104     return DISPLAY_SERVER_GET_CLASS (server)->connect_session (server, session);
105 }
106
107 static void
108 display_server_real_connect_session (DisplayServer *server, Session *session)
109 {
110 }
111
112 void
113 display_server_disconnect_session (DisplayServer *server, Session *session)
114 {
115     return DISPLAY_SERVER_GET_CLASS (server)->disconnect_session (server, session);
116 }
117
118 static void
119 display_server_real_disconnect_session (DisplayServer *server, Session *session)
120 {
121 }
122
123 void
124 display_server_stop (DisplayServer *server)
125 {
126     g_return_if_fail (server != NULL);
127
128     if (server->priv->stopping)
129         return;
130     server->priv->stopping = TRUE;
131
132     DISPLAY_SERVER_GET_CLASS (server)->stop (server);
133 }
134
135 gboolean
136 display_server_get_is_stopping (DisplayServer *server)
137 {
138     g_return_val_if_fail (server != NULL, FALSE);
139     return server->priv->stopping;
140 }
141
142 static void
143 display_server_real_stop (DisplayServer *server)
144 {
145     g_signal_emit (server, signals[STOPPED], 0);
146 }
147
148 static void
149 display_server_init (DisplayServer *server)
150 {
151     server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, DISPLAY_SERVER_TYPE, DisplayServerPrivate);
152 }
153
154 static void
155 display_server_finalize (GObject *object)
156 {
157     DisplayServer *self;
158
159     self = DISPLAY_SERVER (object);
160
161     g_free (self->priv->name);
162
163     G_OBJECT_CLASS (display_server_parent_class)->finalize (object);
164 }
165
166 static void
167 display_server_class_init (DisplayServerClass *klass)
168 {
169     GObjectClass *object_class = G_OBJECT_CLASS (klass);
170
171     klass->get_can_share = display_server_real_get_can_share;
172     klass->get_vt = display_server_real_get_vt;
173     klass->start = display_server_real_start;
174     klass->connect_session = display_server_real_connect_session;
175     klass->disconnect_session = display_server_real_disconnect_session;
176     klass->stop = display_server_real_stop;
177     object_class->finalize = display_server_finalize;
178
179     g_type_class_add_private (klass, sizeof (DisplayServerPrivate));
180
181     signals[READY] =
182         g_signal_new ("ready",
183                       G_TYPE_FROM_CLASS (klass),
184                       G_SIGNAL_RUN_LAST,
185                       G_STRUCT_OFFSET (DisplayServerClass, ready),
186                       NULL, NULL,
187                       NULL,
188                       G_TYPE_NONE, 0);
189     signals[STOPPED] =
190         g_signal_new ("stopped",
191                       G_TYPE_FROM_CLASS (klass),
192                       G_SIGNAL_RUN_LAST,
193                       G_STRUCT_OFFSET (DisplayServerClass, stopped),
194                       NULL, NULL,
195                       NULL,
196                       G_TYPE_NONE, 0);
197 }
198
199 static gint
200 display_server_real_logprefix (Logger *self, gchar *buf, gulong buflen)
201 {
202     DisplayServer *server = DISPLAY_SERVER (self);
203     const gchar *name = display_server_get_name (server);
204     if (name)
205         return g_snprintf (buf, buflen, "DisplayServer %s: ", name);
206     else
207         return g_snprintf (buf, buflen, "DisplayServer: ");
208 }
209
210 static void
211 display_server_logger_iface_init (LoggerInterface *iface)
212 {
213     iface->logprefix = &display_server_real_logprefix;
214 }