mirror of
https://github.com/0intro/wmii
synced 2024-11-22 22:02:30 +03:00
Fix titlebar flicker. Fix an infinate event loop bug. Fix strlcat conflict.
This commit is contained in:
parent
1160b14fe6
commit
6238b96a6a
49
client.c
49
client.c
@ -242,23 +242,6 @@ update_client_grab(Client *c) {
|
||||
}
|
||||
}
|
||||
|
||||
/* convenience function */
|
||||
void
|
||||
focus(Client *c, Bool restack) {
|
||||
View *v;
|
||||
Frame *f;
|
||||
|
||||
f = c->sel;
|
||||
if(!f)
|
||||
return;
|
||||
|
||||
v = f->area->view;
|
||||
arrange_column(f->area, False);
|
||||
if(v != screen->sel)
|
||||
focus_view(screen, v);
|
||||
focus_frame(c->sel, restack);
|
||||
}
|
||||
|
||||
void
|
||||
set_client_state(Client * c, int state) {
|
||||
long data[] = { state, None };
|
||||
@ -595,6 +578,21 @@ apply_sizehints(Client *c, XRectangle *r, Bool floating, Bool frame, BlitzAlign
|
||||
r->y = r_south(&orig) - r->height;
|
||||
}
|
||||
|
||||
void
|
||||
focus(Client *c, Bool restack) {
|
||||
View *v;
|
||||
Frame *f;
|
||||
|
||||
f = c->sel;
|
||||
if(!f)
|
||||
return;
|
||||
|
||||
v = f->area->view;
|
||||
if(v != screen->sel)
|
||||
focus_view(screen, v);
|
||||
focus_frame(c->sel, restack);
|
||||
}
|
||||
|
||||
void
|
||||
focus_client(Client *c) {
|
||||
XEvent ev;
|
||||
@ -620,15 +618,12 @@ focus_client(Client *c) {
|
||||
void
|
||||
resize_client(Client *c, XRectangle *r) {
|
||||
Frame *f;
|
||||
XEvent ev;
|
||||
|
||||
f = c->sel;
|
||||
resize_frame(f, r);
|
||||
|
||||
if(f->area->view == screen->sel)
|
||||
XMoveResizeWindow(blz.dpy, c->framewin,
|
||||
f->rect.x, f->rect.y,
|
||||
f->rect.width, f->rect.height);
|
||||
else {
|
||||
if(f->area->view != screen->sel) {
|
||||
unmap_client(c, IconicState);
|
||||
unmap_frame(c);
|
||||
return;
|
||||
@ -642,6 +637,9 @@ resize_client(Client *c, XRectangle *r) {
|
||||
unmap_frame(c);
|
||||
unmap_client(c, IconicState);
|
||||
}else if(f->collapsed) {
|
||||
XMoveResizeWindow(blz.dpy, c->framewin,
|
||||
f->rect.x, f->rect.y,
|
||||
f->rect.width, f->rect.height);
|
||||
map_frame(c);
|
||||
unmap_client(c, IconicState);
|
||||
}else {
|
||||
@ -649,9 +647,16 @@ resize_client(Client *c, XRectangle *r) {
|
||||
f->crect.x, f->crect.y,
|
||||
f->crect.width, f->crect.height);
|
||||
map_client(c);
|
||||
XMoveResizeWindow(blz.dpy, c->framewin,
|
||||
f->rect.x, f->rect.y,
|
||||
f->rect.width, f->rect.height);
|
||||
map_frame(c);
|
||||
configure_client(c);
|
||||
}
|
||||
|
||||
while(XCheckMaskEvent(blz.dpy, FocusChangeMask|ExposureMask, &ev))
|
||||
if(handler[ev.xany.type])
|
||||
handler[ev.xany.type](&ev);
|
||||
}
|
||||
|
||||
void
|
||||
|
6
column.c
6
column.c
@ -180,11 +180,13 @@ arrange_column(Area *a, Bool dirty) {
|
||||
scale_column(a);
|
||||
resize:
|
||||
if(a->view == screen->sel) {
|
||||
restack_view(a->view);
|
||||
resize_client(a->sel->client, &a->sel->rect);
|
||||
for(f=a->frame; f; f=f->anext)
|
||||
if(!f->collapsed)
|
||||
if(!f->collapsed && f != a->sel)
|
||||
resize_client(f->client, &f->rect);
|
||||
for(f=a->frame; f; f=f->anext)
|
||||
if(f->collapsed)
|
||||
if(f->collapsed && f != a->sel)
|
||||
resize_client(f->client, &f->rect);
|
||||
}
|
||||
}
|
||||
|
11
event.c
11
event.c
@ -175,7 +175,7 @@ enternotify(XEvent *e) {
|
||||
return;
|
||||
|
||||
if((c = client_of_win(ev->window))) {
|
||||
if(ev->detail != NotifyInferior) {
|
||||
if(ev->detail != NotifyInferior && screen->focus != c) {
|
||||
if(verbose)
|
||||
fprintf(stderr, "enter_notify(c) => %s\n", c->name);
|
||||
focus(c, False);
|
||||
@ -183,7 +183,7 @@ enternotify(XEvent *e) {
|
||||
}else if(verbose)
|
||||
fprintf(stderr, "enter_notify(c[NotifyInferior]) => %s\n", c->name);
|
||||
}
|
||||
else if((f = frame_of_win(ev->window))) {
|
||||
else if((f = frame_of_win(ev->window)) && screen->focus != c) {
|
||||
if(verbose)
|
||||
fprintf(stderr, "enter_notify(f) => %s\n", f->client->name);
|
||||
if(f->area->floating || !f->collapsed)
|
||||
@ -235,7 +235,8 @@ focusin(XEvent *e) {
|
||||
||(ev->detail == NotifyInferior)
|
||||
||(ev->detail == NotifyAncestor)))
|
||||
return;
|
||||
if(ev->mode == NotifyWhileGrabbed)
|
||||
if((ev->mode == NotifyWhileGrabbed)
|
||||
&&(screen->hasgrab != &c_magic))
|
||||
return;
|
||||
|
||||
c = client_of_win(ev->window);
|
||||
@ -258,6 +259,7 @@ focusin(XEvent *e) {
|
||||
}else if(ev->mode == NotifyGrab) {
|
||||
if(ev->window == blz.root) {
|
||||
if(XCheckMaskEvent(blz.dpy, KeyPressMask, &me)) {
|
||||
screen->hasgrab = &c_magic;
|
||||
handler[me.xany.type](&me);
|
||||
return;
|
||||
}
|
||||
@ -285,7 +287,8 @@ focusout(XEvent *e) {
|
||||
|
||||
c = client_of_win(ev->window);
|
||||
if(c) {
|
||||
if(ev->mode == NotifyWhileGrabbed) {
|
||||
if((ev->mode == NotifyWhileGrabbed)
|
||||
&&(screen->hasgrab != &c_magic)) {
|
||||
if((screen->focus)
|
||||
&&(screen->hasgrab != screen->focus))
|
||||
screen->hasgrab = screen->focus;
|
||||
|
23
frame.c
23
frame.c
@ -96,10 +96,9 @@ resize_frame(Frame *f, XRectangle *r) {
|
||||
|
||||
frame2client(&f->crect);
|
||||
|
||||
if(f->crect.height < labelh(&def.font)) {
|
||||
f->rect.height = frame_delta_h();
|
||||
if(f->crect.height < labelh(&def.font))
|
||||
f->collapsed = True;
|
||||
}else
|
||||
else
|
||||
f->collapsed = False;
|
||||
|
||||
if(f->crect.width < labelh(&def.font)) {
|
||||
@ -107,8 +106,10 @@ resize_frame(Frame *f, XRectangle *r) {
|
||||
f->collapsed = True;
|
||||
}
|
||||
|
||||
if(f->collapsed)
|
||||
if(f->collapsed) {
|
||||
f->rect.height = labelh(&def.font);
|
||||
f->crect = f->rect;
|
||||
}
|
||||
f->crect.y = labelh(&def.font);
|
||||
f->crect.x = (f->rect.width - f->crect.width) / 2;
|
||||
|
||||
@ -216,9 +217,6 @@ focus_frame(Frame *f, Bool restack) {
|
||||
old_in_a = a->sel;
|
||||
|
||||
a->sel = f;
|
||||
if(!a->floating
|
||||
&& ((a->mode == Colstack) || (a->mode == Colmax)))
|
||||
arrange_column(a, False);
|
||||
|
||||
if(a != old_a)
|
||||
focus_area(f->area);
|
||||
@ -228,6 +226,10 @@ focus_frame(Frame *f, Bool restack) {
|
||||
|
||||
focus_client(f->client);
|
||||
|
||||
if(!a->floating
|
||||
&& ((a->mode == Colstack) || (a->mode == Colmax)))
|
||||
arrange_column(a, False);
|
||||
|
||||
if((f != old)
|
||||
&& (f->area == old_a))
|
||||
write_event("ClientFocus 0x%x\n", f->client->win);
|
||||
@ -244,6 +246,7 @@ frame_delta_h() {
|
||||
void
|
||||
draw_frame(Frame *f) {
|
||||
BlitzBrush br = { 0 };
|
||||
Frame *tf;
|
||||
|
||||
br.blitz = &blz;
|
||||
br.font = &def.font;
|
||||
@ -253,6 +256,12 @@ draw_frame(Frame *f) {
|
||||
br.color = def.focuscolor;
|
||||
else
|
||||
br.color = def.normcolor;
|
||||
if(!f->area->floating && f->area->mode == Colmax)
|
||||
for(tf = f->area->frame; tf; tf=tf->anext)
|
||||
if(tf->client == screen->focus) {
|
||||
br.color = def.focuscolor;
|
||||
break;
|
||||
}
|
||||
|
||||
br.rect = f->rect;
|
||||
br.rect.x = 0;
|
||||
|
1
wmii.h
1
wmii.h
@ -399,6 +399,7 @@ void grab_button(Window w, uint button, ulong mod);
|
||||
void update_rules(Rule **rule, const char *data);
|
||||
void trim(char *str, const char *chars);
|
||||
|
||||
#define strlcat wmii_strlcat
|
||||
/* util.c */
|
||||
uint tokenize(char *res[], uint reslen, char *str, char delim);
|
||||
char *estrdup(const char *str);
|
||||
|
Loading…
Reference in New Issue
Block a user