gdm r5938 - in trunk: . daemon data
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gdm r5938 - in trunk: . daemon data
- Date: Thu, 6 Mar 2008 02:48:30 +0000 (GMT)
Author: mccann
Date: Thu Mar 6 02:48:30 2008
New Revision: 5938
URL: http://svn.gnome.org/viewvc/gdm?rev=5938&view=rev
Log:
2008-03-05 William Jon McCann <jmccann redhat com>
* daemon/Makefile.am:
* daemon/gdm-product-slave.c: (create_new_session):
* daemon/gdm-session-direct.c: (gdm_session_direct_init),
(_gdm_session_direct_set_display_id),
(gdm_session_direct_set_property),
(gdm_session_direct_get_property), (gdm_session_direct_dispose),
(gdm_session_direct_finalize), (register_session),
(gdm_session_direct_constructor), (gdm_session_direct_class_init),
(gdm_session_direct_new), (gdm_session_direct_restart),
(gdm_session_direct_stop), (gdm_session_direct_detach):
* daemon/gdm-session-direct.h:
* daemon/gdm-session-direct.xml:
* daemon/gdm-simple-slave.c: (create_new_session):
* daemon/gdm-slave.c: (gdm_slave_constructor):
* daemon/test-session.c: (main):
* data/gdm.conf:
Put the SessionDirect on the bus. Doesn't do anything yet.
Added:
trunk/daemon/gdm-session-direct.xml
Modified:
trunk/ChangeLog
trunk/daemon/Makefile.am
trunk/daemon/gdm-product-slave.c
trunk/daemon/gdm-session-direct.c
trunk/daemon/gdm-session-direct.h
trunk/daemon/gdm-simple-slave.c
trunk/daemon/gdm-slave.c
trunk/daemon/test-session.c
trunk/data/gdm.conf
Modified: trunk/daemon/Makefile.am
==============================================================================
--- trunk/daemon/Makefile.am (original)
+++ trunk/daemon/Makefile.am Thu Mar 6 02:48:30 2008
@@ -33,6 +33,7 @@
gdm-factory-slave-glue.h \
gdm-product-slave-glue.h \
gdm-xdmcp-chooser-slave-glue.h \
+ gdm-session-direct-glue.h \
gdm-manager-glue.h \
gdm-display-glue.h \
gdm-xdmcp-greeter-display-glue.h \
@@ -56,6 +57,8 @@
dbus-binding-tool --prefix=gdm_product_slave --mode=glib-server --output=gdm-product-slave-glue.h $(srcdir)/gdm-product-slave.xml
gdm-xdmcp-chooser-slave-glue.h: gdm-xdmcp-chooser-slave.xml Makefile.am
dbus-binding-tool --prefix=gdm_xdmcp_chooser_slave --mode=glib-server --output=gdm-xdmcp-chooser-slave-glue.h $(srcdir)/gdm-xdmcp-chooser-slave.xml
+gdm-session-direct-glue.h: gdm-session-direct.xml Makefile.am
+ dbus-binding-tool --prefix=gdm_session_direct --mode=glib-server --output=gdm-session-direct-glue.h $(srcdir)/gdm-session-direct.xml
gdm-display-glue.h: gdm-display.xml Makefile.am
dbus-binding-tool --prefix=gdm_display --mode=glib-server --output=gdm-display-glue.h $(srcdir)/gdm-display.xml
gdm-xdmcp-greeter-display-glue.h: gdm-xdmcp-greeter-display.xml Makefile.am
Modified: trunk/daemon/gdm-product-slave.c
==============================================================================
--- trunk/daemon/gdm-product-slave.c (original)
+++ trunk/daemon/gdm-product-slave.c Thu Mar 6 02:48:30 2008
@@ -724,6 +724,7 @@
create_new_session (GdmProductSlave *slave)
{
gboolean display_is_local;
+ char *display_id;
char *display_name;
char *display_hostname;
char *display_device;
@@ -732,6 +733,7 @@
g_debug ("GdmProductSlave: Creating new session");
g_object_get (slave,
+ "display-id", &display_id,
"display-name", &display_name,
"display-hostname", &display_hostname,
"display-is-local", &display_is_local,
@@ -741,11 +743,13 @@
/* FIXME: we don't yet have a display device! */
display_device = g_strdup ("");
- slave->priv->session = gdm_session_direct_new (display_name,
+ slave->priv->session = gdm_session_direct_new (display_id,
+ display_name,
display_hostname,
display_device,
display_x11_authority_file,
display_is_local);
+ g_free (display_id);
g_free (display_name);
g_free (display_hostname);
g_free (display_device);
Modified: trunk/daemon/gdm-session-direct.c
==============================================================================
--- trunk/daemon/gdm-session-direct.c (original)
+++ trunk/daemon/gdm-session-direct.c Thu Mar 6 02:48:30 2008
@@ -48,6 +48,7 @@
#include "gdm-session-direct.h"
#include "gdm-session.h"
#include "gdm-session-private.h"
+#include "gdm-session-direct-glue.h"
#include "gdm-session-record.h"
#include "gdm-session-worker-job.h"
@@ -78,6 +79,8 @@
guint32 is_running : 1;
/* object lifetime scope */
+ char *id;
+ char *display_id;
char *display_name;
char *display_hostname;
char *display_device;
@@ -87,10 +90,12 @@
DBusServer *server;
char *server_address;
GHashTable *environment;
+ DBusGConnection *connection;
};
enum {
PROP_0,
+ PROP_DISPLAY_ID,
PROP_DISPLAY_NAME,
PROP_DISPLAY_HOSTNAME,
PROP_DISPLAY_IS_LOCAL,
@@ -1411,6 +1416,7 @@
(GDestroyNotify) g_free);
setup_server (session);
+
}
static void
@@ -2048,6 +2054,14 @@
get_language_name (impl));
}
+static void
+_gdm_session_direct_set_display_id (GdmSessionDirect *session,
+ const char *id)
+{
+ g_free (session->priv->display_id);
+ session->priv->display_id = g_strdup (id);
+}
+
/* At some point we may want to read these right from
* the slave but for now I don't want the dependency */
static void
@@ -2109,6 +2123,9 @@
self = GDM_SESSION_DIRECT (object);
switch (prop_id) {
+ case PROP_DISPLAY_ID:
+ _gdm_session_direct_set_display_id (self, g_value_get_string (value));
+ break;
case PROP_DISPLAY_NAME:
_gdm_session_direct_set_display_name (self, g_value_get_string (value));
break;
@@ -2144,6 +2161,9 @@
self = GDM_SESSION_DIRECT (object);
switch (prop_id) {
+ case PROP_DISPLAY_ID:
+ g_value_set_string (value, self->priv->display_id);
+ break;
case PROP_DISPLAY_NAME:
g_value_set_string (value, self->priv->display_name);
break;
@@ -2179,6 +2199,9 @@
gdm_session_direct_close (GDM_SESSION (session));
+ g_free (session->priv->display_id);
+ session->priv->display_id = NULL;
+
g_free (session->priv->display_name);
session->priv->display_name = NULL;
@@ -2216,6 +2239,8 @@
session = GDM_SESSION_DIRECT (object);
+ g_free (session->priv->id);
+
g_free (session->priv->selected_user);
g_free (session->priv->selected_session);
g_free (session->priv->saved_session);
@@ -2228,6 +2253,58 @@
parent_class->finalize (object);
}
+static gboolean
+register_session (GdmSessionDirect *session)
+{
+ GError *error;
+
+ error = NULL;
+ session->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
+ if (session->priv->connection == NULL) {
+ if (error != NULL) {
+ g_critical ("error getting system bus: %s", error->message);
+ g_error_free (error);
+ }
+ exit (1);
+ }
+
+ dbus_g_connection_register_g_object (session->priv->connection, session->priv->id, G_OBJECT (session));
+
+ return TRUE;
+}
+
+static GObject *
+gdm_session_direct_constructor (GType type,
+ guint n_construct_properties,
+ GObjectConstructParam *construct_properties)
+{
+ GdmSessionDirect *session;
+ gboolean res;
+ const char *id;
+
+ session = GDM_SESSION_DIRECT (G_OBJECT_CLASS (gdm_session_direct_parent_class)->constructor (type,
+ n_construct_properties,
+ construct_properties));
+
+ /* Always match the session id with the master */
+ id = NULL;
+ if (g_str_has_prefix (session->priv->display_id, "/org/gnome/DisplayManager/Display")) {
+ id = session->priv->display_id + strlen ("/org/gnome/DisplayManager/Display");
+ }
+
+ g_assert (id != NULL);
+
+ session->priv->id = g_strdup_printf ("/org/gnome/DisplayManager/Session%s", id);
+ g_debug ("GdmSessionDirect: Registering %s", session->priv->id);
+
+ res = register_session (session);
+ if (! res) {
+ g_warning ("Unable to register session with system bus");
+ }
+
+ return G_OBJECT (session);
+}
+
static void
gdm_session_iface_init (GdmSessionIface *iface)
{
@@ -2256,12 +2333,20 @@
object_class->get_property = gdm_session_direct_get_property;
object_class->set_property = gdm_session_direct_set_property;
+ object_class->constructor = gdm_session_direct_constructor;
object_class->dispose = gdm_session_direct_dispose;
object_class->finalize = gdm_session_direct_finalize;
g_type_class_add_private (session_class, sizeof (GdmSessionDirectPrivate));
g_object_class_install_property (object_class,
+ PROP_DISPLAY_ID,
+ g_param_spec_string ("display-id",
+ "display id",
+ "display id",
+ NULL,
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ g_object_class_install_property (object_class,
PROP_DISPLAY_NAME,
g_param_spec_string ("display-name",
"display name",
@@ -2306,10 +2391,12 @@
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ dbus_g_object_type_install_info (GDM_TYPE_SESSION_DIRECT, &dbus_glib_gdm_session_direct_object_info);
}
GdmSessionDirect *
-gdm_session_direct_new (const char *display_name,
+gdm_session_direct_new (const char *display_id,
+ const char *display_name,
const char *display_hostname,
const char *display_device,
const char *display_x11_authority_file,
@@ -2318,6 +2405,7 @@
GdmSessionDirect *session;
session = g_object_new (GDM_TYPE_SESSION_DIRECT,
+ "display-id", display_id,
"display-name", display_name,
"display-hostname", display_hostname,
"display-device", display_device,
@@ -2327,3 +2415,41 @@
return session;
}
+
+gboolean
+gdm_session_direct_restart (GdmSessionDirect *session,
+ GError **error)
+{
+ gboolean ret;
+
+ ret = TRUE;
+ g_debug ("GdmSessionDirect: Request to restart session");
+
+ return ret;
+}
+
+gboolean
+gdm_session_direct_stop (GdmSessionDirect *session,
+ GError **error)
+{
+ gboolean ret;
+
+ ret = TRUE;
+
+ g_debug ("GdmSessionDirect: Request to stop session");
+
+ return ret;
+}
+
+gboolean
+gdm_session_direct_detach (GdmSessionDirect *session,
+ GError **error)
+{
+ gboolean ret;
+
+ ret = TRUE;
+
+ g_debug ("GdmSessionDirect: Request to detach session");
+
+ return ret;
+}
Modified: trunk/daemon/gdm-session-direct.h
==============================================================================
--- trunk/daemon/gdm-session-direct.h (original)
+++ trunk/daemon/gdm-session-direct.h Thu Mar 6 02:48:30 2008
@@ -48,7 +48,8 @@
GType gdm_session_direct_get_type (void);
-GdmSessionDirect * gdm_session_direct_new (const char *display_name,
+GdmSessionDirect * gdm_session_direct_new (const char *display_id,
+ const char *display_name,
const char *display_hostname,
const char *display_device,
const char *display_x11_authority_file,
@@ -56,6 +57,14 @@
char * gdm_session_direct_get_username (GdmSessionDirect *session_direct);
+/* Exported methods */
+gboolean gdm_session_direct_restart (GdmSessionDirect *session_direct,
+ GError **error);
+gboolean gdm_session_direct_stop (GdmSessionDirect *session_direct,
+ GError **error);
+gboolean gdm_session_direct_detach (GdmSessionDirect *session_direct,
+ GError **error);
+
G_END_DECLS
#endif /* GDM_SESSION_DIRECT_H */
Added: trunk/daemon/gdm-session-direct.xml
==============================================================================
--- (empty file)
+++ trunk/daemon/gdm-session-direct.xml Thu Mar 6 02:48:30 2008
@@ -0,0 +1,12 @@
+<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
+<node>
+ <interface name="org.gnome.DisplayManager.Session">
+ <annotation name="org.freedesktop.DBus.GLib.CSymbol" value="gdm_session_direct"/>
+ <method name="Restart">
+ </method>
+ <method name="Stop">
+ </method>
+ <method name="Detach">
+ </method>
+ </interface>
+</node>
Modified: trunk/daemon/gdm-simple-slave.c
==============================================================================
--- trunk/daemon/gdm-simple-slave.c (original)
+++ trunk/daemon/gdm-simple-slave.c Thu Mar 6 02:48:30 2008
@@ -63,7 +63,6 @@
struct GdmSimpleSlavePrivate
{
- char *id;
GPid pid;
guint greeter_reset_id;
@@ -400,6 +399,7 @@
create_new_session (GdmSimpleSlave *slave)
{
gboolean display_is_local;
+ char *display_id;
char *display_name;
char *display_hostname;
char *display_device;
@@ -408,6 +408,7 @@
g_debug ("GdmSimpleSlave: Creating new session");
g_object_get (slave,
+ "display-id", &display_id,
"display-name", &display_name,
"display-hostname", &display_hostname,
"display-is-local", &display_is_local,
@@ -419,11 +420,13 @@
display_device = gdm_server_get_display_device (slave->priv->server);
}
- slave->priv->session = gdm_session_direct_new (display_name,
+ slave->priv->session = gdm_session_direct_new (display_id,
+ display_name,
display_hostname,
display_device,
display_x11_authority_file,
display_is_local);
+ g_free (display_id);
g_free (display_name);
g_free (display_device);
g_free (display_hostname);
Modified: trunk/daemon/gdm-slave.c
==============================================================================
--- trunk/daemon/gdm-slave.c (original)
+++ trunk/daemon/gdm-slave.c Thu Mar 6 02:48:30 2008
@@ -1230,6 +1230,8 @@
id = slave->priv->display_id + strlen ("/org/gnome/DisplayManager/Display");
}
+ g_assert (id != NULL);
+
slave->priv->id = g_strdup_printf ("/org/gnome/DisplayManager/Slave%s", id);
g_debug ("GdmSlave: Registering %s", slave->priv->id);
Modified: trunk/daemon/test-session.c
==============================================================================
--- trunk/daemon/test-session.c (original)
+++ trunk/daemon/test-session.c Thu Mar 6 02:48:30 2008
@@ -242,7 +242,8 @@
do {
g_debug ("creating instance of GdmSessionDirect object...");
- session = gdm_session_direct_new (":0",
+ session = gdm_session_direct_new ("/org/gnome/DisplayManager/Display1",
+ ":0",
g_get_host_name (),
ttyname (STDIN_FILENO),
getenv("XAUTHORITY"),
Modified: trunk/data/gdm.conf
==============================================================================
--- trunk/data/gdm.conf (original)
+++ trunk/data/gdm.conf Thu Mar 6 02:48:30 2008
@@ -11,6 +11,8 @@
<allow send_interface="org.gnome.DisplayManager.Display"/>
<allow send_interface="org.gnome.DisplayManager.LocalDisplayFactory"/>
<allow send_interface="org.gnome.DisplayManager.Settings"/>
+ <allow send_interface="org.gnome.DisplayManager.Slave"/>
+ <allow send_interface="org.gnome.DisplayManager.Session"/>
<allow send_destination="org.gnome.DisplayManager"
send_interface="org.gnome.DBus.Properties" />
</policy>
@@ -20,6 +22,8 @@
<deny send_interface="org.gnome.DisplayManager.Display"/>
<deny send_interface="org.gnome.DisplayManager.LocalDisplayFactory"/>
<deny send_interface="org.gnome.DisplayManager.Settings"/>
+ <deny send_interface="org.gnome.DisplayManager.Slave"/>
+ <deny send_interface="org.gnome.DisplayManager.Session"/>
<deny send_destination="org.gnome.DisplayManager"
send_interface="org.gnome.DBus.Properties" />
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]