Fixed bug in destroying areas. Changed vertical managed moves.

This commit is contained in:
Kris Maglione 2007-04-17 14:41:22 -04:00
parent c1a60e3f26
commit 4850457d6d
3 changed files with 34 additions and 26 deletions

View File

@ -118,7 +118,6 @@ destroy_area(Area *a) {
ta = a->next;
assert(a->prev || a->next == nil);
if(a->prev)
a->prev->next = a->next;
if(a->next)
@ -424,53 +423,58 @@ focus_area(Area *a) {
char *
select_area(Area *a, char *arg) {
static char Ebadvalue[] = "bad value";
Area *new;
uint i;
Frame *p, *f;
Area *ap;
View *v;
v = a->view;
f = a->sel;
if(!strncmp(arg, "toggle", 7)) {
if(!strcmp(arg, "toggle")) {
if(!a->floating)
new = v->area;
a = v->area;
else if(v->revert)
new = v->revert;
a = v->revert;
else
new = v->area->next;
} else if(!strncmp(arg, "left", 5)) {
a = v->area->next;
}
else if(!strcmp(arg, "left")) {
if(a->floating)
return Ebadvalue;
new = a->prev;
} else if(!strncmp(arg, "right", 5)) {
for(ap=v->area->next; ap->next; ap=ap->next)
if(ap->next == a) break;
}
else if(!strcmp(arg, "right")) {
if(a->floating)
return Ebadvalue;
new = a->next;
if(new == nil)
new = v->area->next;
ap = a->next;
if(ap == nil)
ap = v->area->next;
}
else if(!strncmp(arg, "up", 3)) {
else if(!strcmp(arg, "up")) {
if(!f)
return Ebadvalue;
p = f->aprev;
for(p = f->area->frame; p->anext; p = p->anext)
if(p->anext == f) break;
goto focus_frame;
}
else if(!strncmp(arg, "down", 5)) {
else if(!strcmp(arg, "down")) {
if(!f)
return Ebadvalue;
p = f->anext ? f->anext : a->frame;
p = f->anext;
if(p == nil)
p = a->frame;
goto focus_frame;
}
else if(!strncmp(arg, "~", 2)) {
new = v->area;
}
else if(!strcmp(arg, "~"))
ap = v->area;
else {
if(sscanf(arg, "%u", &i) != 1 || i == 0)
return Ebadvalue;
for(new=v->area->next; new->next; new=new->next)
for(ap=v->area->next; ap; ap=ap->next)
if(!--i) break;
}
focus_area(new);
focus_area(ap);
return nil;
focus_frame:

View File

@ -42,6 +42,8 @@ remove_frame(Frame *f) {
f->aprev->anext = f->anext;
if(f->anext)
f->anext->aprev = f->aprev;
if(f == a->frame)
a->frame = f->anext;
if(a->floating) {
if(f->sprev)
@ -49,6 +51,7 @@ remove_frame(Frame *f) {
if(f->snext)
f->snext->sprev = f->sprev;
}
f->anext = f->aprev = f->snext = f->sprev = nil;
}
void
@ -64,7 +67,6 @@ insert_frame(Frame *pos, Frame *f, Bool before) {
f->aprev = pos;
f->anext = pos->anext;
}else {
f->aprev = nil;
f->anext = f->area->frame;
f->area->frame = f;
}

View File

@ -156,18 +156,20 @@ static void
hplace(Framewin *fw, Point pt) {
Area *a;
View *v;
int minw;
minw = Dx(screen->rect)/NCOL;
v = screen->sel;
for(a = v->area->next; a->next; a = a->next)
if(pt.x < a->rect.max.x)
break;
if(pt.x - a->rect.min.x < Dx(a->rect)/2)
if(abs(pt.x - a->rect.min.x) < minw/2)
pt.x = a->rect.min.x;
else
else if(abs(pt.x - a->rect.max.x) < minw/2)
pt.x = a->rect.max.x;
pt.y = a->rect.min.y;
frameadjust(fw, pt, OVert, Dy(a->rect));
}