xig-team team mailing list archive
-
xig-team team
-
Mailing list archive
-
Message #00012
[Merge] lp:~smspillaz/xig/xig.disconnect-signals into lp:xig
Sam Spilsbury has proposed merging lp:~smspillaz/xig/xig.disconnect-signals into lp:xig with lp:~smspillaz/xig/xig.clean-up-after-clients as a prerequisite.
Requested reviews:
Xig Development Team (xig-team)
For more details, see:
https://code.launchpad.net/~smspillaz/xig/xig.disconnect-signals/+merge/89535
Disconnect signals the remote client is interested in when it goes away.
--
https://code.launchpad.net/~smspillaz/xig/xig.disconnect-signals/+merge/89535
Your team Xig Development Team is requested to review the proposed merge of lp:~smspillaz/xig/xig.disconnect-signals into lp:xig.
=== modified file 'src/xig-server.c'
--- src/xig-server.c 2012-01-21 13:31:23 +0000
+++ src/xig-server.c 2012-01-21 13:31:23 +0000
@@ -189,6 +189,20 @@
g_hash_table_remove (server->priv->drawables, GINT_TO_POINTER (xig_drawable_get_id (XIG_DRAWABLE (pixmap))));
}
+static void
+xig_disconnect_client_recursive (XigRemoteClient *client, XigWindow *window)
+{
+ GList *children = xig_window_get_children (window);
+
+ g_signal_handlers_disconnect_matched (window, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, client);
+
+ while (children)
+ {
+ XigWindow *child = XIG_WINDOW (children->data);
+ xig_disconnect_client_recursive (client, child);
+ children = g_list_next (children);
+ }
+}
static void
xig_remote_client_disconnected_cb (XigRemoteClient *client, XigServer *server)
@@ -220,6 +234,18 @@
list = g_list_next (list);
}
+ GList *screens = server->priv->screens;
+
+ while (screens)
+ {
+ XigScreen *screen = (XigScreen *) screens->data;
+ XigWindow *root = xig_screen_get_root (screen);
+
+ xig_disconnect_client_recursive (client, root);
+
+ screens = g_list_next (screens);
+ }
+
g_list_free (orig);
g_object_unref (client);
Follow ups