X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fserver.c;h=202af942c4274815219f9d65014c0c1d86729424;hb=367bf8f76227dea6e7e10e974967ae1d60cfe38e;hp=511eca5d49bbb51f2614a06ac225a2a0b8db7939;hpb=9d9dc352d8af4d85c5e4984c72b45ad393fb65d6;p=chaz%2Ftint2 diff --git a/src/server.c b/src/server.c index 511eca5..202af94 100644 --- a/src/server.c +++ b/src/server.c @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **************************************************************************/ +#include + #include #include #include @@ -30,6 +32,7 @@ void server_catch_error (Display *d, XErrorEvent *ev){} static char *name_trayer = 0; +int real_transparency = 0; void server_init_atoms () { @@ -58,6 +61,7 @@ void server_init_atoms () server.atom._NET_WM_STATE_MAXIMIZED_HORZ = XInternAtom (server.dsp, "_NET_WM_STATE_MAXIMIZED_HORZ", False); server.atom._NET_WM_STATE_SHADED = XInternAtom (server.dsp, "_NET_WM_STATE_SHADED", False); server.atom._NET_WM_STATE_BELOW = XInternAtom (server.dsp, "_NET_WM_STATE_BELOW", False); + server.atom._NET_WM_STATE_ABOVE = XInternAtom (server.dsp, "_NET_WM_STATE_ABOVE", False); server.atom._NET_WM_STATE_MODAL = XInternAtom (server.dsp, "_NET_WM_STATE_MODAL", False); server.atom._NET_CLIENT_LIST = XInternAtom (server.dsp, "_NET_CLIENT_LIST", False); server.atom._NET_WM_VISIBLE_NAME = XInternAtom (server.dsp, "_NET_WM_VISIBLE_NAME", False); @@ -94,6 +98,9 @@ void server_init_atoms () void cleanup_server() { if (name_trayer) free(name_trayer); + XFreeColormap(server.dsp, server.colormap); + free(server.monitor); + XFreeGC(server.dsp, server.gc); } @@ -299,3 +306,38 @@ void get_desktops() } +void server_init_visual() +{ + // inspired by freedesktops fdclock ;) + XVisualInfo *xvi; + XVisualInfo templ = { .screen=server.screen, .depth=32, .class=TrueColor }; + int nvi; + xvi = XGetVisualInfo(server.dsp, VisualScreenMask|VisualDepthMask|VisualClassMask, &templ, &nvi); + + Visual *visual = 0; + if (xvi) { + int i; + XRenderPictFormat *format; + for (i = 0; i < nvi; i++) { + format = XRenderFindVisualFormat(server.dsp, xvi[i].visual); + if (format->type == PictTypeDirect && format->direct.alphaMask) { + visual = xvi[i].visual; + break; + } + } + } + XFree (xvi); + + if (visual && real_transparency) { + server.depth = 32; + printf("real transparency on... depth: %d\n", server.depth); + server.colormap = XCreateColormap(server.dsp, server.root_win, visual, AllocNone); + server.visual = visual; + } + else { + server.depth = DefaultDepth(server.dsp, server.screen); + printf("real transparency off.... depth: %d\n", server.depth); + server.colormap = DefaultColormap(server.dsp, server.screen); + server.visual = DefaultVisual(server.dsp, server.screen); + } +}