Commit Diff


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