X-Git-Url: https://jasonwoof.com/gitweb/?p=dwm.git;a=blobdiff_plain;f=dwm.c;h=5c25c2426c6d18ec3ddffbd135d903afafa17e8b;hp=f896170c043fcccefe0d11330ca49f379bf29650;hb=99144036af9457eb08c709d3fba7f6ffb42039dc;hpb=3d1090ba896319368c4771b88d325fcee368a608 diff --git a/dwm.c b/dwm.c index f896170..5c25c24 100644 --- a/dwm.c +++ b/dwm.c @@ -60,7 +60,7 @@ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */ enum { NetSupported, NetWMName, NetWMState, - NetWMFullscreen, NetActiveWindow, NetWMWindowType, + NetWMFullscreen, NetWMWindowOpacity, NetActiveWindow, NetWMWindowType, NetWMWindowTypeDialog, NetClientList, NetLast }; /* EWMH atoms */ enum { WMProtocols, WMDelete, WMState, WMTakeFocus, WMLast }; /* default atoms */ enum { ClkTagBar, ClkLtSymbol, ClkStatusText, ClkWinTitle, @@ -267,6 +267,20 @@ static Fnt *fnt; static Monitor *mons, *selmon; static Window root; +// unfocused windows get transparent (feature) +static const unsigned long unfocused_opacity[] = { 0xbfffffff }; +static void window_set_opaque(Client *c); +static void window_set_translucent(Client *c); +void +window_set_opaque(Client *c) { + XDeleteProperty(dpy, c->win, netatom[NetWMWindowOpacity]); +} +void +window_set_translucent(Client *c) { + XChangeProperty(dpy, c->win, netatom[NetWMWindowOpacity], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)unfocused_opacity, 1); +} + + /* configuration, allows nested code to access above variables */ #include "config.h" @@ -801,6 +815,8 @@ focus(Client *c) { } selmon->sel = c; drawbars(); + if(c && (!root || (c->win!=root)) ) + window_set_opaque(c); } void @@ -831,7 +847,14 @@ focusstack(const Arg *arg) { if(!selmon->sel) return; - if(arg->i > 0) { + if(arg->i == 0) { + for(i = selmon->clients; i != selmon->sel; i = i->next) { + if(ISVISIBLE(i)) { + c = i; + break; + } + } + } else if(arg->i > 0) { for(c = selmon->sel->next; c && !ISVISIBLE(c); c = c->next); if(!c) for(c = selmon->clients; c && !ISVISIBLE(c); c = c->next); @@ -1523,6 +1546,7 @@ setup(void) { netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False); netatom[NetWMState] = XInternAtom(dpy, "_NET_WM_STATE", False); netatom[NetWMFullscreen] = XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False); + netatom[NetWMWindowOpacity] = XInternAtom(dpy, "_NET_WM_WINDOW_OPACITY", False); netatom[NetWMWindowType] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE", False); netatom[NetWMWindowTypeDialog] = XInternAtom(dpy, "_NET_WM_WINDOW_TYPE_DIALOG", False); netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False); @@ -1684,6 +1708,8 @@ void unfocus(Client *c, Bool setfocus) { if(!c) return; + if(!root || c->win!=root) + window_set_translucent(c); grabbuttons(c, False); XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->rgb); if(setfocus) {