The following patch makes desktop windows to be mapped but not managed by i3, resulting in the behaviour you are looking for.
diff --git a/include/atoms.xmacro b/include/atoms.xmacro
index 7cfef82..5d2d2db 100644
--- a/include/atoms.xmacro
+++ b/include/atoms.xmacro
@@ -14,6 +14,7 @@ xmacro(_NET_WM_STRUT_PARTIAL)
xmacro(_NET_CLIENT_LIST_STACKING)
xmacro(_NET_CURRENT_DESKTOP)
xmacro(_NET_ACTIVE_WINDOW)
+xmacro(_NET_WM_WINDOW_TYPE_DESKTOP)
xmacro(_NET_WORKAREA)
xmacro(_NET_STARTUP_ID)
xmacro(_NET_WM_ICON)
diff --git a/src/manage.c b/src/manage.c
index b3c43d5..990ffc8 100644
--- a/src/manage.c
+++ b/src/manage.c
@@ -214,6 +214,18 @@ void manage_window(xcb_window_t window, xcb_get_window_attributes_cookie_t cooki
Con *search_at = croot;
xcb_get_property_reply_t *reply = xcb_get_property_reply(conn, wm_type_cookie, NULL);
+
+ /* Don't manage desktop type windows, just map them */
+ if (xcb_reply_contains_atom(reply, A__NET_WM_WINDOW_TYPE_DESKTOP)) {
+ LOG("Ignoring window of type desktop\n");
+ xcb_map_window(conn, window);
+
+ uint32_t values[] = { XCB_STACK_MODE_BELOW };
+ xcb_configure_window (conn, window, XCB_CONFIG_WINDOW_STACK_MODE, values);
+
+ goto geom_out;
+ }
+
if (xcb_reply_contains_atom(reply, A__NET_WM_WINDOW_TYPE_DOCK)) {
LOG("This window is of type dock\n");
Output *output = get_output_containing(geom->x, geom->y);