devdraw, rio: more full-screen nonsense
This commit is contained in:
parent
c155dcfeb7
commit
0f897f99ef
4 changed files with 17 additions and 107 deletions
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue