I've continued investigating this. For Nautilus to draw a transparent desktop on top of wallpaper drawn by Compiz, we'll need two things besides the Compiz patch I posted above:
1. We need to modify the Ambiance theme, which is causing Nautilus to draw the desktop background non-transparently. Here's the line that's causing that, in themes/Ambiance/gtk-3.0/gtk-widgets.css:
* {
/* inherit the color from parent by default */
color: inherit;
background-color: @bg_color; // <-- this line
}
Removing that line will make Nautilus draw a transparent background (though I'm not sure what consequences it might have in other applications).
2. We need Nautilus's desktop window to appear above the Compiz wallpaper window in the z-order. In my experiments so far it generally comes out the other way around: the wallpaper is on top of Nautilus (and so the Nautilus icons are invisible). Both those windows have type _NET_WM_WINDOW_TYPE_DESKTOP, so we need some other way for Compiz to distinguish them when stacking. I propose modifying the Compiz wallpaper plugin to set _NET_WM_STATE_BELOW on its window (this is like calling gdk_window_set_keep_below), and modifying Compiz so that desktop windows with that state bit set will be kept below others. To do that I think we'll need to modify PrivateWindow::findLowestSiblingBelow() and/or related functions in src/window.cpp in Compiz.
I've continued investigating this. For Nautilus to draw a transparent desktop on top of wallpaper drawn by Compiz, we'll need two things besides the Compiz patch I posted above:
1. We need to modify the Ambiance theme, which is causing Nautilus to draw the desktop background non-transparently. Here's the line that's causing that, in themes/ Ambiance/ gtk-3.0/ gtk-widgets. css:
* { color: @bg_color; // <-- this line
/* inherit the color from parent by default */
color: inherit;
background-
}
Removing that line will make Nautilus draw a transparent background (though I'm not sure what consequences it might have in other applications).
2. We need Nautilus's desktop window to appear above the Compiz wallpaper window in the z-order. In my experiments so far it generally comes out the other way around: the wallpaper is on top of Nautilus (and so the Nautilus icons are invisible). Both those windows have type _NET_WM_ WINDOW_ TYPE_DESKTOP, so we need some other way for Compiz to distinguish them when stacking. I propose modifying the Compiz wallpaper plugin to set _NET_WM_STATE_BELOW on its window (this is like calling gdk_window_ set_keep_ below), and modifying Compiz so that desktop windows with that state bit set will be kept below others. To do that I think we'll need to modify PrivateWindow: :findLowestSibl ingBelow( ) and/or related functions in src/window.cpp in Compiz.