2 * Copyright (C) 2015 Canonical Ltd.
3 * Author: Robert Ancell <robert.ancell@canonical.com>
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
12 #include "wayland-session.h"
15 struct WaylandSessionPrivate
22 G_DEFINE_TYPE (WaylandSession, wayland_session, DISPLAY_SERVER_TYPE);
25 wayland_session_new (void)
27 return g_object_new (WAYLAND_SESSION_TYPE, NULL);
31 wayland_session_set_vt (WaylandSession *session, gint vt)
33 g_return_if_fail (session != NULL);
35 if (session->priv->have_vt_ref)
36 vt_unref (session->priv->vt);
37 session->priv->have_vt_ref = FALSE;
38 session->priv->vt = vt;
42 session->priv->have_vt_ref = TRUE;
47 wayland_session_get_vt (DisplayServer *server)
49 g_return_val_if_fail (server != NULL, 0);
50 return WAYLAND_SESSION (server)->priv->vt;
54 wayland_session_connect_session (DisplayServer *display_server, Session *session)
56 WaylandSession *wayland_session = WAYLAND_SESSION (display_server);
58 session_set_env (session, "XDG_SESSION_TYPE", "wayland");
60 if (wayland_session->priv->vt >= 0)
62 gchar *value = g_strdup_printf ("%d", wayland_session->priv->vt);
63 session_set_env (session, "XDG_VTNR", value);
69 wayland_session_disconnect_session (DisplayServer *display_server, Session *session)
71 session_unset_env (session, "XDG_SESSION_TYPE");
72 session_unset_env (session, "XDG_VTNR");
76 wayland_session_init (WaylandSession *session)
78 session->priv = G_TYPE_INSTANCE_GET_PRIVATE (session, WAYLAND_SESSION_TYPE, WaylandSessionPrivate);
82 wayland_session_finalize (GObject *object)
84 WaylandSession *self = WAYLAND_SESSION (object);
86 if (self->priv->have_vt_ref)
87 vt_unref (self->priv->vt);
89 G_OBJECT_CLASS (wayland_session_parent_class)->finalize (object);
93 wayland_session_class_init (WaylandSessionClass *klass)
95 GObjectClass *object_class = G_OBJECT_CLASS (klass);
96 DisplayServerClass *display_server_class = DISPLAY_SERVER_CLASS (klass);
98 display_server_class->get_vt = wayland_session_get_vt;
99 display_server_class->connect_session = wayland_session_connect_session;
100 display_server_class->disconnect_session = wayland_session_disconnect_session;
101 object_class->finalize = wayland_session_finalize;
103 g_type_class_add_private (klass, sizeof (WaylandSessionPrivate));