commit 5e43254a12dd7eafe2ccc9890eeb27d532bdbc61
parent b42643433ebf49599e0027fb3c234bf0c4fa5079
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Mon, 27 Mar 2006 07:46:12 +0200
removed capacity (doing that as exclusive mode is saner)
Diffstat:
6 files changed, 42 insertions(+), 144 deletions(-)
diff --git a/cmd/wm/area.c b/cmd/wm/area.c
@@ -116,59 +116,12 @@ void
send2area(Area *to, Area *from, Client *c)
{
c->revert = from;
- detach_fromarea(from, c, True);
+ detach_fromarea(from, c);
attach_toarea(to, c);
focus_client(c);
}
void
-pre_attach(Area *a)
-{
- Area *new = nil;
- Client *c;
- View *v = a->view;
- unsigned int i, j;
-
- if(!a->capacity || (a->nframe < a->capacity))
- return;
- i = area2index(a);
- for(j = i + 1; j < v->narea; j++)
- if(!v->area[j]->capacity
- || (v->area[j]->capacity > v->area[j]->nframe))
- {
- new = v->area[j];
- break;
- }
- if(!new) {
- new = alloc_area(v);
- arrange_view(v, True);
- }
- c = a->frame[a->sel]->client;
- detach_fromarea(a, c, False);
- attach_toarea(new, c);
- arrange_area(new);
-}
-
-void
-post_detach(Area *a)
-{
- Client *c;
- Area *det;
- View *v = a->view;
- unsigned int i = area2index(a);
-
- if(!a->capacity || i + 1 >= v->narea)
- return;
- det = v->area[i + 1];
- if(!det->nframe)
- return;
- c = det->frame[det->sel]->client;
- detach_fromarea(det, c, True);
- attach_toarea(a, c);
- arrange_area(a);
-}
-
-void
attach_toarea(Area *a, Client *c)
{
static unsigned short id = 1;
@@ -176,7 +129,6 @@ attach_toarea(Area *a, Client *c)
if(clientofview(a->view, c))
return;
- pre_attach(a);
f = cext_emallocz(sizeof(Frame));
f->id = id++;
f->area = a;
@@ -198,7 +150,7 @@ attach_toarea(Area *a, Client *c)
}
void
-detach_fromarea(Area *a, Client *c, Bool postarrange)
+detach_fromarea(Area *a, Client *c)
{
Frame *f;
View *v = a->view;
@@ -220,11 +172,6 @@ detach_fromarea(Area *a, Client *c, Bool postarrange)
if(a->sel > 0)
a->sel--;
- if(!postarrange)
- return;
-
- post_detach(a);
-
i = area2index(a);
if(i && a->nframe)
arrange_area(a);
@@ -515,10 +462,8 @@ drop_moving(Frame *f, XRectangle *new, XPoint * pt)
for(i = 1; (i < v->narea) &&
!blitz_ispointinrect(pt->x, pt->y, &v->area[i]->rect); i++);
if((tgt = ((i < v->narea) ? v->area[i] : nil))) {
- if(tgt != src) {
+ if(tgt != src)
send2area(tgt, src, f->client);
- arrange_area(tgt);
- }
else {
for(i = 0; (i < src->nframe) && !blitz_ispointinrect(
pt->x, pt->y, &src->frame[i]->rect); i++);
diff --git a/cmd/wm/client.c b/cmd/wm/client.c
@@ -508,6 +508,35 @@ select_client(Client *c, char *arg)
}
void
+restack_client(Client *c, char *arg)
+{
+ Frame *f = c->frame[c->sel];
+ Area *a = f->area;
+ int i = area2index(a), j = frame2index(f);
+
+ if(i == -1 || j == -1)
+ return;
+
+ if(!strncmp(arg, "up", 3)) {
+ if(j)
+ i = j - 1;
+ else
+ i = a->nframe - 1;
+ }
+ else if(!strncmp(arg, "down", 5)) {
+ if(j + 1 < a->nframe)
+ i = j + 1;
+ else
+ i = 0;
+ }
+
+ a->frame[j] = a->frame[i];
+ a->frame[i] = f;
+ arrange_area(a);
+ focus_client(c);
+}
+
+void
send2area_client(Client *c, char *arg)
{
const char *errstr;
@@ -536,30 +565,6 @@ send2area_client(Client *c, char *arg)
else
to = v->area[1];
}
- else if(!strncmp(arg, "up", 3)) {
- int j = frame2index(f);
- if(j)
- i = j - 1;
- else
- i = a->nframe - 1;
- a->frame[j] = a->frame[i];
- a->frame[i] = f;
- arrange_area(a);
- focus_client(c);
- return;
- }
- else if(!strncmp(arg, "down", 5)) {
- int j = frame2index(f);
- if(j + 1 < a->nframe)
- i = j + 1;
- else
- i = 0;
- a->frame[j] = a->frame[i];
- a->frame[i] = f;
- arrange_area(a);
- focus_client(c);
- return;
- }
else if(!strncmp(arg, "toggle", 7)) {
if(i)
to = v->area[0];
diff --git a/cmd/wm/fs.c b/cmd/wm/fs.c
@@ -55,7 +55,6 @@ static char Ebadvalue[] = "bad value";
* /view/1/ FsDarea
* /view/1/ctl FsFctl command interface (area)
* /view/1/mode FsFmode column mode
- * /view/1/capacity FsFcapacity capacity of column
* /view/1/sel/ FsDclient
* /view/1/1/class FsFclass class:instance of client
* /view/1/1/name FsFname name of client
@@ -218,11 +217,6 @@ qid2name(Qid *qid)
return nil;
return "tags";
break;
- case FsFcapacity:
- if(i1 == -1 || i2 == -1)
- return nil;
- return "capacity";
- break;
case FsFmode:
if(i1 == -1 || i2 == -1)
return nil;
@@ -275,8 +269,6 @@ name2type(char *name, unsigned char dir_type)
return FsFrules;
if(!strncmp(name, "data", 5))
return FsFdata;
- if(!strncmp(name, "capacity", 9))
- return FsFcapacity;
if(!strncmp(name, "mode", 5))
return FsFmode;
if(!strncmp(name, "tag", 4))
@@ -389,7 +381,6 @@ mkqid(Qid *dir, char *wname, Qid *new)
return -1;
goto Mkfile;
break;
- case FsFcapacity:
case FsFmode:
if(dir_i1 == -1 || dir_i2 == -1 || dir_type != FsDarea)
return -1;
@@ -545,10 +536,6 @@ type2stat(Stat *stat, char *wname, Qid *dir)
case FsFdata:
return mkstat(stat, dir, wname, (dir_i1 == nlabel) ? 0 : strlen(label[dir_i1]->data), DMREAD | DMWRITE);
break;
- case FsFcapacity:
- snprintf(buf, sizeof(buf), "%u", view[dir_i1]->area[dir_i2]->capacity);
- return mkstat(stat, dir, wname, strlen(buf), DMREAD | DMWRITE);
- break;
case FsFmode:
return mkstat(stat, dir, wname, strlen(mode2str(view[dir_i1]->area[dir_i2]->mode)), DMREAD | DMWRITE);
break;
@@ -802,10 +789,8 @@ xread(IXPConn *c, Fcall *fcall)
case FsDarea:
/* jump to offset */
len = type2stat(&stat, "ctl", &m->qid);
- if(i2) {
+ if(i2)
len += type2stat(&stat, "mode", &m->qid);
- len += type2stat(&stat, "capacity", &m->qid);
- }
if(view[i1]->area[i2]->nframe)
len += type2stat(&stat, "sel", &m->qid);
for(i = 0; i < view[i1]->area[i2]->nframe; i++) {
@@ -971,8 +956,6 @@ xread(IXPConn *c, Fcall *fcall)
if(i2) {
fcall->count += type2stat(&stat, "mode", &m->qid);
p = ixp_enc_stat(p, &stat);
- fcall->count += type2stat(&stat, "capacity", &m->qid);
- p = ixp_enc_stat(p, &stat);
}
if(view[i1]->area[i2]->nframe) {
fcall->count += type2stat(&stat, "sel", &m->qid);
@@ -1120,13 +1103,6 @@ xread(IXPConn *c, Fcall *fcall)
if((fcall->count = strlen(def.font)))
memcpy(p, def.font, fcall->count);
break;
- case FsFcapacity:
- if(!i2)
- return Enofile;
- snprintf(buf, sizeof(buf), "%u", view[i1]->area[i2]->capacity);
- fcall->count = strlen(buf);
- memcpy(p, buf, fcall->count);
- break;
case FsFmode:
if(!i2)
return Enofile;
@@ -1219,12 +1195,16 @@ xwrite(IXPConn *c, Fcall *fcall)
kill_client(f->client);
else if(!strncmp(buf, "sendto ", 7))
send2area_client(f->client, &buf[7]);
+ else if(!strncmp(buf, "restack ", 8))
+ restack_client(f->client, &buf[8]);
break;
case FsDGclient:
if(!strncmp(buf, "kill", 5))
kill_client(client[i1]);
else if(!strncmp(buf, "sendto ", 7))
send2area_client(client[i1], &buf[7]);
+ else if(!strncmp(buf, "restack ", 8))
+ restack_client(client[i1], &buf[8]);
break;
default:
break;
@@ -1343,35 +1323,6 @@ xwrite(IXPConn *c, Fcall *fcall)
xfont = blitz_getfont(dpy, def.font);
update_bar_geometry();
break;
- case FsFcapacity:
- if(!i2)
- return Enofile;
- if(fcall->count > sizeof(buf))
- return Ebadvalue;
- memcpy(buf, fcall->data, fcall->count);
- buf[fcall->count] = 0;
- i = cext_strtonum(buf, 0, 0xffff, &err);
- if(err)
- return Ebadvalue;
- view[i1]->area[i2]->capacity = i;
- if(i) {
- Area *a = view[i1]->area[i2];
- len = 0;
- while(a->nframe > a->capacity)
- pre_attach(a);
- for(i = 1; i < view[i1]->narea; i++)
- len += view[i1]->area[i]->nframe;
- if(len > a->capacity) {
- while(a->nframe < a->capacity) {
- i = a->nframe;
- post_detach(a);
- if(i == a->nframe)
- break;
- }
- }
- arrange_area(a);
- }
- break;
case FsFmode:
if(!i2)
return Enofile;
diff --git a/cmd/wm/view.c b/cmd/wm/view.c
@@ -234,7 +234,7 @@ detach_fromview(View *v, Client *c)
Client *cl;
for(i = 0; i < v->narea; i++) {
if(clientofarea(v->area[i], c)) {
- detach_fromarea(v->area[i], c, True);
+ detach_fromarea(v->area[i], c);
XMoveWindow(dpy, c->framewin, 2 * rect.width, 0);
}
}
diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h
@@ -60,7 +60,6 @@ enum {
FsFtags,
FsFclass,
FsFtag,
- FsFcapacity,
FsFmode
};
@@ -92,7 +91,6 @@ struct Area {
unsigned int framesz;
unsigned int sel;
unsigned int nframe;
- unsigned int capacity;
int mode;
XRectangle rect;
};
@@ -207,14 +205,13 @@ int aid2index(View *t, unsigned short id);
void select_area(Area *a, char *arg);
void send2area(Area *to, Area *from, Client *c);
void attach_toarea(Area *a, Client *c);
-void detach_fromarea(Area *a, Client *c, Bool postarrange);
+void detach_fromarea(Area *a, Client *c);
void arrange_area(Area *a);
void resize_area(Client *c, XRectangle *r, XPoint *pt);
int str2mode(char *arg);
char *mode2str(int mode);
Bool clientofarea(Area *a, Client *c);
-void pre_attach(Area *a);
-void post_detach(Area *a);
+void restack_client(Client *c, char *arg);
/* bar.c */
Label *get_label(char *name);
diff --git a/rc/wmiirc b/rc/wmiirc
@@ -127,9 +127,9 @@ do
$MODKEY-Shift-l)
xwrite /view/sel/sel/ctl sendto next;;
$MODKEY-Shift-j)
- xwrite /view/sel/sel/ctl sendto down;;
+ xwrite /view/sel/sel/ctl restack down;;
$MODKEY-Shift-k)
- xwrite /view/sel/sel/ctl sendto up;;
+ xwrite /view/sel/sel/ctl restack up;;
$MODKEY-space)
xwrite /view/ctl select toggle;;
$MODKEY-Shift-space)