diff options
author | das <das> | 2006-07-20 06:25:18 (GMT) |
---|---|---|
committer | das <das> | 2006-07-20 06:25:18 (GMT) |
commit | 472701c8e65c0becd4620bce71070564d0569287 (patch) | |
tree | 908cf8a88b6a313743cec6481241735b0ff1f9d2 /macosx | |
parent | 516d2a2413bfa3330b641f88c3a940a54f790a60 (diff) | |
download | tk-472701c8e65c0becd4620bce71070564d0569287.zip tk-472701c8e65c0becd4620bce71070564d0569287.tar.gz tk-472701c8e65c0becd4620bce71070564d0569287.tar.bz2 |
* macosx/tkMacOSXWm.c (WmAttributesCmd, WmIconbitmapCmd): add support
* unix/tkUnixSend.c (Tk_GetUserInactiveTime): for weakly
importing symbols not available on OSX 10.2 or 10.3, enables binaires
built on later OSX versions to run on earlier ones.
* macosx/Wish.xcodeproj/project.pbxproj: enable weak-linking; turn on
extra warnings.
* macosx/README: document how to enable weak-linking; cleanup.
* unix/configure.in: add check on Darwin-X11 for ld support of -weak-l
* unix/tcl.m4: flag and weak-link libXss if possible as it is not
available before OSX 10.4; enforce requirement of OSX 10.2 for TkAqua;
move Darwin specific checks & defines that are only relevant to the tcl
build out of tcl.m4; restrict framework option to Darwin; cleanup
quoting and help messages.
* unix/configure: autoconf-2.59
* unix/tkConfig.h.in: autoheader-2.59
* macosx/GNUmakefile: enable xft for TkX11 build.
* macosx/tkMacOSXFont.c (TkMacOSXQuarzStartDraw, TkMacOSXQuarzEndDraw):
verify validity of context returned from QDBeginCGContext() before use.
* macosx/tkMacOSXKeyEvent.c: ifdef out diagnostic messages to stderr.
* macosx/tkMacOSXEvent.h: standardize MAC_OS_X_VERSION_MAX_ALLOWED
* macosx/tkMacOSXMenu.c: checks per QA1316, ensure define can be
* macosx/tkMacOSXMenubutton.c: overriden on command line (from default
* macosx/tkMacOSXMenus.c: of current OS version).
* macosx/tkMacOSXMouseEvent.c:
* macosx/tkMacOSXWm.c:
* macosx/tkMacOSXFont.c (TkpMeasureCharsInContext): fix
signed-with-unsigned comparison and other warnings from gcc4 -Wextra.
Diffstat (limited to 'macosx')
-rw-r--r-- | macosx/GNUmakefile | 3 | ||||
-rw-r--r-- | macosx/README | 37 | ||||
-rw-r--r-- | macosx/Wish.xcodeproj/project.pbxproj | 31 | ||||
-rw-r--r-- | macosx/tkMacOSXEvent.h | 7 | ||||
-rw-r--r-- | macosx/tkMacOSXFont.c | 110 | ||||
-rw-r--r-- | macosx/tkMacOSXKeyEvent.c | 19 | ||||
-rw-r--r-- | macosx/tkMacOSXMenu.c | 5 | ||||
-rw-r--r-- | macosx/tkMacOSXMenubutton.c | 5 | ||||
-rw-r--r-- | macosx/tkMacOSXMenus.c | 5 | ||||
-rw-r--r-- | macosx/tkMacOSXMouseEvent.c | 5 | ||||
-rw-r--r-- | macosx/tkMacOSXWm.c | 52 |
11 files changed, 159 insertions, 120 deletions
diff --git a/macosx/GNUmakefile b/macosx/GNUmakefile index 123efd4..ce9d159 100644 --- a/macosx/GNUmakefile +++ b/macosx/GNUmakefile @@ -4,7 +4,7 @@ # uses the standard unix build system in tk/unix (which can be used directly instead of this # if you are not using the tk/macosx projects). # -# RCS: @(#) $Id: GNUmakefile,v 1.4 2006/04/12 00:58:41 das Exp $ +# RCS: @(#) $Id: GNUmakefile,v 1.5 2006/07/20 06:25:18 das Exp $ # ######################################################################################################## @@ -117,6 +117,7 @@ export CPPROG := cp -p ifeq (${TK_X11},) override CONFIGURE_ARGS := ${CONFIGURE_ARGS} --enable-aqua else +override CONFIGURE_ARGS := ${CONFIGURE_ARGS} --enable-xft VERSION := ${VERSION}-X11 wish := ${wish}-X11 endif diff --git a/macosx/README b/macosx/README index 15b9a12..511ece3 100644 --- a/macosx/README +++ b/macosx/README @@ -1,7 +1,7 @@ Tcl/Tk Mac OS X README ---------------------- -RCS: @(#) $Id: README,v 1.17 2006/04/11 10:19:51 das Exp $ +RCS: @(#) $Id: README,v 1.18 2006/07/20 06:25:19 das Exp $ This is the README file for the Mac OS X/Darwin version of Tcl/Tk. @@ -43,9 +43,12 @@ TkAqua and TkX11 can be distinguished at runtime via [tk windowingsystem]. required to run TkAqua. However OS X 10.3 or higher is recommended (certain [file] operations behave incorrectly on earlier releases). -- Tcl/Tk built on Mac OS X 10.x will not run on 10.y for y < x, on the other -hand Tcl/Tk built on 10.y will run on 10.x for y < x (but without any of the -fixes and optimizations that would be available in a binary built on 10.x). +- Unless weak-linking is used, Tcl/Tk built on Mac OS X 10.x will not run on +10.y with y < x; on the other hand Tcl/Tk built on 10.y will always run on 10.x +with y <= x (but without any of the fixes and optimizations that would be +available in a binary built on 10.x). +Weak-linking is available on OS X 10.2 or later, it additionally allows Tcl/Tk +built on 10.x to run on any 10.y with x > y >= z (for a chosen z >= 2). - Wish checks the Resources/Scripts directory in its application bundle for a file called AppMain.tcl, if found it is used as the startup script and the @@ -158,11 +161,10 @@ tcl/macosx and tk/macosx (see below for details), but can also be built with the standard unix configure and make buildsystem in tcl/unix resp. tk/unix as on any other unix platform (indeed, the Makefiles are just wrappers around the unix buildsystem). -The Mac OS X specifc configure flags are --enable-aqua, --enable-framework and +The Mac OS X specific configure flags are --enable-aqua, --enable-framework and --disable-corefoundation (which disables CF and notably reverts to the standard -select based notifier, you will only need this if your require use of naked fork -(i.e. not followed by execve) in an unthreaded core). Note that --enable-aqua is -incompatible with --disable-corefoundation (for both Tcl and Tk configure). +select based notifier). Note that --enable-aqua is incompatible with +--disable-corefoundation (for both Tcl and Tk configure). - It is also possible to build with Apple's IDE via the projects in tk/macosx, take care to only use the project matching your DevTools and OS version: @@ -199,7 +201,7 @@ Notes about the native targets of the Xcode projects: 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 i386 DTKs, the -isysroot is not required). +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). Universal builds of Tk TEA extensions are also possible with CFLAGS set as @@ -209,7 +211,18 @@ TkX11 can be built with -arch ppc64 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. +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. + +- 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: + export MACOSX_DEPLOYMENT_TARGET=10.2 +This requires Mac OS X 10.2 and gcc 3.1; if you have gcc 4 or later you can set +CFLAGS instead: + export CFLAGS="-mmacosx-version-min=10.2" +The Wish.xcodeproj is setup to produce binaires that can run on 10.2 or later, +except for the 'ReleaseUniversal'configuration, where they require 10.4. +Support for weak-linking was added to the code for 8.4.14/8.5a5. Detailed Instructions for building with macosx/Makefile ------------------------------------------------------- @@ -250,8 +263,8 @@ instead by passing an INSTALL_ROOT argument to make: - The default Makefile targets will build _both_ debug and optimized versions of the Tcl and Tk frameworks with the standard convention of naming the debug library Tcl.framework/Tcl_debug resp. Tk.framework/Tk_debug. -This allows you to dynamically link to the debug libraries at runtime by setting - setenv DYLD_IMAGE_SUFFIX _debug +This allows switching to the debug libraries at runtime by setting + export DYLD_IMAGE_SUFFIX=_debug (c.f. man dyld for more details) If you only want to build and install the debug or optimized build, use the diff --git a/macosx/Wish.xcodeproj/project.pbxproj b/macosx/Wish.xcodeproj/project.pbxproj index 1cf376e..1e0e2bd 100644 --- a/macosx/Wish.xcodeproj/project.pbxproj +++ b/macosx/Wish.xcodeproj/project.pbxproj @@ -3354,7 +3354,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 \"${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 +3373,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 \"${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 */ @@ -3708,7 +3708,6 @@ INCLUDEDIR = "${PREFIX}/include"; INSTALL_PATH = "${BINDIR}"; LIBDIR = "${PREFIX}/lib"; - MACOSX_DEPLOYMENT_TARGET = 10.4; MANDIR = "${PREFIX}/man"; OTHER_CFLAGS = ( "-imacros", @@ -3740,6 +3739,9 @@ WARNING_CFLAGS = ( "-Wall", "-Wno-implicit-int", + "-Wextra", + "-Wno-unused-parameter", + "-Wno-missing-field-initializers", ); ZERO_LINK = NO; }; @@ -3751,6 +3753,7 @@ CFLAGS = "-arch ppc -arch i386 -isysroot ${SDKROOT} -mmacosx-version-min=10.4"; CONFIGURE_ARGS = "--disable-symbols"; GCC_PREPROCESSOR_DEFINITIONS = NDEBUG; + MACOSX_DEPLOYMENT_TARGET = 10.4; SDKROOT = /Developer/SDKs/MacOSX10.4u.sdk; }; name = ReleaseUniversal; @@ -3842,7 +3845,6 @@ INCLUDEDIR = "${PREFIX}/include"; INSTALL_PATH = "${BINDIR}"; LIBDIR = "${PREFIX}/lib"; - MACOSX_DEPLOYMENT_TARGET = 10.4; MANDIR = "${PREFIX}/man"; OTHER_CFLAGS = ( "-imacros", @@ -3874,6 +3876,9 @@ WARNING_CFLAGS = ( "-Wall", "-Wno-implicit-int", + "-Wextra", + "-Wno-unused-parameter", + "-Wno-missing-field-initializers", ); ZERO_LINK = YES; }; @@ -3911,7 +3916,6 @@ INCLUDEDIR = "${PREFIX}/include"; INSTALL_PATH = "${BINDIR}"; LIBDIR = "${PREFIX}/lib"; - MACOSX_DEPLOYMENT_TARGET = 10.4; MANDIR = "${PREFIX}/man"; OTHER_CFLAGS = ( "-imacros", @@ -3943,6 +3947,9 @@ WARNING_CFLAGS = ( "-Wall", "-Wno-implicit-int", + "-Wextra", + "-Wno-unused-parameter", + "-Wno-missing-field-initializers", ); ZERO_LINK = NO; }; @@ -3981,7 +3988,6 @@ INCLUDEDIR = "${PREFIX}/include"; INSTALL_PATH = "${BINDIR}"; LIBDIR = "${PREFIX}/lib"; - MACOSX_DEPLOYMENT_TARGET = 10.4; MANDIR = "${PREFIX}/man"; OTHER_CFLAGS = ( "-imacros", @@ -4013,6 +4019,9 @@ WARNING_CFLAGS = ( "-Wall", "-Wno-implicit-int", + "-Wextra", + "-Wno-unused-parameter", + "-Wno-missing-field-initializers", ); ZERO_LINK = NO; }; @@ -4022,7 +4031,11 @@ isa = XCBuildConfiguration; buildSettings = { CONFIGURE_ARGS = "--enable-symbols"; - GCC_PREPROCESSOR_DEFINITIONS = "__private_extern__=extern"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "DEBUG_ASSERT_PRODUCTION_CODE=0", + ); + MACOSX_DEPLOYMENT_TARGET = 10.2; }; name = Debug; }; @@ -4031,6 +4044,7 @@ buildSettings = { CONFIGURE_ARGS = "--disable-symbols"; GCC_PREPROCESSOR_DEFINITIONS = NDEBUG; + MACOSX_DEPLOYMENT_TARGET = 10.2; }; name = Release; }; @@ -4038,7 +4052,8 @@ isa = XCBuildConfiguration; buildSettings = { CONFIGURE_ARGS = "--enable-symbols"; - GCC_PREPROCESSOR_DEFINITIONS = ""; + GCC_PREPROCESSOR_DEFINITIONS = "DEBUG_ASSERT_PRODUCTION_CODE=0"; + MACOSX_DEPLOYMENT_TARGET = 10.2; }; name = DebugNoFixZL; }; diff --git a/macosx/tkMacOSXEvent.h b/macosx/tkMacOSXEvent.h index 00f1963..9c5f583 100644 --- a/macosx/tkMacOSXEvent.h +++ b/macosx/tkMacOSXEvent.h @@ -50,7 +50,7 @@ * software in accordance with the terms specified in this * license. * - * RCS: @(#) $Id: tkMacOSXEvent.h,v 1.10 2006/04/28 06:02:48 das Exp $ + * RCS: @(#) $Id: tkMacOSXEvent.h,v 1.11 2006/07/20 06:25:19 das Exp $ */ #ifndef _TKMACEVENT @@ -100,10 +100,9 @@ MODULE_SCOPE int TkMacOSXKeycodeToUnicode( MODULE_SCOPE OSStatus TkMacOSXStartTclEventLoopCarbonTimer(); MODULE_SCOPE OSStatus TkMacOSXStopTclEventLoopCarbonTimer(); -#if !defined(MAC_OS_X_VERSION_10_3) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 /* Define constants only available on Mac OS X 10.3 or later */ -enum { kEventAppAvailableWindowBoundsChanged = 110 }; +#define kEventAppAvailableWindowBoundsChanged 110 #endif #endif diff --git a/macosx/tkMacOSXFont.c b/macosx/tkMacOSXFont.c index 403a903..280e649 100644 --- a/macosx/tkMacOSXFont.c +++ b/macosx/tkMacOSXFont.c @@ -35,7 +35,7 @@ * that such fonts can not be used for controls, because controls * definitely require a family id (this assertion needs testing). * - * RCS: @(#) $Id: tkMacOSXFont.c,v 1.18 2006/05/16 07:58:09 das Exp $ + * RCS: @(#) $Id: tkMacOSXFont.c,v 1.19 2006/07/20 06:25:19 das Exp $ */ #include "tkMacOSXInt.h" @@ -690,7 +690,7 @@ TkpMeasureCharsInContext( * also something we like to decide for ourself. */ - while ((offset > urstart) && (uchars[offset-1] == ' ')) { + while ((offset > (UniCharArrayOffset)urstart) && (uchars[offset-1] == ' ')) { offset--; } @@ -708,8 +708,8 @@ TkpMeasureCharsInContext( * forward. */ - if ((offset == urstart) || (uchars[offset] != ' ')) { - while ((offset < urend) + if ((offset == (UniCharArrayOffset)urstart) || (uchars[offset] != ' ')) { + while ((offset < (UniCharArrayOffset)urend) && (uchars[offset] != ' ')) { offset++; } @@ -721,12 +721,12 @@ TkpMeasureCharsInContext( * backward. */ - if ((offset != urend) && (uchars[offset] != ' ')) { - while ((offset > urstart) + if ((offset != (UniCharArrayOffset)urend) && (uchars[offset] != ' ')) { + while ((offset > (UniCharArrayOffset)urstart) && (uchars[offset-1] != ' ')) { offset--; } - while ((offset > urstart) + while ((offset > (UniCharArrayOffset)urstart) && (uchars[offset-1] == ' ')) { offset--; } @@ -735,7 +735,7 @@ TkpMeasureCharsInContext( } } - if (offset > urend) { + if (offset > (UniCharArrayOffset)urend) { offset = urend; } @@ -747,14 +747,14 @@ TkpMeasureCharsInContext( if ((err != kATSULineBreakInWord) && !(flags & TK_WHOLE_WORDS) - && (offset <= urend)) { + && (offset <= (UniCharArrayOffset)urend)) { UniCharArrayOffset lastOffset = offset; UniCharArrayOffset nextoffset; int lastX = -1; int wantonemorechar = -1; /* undecided */ - while (offset <= urend) { + while (offset <= (UniCharArrayOffset)urend) { if (flags & TK_ISOLATE_END) { TkMacOSXLayoutSetString(fontPtr, &drawingContext, @@ -778,7 +778,7 @@ TkpMeasureCharsInContext( if (wantonemorechar == -1) { wantonemorechar = ((flags & TK_AT_LEAST_ONE) - && (lastOffset == urstart)) + && (lastOffset == (UniCharArrayOffset)urstart)) || ((flags & TK_PARTIAL_OK) && (lastX != maxLength)) @@ -811,7 +811,7 @@ TkpMeasureCharsInContext( * into account. */ - if (offset >= urend) { + if (offset >= (UniCharArrayOffset)urend) { break; } nextoffset = 0; @@ -1103,44 +1103,50 @@ TkMacOSXQuarzStartDraw( err = QDBeginCGContext(destPort, &outContext); - /* - * Now clip the CG Context to the port. We also have to intersect our clip - * region with the port visible region so we don't overwrite the window - * decoration. - */ - - if (!clipRgn) { - clipRgn = NewRgn(); + if (err == noErr && outContext) { + /* + * Now clip the CG Context to the port. We also have to intersect our clip + * region with the port visible region so we don't overwrite the window + * decoration. + */ + + if (!clipRgn) { + clipRgn = NewRgn(); + } + + GetPortBounds(destPort, &boundsRect); + + RectRgn(clipRgn, &boundsRect); + SectRegionWithPortClipRegion(destPort, clipRgn); + SectRegionWithPortVisibleRegion(destPort, clipRgn); + ClipCGContextToRegion(outContext, &boundsRect, clipRgn); + SetEmptyRgn(clipRgn); + + /* + * Note: You have to call SyncCGContextOriginWithPort + * AFTER all the clip region manipulations. + */ + + SyncCGContextOriginWithPort(outContext, destPort); + + /* + * Scale the color values, as QD uses UInt16 with the range [0..2^16-1] + * while Quarz uses float with [0..1]. NB: Only + * CGContextSetRGBFillColor() seems to be actually used by ATSU. + */ + + GetForeColor(&macColor); + CGContextSetRGBFillColor(outContext, + RGBFLOATRED(macColor), + RGBFLOATGREEN(macColor), + RGBFLOATBLUE(macColor), + 1.0f); + #ifdef TK_MAC_DEBUG_FONTS + } else { + fprintf(stderr, "QDBeginCGContext(): Error %d\n", (int) err); + #endif } - GetPortBounds(destPort, &boundsRect); - - RectRgn(clipRgn, &boundsRect); - SectRegionWithPortClipRegion(destPort, clipRgn); - SectRegionWithPortVisibleRegion(destPort, clipRgn); - ClipCGContextToRegion(outContext, &boundsRect, clipRgn); - SetEmptyRgn(clipRgn); - - /* - * Note: You have to call SyncCGContextOriginWithPort - * AFTER all the clip region manipulations. - */ - - SyncCGContextOriginWithPort(outContext, destPort); - - /* - * Scale the color values, as QD uses UInt16 with the range [0..2^16-1] - * while Quarz uses float with [0..1]. NB: Only - * CGContextSetRGBFillColor() seems to be actually used by ATSU. - */ - - GetForeColor(&macColor); - CGContextSetRGBFillColor(outContext, - RGBFLOATRED(macColor), - RGBFLOATGREEN(macColor), - RGBFLOATBLUE(macColor), - 1.0f); - drawingContextPtr->graphPort = destPort; drawingContextPtr->cgContext = outContext; drawingContextPtr->portRect = boundsRect; @@ -1170,9 +1176,11 @@ void TkMacOSXQuarzEndDraw( DrawingContext * drawingContextPtr) { - QDEndCGContext( - drawingContextPtr->graphPort, - &drawingContextPtr->cgContext); + if (drawingContextPtr->cgContext) { + QDEndCGContext( + drawingContextPtr->graphPort, + &drawingContextPtr->cgContext); + } } #endif /* TK_MAC_USE_QUARZ */ diff --git a/macosx/tkMacOSXKeyEvent.c b/macosx/tkMacOSXKeyEvent.c index 0201054..070c3d4 100644 --- a/macosx/tkMacOSXKeyEvent.c +++ b/macosx/tkMacOSXKeyEvent.c @@ -54,12 +54,18 @@ * software in accordance with the terms specified in this * license. * - * RCS: @(#) $Id: tkMacOSXKeyEvent.c,v 1.15 2006/05/12 18:17:48 das Exp $ + * RCS: @(#) $Id: tkMacOSXKeyEvent.c,v 1.16 2006/07/20 06:25:19 das Exp $ */ #include "tkMacOSXInt.h" #include "tkMacOSXEvent.h" +/* +#ifdef TK_MAC_DEBUG +#define TK_MAC_DEBUG_KEYBOARD +#endif +*/ + typedef struct { WindowRef whichWindow; int global_x, global_y; @@ -563,8 +569,7 @@ InitKeyEvent( * duplicate enums and typedefs would give errrors. */ -#if !defined(MAC_OS_X_VERSION_10_2) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_2) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1020 #define KeyboardLayoutRef Ptr #define KeyboardLayoutPropertyTag UInt32 #define kKLKCHRData 0 @@ -643,7 +648,7 @@ GetKeyboardLayout (Ptr * resourcePtr, TextEncoding * encodingPtr) if ((lastLayout != currentLayout) || (lastLayoutId != currentLayoutId)) { -#ifdef TK_MAC_DEBUG +#ifdef TK_MAC_DEBUG_KEYBOARD fprintf (stderr, "GetKeyboardLayout(): Use KLS\n"); #endif @@ -684,7 +689,7 @@ GetKeyboardLayout (Ptr * resourcePtr, TextEncoding * encodingPtr) if ((lastLayout == NULL) || (lastLayoutId != currentLayoutId)) { -#ifdef TK_MAC_DEBUG +#ifdef TK_MAC_DEBUG_KEYBOARD fprintf (stderr, "GetKeyboardLayout(): Use GetResource()\n"); #endif @@ -719,7 +724,7 @@ GetKeyboardLayout (Ptr * resourcePtr, TextEncoding * encodingPtr) if (hasLayoutChanged) { -#ifdef TK_MAC_DEBUG +#ifdef TK_MAC_DEBUG_KEYBOARD if (KCHR != NULL) { fprintf (stderr, "GetKeyboardLayout(): New 'KCHR' layout %d\n", (int) (short) currentLayoutId); @@ -747,7 +752,7 @@ GetKeyboardLayout (Ptr * resourcePtr, TextEncoding * encodingPtr) if (KCHR != NULL) { lastEncoding = GetKCHREncoding(currentKeyScript, currentLayoutId); -#ifdef TK_MAC_DEBUG +#ifdef TK_MAC_DEBUG_KEYBOARD fprintf (stderr, "GetKeyboardLayout(): New 'KCHR' encoding %lu " "(%lu + 0x%lX)\n", lastEncoding, lastEncoding & 0xFFFFL, diff --git a/macosx/tkMacOSXMenu.c b/macosx/tkMacOSXMenu.c index b3c0f20..758d107 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.29 2006/05/12 18:18:36 das Exp $ + * RCS: @(#) $Id: tkMacOSXMenu.c,v 1.30 2006/07/20 06:25:19 das Exp $ */ #include "tkMacOSXInt.h" @@ -28,8 +28,7 @@ #endif */ -#if !defined(MAC_OS_X_VERSION_10_3) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 /* Define constants only available on Mac OS X 10.3 or later */ #define kMenuAttrDoNotUseUserCommandKeys (1 << 7) #endif diff --git a/macosx/tkMacOSXMenubutton.c b/macosx/tkMacOSXMenubutton.c index 106df35..50f2ed5 100644 --- a/macosx/tkMacOSXMenubutton.c +++ b/macosx/tkMacOSXMenubutton.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: tkMacOSXMenubutton.c,v 1.10 2006/03/24 14:58:01 das Exp $ + * RCS: @(#) $Id: tkMacOSXMenubutton.c,v 1.11 2006/07/20 06:25:19 das Exp $ */ #include "tkMacOSXInt.h" @@ -19,8 +19,7 @@ #include "tkMacOSXFont.h" #include "tkMacOSXDebug.h" -#if !defined(MAC_OS_X_VERSION_10_3) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 /* Define constants only available on Mac OS X 10.3 or later */ #define kMenuAttrDoNotUseUserCommandKeys (1 << 7) #endif diff --git a/macosx/tkMacOSXMenus.c b/macosx/tkMacOSXMenus.c index 7d5471f..1810f97 100644 --- a/macosx/tkMacOSXMenus.c +++ b/macosx/tkMacOSXMenus.c @@ -11,13 +11,12 @@ * 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.13 2006/05/16 06:53:58 das Exp $ + * RCS: @(#) $Id: tkMacOSXMenus.c,v 1.14 2006/07/20 06:25:19 das Exp $ */ #include "tkMacOSXInt.h" -#if !defined(MAC_OS_X_VERSION_10_3) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 /* Define constants only available on Mac OS X 10.3 or later */ #define kMenuAttrDoNotUseUserCommandKeys (1 << 7) #endif diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index 6326ec5..59a03a8 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -54,15 +54,14 @@ * software in accordance with the terms specified in this * license. * - * RCS: @(#) $Id: tkMacOSXMouseEvent.c,v 1.22 2006/04/28 06:02:49 das Exp $ + * RCS: @(#) $Id: tkMacOSXMouseEvent.c,v 1.23 2006/07/20 06:25:19 das Exp $ */ #include "tkMacOSXInt.h" #include "tkMacOSXEvent.h" #include "tkMacOSXDebug.h" -#if !defined(MAC_OS_X_VERSION_10_3) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 /* Define constants only available on Mac OS X 10.3 or later */ #define kEventParamWindowPartCode 'wpar' #define typeWindowPartCode 'wpar' diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c index b8fcd3f..628fbfb 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.35 2006/05/16 07:37:17 das Exp $ + * RCS: @(#) $Id: tkMacOSXWm.c,v 1.36 2006/07/20 06:25:19 das Exp $ */ #include "tkMacOSXInt.h" @@ -22,14 +22,12 @@ #include "tkMacOSXEvent.h" /* Define constants only available on Mac OS X 10.3 or later */ -#if !defined(MAC_OS_X_VERSION_10_3) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_3) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 #define kSimpleWindowClass 18 #define kWindowDoesNotCycleAttribute (1L << 15) #endif /* Define constants only available on Mac OS X 10.4 or later */ -#if !defined(MAC_OS_X_VERSION_10_4) || \ - (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_4) +#if MAC_OS_X_VERSION_MAX_ALLOWED < 1040 #define kWindowNoTitleBarAttribute (1L << 9) #define kWindowMetalNoContentSeparatorAttribute (1L << 11) #endif @@ -880,17 +878,19 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ Boolean d; err = FSPathMakeRef((unsigned char*) path, &ref, &d); if (err == noErr) { -#if defined(MAC_OS_X_VERSION_10_4) && \ - (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) - err = HIWindowSetProxyFSRef(macWindow, &ref); -#else - AliasHandle alias; - err = FSNewAlias(NULL, &ref, &alias); - if (err == noErr) { - err = SetWindowProxyAlias(macWindow, alias); - DisposeHandle((Handle) alias); - } +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 + if (HIWindowSetProxyFSRef != NULL) { + err = HIWindowSetProxyFSRef(macWindow, &ref); + } else #endif + { + AliasHandle alias; + err = FSNewAlias(NULL, &ref, &alias); + if (err == noErr) { + err = SetWindowProxyAlias(macWindow, alias); + DisposeHandle((Handle) alias); + } + } } } else { int len; @@ -1714,17 +1714,19 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ } macWindow = GetWindowFromPort(TkMacOSXGetDrawablePort(winPtr->window)); if (len) { -#if defined(MAC_OS_X_VERSION_10_4) && \ - (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_4) - err = HIWindowSetProxyFSRef(macWindow, &ref); -#else - AliasHandle alias; - err = FSNewAlias(NULL, &ref, &alias); - if (err == noErr) { - err = SetWindowProxyAlias(macWindow, alias); - DisposeHandle((Handle) alias); - } +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 + if (HIWindowSetProxyFSRef != NULL) { + err = HIWindowSetProxyFSRef(macWindow, &ref); + } else #endif + { + AliasHandle alias; + err = FSNewAlias(NULL, &ref, &alias); + if (err == noErr) { + err = SetWindowProxyAlias(macWindow, alias); + DisposeHandle((Handle) alias); + } + } } else { err = RemoveWindowProxy(macWindow); if (wmPtr->hints.icon_pixmap != None) { |