]> git.sur5r.net Git - i3/i3/commitdiff
ipc: dump window properties when not restarting inplace
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 15 Dec 2013 20:29:05 +0000 (21:29 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 22 Dec 2013 20:52:49 +0000 (21:52 +0100)
src/ipc.c

index b5d17ba40bdf5d6f9b14ee31dbd8e85c9b98a389..ab12dcb0a88befa7bffbec21d79b9425e3121fec 100644 (file)
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -306,6 +306,32 @@ void dump_node(yajl_gen gen, struct Con *con, bool inplace_restart) {
         y(integer, con->window->id);
     else y(null);
 
+    if (con->window && !inplace_restart) {
+        /* Window properties are useless to preserve when restarting because
+         * they will be queried again anyway. However, for i3-save-tree(1),
+         * they are very useful and save i3-save-tree dealing with X11. */
+        ystr("window_properties");
+        y(map_open);
+
+#define DUMP_PROPERTY(key, prop_name) do { \
+    if (con->window->prop_name != NULL) { \
+        ystr(key); \
+        ystr(con->window->prop_name); \
+    } \
+} while (0)
+
+        DUMP_PROPERTY("class", class_class);
+        DUMP_PROPERTY("instance", class_instance);
+        DUMP_PROPERTY("window_role", role);
+
+        if (con->window->name != NULL) {
+            ystr("title");
+            ystr(i3string_as_utf8(con->window->name));
+        }
+
+        y(map_close);
+    }
+
     ystr("nodes");
     y(array_open);
     Con *node;