]> rtime.felk.cvut.cz Git - sojka/lightdm.git/blob - src/display-server.c
Don't show guest session dialog in MATE
[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     /* TRUE when started */
26     gboolean is_ready;
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 (LOGGER_TYPE, display_server_logger_iface_init));
39
40 const gchar *
41 display_server_get_session_type (DisplayServer *server)
42 {
43     return DISPLAY_SERVER_GET_CLASS (server)->get_session_type (server);
44 }
45
46 DisplayServer *
47 display_server_get_parent (DisplayServer *server)
48 {
49     g_return_val_if_fail (server != NULL, NULL);
50     return DISPLAY_SERVER_GET_CLASS (server)->get_parent (server);
51 }
52
53 static DisplayServer *
54 display_server_real_get_parent (DisplayServer *server)
55 {
56     return NULL;
57 }
58
59 gboolean
60 display_server_get_can_share (DisplayServer *server)
61 {
62     g_return_val_if_fail (server != NULL, FALSE);
63     return DISPLAY_SERVER_GET_CLASS (server)->get_can_share (server);
64 }
65
66 static gboolean
67 display_server_real_get_can_share (DisplayServer *server)
68 {
69     return FALSE;
70 }
71
72 gint
73 display_server_get_vt (DisplayServer *server)
74 {
75     g_return_val_if_fail (server != NULL, -1);
76     return DISPLAY_SERVER_GET_CLASS (server)->get_vt (server);
77 }
78
79 static gint
80 display_server_real_get_vt (DisplayServer *server)
81 {
82     return -1;
83 }
84
85 gboolean
86 display_server_start (DisplayServer *server)
87 {
88     g_return_val_if_fail (server != NULL, FALSE);
89     return DISPLAY_SERVER_GET_CLASS (server)->start (server);
90 }
91
92 gboolean
93 display_server_get_is_ready (DisplayServer *server)
94 {
95     g_return_val_if_fail (server != NULL, FALSE);
96     return server->priv->is_ready;
97 }
98
99 static gboolean
100 display_server_real_start (DisplayServer *server)
101 {
102     server->priv->is_ready = TRUE;
103     g_signal_emit (server, signals[READY], 0);
104     return TRUE;
105 }
106
107 void
108 display_server_connect_session (DisplayServer *server, Session *session)
109 {
110     return DISPLAY_SERVER_GET_CLASS (server)->connect_session (server, session);
111 }
112
113 static void
114 display_server_real_connect_session (DisplayServer *server, Session *session)
115 {
116 }
117
118 void
119 display_server_disconnect_session (DisplayServer *server, Session *session)
120 {
121     return DISPLAY_SERVER_GET_CLASS (server)->disconnect_session (server, session);
122 }
123
124 static void
125 display_server_real_disconnect_session (DisplayServer *server, Session *session)
126 {
127 }
128
129 void
130 display_server_stop (DisplayServer *server)
131 {
132     g_return_if_fail (server != NULL);
133
134     if (server->priv->stopping)
135         return;
136     server->priv->stopping = TRUE;
137
138     DISPLAY_SERVER_GET_CLASS (server)->stop (server);
139 }
140
141 gboolean
142 display_server_get_is_stopping (DisplayServer *server)
143 {
144     g_return_val_if_fail (server != NULL, FALSE);
145     return server->priv->stopping;
146 }
147
148 static void
149 display_server_real_stop (DisplayServer *server)
150 {
151     g_signal_emit (server, signals[STOPPED], 0);
152 }
153
154 static void
155 display_server_init (DisplayServer *server)
156 {
157     server->priv = G_TYPE_INSTANCE_GET_PRIVATE (server, DISPLAY_SERVER_TYPE, DisplayServerPrivate);
158 }
159
160 static void
161 display_server_class_init (DisplayServerClass *klass)
162 {
163     klass->get_parent = display_server_real_get_parent;  
164     klass->get_can_share = display_server_real_get_can_share;
165     klass->get_vt = display_server_real_get_vt;
166     klass->start = display_server_real_start;
167     klass->connect_session = display_server_real_connect_session;
168     klass->disconnect_session = display_server_real_disconnect_session;
169     klass->stop = display_server_real_stop;
170
171     g_type_class_add_private (klass, sizeof (DisplayServerPrivate));
172
173     signals[READY] =
174         g_signal_new (DISPLAY_SERVER_SIGNAL_READY,
175                       G_TYPE_FROM_CLASS (klass),
176                       G_SIGNAL_RUN_LAST,
177                       G_STRUCT_OFFSET (DisplayServerClass, ready),
178                       NULL, NULL,
179                       NULL,
180                       G_TYPE_NONE, 0);
181     signals[STOPPED] =
182         g_signal_new (DISPLAY_SERVER_SIGNAL_STOPPED,
183                       G_TYPE_FROM_CLASS (klass),
184                       G_SIGNAL_RUN_LAST,
185                       G_STRUCT_OFFSET (DisplayServerClass, stopped),
186                       NULL, NULL,
187                       NULL,
188                       G_TYPE_NONE, 0);
189 }
190
191 static gint
192 display_server_real_logprefix (Logger *self, gchar *buf, gulong buflen)
193 {
194     return g_snprintf (buf, buflen, "DisplayServer: ");
195 }
196
197 static void
198 display_server_logger_iface_init (LoggerInterface *iface)
199 {
200     iface->logprefix = &display_server_real_logprefix;
201 }