commit 8102bb76d0f00e6b0abe93a35e822daf7d2b5593
parent 5a2a1de616022e6e75da99ab5ce375e659ec2903
Author: Kris Maglione <jg@suckless.org>
Date: Fri, 2 Oct 2009 01:48:03 -0400
Fix drag indicator when dragging between Xinerama screens.
Diffstat:
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/cmd/wmii/layout.c b/cmd/wmii/layout.c
@@ -27,6 +27,7 @@ struct Framewin {
Point pt;
int orientation;
int xy;
+ int screen;
};
static Rectangle
@@ -48,8 +49,8 @@ framerect(Framewin *f) {
/* Keep onscreen */
p = ZP;
p.x -= min(0, r.min.x);
- p.x -= max(0, r.max.x - screen->r.max.x);
- p.y -= max(0, r.max.y - screen->brect.min.y - Dy(r)/2);
+ p.x -= max(0, r.max.x - screens[f->screen]->r.max.x);
+ p.y -= max(0, r.max.y - screens[f->screen]->brect.min.y - Dy(r)/2);
return rectaddpt(r, p);
}
@@ -75,6 +76,7 @@ framewin(Frame *f, Point pt, int orientation, int n) {
sethandler(fw->w, &handlers);
fw->f = f;
+ fw->screen = f->area->screen;
fw->grabbox = f->grabbox;
frameadjust(fw, pt, orientation, n);
reshapewin(fw->w, framerect(fw));
@@ -124,7 +126,6 @@ find_area(Point pt) {
int s;
v = selview;
- /* XXX: Multihead. Check this over. */
for(s=0; s < nscreens; s++) {
if(!rect_haspoint_p(pt, screens[s]->r))
continue;
@@ -132,7 +133,7 @@ find_area(Point pt) {
if(pt.x < a->r.max.x)
return a;
}
- return nil; /* XXX: Multihead. */
+ return nil;
}
static void
@@ -149,9 +150,10 @@ vplace(Framewin *fw, Point pt) {
a = find_area(pt);
if(a == nil)
- return; /* XXX: Multihead. */
+ return;
fw->ra = a;
+ fw->screen = a->screen;
pt.x = a->r.min.x;
frameadjust(fw, pt, OHoriz, Dx(a->r));
@@ -202,6 +204,7 @@ hplace(Framewin *fw, Point pt) {
if(a == nil)
return; /* XXX: Multihead. */
+ fw->screen = a->screen;
fw->ra = nil;
minw = column_minwidth();
if(abs(pt.x - a->r.min.x) < minw/2) {