From: John M M. <jo...@us...> - 2004-04-23 20:48:43
|
Update of /cvsroot/squeak/squeak/platforms/Mac OS/vm In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2646/squeak/platforms/Mac OS/vm Modified Files: sqMacWindow.c Log Message: 3.7.3b4 ShowWindow becomes an indirect call to avoid UI thread race/crash. Index: sqMacWindow.c =================================================================== RCS file: /cvsroot/squeak/squeak/platforms/Mac OS/vm/sqMacWindow.c,v retrieving revision 1.30 retrieving revision 1.31 diff -C2 -d -r1.30 -r1.31 *** sqMacWindow.c 2 Dec 2003 04:53:12 -0000 1.30 --- sqMacWindow.c 23 Apr 2004 20:48:31 -0000 1.31 *************** *** 17,20 **** --- 17,21 ---- 3.5.1b5 June 25th, 2003 JMM fix memory leak on color table free, pull preferences from Info.plist under os-x 3.7.0bx Nov 24th, 2003 JMM move preferences to main, the proper place. + 3.7.3bx Apr 10th, 2004 JMM fix crash on showscreen *****************************************************************************/ *************** *** 144,147 **** --- 145,175 ---- } + #if TARGET_API_MAC_CARBON + extern struct VirtualMachine *interpreterProxy; + void sqShowWindow(void); + void sqShowWindowActual(void); + + void sqShowWindow(void) { + int giLocker,return_value=0; + giLocker = interpreterProxy->ioLoadFunctionFrom("getUIToLock", ""); + if (giLocker != 0) { + long *foo; + foo = malloc(sizeof(long)*4); + foo[0] = 0; + foo[1] = (int) sqShowWindowActual; + foo[2] = 0; + foo[3] = 0; + ((int (*) (void *)) giLocker)(foo); + free(foo); + } + } + + void sqShowWindowActual(void){ + #else + void sqShowWindow(void) { + #endif + ShowWindow(stWindow); + } + #define bytesPerLine(width, depth) ((((width)*(depth) + 31) >> 5) << 2) #if !TARGET_API_MAC_CARBON *************** *** 197,201 **** if (gWindowsIsInvisible) { ! ShowWindow(stWindow); gWindowsIsInvisible = false; } --- 225,229 ---- if (gWindowsIsInvisible) { ! sqShowWindow(); gWindowsIsInvisible = false; } *************** *** 407,411 **** if (gWindowsIsInvisible) { ! ShowWindow(stWindow); gWindowsIsInvisible = false; // NOT YET givers poor performance SetupSurface(); --- 435,439 ---- if (gWindowsIsInvisible) { ! sqShowWindow(); gWindowsIsInvisible = false; // NOT YET givers poor performance SetupSurface(); *************** *** 1201,1205 **** if (gWindowsIsInvisible) { ! ShowWindow(stWindow); gWindowsIsInvisible = false; } --- 1229,1233 ---- if (gWindowsIsInvisible) { ! sqShowWindow(); gWindowsIsInvisible = false; } |