commit 0f897f99ef576ae80a1e2d7cee29c498e3449b36 from: Russ Cox date: Wed Jan 30 18:26:00 2008 UTC devdraw, rio: more full-screen nonsense commit - c155dcfeb74766db97c08d7a09cca4b42ba45f0f commit + 0f897f99ef576ae80a1e2d7cee29c498e3449b36 blob - 4d9074937866c66506da05243f5b78c9d56b7a01 blob + 7e795906356fe389fba5113e85181edd8673d1ce --- src/cmd/devdraw/x11-init.c +++ src/cmd/devdraw/x11-init.c @@ -690,18 +690,10 @@ _xconfigure(XEvent *e) XConfigureEvent *xe = (XConfigureEvent*)e; if(!fullscreen){ - // I can't figure this out: apparently window managers - // (e.g., rio, twm) send ConfigureEvents using absolute - // screen coordinates, but X sends events using coordinates - // relative to the parent window. - if(xe->send_event) - windowrect = Rect(xe->x, xe->y, xe->x+xe->width, xe->y+xe->height); - else{ - int rx, ry; - XWindow w; - if(XTranslateCoordinates(_x.display, _x.drawable, DefaultRootWindow(_x.display), xe->x, xe->y, &rx, &ry, &w)) - windowrect = Rect(rx, ry, rx+xe->width, ry+xe->height); - } + int rx, ry; + XWindow w; + if(XTranslateCoordinates(_x.display, _x.drawable, DefaultRootWindow(_x.display), 0, 0, &rx, &ry, &w)) + windowrect = Rect(rx, ry, rx+xe->width, ry+xe->height); } if(xe->width == Dx(_x.screenr) && xe->height == Dy(_x.screenr)) blob - b237cd1d9f7fa97acfeec2d3db8e1bfabd9cbc85 blob + c7ae135c86def4dedce9bd35d92cb831b10aa5f1 --- src/cmd/rio/event.c +++ src/cmd/rio/event.c @@ -124,9 +124,6 @@ configurereq(XConfigureRequestEvent *e) e->value_mask &= ~CWSibling; if(c){ - c->x -= c->border; - c->y -= c->border; - if(e->value_mask & CWX) c->x = e->x; if(e->value_mask & CWY) @@ -138,31 +135,19 @@ configurereq(XConfigureRequestEvent *e) if(e->value_mask & CWBorderWidth) c->border = e->border_width; - if(!(e->value_mask & (CWX|CWY))){ - e->x = 0; - e->y = 0; - } - - if((e->value_mask & (CWWidth|CWHeight)) == (CWWidth|CWHeight) - && c->dx >= c->screen->width && c->dy >= c->screen->height - && e->x == 0 && e->y == 0){ + if(c->dx >= c->screen->width && c->dy >= c->screen->height) c->border = 0; - e->value_mask |= CWX|CWY; - }else + else c->border = BORDER; - c->x += c->border; - c->y += c->border; - - e->x = c->x; - e->y = c->y; - if(e->value_mask & CWStackMode){ if(e->detail == Above) top(c); else e->value_mask &= ~CWStackMode; } + e->value_mask |= CWX|CWY|CWHeight|CWWidth; + if(c->parent != c->screen->root && c->window == e->window){ wc.x = c->x - c->border; wc.y = c->y - c->border; @@ -172,6 +157,7 @@ configurereq(XConfigureRequestEvent *e) wc.sibling = None; wc.stack_mode = e->detail; XConfigureWindow(dpy, c->parent, e->value_mask, &wc); + if(e->value_mask & CWStackMode){ top(c); active(c); @@ -179,22 +165,21 @@ configurereq(XConfigureRequestEvent *e) } } - if(c && c->init){ + if(c && c->parent != c->screen->root){ wc.x = c->border; wc.y = c->border; - } - else { - wc.x = e->x; - wc.y = e->y; + }else { + wc.x = c->x; + wc.y = c->y; } - wc.width = e->width; - wc.height = e->height; + wc.width = c->dx; + wc.height = c->dy; wc.border_width = 0; wc.sibling = None; wc.stack_mode = Above; e->value_mask &= ~CWStackMode; e->value_mask |= CWBorderWidth; - XConfigureWindow(dpy, e->window, e->value_mask, &wc); + XConfigureWindow(dpy, c->window, e->value_mask, &wc); } void blob - afb2bb8bbd3ae0f26b6c4751a332195affb84593 blob + a7f3162a7e9552fe76023a2fb08e3fa6c5d8e520 --- src/cmd/rio/main.c +++ src/cmd/rio/main.c @@ -523,7 +523,6 @@ cleanup(void) for(i = 0; i < 2; i++){ for(c = cc[i]; c; c = c->next){ if(!withdrawn(c)){ - gravitate(c, 1); XReparentWindow(dpy, c->window, c->screen->root, c->x, c->y); } blob - 6900b47cefa1108972c180c0becd49d18b97ebee blob + 33951151ee71d782d1feaade7546a8d2bc3f0970 --- src/cmd/rio/manage.c +++ src/cmd/rio/manage.c @@ -122,10 +122,8 @@ manage(Client *c, int mapped) cmapfocus(current); return 0; } - } else - gravitate(c, 0); + } - attrs.border_pixel = c->screen->black; attrs.background_pixel = c->screen->white; attrs.colormap = c->screen->def_cmap; @@ -243,9 +241,7 @@ void withdraw(Client *c) { XUnmapWindow(dpy, c->parent); - gravitate(c, 1); XReparentWindow(dpy, c->window, c->screen->root, c->x, c->y); - gravitate(c, 0); XRemoveFromSaveSet(dpy, c->window); setstate(c, WithdrawnState); @@ -253,68 +249,6 @@ withdraw(Client *c) ignore_badwindow = 1; XSync(dpy, False); ignore_badwindow = 0; -} - -void -gravitate(Client *c, int invert) -{ - int gravity, dx, dy, delta; - - gravity = NorthWestGravity; - if(c->size.flags & PWinGravity) - gravity = c->size.win_gravity; - - delta = c->border-BORDER; - switch (gravity){ - case NorthWestGravity: - dx = 0; - dy = 0; - break; - case NorthGravity: - dx = delta; - dy = 0; - break; - case NorthEastGravity: - dx = 2*delta; - dy = 0; - break; - case WestGravity: - dx = 0; - dy = delta; - break; - case CenterGravity: - case StaticGravity: - dx = delta; - dy = delta; - break; - case EastGravity: - dx = 2*delta; - dy = delta; - break; - case SouthWestGravity: - dx = 0; - dy = 2*delta; - break; - case SouthGravity: - dx = delta; - dy = 2*delta; - break; - case SouthEastGravity: - dx = 2*delta; - dy = 2*delta; - break; - default: - fprintf(stderr, "rio: bad window gravity %d for 0x%x\n", gravity, (int)c->window); - return; - } - dx += BORDER; - dy += BORDER; - if(invert){ - dx = -dx; - dy = -dy; - } - c->x += dx; - c->y += dy; } static void