[gdm/display-configuration: 13/20] Implement SeatRemoveRequest signal
- From: Ray Strode <halfline src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gdm/display-configuration: 13/20] Implement SeatRemoveRequest signal
- Date: Tue, 4 Aug 2009 18:32:15 +0000 (UTC)
commit f6d4ac95ab088e42b705c1c6fa31fcb078835f8f
Author: Ray Strode <rstrode redhat com>
Date: Mon Jun 29 20:13:59 2009 -0400
Implement SeatRemoveRequest signal
ConsoleKit will ask for an entire Seat to get removed in
some circumstances. This patch handles that request.
daemon/gdm-local-display-factory.c | 66 ++++++++++++++++++++++++++++++++++++
1 files changed, 66 insertions(+), 0 deletions(-)
---
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index 3898cb1..7177977 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -689,6 +689,63 @@ seat_session_to_remove (DBusGProxy *seat_proxy,
}
static void
+seat_remove_request (DBusGProxy *seat_proxy,
+ GdmLocalDisplayFactory *factory)
+{
+ GHashTableIter iter;
+ gpointer key, value;
+ const char *sid_to_remove;
+ GQueue ssids_to_remove;
+
+ sid_to_remove = dbus_g_proxy_get_path (seat_proxy);
+
+ g_queue_init (&ssids_to_remove);
+ g_hash_table_iter_init (&iter, factory->priv->displays_by_session);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ GdmDisplay *display;
+ char *sid;
+
+ display = value;
+
+ gdm_display_get_seat_id (display, &sid, NULL);
+
+ if (strcmp (sid, sid_to_remove) == 0) {
+ char *ssid;
+
+ gdm_display_get_session_id (display, &ssid, NULL);
+
+ g_queue_push_tail (&ssids_to_remove, ssid);
+ }
+
+ g_free (sid);
+ }
+
+ while (!g_queue_is_empty (&ssids_to_remove)) {
+ char *ssid;
+
+ ssid = g_queue_pop_head (&ssids_to_remove);
+
+ seat_session_to_remove (seat_proxy, ssid, factory);
+
+ g_free (ssid);
+ }
+
+ g_hash_table_remove (factory->priv->managed_seat_proxies, sid_to_remove);
+
+ dbus_g_proxy_call_no_reply (seat_proxy,
+ "UnmanageSeat",
+ DBUS_TYPE_G_OBJECT_PATH, sid_to_remove,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID);
+
+ dbus_g_proxy_call_no_reply (seat_proxy,
+ "RemoveSeat",
+ DBUS_TYPE_G_OBJECT_PATH, sid_to_remove,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID);
+}
+
+static void
manage_static_sessions_per_seat (GdmLocalDisplayFactory *factory,
const char *sid)
{
@@ -724,6 +781,9 @@ manage_static_sessions_per_seat (GdmLocalDisplayFactory *factory,
"SessionToRemove",
G_TYPE_STRING,
G_TYPE_INVALID);
+ dbus_g_proxy_add_signal (proxy,
+ "RemoveRequest",
+ G_TYPE_INVALID);
dbus_g_proxy_connect_signal (proxy,
"SessionToAdd",
G_CALLBACK (seat_session_to_add),
@@ -735,6 +795,12 @@ manage_static_sessions_per_seat (GdmLocalDisplayFactory *factory,
factory,
NULL);
+ dbus_g_proxy_connect_signal (proxy,
+ "RemoveRequest",
+ G_CALLBACK (seat_remove_request),
+ factory,
+ NULL);
+
dbus_g_proxy_call_no_reply (proxy,
"ManageSeat",
G_TYPE_INVALID,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]