mirror of https://github.com/0intro/wmii
Allow bar on top or bottom. Cleanup.
This commit is contained in:
parent
0928b860bf
commit
40abae9c30
|
@ -36,16 +36,11 @@ bar_init(WMScreen *s) {
|
|||
|
||||
void
|
||||
bar_resize(WMScreen *s) {
|
||||
View *v;
|
||||
|
||||
s->brect = s->r;
|
||||
s->brect.min.y = s->brect.max.y - labelh(def.font);
|
||||
s->brect.max.y = labelh(def.font);
|
||||
|
||||
reshapewin(s->barwin, s->brect);
|
||||
|
||||
bar_draw(s);
|
||||
for(v=view; v; v=v->next)
|
||||
view_arrange(v);
|
||||
view_update(screen->sel);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -65,9 +60,9 @@ bar_sety(int y) {
|
|||
|
||||
r = &screen->brect;
|
||||
|
||||
dy = y - r->min.y;
|
||||
r->min.y += dy;
|
||||
r->max.y += dy;
|
||||
dy = Dy(*r);
|
||||
r->min.y = y;
|
||||
r->max.y = y + dy;
|
||||
reshapewin(screen->barwin, *r);
|
||||
}
|
||||
|
||||
|
|
|
@ -618,8 +618,7 @@ fullscreen(Client *c, int fullscreen) {
|
|||
for(f=c->frame; f; f=f->cnext)
|
||||
f->oldarea = -1;
|
||||
if((f = c->sel))
|
||||
if(f->view == screen->sel)
|
||||
view_focus(screen, f->view);
|
||||
view_update(f->view);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -780,8 +779,8 @@ client_prop(Client *c, Atom a) {
|
|||
if(c->w.hints)
|
||||
c->fixedsize = eqpt(c->w.hints->min, c->w.hints->max);
|
||||
if(memcmp(&h, c->w.hints, sizeof h))
|
||||
if(c->sel && c->sel->view == screen->sel)
|
||||
view_focus(screen, screen->sel);
|
||||
if(c->sel)
|
||||
view_update(c->sel->view);
|
||||
break;
|
||||
case XA_WM_HINTS:
|
||||
wmh = XGetWMHints(display, c->w.w);
|
||||
|
|
|
@ -41,8 +41,7 @@ column_new(View *v, Area *pos, uint w) {
|
|||
return nil;
|
||||
|
||||
view_arrange(v);
|
||||
if(v == screen->sel)
|
||||
view_focus(screen, v);
|
||||
view_update(v);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -384,7 +383,7 @@ column_resize(Area *a, int w) {
|
|||
an->r.min.x += dw;
|
||||
|
||||
/* view_arrange(a->view); */
|
||||
view_focus(screen, a->view);
|
||||
view_update(a->view);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -461,7 +460,6 @@ column_resizeframe(Frame *f, Rectangle r) {
|
|||
column_resizeframe_h(f, r);
|
||||
|
||||
/* view_arrange(v); */
|
||||
if(v == screen->sel)
|
||||
view_focus(screen, v);
|
||||
view_update(v);
|
||||
}
|
||||
|
||||
|
|
|
@ -66,6 +66,11 @@ enum {
|
|||
Toggle,
|
||||
};
|
||||
|
||||
enum Barpos {
|
||||
BBottom,
|
||||
BTop,
|
||||
};
|
||||
|
||||
enum {
|
||||
CurNormal,
|
||||
CurNECorner, CurNWCorner, CurSECorner, CurSWCorner,
|
||||
|
@ -315,6 +320,7 @@ EXTERN struct WMScreen {
|
|||
Window* barwin;
|
||||
Image* ibuf;
|
||||
Image* ibuf32;
|
||||
int barpos;
|
||||
|
||||
Rectangle r;
|
||||
Rectangle brect;
|
||||
|
|
|
@ -295,7 +295,7 @@ ewmh_getstrut(Client *c) {
|
|||
Dprint(DEwmh, "\tright: %R\n", c->strut->right);
|
||||
Dprint(DEwmh, "\tbottom: %R\n", c->strut->bottom);
|
||||
free(strut);
|
||||
view_focus(screen, screen->sel);
|
||||
view_update(screen->sel);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -227,6 +227,7 @@ void view_restack(View*);
|
|||
void view_scale(View*, int w);
|
||||
Client* view_selclient(View*);
|
||||
void view_select(const char*);
|
||||
void view_update(View*);
|
||||
void view_update_all(void);
|
||||
void view_update_rect(View*);
|
||||
Rectangle* view_rects(View*, uint *num, Frame *ignore);
|
||||
|
|
|
@ -508,8 +508,8 @@ frame_swap(Frame *fa, Frame *fb) {
|
|||
fa->cnext = c->frame;
|
||||
c->frame = fa;
|
||||
|
||||
if(c->sel && c->sel->view == screen->sel)
|
||||
view_focus(screen, c->sel->view);
|
||||
if(c->sel)
|
||||
view_update(c->sel->view);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -20,6 +20,7 @@ static char
|
|||
enum {
|
||||
LFULLSCREEN,
|
||||
LURGENT,
|
||||
LBAR,
|
||||
LBORDER,
|
||||
LCLIENT,
|
||||
LCOLMODE,
|
||||
|
@ -51,6 +52,7 @@ enum {
|
|||
char *symtab[] = {
|
||||
"Fullscreen",
|
||||
"Urgent",
|
||||
"bar",
|
||||
"border",
|
||||
"client",
|
||||
"colmode",
|
||||
|
@ -88,6 +90,11 @@ char* debugtab[] = {
|
|||
"generic",
|
||||
};
|
||||
|
||||
static char* barpostab[] = {
|
||||
"bottom",
|
||||
"top",
|
||||
};
|
||||
|
||||
/* Edit ,y/^[a-zA-Z].*\n.* {\n/d
|
||||
* Edit s/^([a-zA-Z].*)\n(.*) {\n/\1 \2;\n/
|
||||
* Edit ,x/^static.*\n/d
|
||||
|
@ -127,6 +134,11 @@ getdebug(char *s) {
|
|||
return _bsearch(s, debugtab, nelem(debugtab));
|
||||
}
|
||||
|
||||
static int
|
||||
getbarpos(char *s) {
|
||||
return _bsearch(s, barpostab, nelem(barpostab));
|
||||
}
|
||||
|
||||
static int
|
||||
gettoggle(IxpMsg *m) {
|
||||
switch(getsym(msg_getword(m))) {
|
||||
|
@ -405,6 +417,7 @@ message_root(void *p, IxpMsg *m) {
|
|||
Font *fn;
|
||||
char *s, *ret;
|
||||
ulong n;
|
||||
int i;
|
||||
|
||||
USED(p);
|
||||
ret = nil;
|
||||
|
@ -413,11 +426,21 @@ message_root(void *p, IxpMsg *m) {
|
|||
return nil;
|
||||
|
||||
switch(getsym(s)) {
|
||||
case LBAR: /* bar on? <"top" | "bottom"> */
|
||||
s = msg_getword(m);
|
||||
if(!strcmp(s, "on"))
|
||||
s = msg_getword(m);
|
||||
i = getbarpos(s);
|
||||
if(i < 0)
|
||||
return Ebadvalue;
|
||||
screen->barpos = i;
|
||||
view_update(screen->sel);
|
||||
break;
|
||||
case LBORDER:
|
||||
if(!getulong(msg_getword(m), &n))
|
||||
return Ebadvalue;
|
||||
def.border = n;
|
||||
view_focus(screen, screen->sel);
|
||||
view_update(screen->sel);
|
||||
break;
|
||||
case LDEBUG:
|
||||
ret = msg_debug(m);
|
||||
|
@ -428,7 +451,7 @@ message_root(void *p, IxpMsg *m) {
|
|||
break;
|
||||
case LFOCUSCOLORS:
|
||||
ret = msg_parsecolors(m, &def.focuscolor);
|
||||
view_focus(screen, screen->sel);
|
||||
view_update(screen->sel);
|
||||
break;
|
||||
case LFONT:
|
||||
fn = loadfont(m->pos);
|
||||
|
@ -438,7 +461,7 @@ message_root(void *p, IxpMsg *m) {
|
|||
bar_resize(screen);
|
||||
}else
|
||||
ret = "can't load font";
|
||||
view_focus(screen, screen->sel);
|
||||
view_update(screen->sel);
|
||||
break;
|
||||
case LGRABMOD:
|
||||
s = msg_getword(m);
|
||||
|
@ -452,7 +475,7 @@ message_root(void *p, IxpMsg *m) {
|
|||
break;
|
||||
case LNORMCOLORS:
|
||||
ret = msg_parsecolors(m, &def.normcolor);
|
||||
view_focus(screen, screen->sel);
|
||||
view_update(screen->sel);
|
||||
break;
|
||||
case LSELCOLORS:
|
||||
fprint(2, "%s: warning: selcolors have been removed\n", argv0);
|
||||
|
@ -536,9 +559,7 @@ message_view(View *v, IxpMsg *m) {
|
|||
column_arrange(a, true);
|
||||
view_restack(v);
|
||||
|
||||
if(v == screen->sel)
|
||||
view_focus(screen, v);
|
||||
frame_draw_all();
|
||||
view_update(v);
|
||||
return nil;
|
||||
case LGROW:
|
||||
return msg_grow(v, m);
|
||||
|
@ -977,6 +998,7 @@ readctl_root(void) {
|
|||
bufprint("font %s\n", def.font->name);
|
||||
bufprint("grabmod %s\n", def.grabmod);
|
||||
bufprint("border %d\n", def.border);
|
||||
bufprint("bar on %s\n", barpostab[screen->barpos]);
|
||||
if(debugflag) {
|
||||
bufprint("debug ");
|
||||
printdebug(debugflag);
|
||||
|
|
|
@ -149,7 +149,7 @@ view_findarea(View *v, int idx, bool create) {
|
|||
}
|
||||
|
||||
static void
|
||||
update_frame_selectors(View *v) {
|
||||
frames_update_sel(View *v) {
|
||||
Area *a;
|
||||
Frame *f;
|
||||
|
||||
|
@ -183,10 +183,15 @@ view_update_rect(View *v) {
|
|||
r.min.x += min(left, .3 * Dx(screen->r));
|
||||
r.max.x += max(right, -.3 * Dx(screen->r));
|
||||
r.max.y += max(bottom, -.3 * Dy(screen->r));
|
||||
if(screen->barpos == BTop) {
|
||||
bar_sety(r.min.y);
|
||||
r.min.y += Dy(screen->brect);
|
||||
}else {
|
||||
r.max.y -= Dy(screen->brect);
|
||||
bar_sety(r.max.y);
|
||||
}
|
||||
v->r = r;
|
||||
|
||||
bar_sety(r.max.y);
|
||||
brect = screen->brect;
|
||||
brect.min.x = screen->r.min.x;
|
||||
brect.max.x = screen->r.max.x;
|
||||
|
@ -206,20 +211,18 @@ view_update_rect(View *v) {
|
|||
}
|
||||
|
||||
void
|
||||
view_focus(WMScreen *s, View *v) {
|
||||
view_update(View *v) {
|
||||
Client *c;
|
||||
Frame *f, *fnext;
|
||||
Area *a, *an;
|
||||
bool fscrn;
|
||||
|
||||
USED(s);
|
||||
if(v != screen->sel)
|
||||
return;
|
||||
|
||||
XGrabServer(display);
|
||||
|
||||
_view_select(v);
|
||||
update_frame_selectors(v);
|
||||
frames_update_sel(v);
|
||||
view_arrange(v);
|
||||
div_update_all();
|
||||
|
||||
fscrn = false;
|
||||
for(a=v->area; a; a=an) {
|
||||
an = a->next;
|
||||
|
@ -237,6 +240,7 @@ view_focus(WMScreen *s, View *v) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(c=client; c; c=c->next) {
|
||||
f = c->sel;
|
||||
if(f && f->view == v)
|
||||
|
@ -257,10 +261,22 @@ view_focus(WMScreen *s, View *v) {
|
|||
frame_draw_all();
|
||||
|
||||
sync();
|
||||
XUngrabServer(display);
|
||||
flushenterevents();
|
||||
}
|
||||
|
||||
void
|
||||
view_focus(WMScreen *s, View *v) {
|
||||
|
||||
USED(s);
|
||||
|
||||
XGrabServer(display);
|
||||
|
||||
_view_select(v);
|
||||
view_update(v);
|
||||
|
||||
XUngrabServer(display);
|
||||
}
|
||||
|
||||
void
|
||||
view_select(const char *arg) {
|
||||
char buf[256];
|
||||
|
@ -314,7 +330,7 @@ view_detach(Frame *f) {
|
|||
c->sel = f->cnext;
|
||||
|
||||
if(v == screen->sel)
|
||||
view_focus(screen, v);
|
||||
view_update(v);
|
||||
else if(empty_p(v))
|
||||
view_destroy(v);
|
||||
}
|
||||
|
@ -478,7 +494,7 @@ view_update_all(void) {
|
|||
|
||||
old = screen->sel;
|
||||
for(v=view; v; v=v->next)
|
||||
update_frame_selectors(v);
|
||||
frames_update_sel(v);
|
||||
|
||||
for(v=view; v; v=n) {
|
||||
n=v->next;
|
||||
|
@ -486,7 +502,7 @@ view_update_all(void) {
|
|||
view_destroy(v);
|
||||
}
|
||||
|
||||
view_focus(screen, screen->sel);
|
||||
view_update(screen->sel);
|
||||
}
|
||||
|
||||
uint
|
||||
|
|
Loading…
Reference in New Issue