Got questions, comments, patches, etc.?
Contact Jason Woofenden
gitweb
/
dwm.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
applied Andreas Amann's netwm_active_window patch, thx
[dwm.git]
/
dwm.c
diff --git
a/dwm.c
b/dwm.c
index
0f946a6
..
95571f6
100644
(file)
--- a/
dwm.c
+++ b/
dwm.c
@@
-397,9
+397,10
@@
arrange(Monitor *m) {
showhide(m->stack);
else for(m = mons; m; m = m->next)
showhide(m->stack);
showhide(m->stack);
else for(m = mons; m; m = m->next)
showhide(m->stack);
- if(m)
+ if(m) {
arrangemon(m);
arrangemon(m);
- else for(m = mons; m; m = m->next)
+ restack(m);
+ } else for(m = mons; m; m = m->next)
arrangemon(m);
}
arrangemon(m);
}
@@
-408,7
+409,6
@@
arrangemon(Monitor *m) {
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
if(m->lt[m->sellt]->arrange)
m->lt[m->sellt]->arrange(m);
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
if(m->lt[m->sellt]->arrange)
m->lt[m->sellt]->arrange(m);
- restack(m);
}
void
}
void
@@
-499,6
+499,7
@@
cleanup(void) {
cleanupmon(mons);
XSync(dpy, False);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
cleanupmon(mons);
XSync(dpy, False);
XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
}
void
}
void
@@
-858,8
+859,10
@@
focus(Client *c) {
XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
setfocus(c);
}
XSetWindowBorder(dpy, c->win, dc.sel[ColBorder]);
setfocus(c);
}
- else
+ else {
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+ }
selmon->sel = c;
drawbars();
}
selmon->sel = c;
drawbars();
}
@@
-1212,6
+1215,7
@@
motionnotify(XEvent *e) {
if(ev->window != root)
return;
if((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
if(ev->window != root)
return;
if((m = recttomon(ev->x_root, ev->y_root, 1, 1)) != mon && mon) {
+ unfocus(selmon->sel, True);
selmon = m;
focus(NULL);
}
selmon = m;
focus(NULL);
}
@@
-1260,8
+1264,11
@@
movemouse(const Arg *arg) {
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
togglefloating(NULL);
}
&& (abs(nx - c->x) > snap || abs(ny - c->y) > snap))
togglefloating(NULL);
}
- if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+ if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) {
+ if(c->isfullscreen)
+ setfullscreen(c, False);
resize(c, nx, ny, c->w, c->h, True);
resize(c, nx, ny, c->w, c->h, True);
+ }
break;
}
} while(ev.type != ButtonRelease);
break;
}
} while(ev.type != ButtonRelease);
@@
-1396,8
+1403,11
@@
resizemouse(const Arg *arg) {
&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
togglefloating(NULL);
}
&& (abs(nw - c->w) > snap || abs(nh - c->h) > snap))
togglefloating(NULL);
}
- if(!selmon->lt[selmon->sellt]->arrange || c->isfloating)
+ if(!selmon->lt[selmon->sellt]->arrange || c->isfloating) {
+ if(c->isfullscreen)
+ setfullscreen(c, False);
resize(c, c->x, c->y, nw, nh, True);
resize(c, c->x, c->y, nw, nh, True);
+ }
break;
}
} while(ev.type != ButtonRelease);
break;
}
} while(ev.type != ButtonRelease);
@@
-1420,6
+1430,8
@@
restack(Monitor *m) {
drawbar(m);
if(!m->sel)
return;
drawbar(m);
if(!m->sel)
return;
+ if(m->sel->isfloating || !m->lt[m->sellt]->arrange)
+ XRaiseWindow(dpy, m->sel->win);
if(m->lt[m->sellt]->arrange) {
wc.stack_mode = Below;
wc.sibling = m->barwin;
if(m->lt[m->sellt]->arrange) {
wc.stack_mode = Below;
wc.sibling = m->barwin;
@@
-1518,8
+1530,12
@@
sendevent(Client *c, Atom proto) {
void
setfocus(Client *c) {
void
setfocus(Client *c) {
- if(!c->neverfocus)
+ if(!c->neverfocus) {
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
+ XChangeProperty(dpy, root, netatom[NetActiveWindow],
+ XA_WINDOW, 32, PropModeReplace,
+ (unsigned char *) &(c->win), 1);
+ }
sendevent(c, wmatom[WMTakeFocus]);
}
sendevent(c, wmatom[WMTakeFocus]);
}
@@
-1741,6
+1757,8
@@
togglefloating(const Arg *arg) {
if(selmon->sel->isfloating)
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
selmon->sel->w, selmon->sel->h, False);
if(selmon->sel->isfloating)
resize(selmon->sel, selmon->sel->x, selmon->sel->y,
selmon->sel->w, selmon->sel->h, False);
+ else if(selmon->sel->isfullscreen)
+ setfullscreen(selmon->sel, False);
arrange(selmon);
}
arrange(selmon);
}
@@
-1775,8
+1793,10
@@
unfocus(Client *c, Bool setfocus) {
return;
grabbuttons(c, False);
XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
return;
grabbuttons(c, False);
XSetWindowBorder(dpy, c->win, dc.norm[ColBorder]);
- if(setfocus)
+ if(setfocus) {
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
XSetInputFocus(dpy, root, RevertToPointerRoot, CurrentTime);
+ XDeleteProperty(dpy, root, netatom[NetActiveWindow]);
+ }
}
void
}
void
@@
-2017,7
+2037,6
@@
updatewindowtype(Client *c) {
if(state == netatom[NetWMFullscreen])
setfullscreen(c, True);
if(state == netatom[NetWMFullscreen])
setfullscreen(c, True);
-
if(wtype == netatom[NetWMWindowTypeDialog])
c->isfloating = True;
}
if(wtype == netatom[NetWMWindowTypeDialog])
c->isfloating = True;
}