mirror of https://github.com/0intro/wmii
Fix some Xinerama-related off-by-ones for area indexes in the FS.
This commit is contained in:
parent
bec3694667
commit
827af3ac7b
|
@ -212,7 +212,7 @@ char* msg_selectarea(Area*, IxpMsg*);
|
||||||
char* msg_sendclient(View*, IxpMsg*, bool swap);
|
char* msg_sendclient(View*, IxpMsg*, bool swap);
|
||||||
char* readctl_root(void);
|
char* readctl_root(void);
|
||||||
char* readctl_view(View*);
|
char* readctl_view(View*);
|
||||||
Area* strarea(View*, const char*);
|
Area* strarea(View*, int, const char*);
|
||||||
void warning(const char*, ...);
|
void warning(const char*, ...);
|
||||||
/* debug */
|
/* debug */
|
||||||
void debug(int, const char*, ...);
|
void debug(int, const char*, ...);
|
||||||
|
|
|
@ -639,7 +639,7 @@ Rectangle
|
||||||
constrain(Rectangle r, int inset) {
|
constrain(Rectangle r, int inset) {
|
||||||
WMScreen **sp;
|
WMScreen **sp;
|
||||||
WMScreen *s, *sbest;
|
WMScreen *s, *sbest;
|
||||||
Rectangle isect, rbest;
|
Rectangle isect;
|
||||||
Point p;
|
Point p;
|
||||||
int best, n;
|
int best, n;
|
||||||
|
|
||||||
|
@ -650,9 +650,8 @@ constrain(Rectangle r, int inset) {
|
||||||
* D(r) < 2 * isect
|
* D(r) < 2 * isect
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sbest = nil;
|
|
||||||
rbest = ZR; /* SET(rbest) */
|
|
||||||
SET(best);
|
SET(best);
|
||||||
|
sbest = nil;
|
||||||
for(sp=screens; (s = *sp); sp++) {
|
for(sp=screens; (s = *sp); sp++) {
|
||||||
isect = rect_intersection(r, insetrect(s->r, inset));
|
isect = rect_intersection(r, insetrect(s->r, inset));
|
||||||
if(Dx(isect) >= 0 && Dy(isect) >= 0)
|
if(Dx(isect) >= 0 && Dy(isect) >= 0)
|
||||||
|
@ -667,12 +666,11 @@ constrain(Rectangle r, int inset) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p = ZP;
|
isect = insetrect(sbest->r, inset);
|
||||||
rbest = insetrect(sbest->r, inset);
|
p.x = min(r.max.x - isect.min.x, 0);
|
||||||
p.x -= min(r.max.x - rbest.min.x, 0);
|
p.x -= max(r.min.x - isect.max.x, 0);
|
||||||
p.x -= max(r.min.x - rbest.max.x, 0);
|
p.y = min(r.max.y - isect.min.y, 0);
|
||||||
p.y -= min(r.max.y - rbest.min.y, 0);
|
p.y -= max(r.min.y - isect.max.y, 0);
|
||||||
p.y -= max(r.min.y - rbest.max.y, 0);
|
|
||||||
return rectaddpt(r, p);
|
return rectaddpt(r, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -312,7 +312,7 @@ strclient(View *v, char *s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Area*
|
Area*
|
||||||
strarea(View *v, const char *s) {
|
strarea(View *v, int scrn, const char *s) {
|
||||||
Area *a;
|
Area *a;
|
||||||
long i;
|
long i;
|
||||||
|
|
||||||
|
@ -331,22 +331,21 @@ strarea(View *v, const char *s) {
|
||||||
|
|
||||||
/* FIXME: Very broken! */
|
/* FIXME: Very broken! */
|
||||||
if(i > 0) {
|
if(i > 0) {
|
||||||
for(a = v->firstarea; a; a = a->next)
|
for(a = v->areas[scrn]; a; a = a->next)
|
||||||
if(i-- == 0) break;
|
if(i-- == 1) break;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for(a = v->firstarea; a->next; a = a->next)
|
/* FIXME: Switch to circularly linked list. */
|
||||||
|
for(a = v->areas[scrn]; a->next; a = a->next)
|
||||||
;
|
;
|
||||||
for(; a != v->firstarea; a = a->prev)
|
for(; a; a = a->prev)
|
||||||
if(++i == 0) break;
|
if(++i == 0) break;
|
||||||
if(a == v->firstarea)
|
|
||||||
a = nil;
|
|
||||||
}
|
}
|
||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Frame*
|
static Frame*
|
||||||
getframe(View *v, IxpMsg *m) {
|
getframe(View *v, int scrn, IxpMsg *m) {
|
||||||
Client *c;
|
Client *c;
|
||||||
Frame *f;
|
Frame *f;
|
||||||
Area *a;
|
Area *a;
|
||||||
|
@ -361,7 +360,7 @@ getframe(View *v, IxpMsg *m) {
|
||||||
return client_viewframe(c, v);
|
return client_viewframe(c, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
a = strarea(v, s);
|
a = strarea(v, scrn, s);
|
||||||
if(a == nil) {
|
if(a == nil) {
|
||||||
fprint(2, "a == nil\n");
|
fprint(2, "a == nil\n");
|
||||||
return nil;
|
return nil;
|
||||||
|
@ -603,7 +602,7 @@ message_view(View *v, IxpMsg *m) {
|
||||||
switch(getsym(s)) {
|
switch(getsym(s)) {
|
||||||
case LCOLMODE:
|
case LCOLMODE:
|
||||||
s = msg_getword(m);
|
s = msg_getword(m);
|
||||||
a = strarea(v, s);
|
a = strarea(v, screen->idx, s);
|
||||||
if(a == nil) /* || a->floating) */
|
if(a == nil) /* || a->floating) */
|
||||||
return Ebadvalue;
|
return Ebadvalue;
|
||||||
|
|
||||||
|
@ -711,7 +710,7 @@ msg_grow(View *v, IxpMsg *m) {
|
||||||
Point amount;
|
Point amount;
|
||||||
int dir;
|
int dir;
|
||||||
|
|
||||||
f = getframe(v, m);
|
f = getframe(v, screen->idx, m);
|
||||||
if(f == nil)
|
if(f == nil)
|
||||||
return "bad frame";
|
return "bad frame";
|
||||||
c = f->client;
|
c = f->client;
|
||||||
|
@ -757,7 +756,7 @@ msg_nudge(View *v, IxpMsg *m) {
|
||||||
Point amount;
|
Point amount;
|
||||||
int dir;
|
int dir;
|
||||||
|
|
||||||
f = getframe(v, m);
|
f = getframe(v, screen->idx, m);
|
||||||
if(f == nil)
|
if(f == nil)
|
||||||
return "bad frame";
|
return "bad frame";
|
||||||
|
|
||||||
|
@ -870,17 +869,9 @@ msg_selectarea(Area *a, IxpMsg *m) {
|
||||||
ap = v->floating;
|
ap = v->floating;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if(!strcmp(s, "sel"))
|
ap = strarea(v, a->screen, s);
|
||||||
ap = v->sel;
|
if(!ap || ap->floating)
|
||||||
else {
|
return Ebadvalue;
|
||||||
if(!getulong(s, &i) || i == 0)
|
|
||||||
return Ebadvalue;
|
|
||||||
/* XXX: Multihead. */
|
|
||||||
for(ap=v->firstarea; ap; ap=ap->next)
|
|
||||||
if(--i == 0) break;
|
|
||||||
if(i != 0)
|
|
||||||
return Ebadvalue;
|
|
||||||
}
|
|
||||||
if((s = msg_getword(m))) {
|
if((s = msg_getword(m))) {
|
||||||
if(!getulong(s, &i))
|
if(!getulong(s, &i))
|
||||||
return Ebadvalue;
|
return Ebadvalue;
|
||||||
|
|
Loading…
Reference in New Issue