URI: 
       tdevdraw, rio: more full-screen nonsense - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 0f897f99ef576ae80a1e2d7cee29c498e3449b36
   DIR parent c155dcfeb74766db97c08d7a09cca4b42ba45f0f
  HTML Author: Russ Cox <rsc@swtch.com>
       Date:   Wed, 30 Jan 2008 13:26:00 -0500
       
       devdraw, rio: more full-screen nonsense
       
       Diffstat:
         M src/cmd/devdraw/x11-init.c          |      16 ++++------------
         M src/cmd/rio/event.c                 |      39 ++++++++++---------------------
         M src/cmd/rio/main.c                  |       1 -
         M src/cmd/rio/manage.c                |      68 +------------------------------
       
       4 files changed, 17 insertions(+), 107 deletions(-)
       ---
   DIR diff --git a/src/cmd/devdraw/x11-init.c b/src/cmd/devdraw/x11-init.c
       t@@ -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))
   DIR diff --git a/src/cmd/rio/event.c b/src/cmd/rio/event.c
       t@@ -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)
       t@@ -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;
       t@@ -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);
       t@@ -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
   DIR diff --git a/src/cmd/rio/main.c b/src/cmd/rio/main.c
       t@@ -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);
                                }
   DIR diff --git a/src/cmd/rio/manage.c b/src/cmd/rio/manage.c
       t@@ -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;
       t@@ -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);
        
       t@@ -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)
        {