wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit ca7547d056ae46886e94dbe18205435f31e7389d
parent 391f88e730b55dccd9d3bfc8d73840af7af87e47
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Fri, 14 Apr 2006 12:45:53 +0200

implemented /def/colwidth (takes 0 for default scaling, or a px value for a specific size, ie 500 seems fine for 1400x1050 screens)


Diffstat:
cmd/wm/area.c | 12++++++++++--
cmd/wm/fs.c | 24++++++++++++++++++++++++
cmd/wm/mouse.c | 8++++----
cmd/wm/wm.c | 1+
cmd/wm/wm.h | 1+
5 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/cmd/wm/area.c b/cmd/wm/area.c @@ -17,7 +17,14 @@ vector_of_areas(AreaVector *av) Area * create_area(View *v) { - if(v->area.size >= 2 && v->area.size - 1 >= rect.width / MIN_COLWIDTH) + unsigned int w; + if(def.colw) + w = def.colw; + else if(v->area.size > 1) + w = rect.width / v->area.size; + else + w = rect.width; + if(v->area.size >= 2 && (v->area.size - 1) * MIN_COLWIDTH + w > rect.width) return nil; { static unsigned short id = 1; @@ -28,7 +35,8 @@ create_area(View *v) a->rect.height = rect.height - brect.height; a->mode = def.colmode; if(v->area.size > 1) - a->rect.width = rect.width / (v->area.size - 1); + w *= 2; + a->rect.width = w; cext_vattach(vector_of_areas(&v->area), a); v->sel = v->area.size - 1; return a; diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -188,6 +188,7 @@ qid2name(Qid *qid) case FsFselcolors: return "selcolors"; break; case FsFnormcolors: return "normcolors"; break; case FsFfont: return "font"; break; + case FsFcolw: return "colwidth"; break; case FsFgrabmod: return "grabmod"; break; case FsFrules: return "rules"; break; case FsFkeys: return "keys"; break; @@ -275,6 +276,8 @@ name2type(char *name, unsigned char dir_type) return FsFnormcolors; if(!strncmp(name, "font", 5)) return FsFfont; + if(!strncmp(name, "colwidth", 9)) + return FsFcolw; if(!strncmp(name, "grabmod", 8)) return FsFgrabmod; if(!strncmp(name, "keys", 5)) @@ -428,6 +431,7 @@ mkqid(Qid *dir, char *wname, Qid *new) case FsFborder: case FsFgrabmod: case FsFfont: + case FsFcolw: case FsFrules: case FsFselcolors: case FsFnormcolors: @@ -575,6 +579,9 @@ type2stat(Stat *stat, char *wname, Qid *dir) case FsFrules: return mkstat(stat, dir, wname, def.rules ? strlen(def.rules) : 0, IXP_DMREAD | IXP_DMWRITE); break; + case FsFcolw: + snprintf(buf, sizeof(buf), "%d", def.colw); + return mkstat(stat, dir, wname, strlen(buf), IXP_DMREAD | IXP_DMWRITE); case FsFfont: return mkstat(stat, dir, wname, strlen(def.font), IXP_DMREAD | IXP_DMWRITE); case FsFgrabmod: @@ -993,6 +1000,8 @@ xread(IXPConn *c, Fcall *fcall) p = ixp_enc_stat(p, &stat); fcall->count += type2stat(&stat, "colmode", &m->qid); p = ixp_enc_stat(p, &stat); + fcall->count += type2stat(&stat, "colwidth", &m->qid); + p = ixp_enc_stat(p, &stat); break; case FsDview: if(view.size) { @@ -1165,6 +1174,11 @@ xread(IXPConn *c, Fcall *fcall) if((fcall->count = strlen(def.grabmod))) memcpy(p, def.grabmod, fcall->count); break; + case FsFcolw: + snprintf(buf, sizeof(buf), "%d", def.colw); + if((fcall->count = strlen(buf))) + memcpy(p, buf, fcall->count); + break; case FsFfont: if((fcall->count = strlen(def.font))) memcpy(p, def.font, fcall->count); @@ -1390,6 +1404,16 @@ xwrite(IXPConn *c, Fcall *fcall) restack_view(view.data[sel]); } break; + case FsFcolw: + if(fcall->count > sizeof(buf)) + return Ebadvalue; + memcpy(buf, fcall->data, fcall->count); + buf[fcall->count] = 0; + i = cext_strtonum(buf, MIN_COLWIDTH, rect.width - MIN_COLWIDTH, &err); + if(err) + return Ebadvalue; + def.colw = i; + break; case FsFfont: if(def.font) free(def.font); diff --git a/cmd/wm/mouse.c b/cmd/wm/mouse.c @@ -205,8 +205,8 @@ do_mouse_move(Client *c) Window dummy; XEvent ev; /* borders */ - int snapw = rect.width * def.snap / 1000; - int snaph = rect.height * def.snap / 1000; + int snapw = (rect.width * def.snap) / 1000; + int snaph = (rect.height * def.snap) / 1000; unsigned int num; unsigned int dmask; XRectangle *rects = rects_of_view(c->frame.data[c->sel]->area->view, @@ -447,8 +447,8 @@ do_mouse_resize(Client *c, Align align) Window dummy; XEvent ev; /* borders */ - int snapw = rect.width * def.snap / 1000; - int snaph = rect.height * def.snap / 1000; + int snapw = (rect.width * def.snap) / 1000; + int snaph = (rect.height * def.snap) / 1000; unsigned int dmask; unsigned int num; XRectangle *rects = rects_of_view(c->frame.data[c->sel]->area->view, diff --git a/cmd/wm/wm.c b/cmd/wm/wm.c @@ -293,6 +293,7 @@ main(int argc, char *argv[]) def.font = strdup(BLITZ_FONT); def.border = 2; def.colmode = Coldefault; + def.colw = 0; cext_strlcpy(def.selcolor, BLITZ_SELCOLORS, sizeof(def.selcolor)); blitz_loadcolor(dpy, screen, def.selcolor, &def.sel); cext_strlcpy(def.normcolor, BLITZ_NORMCOLORS, sizeof(def.normcolor)); diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -154,6 +154,7 @@ typedef struct { char grabmod[5]; unsigned long mod; int colmode; + unsigned int colw; } Default; /* global variables */