devdraw, rio: more full-screen nonsense

This commit is contained in:
Russ Cox 2008-01-30 13:26:00 -05:00
parent c155dcfeb7
commit 0f897f99ef
4 changed files with 17 additions and 107 deletions

View file

@ -690,19 +690,11 @@ _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))
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))
return 0;

View file

@ -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 = c->x;
wc.y = c->y;
}
else {
wc.x = e->x;
wc.y = e->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

View file

@ -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);
}

View file

@ -122,9 +122,7 @@ 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;
@ -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);
@ -255,68 +251,6 @@ withdraw(Client *c)
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
installcmap(ScreenInfo *s, Colormap cmap)
{