static void spawn(const Arg *arg);
static void tag(const Arg *arg);
static void tagmon(const Arg *arg);
+static void jason_layout(Monitor *);
static void tile(Monitor *);
static void togglebar(const Arg *arg);
static void togglefloating(const Arg *arg);
// unfocused windows get transparent (feature)
static const unsigned long unfocused_opacity[] = { 0xbfffffff };
+static const unsigned long invisible_opacity[] = { 0x00000000 };
static void window_set_opaque(Client *c);
static void window_set_translucent(Client *c);
+static void window_set_invisible(Client *c);
void
window_set_opaque(Client *c) {
XDeleteProperty(dpy, c->win, netatom[NetWMWindowOpacity]);
window_set_translucent(Client *c) {
XChangeProperty(dpy, c->win, netatom[NetWMWindowOpacity], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)unfocused_opacity, 1);
}
+void
+window_set_invisible(Client *c) {
+ XChangeProperty(dpy, c->win, netatom[NetWMWindowOpacity], XA_CARDINAL, 32, PropModeReplace, (unsigned char *)invisible_opacity, 1);
+}
/* configuration, allows nested code to access above variables */
}
void
+jason_layout(Monitor *m) {
+ unsigned int i, n, mw;
+ Client *c, *vis_slave;
+
+ for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++);
+ if(n == 0) {
+ return;
+ }
+
+ c = nexttiled(m->clients);
+ if (c == m->sel) {
+ // if master is selected, show first slave
+ vis_slave = nexttiled(c->next);
+ } else {
+ vis_slave = m->sel;
+ }
+ if(n > 1 || (n == 1 && !c->screen_hog)) {
+ mw = m->ww * m->mfact;
+ } else {
+ // one of these:
+ // * zero tiled windows
+ // * one tiled window that's not a screen hog
+ // * miltiple tiled windows
+ mw = m->ww;
+ }
+ for (i = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), i++) {
+ if (i == 0) {
+ resize(c, m->wx, m->wy, mw, m->wh, False);
+ } else {
+ if (c == vis_slave) {
+ resize(c, m->wx + mw, m->wy, m->ww - mw, m->wh, False);
+ } else {
+ // this function does not get called when focus changes
+ // resize(c, m->wx + m->ww, m->wy, m->ww - mw, m->wh, False);
+ resize(c, m->wx + mw, m->wy, m->ww - mw, m->wh, False);
+ }
+ }
+ }
+}
+
+void
togglebar(const Arg *arg) {
selmon->showbar = !selmon->showbar;
updatebarpos(selmon);
void
unfocus(Client *c, Bool setfocus) {
+ Client *w;
if(!c)
return;
- if(!root || c->win!=root)
- window_set_translucent(c);
+ if(!root || c->win!=root) {
+ w = nexttiled(c->mon->clients);
+ if (!w) {
+ // no tiled windows
+ window_set_translucent(c);
+ } else if (w == c) {
+ // master
+ window_set_translucent(c);
+ } else {
+ w = nexttiled(w->next);
+ if (!w) {
+ // c must not be tiled
+ window_set_translucent(c);
+ } else {
+ if (w == c) { // first slave
+ window_set_translucent(c);
+ } else {
+ window_set_invisible(c);
+ window_set_translucent(w);
+ }
+ }
+ }
+ }
grabbuttons(c, False);
XSetWindowBorder(dpy, c->win, scheme[SchemeNorm].border->rgb);
if(setfocus) {