wmii

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

commit 8b51412f045dd577ff86a4957be3db18c95f2977
parent da897e5bed014134326a1e3a24686b1baa576cca
Author: Anselm R. Garbe <garbeam@wmii.de>
Date:   Tue, 28 Feb 2006 16:23:05 +0100

began additions of /X/X/{max,mode} files to allow setting columns in a special mode


Diffstat:
cmd/wm/fs.c | 64++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
cmd/wm/wm.h | 4+++-
2 files changed, 67 insertions(+), 1 deletion(-)

diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c @@ -57,6 +57,8 @@ static char Enocommand[] = "command not supported"; * /1/new/ Darea * /1/float/ Darea floating clients in area 0 * /1/float/ctl Fctl command interface (area) + * /1/float/max Fmax maximum clients + * /1/float/mode Fmode col mode * /1/float/sel/ Dclient * /1/float/1/ Dclient * /1/float/1/name Fname name of client @@ -64,6 +66,8 @@ static char Enocommand[] = "command not supported"; * /1/float/1/ctl Fctl command interface (client) * /1/1/ Darea * /1/1/ctl Fctl command interface (area) + * /1/1/max Fmax maximum clients + * /1/1/mode Fmode col mode * /1/1/1/sel/ Dclient * /1/1/1/1/ Dclient * /1/1/1/name Fname name of client @@ -194,6 +198,8 @@ qid_to_name(Qid *qid) case Finc: return "inc"; break; case Fgeom: return "geometry"; break; case Fname: return "name"; break; + case Fmax: return "max"; break; + case Fmode: return "mode"; break; case Fevent: return "event"; break; case Fkey: return key[i1]->name; break; default: return nil; break; @@ -245,6 +251,10 @@ name_to_type(char *name, unsigned char dir_type) return Ffont; if(!strncmp(name, "data", 5)) return Fdata; + if(!strncmp(name, "max", 4)) + return Fmax; + if(!strncmp(name, "mode", 5)) + return Fmode; if(name_to_key(name)) return Fkey; if(!strncmp(name, "sel", 4)) @@ -576,6 +586,14 @@ type_to_stat(Stat *stat, char *wname, Qid *dir) case Fdata: return mkstat(stat, dir, wname, (dir_i1 == nlabel) ? 0 : strlen(label[dir_i1]->data), DMREAD | DMWRITE); break; + case Fmax: + snprintf(buf, sizeof(buf), "%d", page[dir_i1]->area[dir_i2]->maxclient); + return mkstat(stat, dir, wname, strlen(buf), DMREAD | DMWRITE); + break; + case Fmode: + snprintf(buf, sizeof(buf), "%d", page[dir_i1]->area[dir_i2]->mode); + return mkstat(stat, dir, wname, strlen(buf), DMREAD | DMWRITE); + break; case Fcolors: case Fselcolors: case Fnormcolors: @@ -758,6 +776,10 @@ xread(IXPConn *c, Fcall *fcall) case Darea: /* jump to offset */ len = type_to_stat(&stat, "ctl", &m->qid); + if(i2) { + len += type_to_stat(&stat, "max", &m->qid); + len += type_to_stat(&stat, "mode", &m->qid); + } for(i = 0; i < page[i1]->area[i2]->nclient; i++) { if(i == page[i1]->area[i2]->sel) snprintf(buf, sizeof(buf), "%s", "sel"); @@ -882,6 +904,12 @@ xread(IXPConn *c, Fcall *fcall) case Darea: fcall->count = type_to_stat(&stat, "ctl", &m->qid); p = ixp_enc_stat(p, &stat); + if(i2) { + fcall->count += type_to_stat(&stat, "max", &m->qid); + p = ixp_enc_stat(p, &stat); + fcall->count += type_to_stat(&stat, "mode", &m->qid); + p = ixp_enc_stat(p, &stat); + } for(i = 0; i < page[i1]->area[i2]->nclient; i++) { if(i == page[i1]->area[i2]->sel) snprintf(buf, sizeof(buf), "%s", "sel"); @@ -967,6 +995,20 @@ xread(IXPConn *c, Fcall *fcall) if((fcall->count = strlen(def.font))) memcpy(p, def.font, fcall->count); break; + case Fmax: + if(!i2) + return Enofile; + snprintf(buf, sizeof(buf), "%d", page[i1]->area[i2]->maxclient); + fcall->count = strlen(buf); + memcpy(p, buf, fcall->count); + break; + case Fmode: + if(!i2) + return Enofile; + snprintf(buf, sizeof(buf), "%d", page[i1]->area[i2]->mode); + fcall->count = strlen(buf); + memcpy(p, buf, fcall->count); + break; default: return "invalid read"; break; @@ -1169,6 +1211,28 @@ xwrite(IXPConn *c, Fcall *fcall) update_bar_geometry(); resize_all_clients(); break; + case Fmax: + if(!i2) + return Enofile; + memcpy(buf, fcall->data, fcall->count); + buf[fcall->count] = 0; + i = cext_strtonum(buf, 1, 0xffff, &err); + if(err) + return "max value out of range 1..0xffff"; + page[i1]->area[i2]->maxclient = i; + /* TODO: detach to many clients/attach */ + break; + case Fmode: + if(!i2) + return Enofile; + memcpy(buf, fcall->data, fcall->count); + buf[fcall->count] = 0; + i = cext_strtonum(buf, 1, 0xffff, &err); + if(err) + return "max value out of range 1..0xffff"; + page[i1]->area[i2]->mode = i; + arrange_column(page[i1]->area[i2]); + break; case Fkey: break; default: diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -42,7 +42,9 @@ enum { Fgeom, Fevent, Fctl, - Fname + Fname, + Fmax, + Fmode }; #define NET_ATOM_COUNT 3