diff options
author | Ray Strode <rstrode@redhat.com> | 2015-02-13 13:41:16 -0500 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2015-02-17 13:40:30 -0500 |
commit | 553bdbfc22a656e620e5bd8ed87c2823510d94e8 (patch) | |
tree | 4893e9fa9d1ea30172db59667713e971a0df1eba | |
parent | 5f9ad6edc03609adf1292b7ba0c5a8aed46067e1 (diff) | |
download | gdm-553bdbfc22a656e620e5bd8ed87c2823510d94e8.tar.gz |
manager: add way for displays to register themselves
The plan is to start the X server implicitly as part
of starting the session. Once we do that, we'll need
some way to communicate that the X server started
successfully.
This commit adds a RegisterX11Display method to GdmManager
to handle that.
-rw-r--r-- | daemon/gdm-manager.c | 34 | ||||
-rw-r--r-- | daemon/gdm-manager.xml | 3 |
2 files changed, 37 insertions, 0 deletions
diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index 5e4bbf28..4735194d 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -985,6 +985,39 @@ get_seed_session_for_display (GdmDisplay *display) } static gboolean +gdm_manager_handle_register_display (GdmDBusManager *manager, + GDBusMethodInvocation *invocation, + GVariant *details) +{ + GdmManager *self = GDM_MANAGER (manager); + const char *sender; + GDBusConnection *connection; + GdmDisplay *display = NULL; + + g_debug ("GdmManager: trying to register new display"); + + sender = g_dbus_method_invocation_get_sender (invocation); + connection = g_dbus_method_invocation_get_connection (invocation); + get_display_and_details_for_bus_sender (self, connection, sender, &display, NULL, NULL, NULL, NULL, NULL, NULL); + + if (display == NULL) { + g_dbus_method_invocation_return_error_literal (invocation, + G_DBUS_ERROR, + G_DBUS_ERROR_ACCESS_DENIED, + _("No display available")); + + return TRUE; + } + + g_object_set (G_OBJECT (display), "status", GDM_DISPLAY_MANAGED, NULL); + + gdm_dbus_manager_complete_register_display (GDM_DBUS_MANAGER (manager), + invocation); + + return TRUE; +} + +static gboolean gdm_manager_handle_open_session (GdmDBusManager *manager, GDBusMethodInvocation *invocation) { @@ -1309,6 +1342,7 @@ gdm_manager_handle_open_reauthentication_channel (GdmDBusManager *manager static void manager_interface_init (GdmDBusManagerIface *interface) { + interface->handle_register_display = gdm_manager_handle_register_display; interface->handle_open_session = gdm_manager_handle_open_session; interface->handle_open_reauthentication_channel = gdm_manager_handle_open_reauthentication_channel; } diff --git a/daemon/gdm-manager.xml b/daemon/gdm-manager.xml index d3bb3b2e..f11f3fb7 100644 --- a/daemon/gdm-manager.xml +++ b/daemon/gdm-manager.xml @@ -1,6 +1,9 @@ <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd"> <node name="/org/gnome/DisplayManager/Manager"> <interface name="org.gnome.DisplayManager.Manager"> + <method name="RegisterDisplay"> + <arg name="details" direction="in" type="a{ss}"/> + </method> <method name="OpenSession"> <arg name="address" direction="out" type="s"/> </method> |