commit e055ceb20bd94caff3b07e64a051ab3a899c0463 from: David Swasey via: Russ Cox date: Mon Jun 20 18:11:21 2011 UTC devdraw: Shrinking a window on osx 10.6.7 no longer disables drawing. R=rsc CC=plan9port.codebot http://codereview.appspot.com/4632051 commit - ce8d6f246568cdb397a0a0095ad843a9769149a8 commit + e055ceb20bd94caff3b07e64a051ab3a899c0463 blob - 01356726eacc77296cfff9497d21c699c8091e64 blob + 2f295a03b68aab705e4f9135bd039af136d2b9ce --- src/cmd/devdraw/osx-screen-carbon.m +++ src/cmd/devdraw/osx-screen-carbon.m @@ -524,8 +524,14 @@ eventhandler(EventHandlerCallRef next, EventRef event, 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: @@ -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