mirror of
https://github.com/0intro/wmii
synced 2025-02-08 18:34:43 +03:00
Fixed bug in destroying areas. Changed vertical managed moves.
This commit is contained in:
parent
c1a60e3f26
commit
4850457d6d
@ -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:
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user