diff options
author | das <das> | 2006-08-18 07:47:10 (GMT) |
---|---|---|
committer | das <das> | 2006-08-18 07:47:10 (GMT) |
commit | ecf66721e647c1669971b9507bb69112bb7a6595 (patch) | |
tree | e626c7bc622c86f7865d10e09338df5200f7f124 /macosx | |
parent | 5fd4bcf187894f2923bb2b01b8d08f9b47e0544d (diff) | |
download | tk-ecf66721e647c1669971b9507bb69112bb7a6595.zip tk-ecf66721e647c1669971b9507bb69112bb7a6595.tar.gz tk-ecf66721e647c1669971b9507bb69112bb7a6595.tar.bz2 |
* unix/tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for
universal builds including x86_64, for 64-bit CoreFoundation on Leopard
and for use of -mmacosx-version-min instead of MACOSX_DEPLOYMENT_TARGET.
* unix/configure.in (Darwin): remove 64-bit arch flags from CFLAGS for
combined 32-bit and 64-bit universal builds, as neither TkAqua nor TkX11
can be built for 64-bit at present.
* unix/configure: autoconf-2.59
* unix/tkConfig.h.in: autoheader-2.59
* macosx/Wish.xcodeproj/project.pbxproj: switch native release targets
to use DWARF with dSYM, Xcode 3.0 changes.
* macosx/README: updates for x86_64 and Xcode 2.3.
* macosx/tkMacOSXInit.c (TkpInit): when available, use public
TransformProcessType() API instead of CPSEnableForegroundOperation() SPI
to notify the window server that we are a GUI application.
* macosx/tkMacOSXWm.c (WmAttrGetTitlePath): use HIWindow API on >=Tiger.
* macosx/tkMacOSXMouseEvent.c (GenerateToolbarButtonEvent):
* macosx/tkMacOSXMenus.c (GenerateEditEvent):
* macosx/tkMacOSXMenu.c (MenuSelectEvent): bzero XVirtualEvent structure
before use to ensure all fields are initialized. [Bug 1542205]
Diffstat (limited to 'macosx')
-rw-r--r-- | macosx/README | 22 | ||||
-rw-r--r-- | macosx/Wish.xcodeproj/project.pbxproj | 7 | ||||
-rw-r--r-- | macosx/tkMacOSXInit.c | 42 | ||||
-rw-r--r-- | macosx/tkMacOSXMenu.c | 4 | ||||
-rw-r--r-- | macosx/tkMacOSXMenus.c | 4 | ||||
-rw-r--r-- | macosx/tkMacOSXMouseEvent.c | 8 | ||||
-rw-r--r-- | macosx/tkMacOSXWm.c | 19 |
7 files changed, 63 insertions, 43 deletions
diff --git a/macosx/README b/macosx/README index bb94bbb..95cca5b 100644 --- a/macosx/README +++ b/macosx/README @@ -1,7 +1,7 @@ Tcl/Tk Mac OS X README ---------------------- -RCS: @(#) $Id: README,v 1.19 2006/07/21 06:03:20 das Exp $ +RCS: @(#) $Id: README,v 1.20 2006/08/18 07:47:10 das Exp $ This is the README file for the Mac OS X/Darwin version of Tcl/Tk. @@ -200,19 +200,19 @@ Notes about the native targets of the Xcode projects: - To build universal binaries outside of Wish.xcodeproj, set CFLAGS as follows: export CFLAGS="-arch ppc -arch i386 \ -isysroot /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4" -This requires Mac OS X 10.4 and Xcode 2.2 (_not_ Xcode 2.1) and will work on -any of the architectures (on intel Macs, the -isysroot is not required). -Note that it is not possible to configure correctly if the current architecture -is not present in CFLAGS (i.e. -arch `arch` must always be there). +This requires Mac OS X 10.4 and Xcode 2.2 (_not_ Xcode 2.1) and will work on any +of the architectures (on intel Macs, the -isysroot may not be required). Note +that it is not possible to configure universal builds correctly if the current +architecture is not present in CFLAGS (i.e. -arch `arch` must be there). Universal builds of Tk TEA extensions are also possible with CFLAGS set as above, they will be [load]able by universal as well as thin binaries of Tk. -Note that while Tcl can be built for the ppc64 architecture, neither TkAqua nor -TkX11 can be built with -arch ppc64 as the corresponding GUI libraries are not +Note that while Tcl can be built for 64-bit architectures, neither TkAqua nor +TkX11 can be built for 64-bit as the corresponding GUI libraries are not available for 64bit at present. However, linking a universal 'ppc i386' Tk -binary against a universal 'ppc ppc64 i386' Tcl binary works just fine. -The Tk configure script automatically removes '-arch ppc64' from CFLAGS to -facilitate universal building of both Tcl and Tk with the same CFLAGS setting; -the same happens with configure in Tk extensions based on TEA 3.5 or later. +binary against a universal 'ppc ppc64 i386 x86_64' Tcl binary works just fine. +The Tk configure script automatically removes the 64-bit -arch flags from CFLAGS +to facilitate universal building of both Tcl and Tk with the same CFLAGS; the +same happens with configure in Tk extensions based on TEA 3.5 or later. - To enable weak-linking, set the MACOSX_DEPLOYMENT_TARGET environment variable to the minimal OS version (>= 10.2) the binaries should be able to run on, e.g: diff --git a/macosx/Wish.xcodeproj/project.pbxproj b/macosx/Wish.xcodeproj/project.pbxproj index 1e0e2bd..31ae02d 100644 --- a/macosx/Wish.xcodeproj/project.pbxproj +++ b/macosx/Wish.xcodeproj/project.pbxproj @@ -3298,6 +3298,7 @@ hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* Wish */; projectDirPath = ""; + projectRoot = ""; targets = ( F9E61D16090A3E94002B3151 /* Tk */, 8DD76FA90486AB0100D96B5E /* tktest */, @@ -3354,7 +3355,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/bash; - shellScript = "## tcl configure shell script phase\n\ncd \"${TCL_SRCROOT}\"/macosx &&\nif [ configure.ac -nt configure -o ../unix/configure.in -nt configure -o ../unix/tcl.m4 -nt configure -o ../unix/aclocal.m4 -nt configure ]; then\n echo \"Running autoconf & autoheader in tcl/macosx\"\n rm -rf autom4te.cache\n ${AUTOCONF:-/usr/bin/autoconf} && ${AUTOHEADER:-/usr/bin/autoheader}\n rm -rf autom4te.cache\nfi\n\ncd \"${DERIVED_FILE_DIR}\" && mkdir -p tcl && cd tcl &&\nif [ \"${TCL_SRCROOT}\"/macosx/configure -nt config.status ]; then\n echo \"Configuring tcl\"\n \"${TCL_SRCROOT}\"/macosx/configure --cache-file=../config.cache --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} --mandir=${MANDIR} --includedir=${INCLUDEDIR} --disable-shared ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi\n"; + shellScript = "## tcl configure shell script phase\n\ncd \"${TCL_SRCROOT}\"/macosx &&\nif [ configure.ac -nt configure -o ../unix/configure.in -nt configure -o ../unix/tcl.m4 -nt configure -o ../unix/aclocal.m4 -nt configure ]; then\n echo \"Running autoconf & autoheader in tcl/macosx\"\n rm -rf autom4te.cache\n ${AUTOCONF:-/usr/bin/autoconf} && ${AUTOHEADER:-/usr/bin/autoheader}\n rm -rf autom4te.cache\nfi\n\ncd \"${DERIVED_FILE_DIR}\" && mkdir -p tcl && cd tcl &&\nif [ \"${TCL_SRCROOT}\"/macosx/configure -nt config.status ]; then\n echo \"Configuring Tcl\"\n \"${TCL_SRCROOT}\"/macosx/configure --cache-file=../config.cache --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} --mandir=${MANDIR} --includedir=${INCLUDEDIR} --disable-shared ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi\n"; }; F9A5C5F608F651AB008AE941 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -3373,7 +3374,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/bash; - shellScript = "## tk configure shell script phase\n\ncd \"${TK_SRCROOT}\"/macosx &&\nif [ configure.ac -nt configure -o ../unix/configure.in -nt configure -o ../unix/tcl.m4 -nt configure -o ../unix/aclocal.m4 -nt configure ]; then\n echo \"Running autoconf & autoheader in tk/macosx\"\n rm -rf autom4te.cache\n ${AUTOCONF:-/usr/bin/autoconf} && ${AUTOHEADER:-/usr/bin/autoheader}\n rm -rf autom4te.cache\nfi\n\ncd \"${DERIVED_FILE_DIR}\" && mkdir -p tk && cd tk &&\nif [ \"${TK_SRCROOT}\"/macosx/configure -nt config.status ]; then\n echo \"Configuring tk\"\n \"${TK_SRCROOT}\"/macosx/configure --cache-file=../config.cache --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} --mandir=${MANDIR} --includedir=${INCLUDEDIR} --disable-shared --enable-aqua --with-tcl=../tcl ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi"; + shellScript = "## tk configure shell script phase\n\ncd \"${TK_SRCROOT}\"/macosx &&\nif [ configure.ac -nt configure -o ../unix/configure.in -nt configure -o ../unix/tcl.m4 -nt configure -o ../unix/aclocal.m4 -nt configure ]; then\n echo \"Running autoconf & autoheader in tk/macosx\"\n rm -rf autom4te.cache\n ${AUTOCONF:-/usr/bin/autoconf} && ${AUTOHEADER:-/usr/bin/autoheader}\n rm -rf autom4te.cache\nfi\n\ncd \"${DERIVED_FILE_DIR}\" && mkdir -p tk && cd tk &&\nif [ \"${TK_SRCROOT}\"/macosx/configure -nt config.status ]; then\n echo \"Configuring Tk\"\n \"${TK_SRCROOT}\"/macosx/configure --cache-file=../config.cache --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} --mandir=${MANDIR} --includedir=${INCLUDEDIR} --disable-shared --enable-aqua --with-tcl=../tcl ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi"; }; /* End PBXShellScriptBuildPhase section */ @@ -3682,6 +3683,7 @@ BINDIR = "${PREFIX}/bin"; CONFIGURE_ARGS = "--enable-threads ${CONFIGURE_ARGS}"; DEAD_CODE_STRIPPING = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEPLOYMENT_POSTPROCESSING = YES; GCC_DEBUGGING_SYMBOLS = full; GCC_DYNAMIC_NO_PIC = YES; @@ -3890,6 +3892,7 @@ BINDIR = "${PREFIX}/bin"; CONFIGURE_ARGS = "--enable-threads ${CONFIGURE_ARGS}"; DEAD_CODE_STRIPPING = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEPLOYMENT_POSTPROCESSING = YES; GCC_DEBUGGING_SYMBOLS = full; GCC_DYNAMIC_NO_PIC = YES; diff --git a/macosx/tkMacOSXInit.c b/macosx/tkMacOSXInit.c index a0c2de9..9024697 100644 --- a/macosx/tkMacOSXInit.c +++ b/macosx/tkMacOSXInit.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXInit.c,v 1.22 2006/07/20 06:24:16 das Exp $ + * RCS: @(#) $Id: tkMacOSXInit.c,v 1.23 2006/08/18 07:47:10 das Exp $ */ #include "tkMacOSXInt.h" @@ -255,12 +255,12 @@ TkpInit(interp) } } } -#if MAC_OSX_TK_USE_CPS_SPI + /* * If we are loaded into an executable that is not a bundled application, * the window server does not let us come to the foreground. - * For such an executable, we attempt to use an undocumented SPI to - * notify the window server that we are now a full GUI application. + * For such an executable, notify the window server that we are now a + * full GUI application. */ { /* Check whether we are a bundled executable: */ @@ -294,24 +294,34 @@ TkpInit(interp) CFRelease(bundleUrl); } - /* If we are not a bundled executable, attempt to use the CPS SPI: */ + /* If we are not a bundled executable, notify the window server that + * we are a foregroundable app. */ if (!bundledExecutable) { - /* - * Load the CPS SPI symbol dynamically, so that we don't break - * if it every disappears or changes its name. - */ - TkMacOSXInitNamedSymbol(CoreGraphics, OSErr, \ - CPSEnableForegroundOperation, ProcessSerialNumberPtr); - if (CPSEnableForegroundOperation) { - ProcessSerialNumber psn = { 0, kCurrentProcess }; + OSStatus err = procNotFound; + ProcessSerialNumber psn = { 0, kCurrentProcess }; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 + if (TransformProcessType != NULL) { + err = TransformProcessType(&psn, + kProcessTransformToForegroundApplication); + } +#endif +#if MAC_OSX_TK_USE_CPS_SPI + if (err != noErr) { /* - * Let the window server know that we are a foregroundable app + * When building or running on 10.2 or when the above fails, + * attempt to use undocumented CPS SPI to notify the window + * server. Load the SPI symbol dynamically, so that we don't + * break if it ever disappears or changes its name. */ - CPSEnableForegroundOperation(&psn); + TkMacOSXInitNamedSymbol(CoreGraphics, OSErr, + CPSEnableForegroundOperation, ProcessSerialNumberPtr); + if (CPSEnableForegroundOperation) { + CPSEnableForegroundOperation(&psn); + } } +#endif /* MAC_OSX_TK_USE_CPS_SPI */ } } -#endif /* MAC_OSX_TK_USE_CPS_SPI */ } if (tkLibPath[0] != '\0') { diff --git a/macosx/tkMacOSXMenu.c b/macosx/tkMacOSXMenu.c index 758d107..8ac888d 100644 --- a/macosx/tkMacOSXMenu.c +++ b/macosx/tkMacOSXMenu.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXMenu.c,v 1.30 2006/07/20 06:25:19 das Exp $ + * RCS: @(#) $Id: tkMacOSXMenu.c,v 1.31 2006/08/18 07:47:10 das Exp $ */ #include "tkMacOSXInt.h" @@ -3695,6 +3695,7 @@ MenuSelectEvent( { XVirtualEvent event; + bzero(&event, sizeof(XVirtualEvent)); event.type = VirtualEvent; event.serial = menuPtr->display->request; event.send_event = false; @@ -3709,7 +3710,6 @@ MenuSelectEvent( &event.x_root, &event.y_root, NULL, NULL, &event.state); event.same_screen = true; event.name = Tk_GetUid("MenuSelect"); - event.user_data = NULL; Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); } diff --git a/macosx/tkMacOSXMenus.c b/macosx/tkMacOSXMenus.c index 1810f97..22d75d0 100644 --- a/macosx/tkMacOSXMenus.c +++ b/macosx/tkMacOSXMenus.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXMenus.c,v 1.14 2006/07/20 06:25:19 das Exp $ + * RCS: @(#) $Id: tkMacOSXMenus.c,v 1.15 2006/08/18 07:47:11 das Exp $ */ #include "tkMacOSXInt.h" @@ -241,6 +241,7 @@ GenerateEditEvent( return; } + bzero(&event, sizeof(XVirtualEvent)); event.type = VirtualEvent; event.serial = Tk_Display(tkwin)->request; event.send_event = false; @@ -254,7 +255,6 @@ GenerateEditEvent( &event.x_root, &event.y_root, &x, &y, &event.state); tkwin = Tk_TopCoordsToWindow(tkwin, x, y, &event.x, &event.y); event.same_screen = true; - event.user_data = NULL; switch (flag) { case EDIT_CUT: diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index 59a03a8..2f9e4ba 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -54,7 +54,7 @@ * software in accordance with the terms specified in this * license. * - * RCS: @(#) $Id: tkMacOSXMouseEvent.c,v 1.23 2006/07/20 06:25:19 das Exp $ + * RCS: @(#) $Id: tkMacOSXMouseEvent.c,v 1.24 2006/08/18 07:47:11 das Exp $ */ #include "tkMacOSXInt.h" @@ -1009,8 +1009,9 @@ GenerateToolbarButtonEvent(MouseEventData * medPtr) if (!tkwin) { return true; } - winPtr = (TkWindow *)tkwin; + + bzero(&event, sizeof(XVirtualEvent)); event.type = VirtualEvent; event.serial = LastKnownRequestProcessed(winPtr->display); event.send_event = false; @@ -1019,13 +1020,12 @@ GenerateToolbarButtonEvent(MouseEventData * medPtr) event.root = XRootWindow(winPtr->display, 0); event.subwindow = None; event.time = TkpGetMS(); - event.x_root = medPtr->global.h; event.y_root = medPtr->global.v; event.state = medPtr->state; event.same_screen = true; event.name = Tk_GetUid("ToolbarButton"); - Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); + Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); return true; } diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c index a9b5b47..34f23b0 100644 --- a/macosx/tkMacOSXWm.c +++ b/macosx/tkMacOSXWm.c @@ -13,7 +13,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXWm.c,v 1.39 2006/08/17 01:10:21 hobbs Exp $ + * RCS: @(#) $Id: tkMacOSXWm.c,v 1.40 2006/08/18 07:47:11 das Exp $ */ #include "tkMacOSXInt.h" @@ -986,14 +986,21 @@ static Tcl_Obj * WmAttrGetTitlePath(WindowRef macWindow) { FSRef ref; - AliasHandle alias; Boolean wasChanged; UInt8 path[2048]; - OSStatus err; + OSStatus err = fnfErr; - err = GetWindowProxyAlias(macWindow, &alias); - if (err == noErr) { - err = FSResolveAlias(NULL, alias, &ref, &wasChanged); +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 + if (HIWindowGetProxyFSRef != NULL) { + err = HIWindowGetProxyFSRef(macWindow, &ref); + } +#endif + if (err != noErr) { + AliasHandle alias; + err = GetWindowProxyAlias(macWindow, &alias); + if (err == noErr) { + err = FSResolveAlias(NULL, alias, &ref, &wasChanged); + } } if (err == noErr) { err = FSRefMakePath(&ref, path, 2048); |