<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Sep 27, 2018 at 3:56 AM, Uli Schlachter <span dir="ltr"><<a href="mailto:psychon@znc.in" target="_blank">psychon@znc.in</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<span class=""><br>
On 26.09.2018 07:51, Ryan Flannery wrote:<br>
> The raw transparency piece works fine and is<br>
> easy in cairo + xcb,<br>
</span>sorry to tell you this, but the problem is in the raw transparency part.<br>
You only *think* that you have transparency. Also, "is easy" is the<br>
total opposite of the truth. Again, sorry.<br>
<br>
When a new window is mapped, its content is undefined. In practice this<br>
means that the window contains whatever was visible at this position<br>
before. Thus, you think you have transparency when you draw ontop of<br>
this. However, this is wrong.</blockquote><div><br>THANK YOU!<br><br>I was digging into a totally different path. After reading this, I dove into what you described and now have a good handle on the issue. I can now detect if it's supported and apply the alpha blending only when it is. Also I learned what compositing window managers are and now have these sweet transparent urxvt terminals :D (though I doubt I'll keep them).<br><br>Many thanks again. You saved me many more hours and headaches before I would have arrived at this.<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> <br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Try apply the attached patch move.patch. What this patch does is to wait<br>
for the window to become visible and then it moves the window. You will<br>
notice that together with the window, its content is moved. Thus, making<br>
it obvious that your transparency does not work.<br>
<br>
The black background that you see is the working case *if your window<br>
had an alpha channel*. Because it does not have an alpha channel, you<br>
only see black.<br>
<br>
To create a transparent window in X11, first of all, the user has to be<br>
using a compositing manager (compiz, compton, xcompmgr, ...). Without<br>
this, there is no real transparency. The _NET_WM_CMs selection can be<br>
used to figure out if a compositing manager is running.<br>
<br>
Next, you need to create a window with a 32bit visual (and also tell<br>
cairo that your window is using this visual). For this part, I refer you to:<br>
<br>
<a href="https://stackoverflow.com/questions/3645632/how-to-create-a-window-with-a-bit-depth-of-32" rel="noreferrer" target="_blank">https://stackoverflow.com/<wbr>questions/3645632/how-to-<wbr>create-a-window-with-a-bit-<wbr>depth-of-32</a><br>
<br>
The attached patch fix.patch gives me a window with either a black<br>
background (if no compositing manager is running) or a transparent black<br>
background (if a compositing manager is running; I used compton).</blockquote><div><br></div><div>Thanks for the patch and stackoverflow link. That both solved the issue in my example program and also cleaned up a couple things, like applying OVERRIDE_REDIRECT when I create the window rather than later.<br><br>Many thanks,<br>-Ryan </div></div><br></div></div>