Subject: Re: bug#9181: 24.0.50; Alpha transparency no longer works

From: David De La Harpe Golden <[email-masked]>
Date: Fri, 29 Jul 2011 00:07:47 +0100

On 28/07/11 19:16, Luka Novsak wrote:
 > Yes, I'm running xcompmgr; alpha transparency is working fine in other
 > applications.
 >
 > I've noticed a peculiar detail--this problem does not occur when
 > running X without a window manager, say if I only run xcompmgr and
 > emacs in my X session. I've tried this with multiple window managers,
 > so it doesn't seem to be the fault of either one.

Oh yeah... xcompmgr only looks for _NET_WM_WINDOW_OPACITY on truly 
toplevel (i.e. direct children of root window) windows. It's working 
when there's no window manager, because then emacs' window is a direct 
child of the root window. But in a typical window manager case, emacs' 
window is of course reparented under the window manager's frame window, 
so emacs setting the property on its own window (with the other _NET_WM 
properties) doesn't work for xcompmgr.  It may be working for your other 
apps depending on how you or they set their opacity (using "transset" 
will set the property on the window manager frame, for example).

However, note that the current code _does_ work when using now-typical 
combined compositing window managers rather than xcompmgr (hence my 
works-for-me), because they, as a matter of current practice, _do_ look 
for the property on the application windows they're managing, which 
makes sense really, reasonable place for it with all the other similar 
properties.

*** So why _was_ it working? emacs used to special-case in 
xterm.c/x_set_frame_alpha() that set the property on the parent window 
of the emacs window rather than the emacs window itself [1], it got 
removed  in trunk rev 104095 to fix bug #8608  (Jan cc'd)

I for one am not at all sure restoring it is the right thing to do, it 
seems problematic. Emacs doesn't notionally "own" the window manager 
frame around it, and some reparenting window managers could actually use 
more than one level of window between the root and the app window too 
anyway.  (I don't think reparenting window managers actually do 
typically copy the property up in practice as suggested under #8608, 
either, I'm afraid. That would be rather unique handling of the property 
AFAIK)

So maybe setting the property in both places (either optionally or 
always) is the best we can do, at least if we want to support xcompmgr.