URI: 
       tMove resize into main proc. - 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 d4853cf44b50f5de560cdea4530bd17659a32cb8
   DIR parent 5adfe7e525d79eb079f8f438dc2c37072da65b30
  HTML Author: rsc <devnull@localhost>
       Date:   Wed,  1 Oct 2003 15:20:53 +0000
       
       Move resize into main proc.
       
       Diffstat:
         M src/libdraw/x11-init.c              |      34 +++++++++++++++++++++++++------
         M src/libdraw/x11-memdraw.h           |       1 +
       
       2 files changed, 29 insertions(+), 6 deletions(-)
       ---
   DIR diff --git a/src/libdraw/x11-init.c b/src/libdraw/x11-init.c
       t@@ -14,6 +14,7 @@
        static Memimage        *xattach(char*);
        static void        plan9cmap(void);
        static int        setupcmap(XWindow);
       +static int        xreplacescreenimage(void);
        static XGC        xgc(XDrawable, int, int);
        static Image        *getimage0(Display*);
        
       t@@ -99,6 +100,8 @@ getwindow(Display *d, int ref)
        {
                Image *i;
        
       +        if(xreplacescreenimage() == 0)
       +                return 0;
                freeimage(d->screenimage);
                i = getimage0(d);
                screen = d->screenimage = d->image = i;
       t@@ -144,6 +147,13 @@ xattach(char *label)
                XWMHints hint;
        
                /*
       +        if(XInitThreads() == 0){
       +                fprint(2, "XInitThreads failed\n");
       +                abort();
       +        }
       +        */
       +
       +        /*
                 * Connect to X server.
                 */
                _x.display = XOpenDisplay(NULL);
       t@@ -567,17 +577,29 @@ xexpose(XEvent *e, XDisplay *xd)
        int
        xconfigure(XEvent *e, XDisplay *xd)
        {
       -        Memimage *m;
                XConfigureEvent *xe = (XConfigureEvent*)e;
       -        XDrawable pixmap;
        
                if(xe->width == Dx(_x.screenr) && xe->height == Dy(_x.screenr))
                        return 0;
       -        
       -        pixmap = XCreatePixmap(xd, _x.drawable, xe->width, xe->height, _x.depth);
       -        m = xallocmemimage(Rect(0, 0, xe->width, xe->height), _x.chan, pixmap);
       +        _x.newscreenr = Rect(0, 0, xe->width, xe->height);
       +        return 1;
       +}
       +
       +static int
       +xreplacescreenimage(void)
       +{
       +        Memimage *m;
       +        XDrawable pixmap;
       +        Rectangle r;
       +
       +        r = _x.newscreenr;
       +        if(eqrect(_x.screenr, r))
       +                return 0;
       +
       +        pixmap = XCreatePixmap(_x.display, _x.drawable, Dx(r), Dy(r), _x.depth);
       +        m = xallocmemimage(r, _x.chan, pixmap);
                _x.screenpm = pixmap;
       -        _x.screenr = Rect(0, 0, xe->width, xe->height);
       +        _x.screenr = r;
                _drawreplacescreenimage(m);
                return 1;
        }
   DIR diff --git a/src/libdraw/x11-memdraw.h b/src/libdraw/x11-memdraw.h
       t@@ -52,6 +52,7 @@ struct Xprivate {
                u32int                gczero0pixmap;
                XDisplay        *kbdcon;
                XDisplay        *mousecon;
       +        Rectangle        newscreenr;
                Memimage*        screenimage;
                XDrawable        screenpm;
                Rectangle        screenr;