tdevdraw: Shrinking a window on osx 10.6.7 no longer disables drawing. - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit e055ceb20bd94caff3b07e64a051ab3a899c0463
 (DIR) parent ce8d6f246568cdb397a0a0095ad843a9769149a8
 (HTM) Author: David Swasey <david.swasey@gmail.com>
       Date:   Mon, 20 Jun 2011 14:11:21 -0400
       
       devdraw: Shrinking a window on osx 10.6.7 no longer disables drawing.
       
       R=rsc
       CC=plan9port.codebot
       http://codereview.appspot.com/4632051
       
       Diffstat:
         M src/cmd/devdraw/osx-screen-carbon.m |      23 ++++++++++++++---------
       
       1 file changed, 14 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/devdraw/osx-screen-carbon.m b/src/cmd/devdraw/osx-screen-carbon.m
       t@@ -524,8 +524,14 @@ eventhandler(EventHandlerCallRef next, EventRef event, void *arg)
                        case kEventWindowClosed:
                                exit(0);
                        
       -                case kEventWindowBoundsChanged:
       -                        eresized(0);
       +                case kEventWindowBoundsChanged:;
       +                        // We see kEventWindowDrawContent
       +                        // if we grow a window but not if we shrink it.
       +                        UInt32 flags;
       +                        GetEventParameter(event, kEventParamAttributes,
       +                                typeUInt32, 0, sizeof flags, 0, &flags);
       +                        int new = (flags & kWindowBoundsChangeSizeChanged) != 0;
       +                        eresized(new);
                                break;
                        
                        case kEventWindowDrawContent:
       t@@ -839,13 +845,12 @@ eresized(int new)
                osx.screenimage = m;
                osx.screenr = r;
                
       -        // I'm not 100% sure why this is necessary
       -        // but otherwise some resizes (esp. vertical ones)
       -        // stop updating the screen.
       -        qlock(&osx.flushlock);
       -        QDEndCGContext(GetWindowPort(osx.window), &osx.windowctx);
       -        osx.windowctx = nil;
       -        qunlock(&osx.flushlock);
       +        if(new){
       +                qlock(&osx.flushlock);
       +                QDEndCGContext(GetWindowPort(osx.window), &osx.windowctx);
       +                osx.windowctx = nil;
       +                qunlock(&osx.flushlock);
       +        }
        }
        
        void