changed ban/unban implementation to not move the windows anymore, but map/unmap them instead - PLEASE TEST THIS
This commit is contained in:
parent
4b9337a01e
commit
a54cf2ecef
17
client.c
17
client.c
|
@ -98,10 +98,12 @@ attach(Client *c) {
|
||||||
|
|
||||||
void
|
void
|
||||||
ban(Client *c) {
|
ban(Client *c) {
|
||||||
if (c->isbanned)
|
if(c->isbanned)
|
||||||
return;
|
return;
|
||||||
XMoveWindow(dpy, c->win, c->x + 2 * sw, c->y);
|
XUnmapWindow(dpy, c->win);
|
||||||
|
setclientstate(c, IconicState);
|
||||||
c->isbanned = True;
|
c->isbanned = True;
|
||||||
|
c->unmapped++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -135,7 +137,7 @@ detach(Client *c) {
|
||||||
|
|
||||||
void
|
void
|
||||||
focus(Client *c) {
|
focus(Client *c) {
|
||||||
if((!c && selscreen)|| (c && !isvisible(c)))
|
if((!c && selscreen) || (c && !isvisible(c)))
|
||||||
for(c = stack; c && !isvisible(c); c = c->snext);
|
for(c = stack; c && !isvisible(c); c = c->snext);
|
||||||
if(sel && sel != c) {
|
if(sel && sel != c) {
|
||||||
grabbuttons(sel, False);
|
grabbuttons(sel, False);
|
||||||
|
@ -224,9 +226,7 @@ manage(Window w, XWindowAttributes *wa) {
|
||||||
c->isfloating = (rettrans == Success) || c->isfixed;
|
c->isfloating = (rettrans == Success) || c->isfixed;
|
||||||
attach(c);
|
attach(c);
|
||||||
attachstack(c);
|
attachstack(c);
|
||||||
ban(c);
|
c->isbanned = True;
|
||||||
XMapWindow(dpy, w);
|
|
||||||
setclientstate(c, NormalState);
|
|
||||||
focus(c);
|
focus(c);
|
||||||
lt->arrange();
|
lt->arrange();
|
||||||
}
|
}
|
||||||
|
@ -308,9 +308,10 @@ togglefloating(const char *arg) {
|
||||||
|
|
||||||
void
|
void
|
||||||
unban(Client *c) {
|
unban(Client *c) {
|
||||||
if (!c->isbanned)
|
if(!c->isbanned)
|
||||||
return;
|
return;
|
||||||
XMoveWindow(dpy, c->win, c->x, c->y);
|
XMapWindow(dpy, c->win);
|
||||||
|
setclientstate(c, NormalState);
|
||||||
c->isbanned = False;
|
c->isbanned = False;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# dwm version
|
# dwm version
|
||||||
VERSION = 4.3
|
VERSION = 4.4
|
||||||
|
|
||||||
# Customize below to fit your system
|
# Customize below to fit your system
|
||||||
|
|
||||||
|
|
1
dwm.h
1
dwm.h
|
@ -48,6 +48,7 @@ struct Client {
|
||||||
int rx, ry, rw, rh; /* revert geometry */
|
int rx, ry, rw, rh; /* revert geometry */
|
||||||
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
int basew, baseh, incw, inch, maxw, maxh, minw, minh;
|
||||||
int minax, maxax, minay, maxay;
|
int minax, maxax, minay, maxay;
|
||||||
|
int unmapped;
|
||||||
long flags;
|
long flags;
|
||||||
unsigned int border, oldborder;
|
unsigned int border, oldborder;
|
||||||
Bool isbanned, isfixed, ismax, isfloating;
|
Bool isbanned, isfixed, ismax, isfloating;
|
||||||
|
|
6
event.c
6
event.c
|
@ -336,8 +336,10 @@ unmapnotify(XEvent *e) {
|
||||||
Client *c;
|
Client *c;
|
||||||
XUnmapEvent *ev = &e->xunmap;
|
XUnmapEvent *ev = &e->xunmap;
|
||||||
|
|
||||||
if((c = getclient(ev->window)))
|
if((c = getclient(ev->window)) && (ev->event == root)) {
|
||||||
unmanage(c);
|
if(ev->send_event || c->unmapped-- == 0)
|
||||||
|
unmanage(c);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* extern */
|
/* extern */
|
||||||
|
|
Loading…
Reference in a new issue