Xinqi Bao's Git
projects
/
dwm.git
/ blobdiff
summary
|
log
|
commit
|
diff
|
tree
raw
|
inline
| side by side
fixed crash on zoom if only 1 client exists
[dwm.git]
/
client.c
diff --git
a/client.c
b/client.c
index
3aae7e0
..
487cb0c
100644
(file)
--- a/
client.c
+++ b/
client.c
@@
-28,17
+28,21
@@
next(Client *c)
void
zoom(Arg *arg)
{
void
zoom(Arg *arg)
{
- Client **l, *
old
;
+ Client **l, *
c
;
- if(!
(old = sel)
)
+ if(!
sel
)
return;
return;
+ if(sel == next(clients) && sel->next) {
+ if((c = next(sel->next)))
+ sel = c;
+ }
+
for(l = &clients; *l && *l != sel; l = &(*l)->next);
*l = sel->next;
for(l = &clients; *l && *l != sel; l = &(*l)->next);
*l = sel->next;
- old->next = clients; /* pop */
- clients = old;
- sel = old;
+ sel->next = clients; /* pop */
+ clients = sel;
arrange(NULL);
focus(sel);
}
arrange(NULL);
focus(sel);
}
@@
-54,7
+58,6
@@
max(Arg *arg)
sel->h = sh - 2 * sel->border - bh;
craise(sel);
resize(sel, False);
sel->h = sh - 2 * sel->border - bh;
craise(sel);
resize(sel, False);
- discard_events(EnterWindowMask);
}
void
}
void
@@
-117,7
+120,6
@@
floating(Arg *arg)
focus(sel);
}
}
focus(sel);
}
}
- discard_events(EnterWindowMask);
}
void
}
void
@@
-168,13
+170,12
@@
tiling(Arg *arg)
else
ban_client(c);
}
else
ban_client(c);
}
- if(
sel && !sel->tags[tsel]
) {
+ if(
!sel || (sel && !sel->tags[tsel])
) {
if((sel = next(clients))) {
craise(sel);
focus(sel);
}
}
if((sel = next(clients))) {
craise(sel);
focus(sel);
}
}
- discard_events(EnterWindowMask);
}
void
}
void
@@
-320,14
+321,16
@@
void
focus(Client *c)
{
Client *old = sel;
focus(Client *c)
{
Client *old = sel;
+ XEvent ev;
+ XFlush(dpy);
sel = c;
if(old && old != c)
draw_client(old);
draw_client(c);
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
XFlush(dpy);
sel = c;
if(old && old != c)
draw_client(old);
draw_client(c);
XSetInputFocus(dpy, c->win, RevertToPointerRoot, CurrentTime);
XFlush(dpy);
-
discard_events(EnterWindowMask
);
+
while(XCheckMaskEvent(dpy, EnterWindowMask, &ev)
);
}
static void
}
static void
@@
-496,6
+499,10
@@
resize(Client *c, Bool inc)
if(c->inch)
c->h -= (c->h - c->baseh) % c->inch;
}
if(c->inch)
c->h -= (c->h - c->baseh) % c->inch;
}
+ if(c->x > sw) /* might happen on restart */
+ c->x = sw - c->w;
+ if(c->y > sh)
+ c->ty = c->y = sh - c->h;
if(c->minw && c->w < c->minw)
c->w = c->minw;
if(c->minh && c->h < c->minh)
if(c->minw && c->w < c->minw)
c->w = c->minw;
if(c->minh && c->h < c->minh)
@@
-597,12
+604,12
@@
draw_client(Client *c)
if(c->tags[i]) {
dc.x += dc.w;
dc.w = textw(c->tags[i]) + dc.font.height;
if(c->tags[i]) {
dc.x += dc.w;
dc.w = textw(c->tags[i]) + dc.font.height;
- drawtext(c->tags[i], True);
+ drawtext(c->tags[i],
False,
True);
}
}
dc.x += dc.w;
dc.w = textw(c->name) + dc.font.height;
}
}
dc.x += dc.w;
dc.w = textw(c->name) + dc.font.height;
- drawtext(c->name, True);
+ drawtext(c->name,
False,
True);
XCopyArea(dpy, dc.drawable, c->title, dc.gc,
0, 0, c->tw, c->th, 0, 0);
XFlush(dpy);
XCopyArea(dpy, dc.drawable, c->title, dc.gc,
0, 0, c->tw, c->th, 0, 0);
XFlush(dpy);