diff options
Diffstat (limited to 'macosx')
67 files changed, 26866 insertions, 24540 deletions
diff --git a/macosx/Makefile b/macosx/GNUmakefile index 99e335d..333961c 100644 --- a/macosx/Makefile +++ 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). # -# Copyright (c) 2002-2007 Daniel A. Steffen <das@users.sourceforge.net> +# Copyright (c) 2002-2008 Daniel A. Steffen <das@users.sourceforge.net> # # See the file "license.terms" for information on usage and redistribution of # this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -82,6 +82,10 @@ BUILD_STYLE = CONFIGURE_ARGS = OBJ_DIR = ${OBJROOT}/${BUILD_STYLE} +empty := +space := ${empty} ${empty} +objdir = $(subst ${space},\ ,${OBJ_DIR}) + develop_make_args := BUILD_STYLE=Development CONFIGURE_ARGS=--enable-symbols deploy_make_args := BUILD_STYLE=Deployment INSTALL_TARGET=install-strip embedded_make_args := EMBEDDED_BUILD=1 @@ -106,22 +110,26 @@ WISH = wish${VERSION} BUILD_TARGET := all tktest INSTALL_TARGET := install -ifneq ($(wildcard ${TCL_BUILD_DIR}/tclConfig.sh),) +ifneq ($(wildcard $(subst ${space},\ ,${TCL_BUILD_DIR})/tclConfig.sh),) TCL_DIR := ${TCL_BUILD_DIR} TCL_FRAMEWORK_DIR := ${TCL_BUILD_DIR}/.. +MAKE_VARS := else TCL_DIR := ${TCL_FRAMEWORK_DIR}/Tcl.framework TCL_EXE := ${TCLSH_DIR}/tclsh${TCL_VERSION} -MAKE_VARS = TCL_EXE +MAKE_VARS := TCL_EXE export DYLD_FRAMEWORK_PATH := ${TCL_FRAMEWORK_DIR} endif + 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 +override EMBEDDED_BUILD := endif INSTALL_TARGETS = install-binaries install-libraries @@ -143,7 +151,7 @@ install-${PROJECT}: target = ${INSTALL_TARGET} clean-${PROJECT} distclean-${PROJECT} test-${PROJECT}: \ target = $* -DO_MAKE = +${MAKE} -C ${OBJ_DIR} ${target} ${MAKE_ARGS_V} ${MAKE_ARGS} ${EXTRA_MAKE_ARGS} +DO_MAKE = +${MAKE} -C "${OBJ_DIR}" ${target} ${MAKE_ARGS_V} ${MAKE_ARGS} ${EXTRA_MAKE_ARGS} #------------------------------------------------------------------------------------------------------- # locations for custom tk install actions @@ -165,37 +173,37 @@ TK_FMWK_DIR := ${FMWK_DIR}/${PRODUCT_NAME}.framework/Versions/${VERSION} # build rules ${PROJECT}: - ${MAKE} install-${PROJECT} INSTALL_ROOT=${OBJ_DIR}/ + ${MAKE} install-${PROJECT} INSTALL_ROOT="${OBJ_DIR}/" -${OBJ_DIR}/Makefile: ${UNIX_DIR}/Makefile.in ${UNIX_DIR}/configure \ +${objdir}/Makefile: ${UNIX_DIR}/Makefile.in ${UNIX_DIR}/configure \ ${UNIX_DIR}/tkConfig.sh.in Tk-Info.plist.in Wish-Info.plist.in - mkdir -p ${OBJ_DIR} && cd ${OBJ_DIR} && \ - if [ ${UNIX_DIR}/configure -nt config.status ]; then ${UNIX_DIR}/configure \ - --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} \ - --mandir=${MANDIR} --enable-threads --enable-framework \ - --with-tcl=${TCL_DIR} \ + mkdir -p "${OBJ_DIR}" && cd "${OBJ_DIR}" && \ + if [ ${UNIX_DIR}/configure -nt config.status ]; then ${UNIX_DIR}/configure -C \ + --prefix="${PREFIX}" --bindir="${BINDIR}" --libdir="${LIBDIR}" \ + --mandir="${MANDIR}" --enable-threads --enable-framework \ + --with-tcl="${TCL_DIR}" \ ${CONFIGURE_ARGS} ${EXTRA_CONFIGURE_ARGS}; else ./config.status; fi -ifneq (${TK_X11},) - @cd ${OBJ_DIR} && sed -e 's#/Versions/${TCL_VERSION}#/Versions/${VERSION}#' \ +ifneq (${VERSION},${TCL_VERSION}) + @cd "${OBJ_DIR}" && sed -e 's#/Versions/${TCL_VERSION}#/Versions/${VERSION}#' \ tkConfig.sh > tkConfig.sh.1 && mv -f tkConfig.sh.1 tkConfig.sh endif -build-${PROJECT}: ${OBJ_DIR}/Makefile +build-${PROJECT}: ${objdir}/Makefile ${DO_MAKE} ifeq (${INSTALL_BUILD},) # symolic link hackery to trick # 'make install INSTALL_ROOT=${OBJ_DIR}' # into building Tk.framework and wish in ${SYMROOT} - @cd ${OBJ_DIR} && mkdir -p $(dir ./${LIBDIR}) $(dir ./${BINDIR}) ${SYMROOT} && \ - rm -rf ./${LIBDIR} ./${BINDIR} && ln -fs ${SYMROOT} ./${LIBDIR} && \ - ln -fs ${SYMROOT} ./${BINDIR} && ln -fs ${OBJ_DIR}/tktest ${SYMROOT} + @cd "${OBJ_DIR}" && mkdir -p $(dir $(subst ${space},\ ,./${LIBDIR})) $(dir $(subst ${space},\ ,./${BINDIR})) "${SYMROOT}" && \ + rm -rf "./${LIBDIR}" "./${BINDIR}" && ln -fs "${SYMROOT}" "./${LIBDIR}" && \ + ln -fs "${SYMROOT}" "./${BINDIR}" && ln -fs "${OBJ_DIR}/tktest" "${SYMROOT}" ifeq (${TK_X11},) - @rm -f ${OBJ_DIR}/${BINDIR} && \ - ln -fs Wish.app/Contents/MacOS/Wish ${SYMROOT}/${WISH} + @rm -f "${OBJ_DIR}/${BINDIR}" && \ + ln -fs Wish.app/Contents/MacOS/Wish "${SYMROOT}/${WISH}" endif # Create symbolic link to Tcl.framework in ${SYMROOT}if necessary - @cd ${SYMROOT} && if [ ! -e Tcl.framework -o -L Tcl.framework ]; then \ - rm -f Tcl.framework && ln -s ${TCL_FRAMEWORK_DIR}/Tcl.framework . ; fi + @cd "${SYMROOT}" && if [ ! -e Tcl.framework -o -L Tcl.framework ]; then \ + rm -f Tcl.framework && ln -s "${TCL_FRAMEWORK_DIR}/Tcl.framework" . ; fi endif install-${PROJECT}: build-${PROJECT} @@ -209,7 +217,7 @@ endif ifeq (${EMBEDDED_BUILD}_${TK_X11},1_) # workaround bug with 'cp -pRH' on Darwin 6 and earlier @if [ "`uname -r | awk -F. '{print $$1}'`" -lt 7 ]; then \ - mkdir -p ${TOP_DIR}/{"${TCL_FMWK_DIR}","${TK_FMWK_DIR}"}/PrivateHeaders; fi + mkdir -p "${TOP_DIR}"/{"${TCL_FMWK_DIR}","${TK_FMWK_DIR}"}/PrivateHeaders; fi endif ifeq (${INSTALL_BUILD},1) ifeq (${EMBEDDED_BUILD},1) @@ -225,16 +233,16 @@ else if [ ! -d usr/lib ]; then mkdir -p usr && ln -fs /usr/lib usr/ && RM_USRLIB=1; fi; \ if [ -n "${TK_X11}" -a ! -d usr/X11R6 ]; then mkdir -p usr && ln -fs /usr/X11R6 usr/ && RM_USRX11=1; fi; \ if [ ! -d System ]; then ln -fs /System . && RM_SYSTEM=1; fi; \ - if [ ! -d ./${LIBDIR}/Tcl.framework ]; then ln -fs ${TCL_FRAMEWORK_DIR}/Tcl.framework ./${LIBDIR}; RM_TCL=1; fi; \ + if [ ! -d "./${LIBDIR}/Tcl.framework" ]; then ln -fs "${TCL_FRAMEWORK_DIR}/Tcl.framework" "./${LIBDIR}"; RM_TCL=1; fi; \ redo_prebinding -r . "./${TK_FMWK_DIR}/${PRODUCT_NAME}"; \ if [ -z "${TK_X11}" ]; then redo_prebinding -r . "./${TK_FMWK_DIR}/Resources/Wish.app/Contents/MacOS/Wish"; \ else redo_prebinding -r . "./${BINDIR}/${WISH}"; fi; \ if [ -n "$${RM_USRLIB:-}" ]; then rm -f usr/lib; rmdir -p usr 2>&-; fi; \ if [ -n "$${RM_USRX11:-}" ]; then rm -f usr/X11R6; rmdir -p usr 2>&-; fi; \ if [ -n "$${RM_SYSTEM:-}" ]; then rm -f System; fi; \ - if [ -n "$${RM_TCL:-}" ]; then rm -f ./${LIBDIR}/Tcl.framework; fi; fi + if [ -n "$${RM_TCL:-}" ]; then rm -f "./${LIBDIR}/Tcl.framework"; fi; fi # install wish symbolic link - @ln -fs ${WISH} ${INSTALL_ROOT}${BINDIR}/${wish} + @ln -fs ${WISH} "${INSTALL_ROOT}${BINDIR}/${wish}" endif endif ifeq (${BUILD_STYLE}_${EMBEDDED_BUILD},Development_) @@ -242,20 +250,20 @@ ifeq (${BUILD_STYLE}_${EMBEDDED_BUILD},Development_) # Deployment build can be installed on top # of Development build without overwriting # the debug library - @cd ${INSTALL_ROOT}${LIBDIR}/${PRODUCT_NAME}.framework/Versions/${VERSION} && \ + @cd "${INSTALL_ROOT}${LIBDIR}/${PRODUCT_NAME}.framework/Versions/${VERSION}" && \ ln -f "${PRODUCT_NAME}" "${PRODUCT_NAME}_debug" endif ifeq (${TK_X11},) ifeq (${EMBEDDED_BUILD},) # install Wish.app link in APPLICATION_INSTALL_PATH and setup 'Wish Shell' compatibility links - @cd ${TOP_DIR} && if [ -n "${APP_DIR}" ]; then mkdir -p "./${APP_DIR}" && rm -rf "./${APP_DIR}/Wish.app" && \ - ln -fsh "./$$(echo ${APP_DIR} | sed -e 's#/[^/][^/]*#/..#g')/${FMWK_DIR}/${PRODUCT_NAME}.framework/Resources/Wish.app" "./${APP_DIR}" && \ + @cd "${TOP_DIR}" && if [ -n "${APP_DIR}" ]; then mkdir -p "./${APP_DIR}" && rm -rf "./${APP_DIR}/Wish.app" && \ + ln -fsh "./$$(echo "${APP_DIR}" | sed -e 's#/[^/][^/]*#/..#g')/${FMWK_DIR}/${PRODUCT_NAME}.framework/Resources/Wish.app" "./${APP_DIR}" && \ ln -fsh Wish.app "./${APP_DIR}/Wish Shell.app"; fi && \ ln -fsh Wish.app "./${TK_FMWK_DIR}/Resources/Wish Shell.app" && \ ln -fsh Wish "./${TK_FMWK_DIR}/Resources/Wish.app/Contents/MacOS/Wish Shell" else # if we are embedding frameworks, move them into the app and fix their install names - @cd ${TOP_DIR} && \ + @cd "${TOP_DIR}" && \ rm -rf "./${APP_DIR}/Wish.app" && mkdir -p "./${APP_DIR}" && \ mv -f "./${TK_FMWK_DIR}/Resources/Wish.app" "./${APP_DIR}" && \ ln -fsh Wish.app "./${APP_DIR}/Wish Shell.app" && \ @@ -263,8 +271,8 @@ else mkdir -p "./${APP_DIR}/Wish.app/Contents/Frameworks" && \ ${CPPROG} -RH "./${FMWK_DIR}"/T{cl,k}.framework "./${APP_DIR}/Wish.app/Contents/Frameworks" && \ cd "./${APP_DIR}/Wish.app/Contents" && \ - rm -rf Frameworks/Tcl.framework/{,/Versions/$(TCL_VERSION)}/{Headers,PrivateHeaders,*_debug,lib*.a,*Config.sh} && \ - rm -rf Frameworks/Tk.framework/{,/Versions/$(VERSION)}/{Headers,PrivateHeaders,*_debug,lib*.a,*Config.sh} && \ + rm -rf Frameworks/Tcl.framework/{,/Versions/${TCL_VERSION}}/{Headers,PrivateHeaders,*_debug,lib*.a,*Config.sh} && \ + rm -rf Frameworks/Tk.framework/{,/Versions/${VERSION}}/{Headers,PrivateHeaders,*_debug,lib*.a,*Config.sh} && \ fix_install_id ( ) { \ chmod -RH a+w "$$1"; \ install_name_tool -id $$(otool -L "$$1" | awk "/$$2\.framework.*[^:]\$$/ {sub(\"^.*/Frameworks\",\"@executable_path/../Frameworks\",\$$1); print \$$1}") "$$1"; \ @@ -278,21 +286,21 @@ else fix_install_id Frameworks/Tcl.framework/Tcl Tcl && fix_install_id Frameworks/Tk.framework/Tk Tk && \ fix_install_name MacOS/Wish Tcl && fix_install_name MacOS/Wish Tk ifeq (${INSTALL_BUILD},1) - @cd ${TOP_DIR} && rm -rf "./${FMWK_DIR}"/T{cl,k}.framework && rmdir -p "./${FMWK_DIR}" 2>&- || true + @cd "${TOP_DIR}" && rm -rf "./${FMWK_DIR}"/T{cl,k}.framework && rmdir -p "./${FMWK_DIR}" 2>&- || true endif endif endif clean-${PROJECT}: %-${PROJECT}: ${DO_MAKE} - rm -rf ${SYMROOT}/{${PRODUCT_NAME}.framework,${WISH},tktest} - rm -f ${OBJ_DIR}{${LIBDIR},${BINDIR}} && \ - rmdir -p ${OBJ_DIR}$(dir ${LIBDIR}) 2>&- || true && \ - rmdir -p ${OBJ_DIR}$(dir ${BINDIR}) 2>&- || true + rm -rf "${SYMROOT}"/{${PRODUCT_NAME}.framework,${WISH},tktest} + rm -f "${OBJ_DIR}"{"${LIBDIR}","${BINDIR}"} && \ + rmdir -p "${OBJ_DIR}"$(dir $(subst ${space},\ ,${LIBDIR})) 2>&- || true && \ + rmdir -p "${OBJ_DIR}"$(dir $(subst ${space},\ ,${BINDIR})) 2>&- || true distclean-${PROJECT}: %-${PROJECT}: clean-${PROJECT} ${DO_MAKE} - rm -rf ${OBJ_DIR} + rm -rf "${OBJ_DIR}" test-${PROJECT}: %-${PROJECT}: build-${PROJECT} ${DO_MAKE} diff --git a/macosx/README b/macosx/README index 578a2a9..8bd33d4 100644 --- a/macosx/README +++ b/macosx/README @@ -3,7 +3,6 @@ Tcl/Tk Mac OS X README This is the README file for the Mac OS X/Darwin version of Tcl/Tk. - 1. Where to go for support -------------------------- @@ -17,16 +16,11 @@ before asking on the list, many questions have already been answered). http://groups.google.com/group/comp.lang.tcl/ - The Tcl'ers Wiki also has many pages dealing with Tcl & Tk on Mac OS X, see - http://wiki.tcl.tk/references/3753! - http://wiki.tcl.tk/references/8361! + http://wiki.tcl.tk/_/ref?N=3753 + http://wiki.tcl.tk/_/ref?N=8361 - Please report bugs with Tcl or Tk on Mac OS X to the sourceforge bug trackers: - Tcl: http://sf.net/tracker/?func=add&group_id=10894&atid=110894 - Tk: http://sf.net/tracker/?func=add&group_id=12997&atid=112997 -please make sure that your report Tk specific bugs to the tktoolkit project bug -tracker rather than the tcl project bug tracker. -Mac OS X specific bugs should usually be assigned to 'das' or 'wolfsuit'. - + http://tcl.sourceforge.net/ 2. Using Tcl/Tk on Mac OS X --------------------------- @@ -34,12 +28,11 @@ Mac OS X specific bugs should usually be assigned to 'das' or 'wolfsuit'. - There are two versions of Tk available on Mac OS X: TkAqua using the native aqua widgets and look&feel, and TkX11 using the traditional unix X11 wigets. TkX11 requires an X11 server to be installed, such as Apple's X11 (which is -available as an optional install on recent Mac OS X retail disks). +available as an optional or default install on recent Mac OS X). TkAqua and TkX11 can be distinguished at runtime via [tk windowingsystem]. -- At a minimum, Mac OS X 10.1 is required to run Tcl and TkX11, and OS X 10.2 is -required to run TkAqua. However OS X 10.3 or higher is recommended (certain -[file] operations behave incorrectly on earlier releases). +- At a minimum, Mac OS X 10.3 is required to run Tcl and TkX11. +TkAqua requires Mac OS X 10.5 or later (starting with the Cocoa-based Tk 8.5.7). - 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 @@ -58,36 +51,36 @@ brings up the Tk console window at startup. This is the case when double clicking Wish in the Finder (or using 'open Wish.app' from the Terminal). - Tcl extensions can be installed in any of: - $HOME/Library/Tcl /Library/Tcl /Network/Library/Tcl /System/Library/Tcl - $HOME/Library/Frameworks /Library/Frameworks /Network/Library/Frameworks - /System/Library/Frameworks (searched in that order). + $HOME/Library/Tcl /Library/Tcl /System/Library/Tcl + $HOME/Library/Frameworks /Library/Frameworks /System/Library/Frameworks + (searched in that order). Given a potential package directory $pkg, Tcl on OSX checks for the file $pkg/Resources/Scripts/pkgIndex.tcl as well as the usual $pkg/pkgIndex.tcl. This allows building extensions as frameworks with all script files contained in the Resources/Scripts directory of the framework. - [load]able binary extensions can linked as either ordinary shared libraries -(.dylib) or as MachO bundles (since 8.4.10/8.5a3); only bundles can be unloaded, -and bundles are also loaded more efficiently from VFS (no temporary copy to the -native filesystem required). +(.dylib) or as MachO bundles (since 8.4.10/8.5a3); bundles have the advantage +that they are [load]ed more efficiently from a tcl VFS (no temporary copy to the +native filesystem required), and prior to Mac OS X 10.5, only bundles can be +[unload]ed. - The 'deploy' target of macosx/GNUmakefile installs the html manpages into the standard documentation location in the Tcl/Tk frameworks: Tcl.framework/Resources/Documentation/Reference/Tcl Tk.framework/Resources/Documentation/Reference/Tk -No nroff manpages are installed by default by the GNUmakefiles. +No nroff manpages are installed by default by the GNUmakefile. - The Tcl and Tk frameworks can be installed in any of the system's standard framework directories: - $HOME/Library/Frameworks /Library/Frameworks - /Network/Library/Frameworks /System/Library/Frameworks + $HOME/Library/Frameworks /Library/Frameworks /System/Library/Frameworks -- /usr/bin/wish8.x is a script that calls a copy of 'Wish' contained in +- ${prefix}/bin/wish8.x is a script that calls a copy of 'Wish' contained in Tk.framework/Resources -- if 'Wish' is started from the Finder or via 'open', $argv contains a -"-psn_XXXX" argument. This is the Wish's carbon process serial number, you may -need to filter it out for cross platform compatibility of your scripts. +- if 'Wish' is started from the Finder or via 'open', $argv may contain a +"-psn_XXXX" argument. This is the process serial number, you may need to filter +it out for cross platform compatibility of your scripts. - the env array is different when Wish is started from the Finder (i.e. via LaunchServices) than when it (or tclsh) is invoked from the Terminal, in @@ -95,56 +88,154 @@ particular PATH may not be what you expect. (Wish started by LaunchServices inherits loginwindow's environment variables, which are essentially those set in $HOME/.MacOSX/environment.plist, and are unrelated to those set in your shell). -- As of Tk 8.4.7, TkAqua has a version of the low-level drawing primitives using -the CoreGraphics routines - the code is primarily due to James Tittle. There -were numerous problems with the QD version, mostly due to the different drawing -model of QD & Tk. CG also trivially supports dashed lines, and the various end -caps & miters. The old QD code is retained for now, just in case there are any -compatibility problems. To switch back to the QD drawing, put - set tk::mac::useCGDrawing 0 -in your script before you do drawing. -All CG drawing is antialiased by default, but (outline) linewidth can be used to -control whether a line/shape is drawn antialiased. The antialiasing threshold is -0 by default (i.e. antialias everything), it can be changed by setting +- TkAqua drawing is antialiased by default, but (outline) linewidth can be used +to control whether a line/shape is drawn antialiased. The antialiasing threshold +is 0 by default (i.e. antialias everything), it can be changed by setting set tk::mac::CGAntialiasLimit <limit> in your script before drawing, in which case lines (or shapes with outlines) thinner than <limit> pixels will not be antialiased. -- Quickdraw text antialiasing is enabled by default when available (from 10.1.5 -onwards). Changing the global boolean variable '::tk::mac::antialiasedtext' -allows to dis/enable antialiasing on the fly from Tcl (even for existing text). +- Text antialiasing by default uses the standard OS antialising settings. +Setting the global variable '::tk::mac::antialiasedtext' allows to control text +antialiasing from Tcl: a value of 1 enables AA, 0 disables AA and -1 restores +the default behaviour of respecting the OS settings. - Scrollbars: There are two scrollbar variants in Aqua, normal & small. The -normal scrollbar has a small dimension of 15, the small variant 11. Access to -the small variant was added in Tk 8.4.2. - -- Cursors: You can now put up and spin the Classic MacOS spinner, and the -counting hands and watch cursor. The way this is done is each of the spinners -have a base name: - spinning: The circular B&W circular spinner - countinguphand: The counting up hand - countingdownhand: The counting down hand - countingupanddownhand: The counting up then down hand - watch: The watch cursor -Then to get the sequential variants, add an integer to the end of the base name. -So, for instance this code will spin the spinner: - proc spinCursor {widget count} { - $widget configure -cursor spinning$count - after 100 spinCursor [incr count] - } -This was added in Tk 8.4.2 +normal scrollbar has a small dimension of 15, the small variant 11. +Access to the small variant was added in Tk 8.4.2. + +- The default metrics of native buttons, radiobuttons, checkboxes and +menubuttons in the Cocoa-based Tk 8.5.7 and later preserve compatibility with +the older Carbon-based implementation, you can turn off the compatibility +metrics to get more native-looking spacing by setting: + set tk::mac::useCompatibilityMetrics 0 + +- TkAqua provides access to native OS X images via the Tk native bitmap facility +(including any image file readable by NSImage). A native bitmap name is +interpreted as follows (in order): + - predefined builtin 32x32 icon name (stop, caution, document, etc) + - name defined by [tk::mac::iconBitmap] + - NSImage named image name + - NSImage url string + - 4-char OSType of IconServices icon +the syntax of [tk::mac::iconBitmap] is as follows: + tk::mac::iconBitmap name width height -kind value +where -kind is one of + -file icon of file at given path + -fileType icon of given file type + -osType icon of given 4-char OSType file type + -systemType icon for given IconServices 4-char OSType + -namedImage named NSImage for given name + -imageFile image at given path +This support was added with the Cocoa-based Tk 8.5.7. + +- TkAqua cursor names are interpred as follows (in order): + - standard or platform-specific Tk cursor name (c.f. cursors.n) + - @path to any image file readable by NSImage + - NSImage named image name +Support for the latter two was added with the Cocoa-based Tk 8.5.7. + +- The standard Tk dialog commands [tk_getOpenFile], [tk_chooseDirectory], +[tk_getSaveFile] and [tk_messageBox] all take an additional optional -command +parameter on TkAqua. If it is present, the given command prefix is evaluated at +the global level when the dialog closes, with the dialog command's result +appended (the dialog command itself returning an emtpy result). If the -parent +option is also present, the dialog is configured as a modeless (window-modal) +sheet attached to the parent window and the dialog command returns immediately. +Support for -command was added with the Cocoa-based Tk 8.5.7. + +- The TkAqua-specific [tk::mac::standardAboutPanel] command brings the standard +Cocoa about panel to the front, with all its information filled in from your +application bundle files (i.e. standard about panel with no options specified). +See Apple Technote TN2179 and the AppKit documentation for -[NSApplication +orderFrontStandardAboutPanelWithOptions:] for details on the Info.plist keys and +app bundle files used by the about panel. +This support was added with the Cocoa-based Tk 8.5.7. + +- TkAqua has three special menu names that give access to the standard +Application, Window and Help menus, see menu.n for details. +By default, the platform-specific standard Help menu item "YourApp Help" peforms +the default Cocoa action of showing the Help Book configured in the +application's Info.plist (or displaying an alert if no Help Book is set). This +action can be customized by defining a procedure named [tk::mac::ShowHelp], if +present, this procedure is invoked instead by the standard Help menu item. +Support for the Window menu and [tk::mac::ShowHelp] was added with the +Cocoa-based Tk 8.5.7. + +- The TkAqua-specific command [tk::unsupported::MacWindowStyle style] is used to +get and set Mac OS X-specific toplevel window class and attributes. Note that +the window class and many attributes have to be set before the window is first +mapped for the change to have any effect. +The command has the following syntax: + tk::unsupported::MacWindowStyle style window ?class? ?attributes? +The 2 argument form returns a list of the current class and attributes for the +given window. The 3 argument form sets the class for the given window using the +default attributes for that class. The 4 argument form sets the class and the +list of attributes for the given window. +Window class names: + document, modal, floating, utility, toolbar, simple, help, overlay +Window attribute names: + standardDocument, standardFloating, resizable, fullZoom, horizontalZoom, + verticalZoom, closeBox, collapseBox, toolbarButton, sideTitlebar, + noTitleBar, unifiedTitleAndToolbar, metal, hud, noShadow, doesNotCycle, + noActivates, hideOnSuspend, inWindowMenu, ignoreClicks, doesNotHide, + canJoinAllSpaces, moveToActiveSpace, nonActivating, black, dark, light, + gray, red, green, blue, cyan, yellow, magenta, orange, purple, + brown, clear, opacity + +Note that not all attributes are valid for all window classes. +Support for the 3 argument form was added with the Cocoa-based Tk 8.5.7, at the +same time support for some legacy Carbon-specific classes and attributes was +removed (they are still accepted by the command but no longer have any effect). + +The color window attributes (black, dark, red, etc.) and the "opacity" allow one to set the background and opacity of a textured ("metal") window. This allows a Tk window to implement a window without the dividing line between the titlebar and the rest of the window, or the "unified toolbar" effect, which is increasingly standard in Mac applications. An example: + +toplevel .f +tk::unsupported::MacWindowStyle style .f document {metal light opaque closeBox collapseBox resizable standardDocument } + +pack [label .f.f -bg #ababab -text "This is a textured window\nwith opacity and a gray background\nsimilar to other Mac applications"] -fill both -expand yes + +The color attributes correspond to system-defined NSColor constants (e.g., red is [NSColor redColor]. The "light" and "dark" attributes correspond to lightGrayColor and darkGrayColor, respectively (because of the way the attributes are parsed, using "lightgray" and "darkgray" would cause a conflict with the core "gray" attribute). + +Below are the corresponding hex and/or Tk-defined colors that can be used from Tk widgets to match the NSColor-based attributes: + +black #000000 +dark #545454 +light #ababab +white #ffffff +gray #7f7f7f +red #ff0000 +green #00ff00 +blue #0000ff +cyan #00ffff +yellow #ffff00 +magenta #ff00ff +orange #ff8000 +purple #800080 +brown #996633 +clear systemTransparent + +- The Cocoa-based TkAqua can be distinguished from the older Carbon-based +version via the [winfo server .] command, example output on Mac OS X 10.5.7: + Cocoa-based: CG409.3 Apple AppKit GC 949.46 Mac OS X 1057 + Carbon-based: QD10R30 Apple 1057 + +- If you want to use Remote Debugging with Xcode, you need to set the +environment variable XCNOSTDIN to 1 in the Executable editor for Wish. That will +cause us to force closing stdin & stdout. Otherwise, given how Xcode launches +Wish remotely, they will be left open and then Wish & gdb will fight for stdin. 3. Building Tcl/Tk on Mac OS X ------------------------------ -- At least Mac OS X 10.1 is required to build Tcl and TkX11 and OS X 10.2 is -required to build TkAqua. Apple's Developer Tools need to be installed (only the -most recent version matching your OS release is supported). The Developer Tools -installer is available on Mac OS X retail disks or is present in -/Applications/Installers on Macs that came with OS X preinstalled. The most -recent version can be downloaded from the ADC website http://connect.apple.com -(after you register for free ADC membership). +- At least Mac OS X 10.3 is required to build Tcl and TkX11, and Mac OS X 10.5 +is required to build TkAqua. +Apple's Xcode Developer Tools need to be installed (only the most recent version +matching your OS release is supported), the Xcode installer is available on Mac +OS X install media or may be present in /Applications/Installers on Macs that +came with OS X preinstalled. The most recent version can always be downloaded +from the ADC website http://connect.apple.com (free ADC membership required). - Tcl/Tk are most easily built as Mac OS X frameworks via GNUmakefile in tcl/macosx and tk/macosx (see below for details), but can also be built with the @@ -156,34 +247,64 @@ The Mac OS X specific configure flags are --enable-aqua, --enable-framework and 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 tk/macosx/Wish.pbproj -project, this simply calls through to the tk/macosx/Makefile. It requires a -build of the tcl/macosx/Tcl.pbproj project. - -- To build universal binaries, 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 (the -isysroot flag is only required on PowerPC Tiger). +- It is also possible to build with the Xcode IDE via the projects in +tk/macosx, take care to use the project matching your DevTools and OS version: + Tk.xcode: for Xcode 3.1 on 10.5 + Tk.xcodeproj: for Xcode 3.2 on 10.6 +These have the following targets: + Tk: calls through to tk/macosx/GNUMakefile, + requires a corresponding build of the Tcl + target of tcl/macosx/Tcl.xcode. + tktest: static build of TkAqua tktest for debugging. + tktest-X11: static build of TkX11 tktest for debugging. +The following build configurations are available: + Debug: debug build for the active architecture, + with Fix & Continue enabled. + Debug gcc42: use gcc 4.2 compiler. + Debug gcc42 nogc: disable Objective-C garbage collection. + Debug llvmgcc42: use llvm-gcc 4.2 compiler. + DebugNoFixAndContinue: disable Fix & Continue. + DebugUnthreaded: disable threading. + DebugNoCF: disable corefoundation (X11 only). + DebugNoCFUnthreaded: disable corefoundation an threading. + DebugMemCompile: enable memory and bytecode debugging. + DebugLeaks: define PURIFY. + DebugGCov: enable generation of gcov data files. + Debug64bit: configure with --enable-64bit (requires + building on a 64bit capable processor). + Release: release build for the active architecture. + ReleaseUniversal: 32/64-bit universal build. + ReleaseUniversal gcc42: use gcc 4.2 compiler. + ReleaseUniversal llvmgcc42: use llvm-gcc 4.2 compiler. + ReleaseUniversal10.5SDK: build against the 10.5 SDK (with 10.5 + deployment target). + Note that the non-SDK configurations have their deployment target set to + 10.5 (Tk.xcode) resp. 10.6 (Tk.xcodeproj). +The Xcode projects refer to the toplevel tcl and tk source directories via the +the TCL_SRCROOT and TK_SRCROOT user build settings, by default these are set to +the project-relative paths '../../tcl' and '../../tk', if your source +directories are named differently, e.g. '../../tcl8.5' and '../../tk8.5', you +need to manually change the TCL_SRCROOT and TK_SRCROOT settings by editing your +${USER}.pbxuser file (located inside the Tk.xcodeproj bundle directory) with a +text editor. + +- To build universal binaries outside of the Xcode IDE, set CFLAGS as follows: + export CFLAGS="-arch i386 -arch x86_64 -arch ppc" +This requires Mac OS X 10.4 and Xcode 2.4 (or Xcode 2.2 if -arch x86_64 is +omitted, but _not_ Xcode 2.1) and will work on any architecture (on PowerPC +Tiger you need to add "-isysroot /Developer/SDKs/MacOSX10.4u.sdk"). Note that configure requires CFLAGS to contain a least one architecture that can -be run on the build machine (i.e. ppc on PowerPC, ppc or i386 on Intel). -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 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 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. +be run on the build machine (i.e. ppc on G3/G4, ppc or ppc64 on G5, ppc or i386 +on Core and ppc, i386 or x86_64 on Core2/Xeon). +Universal builds of Tcl TEA extensions are also possible with CFLAGS set as +above, they will be [load]able by universal as well as thin binaries of Tcl. - 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" -Support for weak-linking was added to the code for 8.4.14/8.5a5. +to the minimal OS version the binaries should be able to run on, e.g: + export MACOSX_DEPLOYMENT_TARGET=10.4 +This requires at least gcc 3.1; with gcc 4 or later, set/add to CFLAGS instead: + export CFLAGS="-mmacosx-version-min=10.4" +Support for weak-linking was added with 8.4.14/8.5a5. Detailed Instructions for building with macosx/GNUmakefile ---------------------------------------------------------- @@ -197,59 +318,58 @@ trees in a common parent directory. [ or you can pass an argument of BUILD_DIR=/somewhere to the tcl and tk make. ] - The following instructions assume the Tcl and Tk source trees are named -"tcl${ver}" and "tk${ver}", respectively, where ${ver} is a shell variable -containing the Tcl and Tk version number (for example '8.4.12'). -Setup the shell variable as follows: - set ver="8.4.12" ;: if your shell is csh - ver="8.4.12" ;: if your shell is sh -The source trees will be named this way only if you are building from a release -archive, if you are building from CVS, the version numbers will be missing; so -set ${ver} to the empty string instead: - set ver="" ;: if your shell is csh - ver="" ;: if your shell is sh - -- The following steps will build Tcl and Tk from the Terminal, assuming you are -located in the directory containing the tcl and tk source trees: +"tcl${ver}" and "tk${ver}" (where ${ver} is a shell variable containing the +Tcl/Tk version number, e.g. '8.5'). +Setup this shell variable as follows: + ver="8.5" +If you are building from CVS, omit this step (CVS source tree names usually do +not contain a version number). + +- Setup environment variables as desired, e.g. for a universal build on 10.5: + CFLAGS="-arch i386 -arch x86_64 -arch ppc -mmacosx-version-min=10.5" + export CFLAGS + +- Change to the directory containing the Tcl and Tk source trees and build: make -C tcl${ver}/macosx make -C tk${ver}/macosx -and the following will then install Tcl and Tk onto the root volume (admin -password required): + +- Install Tcl and Tk onto the root volume (admin password required): sudo make -C tcl${ver}/macosx install sudo make -C tk${ver}/macosx install -if you don't have the admin password, you can install into your home directory, +if you don't have an admin password, you can install into your home directory instead by passing an INSTALL_ROOT argument to make: make -C tcl${ver}/macosx install INSTALL_ROOT="${HOME}/" make -C tk${ver}/macosx install INSTALL_ROOT="${HOME}/" -- 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 +- The default GNUmakefile 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 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 -'develop' or 'deploy' target variants of the Makefiles, respectively. +'develop' or 'deploy' target variants of the GNUmakefile, respectively. For example, to build and install only the optimized versions: make -C tcl${ver}/macosx deploy make -C tk${ver}/macosx deploy sudo make -C tcl${ver}/macosx install-deploy sudo make -C tk${ver}/macosx install-deploy -- The Makefiles can also build a version of 'Wish' that has the Tcl and Tk +- The GNUmakefile can also build a version of Wish.app that has the Tcl and Tk frameworks embedded in its application package. This allows for standalone deployment of the application with no installation required, e.g. from read-only -media. To build & install in this manner, use the 'embedded' target variants of -the Makefiles. For example, to build a standalone 'Wish.app' -in ./embedded/Applications/Utilities: +media. To build & install in this manner, use the 'embedded' variants of +the GNUmakefile targets. +For example, to build a standalone 'Wish.app' in ./emb/Applications/Utilities: make -C tcl${ver}/macosx embedded make -C tk${ver}/macosx embedded - sudo make -C tcl${ver}/macosx install-embedded INSTALL_ROOT=`pwd`/embedded/ - sudo make -C tk${ver}/macosx install-embedded INSTALL_ROOT=`pwd`/embedded/ + sudo make -C tcl${ver}/macosx install-embedded INSTALL_ROOT=`pwd`/emb/ + sudo make -C tk${ver}/macosx install-embedded INSTALL_ROOT=`pwd`/emb/ Notes: * if you've already built standard TclTkAqua, building embedded does not require any new compiling or linking, so you can skip the first two makes. - (making relinking unnecessary was added in 8.4.2) + (making relinking unnecessary was added with 8.4.2) * the embedded frameworks include only optimized builds and no documentation. * the standalone Wish has the directory Wish.app/Contents/lib in its auto_path. Thus you can place tcl extensions in this directory (i.e. embed @@ -260,9 +380,9 @@ still need a tcl sourcetree in the location specified in TCL_SRC_DIR in Tcl.framework/tclConfig.sh. Also, linking with Tcl.framework has to work exactly as indicated in TCL_LIB_SPEC in Tcl.framework/tclConfig.sh. If you used non-default install locations for Tcl.framework, specify them as -make overrides to the tk/macosx Makefile, e.g. +make overrides to the tk/macosx GNUmakefile, e.g. make -C tk${ver}/macosx \ TCL_FRAMEWORK_DIR=$HOME/Library/Frameworks TCLSH_DIR=$HOME/usr/bin sudo make -C tk${ver}/macosx install \ TCL_FRAMEWORK_DIR=$HOME/Library/Frameworks TCLSH_DIR=$HOME/usr/bin -The Makefile variables TCL_FRAMEWORK_DIR and TCLSH_DIR were added in Tk 8.4.3. +The Makefile variables TCL_FRAMEWORK_DIR and TCLSH_DIR were added with Tk 8.4.3. diff --git a/macosx/Tk-Info.plist.in b/macosx/Tk-Info.plist.in index 0c6291c..50b9d24 100644 --- a/macosx/Tk-Info.plist.in +++ b/macosx/Tk-Info.plist.in @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!-- - Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> + Copyright 2008-2009, Apple Inc. See the file "license.terms" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -14,10 +15,10 @@ <string>@TK_LIB_FILE@</string> <key>CFBundleGetInfoString</key> <string>Tk @TK_WINDOWINGSYSTEM@ @TK_VERSION@@TK_PATCH_LEVEL@, -Copyright © @TK_YEAR@ Tcl Core Team, +Copyright © 1989-@TK_YEAR@ Tcl Core Team, Copyright © 2002-@TK_YEAR@ Daniel A. Steffen, -Initial MacOS X Port by Jim Ingham & Ian Reid, -Copyright © 2001-2002, Apple Computer, Inc.</string> +Copyright © 2001-2009 Apple Inc., +Copyright © 2001-2002 Jim Ingham & Ian Reid</string> <key>CFBundleIdentifier</key> <string>com.tcltk.tklibrary</string> <key>CFBundleInfoDictionaryVersion</key> diff --git a/macosx/Tk.icns b/macosx/Tk.icns Binary files differnew file mode 100644 index 0000000..394b588 --- /dev/null +++ b/macosx/Tk.icns diff --git a/macosx/Tk.tiff b/macosx/Tk.tiff Binary files differnew file mode 100644 index 0000000..1e2aed5 --- /dev/null +++ b/macosx/Tk.tiff diff --git a/macosx/Wish-Common.xcconfig b/macosx/Wish-Common.xcconfig new file mode 100644 index 0000000..7bef051 --- /dev/null +++ b/macosx/Wish-Common.xcconfig @@ -0,0 +1,50 @@ +// +// Wish-Common.xcconfig -- +// +// This file contains the Xcode build settings comon to all +// project configurations in Wish.xcodeproj. +// +// Copyright (c) 2007-2009 Daniel A. Steffen <das@users.sourceforge.net> +// Copyright 2008-2009, Apple Inc. +// +// See the file "license.terms" for information on usage and redistribution +// of this file, and for a DISCLAIMER OF ALL WARRANTIES. +// + +HEADER_SEARCH_PATHS = $(TK_SRCROOT)/generic $(TK_SRCROOT)/xlib "$(DERIVED_FILE_DIR)/tcl" "$(DERIVED_FILE_DIR)/tk" $(HEADER_SEARCH_PATHS) +REZ_SEARCH_PATHS = $(TK_SRCROOT)/generic $(TCL_SRCROOT)/generic $(REZ_SEARCH_PATHS) +OTHER_LDFLAGS = -headerpad_max_install_names -sectcreate __TEXT __info_plist "$(DERIVED_FILE_DIR)/tk/Wish-Info.plist" $(OTHER_LDFLAGS) +OTHER_LDFLAGS_AQUA = +INSTALL_PATH = $(APPLICATION_INSTALL_PATH) +INSTALL_MODE_FLAG = go-w,a+rX +GCC_PREFIX_HEADER = $(DERIVED_FILE_DIR)/tk/tkConfig.h +OTHER_CFLAGS = -imacros "$(DERIVED_FILE_DIR)/tcl/tclConfig.h" $(OTHER_CFLAGS) +GCC_GENERATE_DEBUGGING_SYMBOLS = YES +GCC_NO_COMMON_BLOCKS = YES +GCC_DYNAMIC_NO_PIC = YES +GCC = $(DEVELOPER_DIR)/usr/bin/gcc +GCC_VERSION = 4.0 +CC = $(GCC)-$(GCC_VERSION) +LD = $(CC) +WARNING_CFLAGS_GCC3 = -Wall -Wno-implicit-int -Wno-unused-parameter +WARNING_CFLAGS = -Wextra -Wno-missing-field-initializers -Winit-self -Wpointer-arith -Wcast-align -Wdisabled-optimization -Winline $(WARNING_CFLAGS_GCC3) $(WARNING_CFLAGS) +REZ_RESOURCE_MAP_READ_ONLY = YES +APPLICATION_INSTALL_PATH = /Applications/Utilities +BINDIR = $(PREFIX)/bin +CFLAGS = $(CFLAGS) +CPPFLAGS = -mmacosx-version-min=$(MACOSX_DEPLOYMENT_TARGET) $(CPPFLAGS) +FRAMEWORK_INSTALL_PATH = /Library/Frameworks +INCLUDEDIR = $(PREFIX)/include +LIBDIR = $(PREFIX)/lib +MANDIR = $(PREFIX)/man +PER_ARCH_CFLAGS_ppc = -mcpu=G3 -mtune=G4 $(PER_ARCH_CFLAGS_ppc) +PREFIX = /usr/local +TCL_BUILD_DIR = $(OBJROOT)/../tcl/Tcl.build/$(CONFIGURATION)/Tcl.build/Objects +TCL_CONFIGURE_ARGS = --enable-threads --enable-dtrace +TCL_FRAMEWORK_DIR = $(SYMROOT)/../tcl/$(CONFIGURATION) +TCL_LIBRARY = $(LIBDIR)/tcl$(VERSION) +TCL_PACKAGE_PATH = "$(LIBDIR)" +TCL_DEFS = HAVE_TCL_CONFIG_H +TK_LIBRARY = $(LIBDIR)/tk$(VERSION) +TK_DEFS = HAVE_TK_CONFIG_H TCL_NO_DEPRECATED +VERSION = 8.5 diff --git a/macosx/Wish-Debug.xcconfig b/macosx/Wish-Debug.xcconfig new file mode 100644 index 0000000..d577d96 --- /dev/null +++ b/macosx/Wish-Debug.xcconfig @@ -0,0 +1,20 @@ +// +// Wish-Debug.xcconfig -- +// +// This file contains the Xcode build settings for all Debug +// project configurations in Wish.xcodeproj. +// +// Copyright (c) 2007 Daniel A. Steffen <das@users.sourceforge.net> +// +// See the file "license.terms" for information on usage and redistribution +// of this file, and for a DISCLAIMER OF ALL WARRANTIES. +// + +#include "Wish-Common.xcconfig" + +DEBUG_INFORMATION_FORMAT = dwarf +DEPLOYMENT_POSTPROCESSING = NO +GCC_OPTIMIZATION_LEVEL = 0 +GCC_PREPROCESSOR_DEFINITIONS = DEBUGLEVEL=4 $(TCL_DEFS) $(TK_DEFS) $(GCC_PREPROCESSOR_DEFINITIONS) +CONFIGURE_ARGS = --enable-symbols $(TCL_CONFIGURE_ARGS) $(CONFIGURE_ARGS) +MAKE_TARGET = develop diff --git a/macosx/Wish-Info.plist.in b/macosx/Wish-Info.plist.in index ff046a8..90e00a4 100644 --- a/macosx/Wish-Info.plist.in +++ b/macosx/Wish-Info.plist.in @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!-- - Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> + Copyright 2008-2009, Apple Inc. See the file "license.terms" for information on usage and redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -39,10 +40,10 @@ <string>Wish</string> <key>CFBundleGetInfoString</key> <string>Wish Shell @TK_VERSION@@TK_PATCH_LEVEL@, -Copyright © @TK_YEAR@ Tcl Core Team, +Copyright © 1989-@TK_YEAR@ Tcl Core Team, Copyright © 2002-@TK_YEAR@ Daniel A. Steffen, -Initial MacOS X Port by Jim Ingham & Ian Reid, -Copyright © 2001-2002, Apple Computer, Inc.</string> +Copyright © 2001-2009 Apple Inc., +Copyright © 2001-2002 Jim Ingham & Ian Reid</string> <key>CFBundleIconFile</key> <string>Wish.icns</string> <key>CFBundleIdentifier</key> @@ -64,10 +65,12 @@ Copyright © 2001-2002, Apple Computer, Inc.</string> <key>CFBundleVersion</key> <string>@TK_VERSION@@TK_PATCH_LEVEL@</string> <key>LSMinimumSystemVersion</key> - <string>10.2.0</string> + <string>10.5.0</string> <key>LSRequiresCarbon</key> <true/> <key>NSAppleScriptEnabled</key> <true/> + <key>OSAScriptingDefinition</key> + <string>Wish.sdef</string> </dict> </plist> diff --git a/macosx/Wish-Release.xcconfig b/macosx/Wish-Release.xcconfig new file mode 100644 index 0000000..a46aab5 --- /dev/null +++ b/macosx/Wish-Release.xcconfig @@ -0,0 +1,20 @@ +// +// Wish-Release.xcconfig -- +// +// This file contains the Xcode build settings for all Release +// project configurations in Wish.xcodeproj. +// +// Copyright (c) 2007 Daniel A. Steffen <das@users.sourceforge.net> +// +// See the file "license.terms" for information on usage and redistribution +// of this file, and for a DISCLAIMER OF ALL WARRANTIES. +// + +#include "Wish-Common.xcconfig" + +DEBUG_INFORMATION_FORMAT = dwarf-with-dsym +// DEPLOYMENT_POSTPROCESSING = YES +GCC_OPTIMIZATION_LEVEL = s +GCC_PREPROCESSOR_DEFINITIONS = NDEBUG $(TCL_DEFS) $(TK_DEFS) $(GCC_PREPROCESSOR_DEFINITIONS) +CONFIGURE_ARGS = --disable-symbols $(TCL_CONFIGURE_ARGS) $(CONFIGURE_ARGS) +MAKE_TARGET = deploy diff --git a/macosx/Wish.icns b/macosx/Wish.icns Binary files differindex 060bfbd..394b588 100644 --- a/macosx/Wish.icns +++ b/macosx/Wish.icns diff --git a/macosx/Wish.pbproj/default.pbxuser b/macosx/Wish.pbproj/default.pbxuser deleted file mode 100644 index aafee5a..0000000 --- a/macosx/Wish.pbproj/default.pbxuser +++ /dev/null @@ -1,178 +0,0 @@ -// !$*UTF8*$! -{ - F537552A016C352C01DC9062 = { - activeBuildStyle = F537552C016C352C01DC9062; - activeExecutable = F9F6B1E308E8648C00C9CB24; - activeTarget = F9D6747B08E84DC100688CAA; - addToTargets = ( - ); - codeSenseManager = F9D7368F06AD399F00DC3A31; - executables = ( - F9F6B1EB08E864DC00C9CB24, - F9F6B1E308E8648C00C9CB24, - ); - sourceControlManager = F9D7368E06AD399F00DC3A31; - userBuildSettings = { - SYMROOT = "${SRCROOT}/../../build/tk"; - }; - }; - F9D6747B08E84DC100688CAA = { - activeExec = 0; - }; - F9D7368E06AD399F00DC3A31 = { - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - isa = PBXSourceControlManager; - scmConfiguration = { - }; - scmType = scm.cvs; - }; - F9D7368F06AD399F00DC3A31 = { - indexTemplatePath = ""; - isa = PBXCodeSenseManager; - usesDefaults = 1; - wantsCodeCompletion = 1; - wantsCodeCompletionAutoSuggestions = 1; - wantsCodeCompletionCaseSensitivity = 1; - wantsCodeCompletionListAlways = 1; - wantsCodeCompletionOnlyMatchingItems = 1; - wantsCodeCompletionParametersIncluded = 1; - wantsCodeCompletionPlaceholdersInserted = 1; - wantsCodeCompletionTabCompletes = 1; - wantsIndex = 1; - }; - F9F6B1E308E8648C00C9CB24 = { - activeArgIndex = 2147483647; - activeArgIndices = ( - ); - argumentStrings = ( - ); - configStateDict = { - "PBXLSLaunchAction-0" = { - PBXLSLaunchAction = 0; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXLSRunLaunchConfig; - displayName = "Executable Runner"; - identifier = com.apple.Xcode.launch.runConfig; - remoteHostInfo = ""; - startActionInfo = ""; - }; - "PBXLSLaunchAction-1" = { - PBXLSLaunchAction = 1; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXGDB_LaunchConfig; - displayName = GDB; - identifier = com.apple.Xcode.launch.GDBMI_Config; - remoteHostInfo = ""; - startActionInfo = ""; - }; - }; - cppStopOnCatchEnabled = 0; - cppStopOnThrowEnabled = 0; - customDataFormattersEnabled = 1; - debuggerPlugin = GDBDebugging; - disassemblyDisplayState = 0; - dylibVariantSuffix = _debug; - enableDebugStr = 0; - environmentEntries = ( - { - active = NO; - name = DYLD_PRINT_LIBRARIES; - }, - ); - isa = PBXExecutable; - launchableReference = F9F6B1E408E8648C00C9CB24; - libgmallocEnabled = 0; - name = Wish; - shlibInfoDictList = ( - ); - sourceDirectories = ( - ); - }; - F9F6B1E408E8648C00C9CB24 = { - isa = PBXFileReference; - lastKnownFileType = wrapper.application; - path = Wish.app; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; - F9F6B1EB08E864DC00C9CB24 = { - activeArgIndex = 2147483647; - activeArgIndices = ( - NO, - NO, - NO, - ); - argumentStrings = ( - "${SRCROOT}/../../tcl/tests/all.tcl", - "${SRCROOT}/../../tk/tests/all.tcl", - "-verbose \"\"", - ); - configStateDict = { - "PBXLSLaunchAction-0" = { - PBXLSLaunchAction = 0; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXLSRunLaunchConfig; - displayName = "Executable Runner"; - identifier = com.apple.Xcode.launch.runConfig; - remoteHostInfo = ""; - startActionInfo = ""; - }; - "PBXLSLaunchAction-1" = { - PBXLSLaunchAction = 1; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXGDB_LaunchConfig; - displayName = GDB; - identifier = com.apple.Xcode.launch.GDBMI_Config; - remoteHostInfo = ""; - startActionInfo = ""; - }; - }; - cppStopOnCatchEnabled = 0; - cppStopOnThrowEnabled = 0; - customDataFormattersEnabled = 1; - debuggerPlugin = GDBDebugging; - disassemblyDisplayState = 0; - dylibVariantSuffix = _debug; - enableDebugStr = 0; - environmentEntries = ( - { - active = YES; - name = TCL_LIBRARY; - value = "${SRCROOT}/../../tcl/library"; - }, - { - active = YES; - name = TK_LIBRARY; - value = "${SRCROOT}/../../tk/library"; - }, - { - active = NO; - name = DYLD_PRINT_LIBRARIES; - }, - ); - isa = PBXExecutable; - launchableReference = F9F6B1EC08E864DC00C9CB24; - libgmallocEnabled = 0; - name = tktest; - shlibInfoDictList = ( - ); - sourceDirectories = ( - ); - }; - F9F6B1EC08E864DC00C9CB24 = { - isa = PBXFileReference; - lastKnownFileType = "compiled.mach-o.executable"; - path = tktest; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; -} diff --git a/macosx/Wish.pbproj/jingham.pbxuser b/macosx/Wish.pbproj/jingham.pbxuser deleted file mode 100644 index aafee5a..0000000 --- a/macosx/Wish.pbproj/jingham.pbxuser +++ /dev/null @@ -1,178 +0,0 @@ -// !$*UTF8*$! -{ - F537552A016C352C01DC9062 = { - activeBuildStyle = F537552C016C352C01DC9062; - activeExecutable = F9F6B1E308E8648C00C9CB24; - activeTarget = F9D6747B08E84DC100688CAA; - addToTargets = ( - ); - codeSenseManager = F9D7368F06AD399F00DC3A31; - executables = ( - F9F6B1EB08E864DC00C9CB24, - F9F6B1E308E8648C00C9CB24, - ); - sourceControlManager = F9D7368E06AD399F00DC3A31; - userBuildSettings = { - SYMROOT = "${SRCROOT}/../../build/tk"; - }; - }; - F9D6747B08E84DC100688CAA = { - activeExec = 0; - }; - F9D7368E06AD399F00DC3A31 = { - fallbackIsa = XCSourceControlManager; - isSCMEnabled = 0; - isa = PBXSourceControlManager; - scmConfiguration = { - }; - scmType = scm.cvs; - }; - F9D7368F06AD399F00DC3A31 = { - indexTemplatePath = ""; - isa = PBXCodeSenseManager; - usesDefaults = 1; - wantsCodeCompletion = 1; - wantsCodeCompletionAutoSuggestions = 1; - wantsCodeCompletionCaseSensitivity = 1; - wantsCodeCompletionListAlways = 1; - wantsCodeCompletionOnlyMatchingItems = 1; - wantsCodeCompletionParametersIncluded = 1; - wantsCodeCompletionPlaceholdersInserted = 1; - wantsCodeCompletionTabCompletes = 1; - wantsIndex = 1; - }; - F9F6B1E308E8648C00C9CB24 = { - activeArgIndex = 2147483647; - activeArgIndices = ( - ); - argumentStrings = ( - ); - configStateDict = { - "PBXLSLaunchAction-0" = { - PBXLSLaunchAction = 0; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXLSRunLaunchConfig; - displayName = "Executable Runner"; - identifier = com.apple.Xcode.launch.runConfig; - remoteHostInfo = ""; - startActionInfo = ""; - }; - "PBXLSLaunchAction-1" = { - PBXLSLaunchAction = 1; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXGDB_LaunchConfig; - displayName = GDB; - identifier = com.apple.Xcode.launch.GDBMI_Config; - remoteHostInfo = ""; - startActionInfo = ""; - }; - }; - cppStopOnCatchEnabled = 0; - cppStopOnThrowEnabled = 0; - customDataFormattersEnabled = 1; - debuggerPlugin = GDBDebugging; - disassemblyDisplayState = 0; - dylibVariantSuffix = _debug; - enableDebugStr = 0; - environmentEntries = ( - { - active = NO; - name = DYLD_PRINT_LIBRARIES; - }, - ); - isa = PBXExecutable; - launchableReference = F9F6B1E408E8648C00C9CB24; - libgmallocEnabled = 0; - name = Wish; - shlibInfoDictList = ( - ); - sourceDirectories = ( - ); - }; - F9F6B1E408E8648C00C9CB24 = { - isa = PBXFileReference; - lastKnownFileType = wrapper.application; - path = Wish.app; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; - F9F6B1EB08E864DC00C9CB24 = { - activeArgIndex = 2147483647; - activeArgIndices = ( - NO, - NO, - NO, - ); - argumentStrings = ( - "${SRCROOT}/../../tcl/tests/all.tcl", - "${SRCROOT}/../../tk/tests/all.tcl", - "-verbose \"\"", - ); - configStateDict = { - "PBXLSLaunchAction-0" = { - PBXLSLaunchAction = 0; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXLSRunLaunchConfig; - displayName = "Executable Runner"; - identifier = com.apple.Xcode.launch.runConfig; - remoteHostInfo = ""; - startActionInfo = ""; - }; - "PBXLSLaunchAction-1" = { - PBXLSLaunchAction = 1; - PBXLSLaunchStartAction = 1; - PBXLSLaunchStdioStyle = 2; - PBXLSLaunchStyle = 0; - class = PBXGDB_LaunchConfig; - displayName = GDB; - identifier = com.apple.Xcode.launch.GDBMI_Config; - remoteHostInfo = ""; - startActionInfo = ""; - }; - }; - cppStopOnCatchEnabled = 0; - cppStopOnThrowEnabled = 0; - customDataFormattersEnabled = 1; - debuggerPlugin = GDBDebugging; - disassemblyDisplayState = 0; - dylibVariantSuffix = _debug; - enableDebugStr = 0; - environmentEntries = ( - { - active = YES; - name = TCL_LIBRARY; - value = "${SRCROOT}/../../tcl/library"; - }, - { - active = YES; - name = TK_LIBRARY; - value = "${SRCROOT}/../../tk/library"; - }, - { - active = NO; - name = DYLD_PRINT_LIBRARIES; - }, - ); - isa = PBXExecutable; - launchableReference = F9F6B1EC08E864DC00C9CB24; - libgmallocEnabled = 0; - name = tktest; - shlibInfoDictList = ( - ); - sourceDirectories = ( - ); - }; - F9F6B1EC08E864DC00C9CB24 = { - isa = PBXFileReference; - lastKnownFileType = "compiled.mach-o.executable"; - path = tktest; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; -} diff --git a/macosx/Wish.pbproj/project.pbxproj b/macosx/Wish.pbproj/project.pbxproj deleted file mode 100644 index 5565720..0000000 --- a/macosx/Wish.pbproj/project.pbxproj +++ /dev/null @@ -1,2311 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 39; - objects = { - 4C148E2007ECCFAC0033822E = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkEntry.h; - path = ../generic/tkEntry.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - 4C148E2407ECCFCF0033822E = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXEntry.c; - refType = 4; - sourceTree = "<group>"; - }; - 4C3B4CF6040B18B200C916F0 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.rez; - path = tkMacOSXAETE.r; - refType = 4; - sourceTree = "<group>"; - }; - 4C8A204405E0421900C18A82 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXCarbonEvents.c; - refType = 4; - sourceTree = "<group>"; - }; - 4CB2D7CF0619F8EB0081E375 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXScale.c; - refType = 4; - sourceTree = "<group>"; - }; -//4C0 -//4C1 -//4C2 -//4C3 -//4C4 -//950 -//951 -//952 -//953 -//954 - 95911CC7081532D8006F6BCB = { - isa = PBXFileReference; - lastKnownFileType = wrapper.framework; - name = IOKit.framework; - path = /System/Library/Frameworks/IOKit.framework; - refType = 0; - sourceTree = "<absolute>"; - }; -//950 -//951 -//952 -//953 -//954 -//F50 -//F51 -//F52 -//F53 -//F54 - F50D96120196176E01DC9062 = { - isa = PBXFileReference; - lastKnownFileType = wrapper.framework; - name = ApplicationServices.framework; - path = /System/Library/Frameworks/ApplicationServices.framework; - refType = 0; - sourceTree = "<absolute>"; - }; - F537552A016C352C01DC9062 = { - buildSettings = { - }; - buildStyles = ( - F537552C016C352C01DC9062, - F537552D016C352C01DC9062, - ); - hasScannedForEncodings = 1; - isa = PBXProject; - mainGroup = F537552B016C352C01DC9062; - productRefGroup = F53755DD016C38D201DC9062; - projectDirPath = ""; - targets = ( - F9D6747B08E84DC100688CAA, - ); - }; - F537552B016C352C01DC9062 = { - children = ( - F92ED9910403D0F0006F146B, - F5C88659017D625C01DC9062, - F5DF07A7016CD03801DC9062, - F5375688016C3F1001DC9062, - F5375531016C376E01DC9062, - F537552E016C376E01DC9062, - F537553C016C376E01DC9062, - F53755C9016C389901DC9062, - F53755CC016C389901DC9062, - F537567C016C3ADB01DC9062, - F53755DD016C38D201DC9062, - ); - isa = PBXGroup; - refType = 4; - sourceTree = "<group>"; - }; - F537552C016C352C01DC9062 = { - buildSettings = { - BUILD_STYLE = Development; - MAKE_TARGET = develop; - }; - isa = PBXBuildStyle; - name = Development; - }; - F537552D016C352C01DC9062 = { - buildSettings = { - BUILD_STYLE = Deployment; - MAKE_TARGET = deploy; - }; - isa = PBXBuildStyle; - name = Deployment; - }; - F537552E016C376E01DC9062 = { - children = ( - F537552F016C376E01DC9062, - F5375530016C376E01DC9062, - ); - isa = PBXGroup; - name = Generic; - refType = 4; - sourceTree = "<group>"; - }; - F537552F016C376E01DC9062 = { - children = ( - F5375569016C37A601DC9062, - F537556A016C37A601DC9062, - F537556B016C37A601DC9062, - F537556C016C37A601DC9062, - F537556D016C37A601DC9062, - F537556E016C37A601DC9062, - F537556F016C37A601DC9062, - F5375570016C37A601DC9062, - 4C148E2007ECCFAC0033822E, - F5375571016C37A601DC9062, - F5375572016C37A601DC9062, - F5375573016C37A601DC9062, - F5375574016C37A601DC9062, - F5375575016C37A601DC9062, - F5375576016C37A601DC9062, - F5375577016C37A601DC9062, - F5375578016C37A601DC9062, - F5375579016C37A601DC9062, - F537557A016C37A601DC9062, - F537557B016C37A601DC9062, - F537557C016C37A601DC9062, - F537557D016C37A601DC9062, - F537557E016C37A601DC9062, - F537557F016C37A601DC9062, - F5BFE58F02F8C45B01DC9062, - ); - isa = PBXGroup; - name = Headers; - refType = 4; - sourceTree = "<group>"; - }; - F5375530016C376E01DC9062 = { - children = ( - F5375580016C389901DC9062, - F5375581016C389901DC9062, - F5375582016C389901DC9062, - F5375583016C389901DC9062, - F5375584016C389901DC9062, - F5375585016C389901DC9062, - F5375586016C389901DC9062, - F5375587016C389901DC9062, - F5375588016C389901DC9062, - F5375589016C389901DC9062, - F537558A016C389901DC9062, - F537558B016C389901DC9062, - F537558C016C389901DC9062, - F537558D016C389901DC9062, - F537558E016C389901DC9062, - F537558F016C389901DC9062, - F5375590016C389901DC9062, - F5375591016C389901DC9062, - F5375592016C389901DC9062, - F5375593016C389901DC9062, - F5375594016C389901DC9062, - F5375595016C389901DC9062, - F5375596016C389901DC9062, - F5375597016C389901DC9062, - F5375598016C389901DC9062, - F5375599016C389901DC9062, - F537559A016C389901DC9062, - F537559B016C389901DC9062, - F537559C016C389901DC9062, - F537559D016C389901DC9062, - F537559E016C389901DC9062, - F537559F016C389901DC9062, - F53755A0016C389901DC9062, - F53755A1016C389901DC9062, - F53755A2016C389901DC9062, - F53755A3016C389901DC9062, - F53755A4016C389901DC9062, - F53755A5016C389901DC9062, - F53755A6016C389901DC9062, - F53755A7016C389901DC9062, - F53755A8016C389901DC9062, - F53755A9016C389901DC9062, - F53755AA016C389901DC9062, - F53755AB016C389901DC9062, - F53755AC016C389901DC9062, - F53755AD016C389901DC9062, - F53755AE016C389901DC9062, - F53755AF016C389901DC9062, - F53755B0016C389901DC9062, - F53755B1016C389901DC9062, - F53755B2016C389901DC9062, - F55BC46802B2D38B01DC9062, - F53755B3016C389901DC9062, - F53755B4016C389901DC9062, - F53755B5016C389901DC9062, - F53755B6016C389901DC9062, - F53755B7016C389901DC9062, - F53755B8016C389901DC9062, - F53755B9016C389901DC9062, - F53755BA016C389901DC9062, - F53755BB016C389901DC9062, - F5BFE58B02F8C41501DC9062, - F53755BC016C389901DC9062, - F53755BD016C389901DC9062, - F53755BE016C389901DC9062, - F53755BF016C389901DC9062, - F53755C0016C389901DC9062, - F53755C1016C389901DC9062, - F53755C2016C389901DC9062, - F53755C3016C389901DC9062, - F53755C4016C389901DC9062, - F53755C5016C389901DC9062, - F5BFE58C02F8C41501DC9062, - F53755C6016C389901DC9062, - F53755C7016C389901DC9062, - F53755C8016C389901DC9062, - ); - isa = PBXGroup; - name = Source; - refType = 4; - sourceTree = "<group>"; - }; - F5375531016C376E01DC9062 = { - children = ( - F5375532016C376E01DC9062, - F537553B016C376E01DC9062, - ); - isa = PBXGroup; - name = Resources; - refType = 4; - sourceTree = "<group>"; - }; - F5375532016C376E01DC9062 = { - children = ( - F5375533016C376E01DC9062, - 4C3B4CF6040B18B200C916F0, - F5375535016C376E01DC9062, - F5375538016C376E01DC9062, - F537553A016C376E01DC9062, - ); - isa = PBXGroup; - name = "Resource Manager Resources"; - refType = 4; - sourceTree = "<group>"; - }; - F5375533016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.rez; - path = tkAboutDlg.r; - refType = 4; - sourceTree = "<group>"; - }; - F5375535016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.rez; - path = tkMacOSXCursors.r; - refType = 4; - sourceTree = "<group>"; - }; - F5375538016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.rez; - path = tkMacOSXMenu.r; - refType = 4; - sourceTree = "<group>"; - }; - F537553A016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.rez; - path = tkMacOSXXCursors.r; - refType = 4; - sourceTree = "<group>"; - }; - F537553B016C376E01DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.icns; - path = Wish.icns; - refType = 4; - sourceTree = "<group>"; - }; - F537553C016C376E01DC9062 = { - children = ( - F537553D016C376E01DC9062, - F5375546016C376E01DC9062, - ); - isa = PBXGroup; - name = "MacOS X"; - refType = 4; - sourceTree = "<group>"; - }; - F537553D016C376E01DC9062 = { - children = ( - F537553E016C376E01DC9062, - F537553F016C376E01DC9062, - F5375540016C376E01DC9062, - F5375541016C376E01DC9062, - F5375542016C376E01DC9062, - F5375543016C376E01DC9062, - F5375545016C376E01DC9062, - ); - isa = PBXGroup; - name = Headers; - refType = 4; - sourceTree = "<group>"; - }; - F537553E016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = tkMacOSX.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537553F016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = tkMacOSXDebug.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375540016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = tkMacOSXDefault.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375541016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = tkMacOSXEvent.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375542016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = tkMacOSXInt.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375543016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = tkMacOSXPort.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375545016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - path = tkMacOSXWm.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375546016C376E01DC9062 = { - children = ( - F5375549016C376E01DC9062, - F537554A016C376E01DC9062, - 4C8A204405E0421900C18A82, - F537554B016C376E01DC9062, - F537554C016C376E01DC9062, - F537554D016C376E01DC9062, - F537554E016C376E01DC9062, - F537554F016C376E01DC9062, - F5375550016C376E01DC9062, - F5375551016C376E01DC9062, - F5375552016C376E01DC9062, - 4C148E2407ECCFCF0033822E, - F5375553016C376E01DC9062, - F5375554016C376E01DC9062, - F5375555016C376E01DC9062, - F5375556016C376E01DC9062, - F5375557016C376E01DC9062, - F5375558016C376E01DC9062, - F5375559016C376E01DC9062, - F537555A016C376E01DC9062, - F537555B016C376E01DC9062, - F537555C016C376E01DC9062, - F537555D016C376E01DC9062, - F537555E016C376E01DC9062, - 4CB2D7CF0619F8EB0081E375, - F5375560016C376E01DC9062, - F5375561016C376E01DC9062, - F5375562016C376E01DC9062, - F5375563016C376E01DC9062, - F5375565016C376E01DC9062, - F5375567016C376E01DC9062, - F5375568016C376E01DC9062, - ); - isa = PBXGroup; - name = Source; - refType = 4; - sourceTree = "<group>"; - }; - F5375548016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkAppInit.c; - path = ../unix/tkAppInit.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375549016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXBitmap.c; - refType = 4; - sourceTree = "<group>"; - }; - F537554A016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXButton.c; - refType = 4; - sourceTree = "<group>"; - }; - F537554B016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXClipboard.c; - refType = 4; - sourceTree = "<group>"; - }; - F537554C016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXColor.c; - refType = 4; - sourceTree = "<group>"; - }; - F537554D016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXConfig.c; - refType = 4; - sourceTree = "<group>"; - }; - F537554E016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXCursor.c; - refType = 4; - sourceTree = "<group>"; - }; - F537554F016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXDebug.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375550016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXDialog.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375551016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXDraw.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375552016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXEmbed.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375553016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXEvent.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375554016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXFont.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375555016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXHLEvents.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375556016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXInit.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375557016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXKeyboard.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375558016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXKeyEvent.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375559016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXMenu.c; - refType = 4; - sourceTree = "<group>"; - }; - F537555A016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXMenubutton.c; - refType = 4; - sourceTree = "<group>"; - }; - F537555B016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXMenus.c; - refType = 4; - sourceTree = "<group>"; - }; - F537555C016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXMouseEvent.c; - refType = 4; - sourceTree = "<group>"; - }; - F537555D016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXNotify.c; - refType = 4; - sourceTree = "<group>"; - }; - F537555E016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXRegion.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375560016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXScrlbr.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375561016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXSend.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375562016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXSubwindows.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375563016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXTest.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375565016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXWindowEvent.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375567016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXWm.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375568016C376E01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - path = tkMacOSXXStubs.c; - refType = 4; - sourceTree = "<group>"; - }; - F5375569016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = default.h; - path = ../generic/default.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537556A016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = ks_names.h; - path = ../generic/ks_names.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537556B016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tk.h; - path = ../generic/tk.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537556C016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tk3d.h; - path = ../generic/tk3d.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537556D016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkButton.h; - path = ../generic/tkButton.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537556E016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkCanvas.h; - path = ../generic/tkCanvas.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537556F016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkColor.h; - path = ../generic/tkColor.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375570016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkDecls.h; - path = ../generic/tkDecls.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375571016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkFileFilter.h; - path = ../generic/tkFileFilter.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375572016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkFont.h; - path = ../generic/tkFont.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375573016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkInitScript.h; - path = ../generic/tkInitScript.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375574016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkInt.h; - path = ../generic/tkInt.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375575016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkIntDecls.h; - path = ../generic/tkIntDecls.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375576016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkIntPlatDecls.h; - path = ../generic/tkIntPlatDecls.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375577016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkIntXlibDecls.h; - path = ../generic/tkIntXlibDecls.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375578016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkMenu.h; - path = ../generic/tkMenu.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375579016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkMenubutton.h; - path = ../generic/tkMenubutton.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537557A016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkPlatDecls.h; - path = ../generic/tkPlatDecls.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537557B016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkPort.h; - path = ../generic/tkPort.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537557C016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkScale.h; - path = ../generic/tkScale.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537557D016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkScrollbar.h; - path = ../generic/tkScrollbar.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537557E016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkSelect.h; - path = ../generic/tkSelect.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537557F016C37A601DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkText.h; - path = ../generic/tkText.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375580016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tk3d.c; - path = ../generic/tk3d.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375581016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkArgv.c; - path = ../generic/tkArgv.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375582016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkAtom.c; - path = ../generic/tkAtom.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375583016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkBind.c; - path = ../generic/tkBind.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375584016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkBitmap.c; - path = ../generic/tkBitmap.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375585016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkButton.c; - path = ../generic/tkButton.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375586016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvArc.c; - path = ../generic/tkCanvArc.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375587016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvas.c; - path = ../generic/tkCanvas.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375588016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvBmap.c; - path = ../generic/tkCanvBmap.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375589016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvImg.c; - path = ../generic/tkCanvImg.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537558A016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvLine.c; - path = ../generic/tkCanvLine.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537558B016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvPoly.c; - path = ../generic/tkCanvPoly.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537558C016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvPs.c; - path = ../generic/tkCanvPs.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537558D016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvText.c; - path = ../generic/tkCanvText.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537558E016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvUtil.c; - path = ../generic/tkCanvUtil.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537558F016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCanvWind.c; - path = ../generic/tkCanvWind.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375590016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkClipboard.c; - path = ../generic/tkClipboard.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375591016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCmds.c; - path = ../generic/tkCmds.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375592016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkColor.c; - path = ../generic/tkColor.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375593016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkConfig.c; - path = ../generic/tkConfig.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375594016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkConsole.c; - path = ../generic/tkConsole.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375595016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkCursor.c; - path = ../generic/tkCursor.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375596016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkEntry.c; - path = ../generic/tkEntry.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375597016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkError.c; - path = ../generic/tkError.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375598016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkEvent.c; - path = ../generic/tkEvent.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375599016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkFileFilter.c; - path = ../generic/tkFileFilter.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537559A016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkFocus.c; - path = ../generic/tkFocus.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537559B016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkFont.c; - path = ../generic/tkFont.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537559C016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkFrame.c; - path = ../generic/tkFrame.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537559D016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkGC.c; - path = ../generic/tkGC.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537559E016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkGeometry.c; - path = ../generic/tkGeometry.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537559F016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkGet.c; - path = ../generic/tkGet.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A0016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkGrab.c; - path = ../generic/tkGrab.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A1016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkGrid.c; - path = ../generic/tkGrid.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A2016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkImage.c; - path = ../generic/tkImage.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A3016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkImgBmap.c; - path = ../generic/tkImgBmap.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A4016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkImgGIF.c; - path = ../generic/tkImgGIF.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A5016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkImgPhoto.c; - path = ../generic/tkImgPhoto.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A6016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkImgPPM.c; - path = ../generic/tkImgPPM.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A7016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkImgUtil.c; - path = ../generic/tkImgUtil.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A8016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkListbox.c; - path = ../generic/tkListbox.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755A9016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkMacWinMenu.c; - path = ../generic/tkMacWinMenu.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755AA016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkMain.c; - path = ../generic/tkMain.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755AB016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkMenu.c; - path = ../generic/tkMenu.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755AC016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkMenubutton.c; - path = ../generic/tkMenubutton.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755AD016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkMenuDraw.c; - path = ../generic/tkMenuDraw.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755AE016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkMessage.c; - path = ../generic/tkMessage.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755AF016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkObj.c; - path = ../generic/tkObj.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B0016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkOldConfig.c; - path = ../generic/tkOldConfig.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B1016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkOption.c; - path = ../generic/tkOption.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B2016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkPack.c; - path = ../generic/tkPack.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B3016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkPlace.c; - path = ../generic/tkPlace.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B4016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkPointer.c; - path = ../generic/tkPointer.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B5016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkRectOval.c; - path = ../generic/tkRectOval.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B6016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkScale.c; - path = ../generic/tkScale.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B7016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkScrollbar.c; - path = ../generic/tkScrollbar.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B8016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkSelect.c; - path = ../generic/tkSelect.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755B9016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkStubImg.c; - path = ../generic/tkStubImg.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755BA016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkStubInit.c; - path = ../generic/tkStubInit.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755BB016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkStubLib.c; - path = ../generic/tkStubLib.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755BC016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTest.c; - path = ../generic/tkTest.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755BD016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkText.c; - path = ../generic/tkText.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755BE016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTextBTree.c; - path = ../generic/tkTextBTree.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755BF016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTextDisp.c; - path = ../generic/tkTextDisp.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C0016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTextImage.c; - path = ../generic/tkTextImage.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C1016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTextIndex.c; - path = ../generic/tkTextIndex.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C2016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTextMark.c; - path = ../generic/tkTextMark.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C3016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTextTag.c; - path = ../generic/tkTextTag.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C4016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTextWind.c; - path = ../generic/tkTextWind.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C5016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkTrig.c; - path = ../generic/tkTrig.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C6016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkUtil.c; - path = ../generic/tkUtil.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C7016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkVisual.c; - path = ../generic/tkVisual.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C8016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkWindow.c; - path = ../generic/tkWindow.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755C9016C389901DC9062 = { - children = ( - F5375548016C376E01DC9062, - F53755CA016C389901DC9062, - F53755CB016C389901DC9062, - ); - isa = PBXGroup; - name = Unix; - refType = 4; - sourceTree = "<group>"; - }; - F53755CA016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkUnix3d.c; - path = ../unix/tkUnix3d.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755CB016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkUnixScale.c; - path = ../unix/tkUnixScale.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755CC016C389901DC9062 = { - children = ( - F53755CD016C389901DC9062, - F53755D7016C389901DC9062, - ); - isa = PBXGroup; - name = "X Emulation"; - refType = 4; - sourceTree = "<group>"; - }; - F53755CD016C389901DC9062 = { - children = ( - F53755CE016C389901DC9062, - F53755CF016C389901DC9062, - F53755D0016C389901DC9062, - F53755D1016C389901DC9062, - F53755D2016C389901DC9062, - F53755D3016C389901DC9062, - F53755D4016C389901DC9062, - F53755D5016C389901DC9062, - F53755D6016C389901DC9062, - ); - isa = PBXGroup; - name = Headers; - refType = 4; - sourceTree = "<group>"; - }; - F53755CE016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = xbytes.h; - path = ../xlib/xbytes.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755CF016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = cursorfont.h; - path = ../xlib/X11/cursorfont.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D0016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = keysym.h; - path = ../xlib/X11/keysym.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D1016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = keysymdef.h; - path = ../xlib/X11/keysymdef.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D2016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = X.h; - path = ../xlib/X11/X.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D3016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = Xatom.h; - path = ../xlib/X11/Xatom.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D4016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = Xfuncproto.h; - path = ../xlib/X11/Xfuncproto.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D5016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = Xlib.h; - path = ../xlib/X11/Xlib.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D6016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = Xutil.h; - path = ../xlib/X11/Xutil.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D7016C389901DC9062 = { - children = ( - F53755D8016C389901DC9062, - F53755D9016C389901DC9062, - F53755DA016C389901DC9062, - F53755DB016C389901DC9062, - F53755DC016C389901DC9062, - ); - isa = PBXGroup; - name = Source; - refType = 4; - sourceTree = "<group>"; - }; - F53755D8016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = xcolors.c; - path = ../xlib/xcolors.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755D9016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = xdraw.c; - path = ../xlib/xdraw.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755DA016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = xgc.c; - path = ../xlib/xgc.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755DB016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = ximage.c; - path = ../xlib/ximage.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755DC016C389901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = xutil.c; - path = ../xlib/xutil.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F53755DD016C38D201DC9062 = { - children = ( - F9F6B1C008E863C200C9CB24, - F9F6B1BF08E863B300C9CB24, - F9F6B1BE08E8639A00C9CB24, - ); - isa = PBXGroup; - name = Products; - refType = 4; - sourceTree = "<group>"; - }; - F537567C016C3ADB01DC9062 = { - children = ( - F5875C7B016FEF1D01DC9062, - F50D96120196176E01DC9062, - F537567D016C3ADB01DC9062, - 95911CC7081532D8006F6BCB, - ); - isa = PBXGroup; - name = "External Frameworks"; - refType = 4; - sourceTree = "<group>"; - }; - F537567D016C3ADB01DC9062 = { - isa = PBXFileReference; - lastKnownFileType = wrapper.framework; - name = Carbon.framework; - path = /System/Library/Frameworks/Carbon.framework; - refType = 0; - sourceTree = "<absolute>"; - }; - F5375688016C3F1001DC9062 = { - children = ( - F5375689016C3F1001DC9062, - F537568A016C3F1001DC9062, - F537568B016C3F1001DC9062, - F537568C016C3F1001DC9062, - F537568D016C3F1001DC9062, - F537568E016C3F1001DC9062, - F537568F016C3F1001DC9062, - F5375690016C3F1001DC9062, - F5375691016C3F1001DC9062, - F5375692016C3F1001DC9062, - ); - isa = PBXGroup; - name = Bitmaps; - refType = 4; - sourceTree = "<group>"; - }; - F5375689016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = error.bmp; - path = ../bitmaps/error.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537568A016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = gray12.bmp; - path = ../bitmaps/gray12.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537568B016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = gray25.bmp; - path = ../bitmaps/gray25.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537568C016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = gray50.bmp; - path = ../bitmaps/gray50.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537568D016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = gray75.bmp; - path = ../bitmaps/gray75.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537568E016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = hourglass.bmp; - path = ../bitmaps/hourglass.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F537568F016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = info.bmp; - path = ../bitmaps/info.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375690016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = questhead.bmp; - path = ../bitmaps/questhead.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375691016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = question.bmp; - path = ../bitmaps/question.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5375692016C3F1001DC9062 = { - isa = PBXFileReference; - lastKnownFileType = image.bmp; - name = warning.bmp; - path = ../bitmaps/warning.bmp; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F55BC46802B2D38B01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkPanedWindow.c; - path = ../generic/tkPanedWindow.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F55BC46A02B2D3F301DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = panedwindow.tcl; - path = ../library/panedwindow.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5875C7B016FEF1D01DC9062 = { - isa = PBXFileReference; - lastKnownFileType = wrapper.framework; - name = Tcl.framework; - path = ../tcl/Tcl.framework; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; - F5BFE58B02F8C41501DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkStyle.c; - path = ../generic/tkStyle.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5BFE58C02F8C41501DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.c; - name = tkUndo.c; - path = ../generic/tkUndo.c; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5BFE58F02F8C45B01DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = sourcecode.c.h; - name = tkUndo.h; - path = ../generic/tkUndo.h; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5C2EA33034D71B2016F146B = { - isa = PBXFileReference; - lastKnownFileType = text; - name = mkpsenc.tcl; - path = ../library/mkpsenc.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5C88659017D625C01DC9062 = { - children = ( - F5C8865A017D625C01DC9062, - F5C8865B017D625C01DC9062, - ); - isa = PBXGroup; - name = "Header Tools"; - refType = 4; - sourceTree = "<group>"; - }; - F5C8865A017D625C01DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = tk.decls; - path = ../generic/tk.decls; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5C8865B017D625C01DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = tkInt.decls; - path = ../generic/tkInt.decls; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF07A7016CD03801DC9062 = { - children = ( - F5DF0928016CD3F901DC9062, - F5DF0929016CD3F901DC9062, - F5DF092A016CD3F901DC9062, - F5DF092B016CD3F901DC9062, - F5DF092C016CD3F901DC9062, - F5DF092D016CD3F901DC9062, - F5DF092E016CD3F901DC9062, - F5DF092F016CD3F901DC9062, - F5DF0930016CD3F901DC9062, - F5DF0931016CD3F901DC9062, - F5DF0932016CD3F901DC9062, - F5DF0933016CD3F901DC9062, - F5DF0934016CD3F901DC9062, - F5C2EA33034D71B2016F146B, - F5DF0935016CD3F901DC9062, - F5DF0936016CD3F901DC9062, - F5DF0937016CD3F901DC9062, - F5DF0938016CD3F901DC9062, - F5DF0939016CD3F901DC9062, - F55BC46A02B2D3F301DC9062, - F5DF093A016CD3F901DC9062, - F5DF093B016CD3F901DC9062, - F5DF093C016CD3F901DC9062, - F5DF093D016CD3F901DC9062, - F5DF093E016CD3F901DC9062, - F5DF093F016CD3F901DC9062, - F5DF0940016CD3F901DC9062, - F5DF0941016CD3F901DC9062, - F5DF0942016CD3F901DC9062, - F5DF0943016CD3F901DC9062, - F5DF0944016CD3F901DC9062, - F5DF0945016CD3F901DC9062, - ); - isa = PBXGroup; - name = Scripts; - refType = 4; - sourceTree = "<group>"; - }; - F5DF0928016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = bgerror.tcl; - path = ../library/bgerror.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0929016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = button.tcl; - path = ../library/button.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF092A016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = choosedir.tcl; - path = ../library/choosedir.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF092B016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = clrpick.tcl; - path = ../library/clrpick.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF092C016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = comdlg.tcl; - path = ../library/comdlg.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF092D016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = console.tcl; - path = ../library/console.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF092E016CD3F901DC9062 = { - includeInIndex = 0; - isa = PBXFileReference; - lastKnownFileType = folder; - name = demos; - path = ../library/demos; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF092F016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = dialog.tcl; - path = ../library/dialog.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0930016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = entry.tcl; - path = ../library/entry.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0931016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = focus.tcl; - path = ../library/focus.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0932016CD3F901DC9062 = { - includeInIndex = 0; - isa = PBXFileReference; - lastKnownFileType = folder; - name = images; - path = ../library/images; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0933016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = listbox.tcl; - path = ../library/listbox.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0934016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = menu.tcl; - path = ../library/menu.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0935016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = msgbox.tcl; - path = ../library/msgbox.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0936016CD3F901DC9062 = { - includeInIndex = 0; - isa = PBXFileReference; - lastKnownFileType = folder; - name = msgs; - path = ../library/msgs; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0937016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = obsolete.tcl; - path = ../library/obsolete.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0938016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = optMenu.tcl; - path = ../library/optMenu.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0939016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = palette.tcl; - path = ../library/palette.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF093A016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = prolog.ps; - path = ../generic/prolog.ps; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF093B016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = safetk.tcl; - path = ../library/safetk.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF093C016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = scale.tcl; - path = ../library/scale.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF093D016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = scrlbar.tcl; - path = ../library/scrlbar.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF093E016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = spinbox.tcl; - path = ../library/spinbox.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF093F016CD3F901DC9062 = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = text; - name = tclIndex; - path = ../library/tclIndex; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0940016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = tearoff.tcl; - path = ../library/tearoff.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0941016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = text.tcl; - path = ../library/text.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0942016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = tk.tcl; - path = ../library/tk.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0943016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = tkfbox.tcl; - path = ../library/tkfbox.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0944016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = unsupported.tcl; - path = ../library/unsupported.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F5DF0945016CD3F901DC9062 = { - isa = PBXFileReference; - lastKnownFileType = text; - name = xmfbox.tcl; - path = ../library/xmfbox.tcl; - refType = 2; - sourceTree = SOURCE_ROOT; - }; -//F50 -//F51 -//F52 -//F53 -//F54 -//F90 -//F91 -//F92 -//F93 -//F94 - F92ED9910403D0F0006F146B = { - fileEncoding = 5; - isa = PBXFileReference; - lastKnownFileType = text; - name = ChangeLog; - path = ../ChangeLog; - refType = 2; - sourceTree = SOURCE_ROOT; - }; - F9D6747B08E84DC100688CAA = { - buildArgumentsString = "-c \"cd \\\"${TK_SRCROOT}/macosx\\\" && ACTION=${ACTION} && gnumake \\${ACTION:+\\${ACTION/clean/distclean}-}${MAKE_TARGET} INSTALL_ROOT=\\\"${DSTROOT}\\\" INSTALL_PATH=\\\"${INSTALL_PATH}\\\" APPLICATION_INSTALL_PATH=\\\"${APPLICATION_INSTALL_PATH}\\\" PREFIX=\\\"${PREFIX}\\\" BINDIR=\\\"${BINDIR}\\\" MANDIR=\\\"${MANDIR}\\\" TCL_BUILD_DIR=\\\"${TCL_BUILD_DIR}\\\" \\${EXTRA_MAKE_FLAGS} ${ALL_SETTINGS}\""; - buildPhases = ( - ); - buildSettings = { - APPLICATION_INSTALL_PATH = /Applications/Utilities; - BINDIR = "${PREFIX}/bin"; - INSTALL_PATH = /Library/Frameworks; - MANDIR = "${PREFIX}/man"; - PREFIX = /usr/local; - PRODUCT_NAME = Tk; - TCL_BUILD_DIR = "${SYMROOT}/../tcl/${BUILD_STYLE}"; - TCL_SRCROOT = "${SRCROOT}/../../tcl"; - TEMP_DIR = "${PROJECT_TEMP_DIR}"; - TK_SRCROOT = "${SRCROOT}/../../tk"; - }; - buildToolPath = /bin/bash; - buildWorkingDirectory = "${SRCROOT}"; - dependencies = ( - ); - isa = PBXLegacyTarget; - name = Tk; - passBuildSettingsInEnvironment = 0; - productName = Tk; - }; - F9F6B1BE08E8639A00C9CB24 = { - isa = PBXFileReference; - lastKnownFileType = wrapper.framework; - path = Tk.framework; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; - F9F6B1BF08E863B300C9CB24 = { - isa = PBXFileReference; - lastKnownFileType = wrapper.application; - path = Wish.app; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; - F9F6B1C008E863C200C9CB24 = { - isa = PBXFileReference; - lastKnownFileType = "compiled.mach-o.executable"; - path = tktest; - refType = 3; - sourceTree = BUILT_PRODUCTS_DIR; - }; - }; - rootObject = F537552A016C352C01DC9062; -} diff --git a/macosx/Wish.sdef b/macosx/Wish.sdef new file mode 100644 index 0000000..8873e95 --- /dev/null +++ b/macosx/Wish.sdef @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd"> +<!-- + Copyright (c) 1997 Sun Microsystems, Inc. + Copyright 2009 Kevin Walzer/WordTech Communications LLC. + Copyright (c) 2009 Daniel A. Steffen <das@users.sourceforge.net> + + See the file "license.terms" for information on usage and redistribution of + this file, and for a DISCLAIMER OF ALL WARRANTIES. +--> +<dictionary title="Wish Terminology"> + <suite name="Standard Suite" code="reqd" description="Common commands for all applications."> + <command name="open" code="aevtodoc" description="Open a document."> + <direct-parameter description="The file(s) to be opened."> + <type type="file"/> + <type type="file" list="yes"/> + </direct-parameter> + </command> + <command name="print" code="aevtpdoc" description="Print a document."> + <direct-parameter description="The file(s) to be printed."> + <type type="file" list="yes"/> + <type type="specifier"/> + </direct-parameter> + </command> + <command name="quit" code="aevtquit" description="Quit the application."/> + </suite> + <suite name="Wish Suite" code="WIsH" description="Commands for the Wish application."> + <command name="do script" code="miscdosc" description="Execute a Tcl script."> + <direct-parameter description="Script to execute" type="text"> + <type type="text"/> + </direct-parameter> + <result description="Result"> + <type type="text"/> + </result> + </command> + </suite> +</dictionary> diff --git a/macosx/Wish.xcode/default.pbxuser b/macosx/Wish.xcode/default.pbxuser new file mode 100644 index 0000000..188bbeb --- /dev/null +++ b/macosx/Wish.xcode/default.pbxuser @@ -0,0 +1,342 @@ +// !$*UTF8*$! +{ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + activeBuildConfigurationName = Debug; + activeExecutable = F9E61D1C090A4282002B3151 /* Wish */; + activeTarget = F9E61D16090A3E94002B3151 /* Tk */; + codeSenseManager = F944EB9D08F798180049FDD4 /* Code sense */; + executables = ( + F9E61D1C090A4282002B3151 /* Wish */, + F944EB8F08F798100049FDD4 /* tktest */, + F9FD31F50CC1AD070073837D /* tktest-X11 */, + ); + perUserDictionary = { + com.apple.ide.smrt.PBXUserSmartGroupsKey.Rev10 = <040b73747265616d747970656481e8038401408484840e4e534d757461626c654172726179008484074e534172726179008484084e534f626a65637400858401690192848484134e534d757461626c6544696374696f6e6172790084840c4e5344696374696f6e6172790095960792848484084e53537472696e67019584012b046e616d658692849a9a14496d706c656d656e746174696f6e2046696c65738692849a9a146162736f6c75746550617468546f42756e646c658692849a9a008692849a9a195042585472616e7369656e744c6f636174696f6e4174546f708692849a9a06626f74746f6d8692849a9a03636c7a8692849a9a1550425846696c656e616d65536d61727447726f75708692849a9a0b6465736372697074696f6e8692849a9a103c6e6f206465736372697074696f6e3e8692849a9a0b707265666572656e63657386928497960892849a9a07666e6d617463688692849a9a008692849a9a05696d6167658692849a9a0b536d617274466f6c6465728692849a9a04726f6f748692849a9a093c50524f4a4543543e8692849a9a0572656765788692849a9a065c2e286329248692849a9a097265637572736976658692848484084e534e756d626572008484074e5356616c7565009584012a849696018692849a9a0669734c656166869284b09db296008692849a9a0763616e536176658692af92849a9a1250425850726f6a65637453636f70654b65798692849a9a03594553868692849a9a08676c6f62616c49448692849a9a18314343304541343030343335304546393030343434313042868686>; + }; + sourceControlManager = F944EB9C08F798180049FDD4 /* Source Control */; + userBuildSettings = { + CODE_SIGN_IDENTITY = ""; + SYMROOT = "${SRCROOT}/../../build/tk"; + TCL_SRCROOT = "${SRCROOT}/../../tcl"; + TK_SRCROOT = "${SRCROOT}/../../tk"; + }; + }; + 8DD76FA90486AB0100D96B5E /* tktest */ = { + activeExec = 0; + executables = ( + F944EB8F08F798100049FDD4 /* tktest */, + ); + }; + F944EB8F08F798100049FDD4 /* tktest */ = { + isa = PBXExecutable; + activeArgIndices = ( + YES, + NO, + NO, + NO, + NO, + NO, + NO, + ); + argumentStrings = ( + "${TK_SRCROOT}/library/demos/widget", + "${TK_SRCROOT}/tests/all.tcl", + "${TK_SRCROOT}/tests/ttk/all.tcl", + "-geometry +0+0", + "-singleproc 1", + "-verbose \"bet\"", + "-skip window-2.9", + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 0; + environmentEntries = ( + { + active = YES; + name = TCL_LIBRARY; + value = "${TCL_SRCROOT}/library"; + }, + { + active = YES; + name = TK_LIBRARY; + value = "${TK_SRCROOT}/library"; + }, + { + active = YES; + name = TCLLIBPATH; + value = /Library/Tcl; + }, + { + active = YES; + name = TK_SRCROOT; + value = "${TK_SRCROOT}"; + }, + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + { + active = NO; + name = EventDebug; + value = 1; + }, + { + active = NO; + name = MallocBadFreeAbort; + value = 1; + }, + { + active = NO; + name = MallocLogFile; + value = /tmp/malloc.log; + }, + { + active = NO; + name = MallocStackLogging; + value = 1; + }, + { + active = NO; + name = MallocStackLoggingNoCompact; + value = 1; + }, + { + active = NO; + name = MallocPreScribble; + value = 1; + }, + { + active = NO; + name = MallocScribble; + value = 1; + }, + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = tktest; + sourceDirectories = ( + ); + }; + F944EB9C08F798180049FDD4 /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + CVSToolPath = /usr/bin/cvs; + CVSUseSSH = NO; + SubversionToolPath = /usr/bin/svn; + }; + scmType = scm.cvs; + }; + F944EB9D08F798180049FDD4 /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + F9E61D16090A3E94002B3151 /* Tk */ = { + activeExec = 0; + executables = ( + F9E61D1C090A4282002B3151 /* Wish */, + ); + }; + F9E61D1C090A4282002B3151 /* Wish */ = { + isa = PBXExecutable; + activeArgIndices = ( + YES, + ); + argumentStrings = ( + "${TK_SRCROOT}/library/demos/widget", + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 0; + environmentEntries = ( + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = Wish; + sourceDirectories = ( + ); + }; + F97258A50A86873C00096C78 /* tktest-X11 */ = { + activeExec = 0; + executables = ( + F9FD31F50CC1AD070073837D /* tktest-X11 */, + ); + }; + F9FD31F50CC1AD070073837D /* tktest-X11 */ = { + isa = PBXExecutable; + activeArgIndices = ( + YES, + NO, + NO, + NO, + NO, + NO, + NO, + ); + argumentStrings = ( + "${TK_SRCROOT}/library/demos/widget", + "${TK_SRCROOT}/tests/all.tcl", + "${TK_SRCROOT}/tests/ttk/all.tcl", + "-geometry +0+0", + "-singleproc 1", + "-verbose \"bet\"", + "-skip window-2.9", + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 0; + environmentEntries = ( + { + active = YES; + name = TCL_LIBRARY; + value = "${TCL_SRCROOT}/library"; + }, + { + active = YES; + name = TK_LIBRARY; + value = "${TK_SRCROOT}/library"; + }, + { + active = YES; + name = TCLLIBPATH; + value = /Library/Tcl; + }, + { + active = YES; + name = DISPLAY; + value = ":0"; + }, + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + { + active = NO; + name = MallocBadFreeAbort; + value = 1; + }, + { + active = NO; + name = MallocLogFile; + value = /tmp/malloc.log; + }, + { + active = NO; + name = MallocStackLogging; + value = 1; + }, + { + active = NO; + name = MallocStackLoggingNoCompact; + value = 1; + }, + { + active = NO; + name = MallocPreScribble; + value = 1; + }, + { + active = NO; + name = MallocScribble; + value = 1; + }, + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = "tktest-X11"; + sourceDirectories = ( + ); + }; +} diff --git a/macosx/Wish.xcode/project.pbxproj b/macosx/Wish.xcode/project.pbxproj new file mode 100644 index 0000000..ef0fc31 --- /dev/null +++ b/macosx/Wish.xcode/project.pbxproj @@ -0,0 +1,5730 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 45; + objects = { + +/* Begin PBXBuildFile section */ + F9067BCD0BFBA2900074F726 /* tkOldTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFE08F27A39005CB29B /* tkOldTest.c */; }; + F94523A20E6FC2AC00C1D987 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F94523A10E6FC2AC00C1D987 /* Cocoa.framework */; }; + F966BDCF08F27A3F005CB29B /* tk3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAC08F27A39005CB29B /* tk3d.c */; }; + F966BDD108F27A3F005CB29B /* tkArgv.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAE08F27A39005CB29B /* tkArgv.c */; }; + F966BDD208F27A3F005CB29B /* tkAtom.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAF08F27A39005CB29B /* tkAtom.c */; }; + F966BDD308F27A3F005CB29B /* tkBind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB008F27A39005CB29B /* tkBind.c */; }; + F966BDD408F27A3F005CB29B /* tkBitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB108F27A39005CB29B /* tkBitmap.c */; }; + F966BDD508F27A3F005CB29B /* tkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB208F27A39005CB29B /* tkButton.c */; }; + F966BDD708F27A3F005CB29B /* tkCanvArc.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB408F27A39005CB29B /* tkCanvArc.c */; }; + F966BDD808F27A3F005CB29B /* tkCanvas.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB508F27A39005CB29B /* tkCanvas.c */; }; + F966BDDA08F27A3F005CB29B /* tkCanvBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB708F27A39005CB29B /* tkCanvBmap.c */; }; + F966BDDB08F27A3F005CB29B /* tkCanvImg.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB808F27A39005CB29B /* tkCanvImg.c */; }; + F966BDDC08F27A3F005CB29B /* tkCanvLine.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB908F27A39005CB29B /* tkCanvLine.c */; }; + F966BDDD08F27A3F005CB29B /* tkCanvPoly.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABA08F27A39005CB29B /* tkCanvPoly.c */; }; + F966BDDE08F27A3F005CB29B /* tkCanvPs.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABB08F27A39005CB29B /* tkCanvPs.c */; }; + F966BDE008F27A3F005CB29B /* tkCanvText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABD08F27A39005CB29B /* tkCanvText.c */; }; + F966BDE108F27A3F005CB29B /* tkCanvUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABE08F27A39005CB29B /* tkCanvUtil.c */; }; + F966BDE208F27A3F005CB29B /* tkCanvWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABF08F27A39005CB29B /* tkCanvWind.c */; }; + F966BDE308F27A3F005CB29B /* tkClipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC008F27A39005CB29B /* tkClipboard.c */; }; + F966BDE408F27A3F005CB29B /* tkCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC108F27A39005CB29B /* tkCmds.c */; }; + F966BDE508F27A3F005CB29B /* tkColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC208F27A39005CB29B /* tkColor.c */; }; + F966BDE708F27A3F005CB29B /* tkConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC408F27A39005CB29B /* tkConfig.c */; }; + F966BDE808F27A3F005CB29B /* tkConsole.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC508F27A39005CB29B /* tkConsole.c */; }; + F966BDE908F27A3F005CB29B /* tkCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC608F27A39005CB29B /* tkCursor.c */; }; + F966BDEB08F27A3F005CB29B /* tkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC808F27A39005CB29B /* tkEntry.c */; }; + F966BDED08F27A3F005CB29B /* tkError.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACA08F27A39005CB29B /* tkError.c */; }; + F966BDEE08F27A3F005CB29B /* tkEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACB08F27A39005CB29B /* tkEvent.c */; }; + F966BDEF08F27A3F005CB29B /* tkFileFilter.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACC08F27A39005CB29B /* tkFileFilter.c */; }; + F966BDF108F27A3F005CB29B /* tkFocus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACE08F27A39005CB29B /* tkFocus.c */; }; + F966BDF208F27A3F005CB29B /* tkFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACF08F27A39005CB29B /* tkFont.c */; }; + F966BDF408F27A3F005CB29B /* tkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD108F27A39005CB29B /* tkFrame.c */; }; + F966BDF508F27A3F005CB29B /* tkGC.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD208F27A39005CB29B /* tkGC.c */; }; + F966BDF608F27A3F005CB29B /* tkGeometry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD308F27A39005CB29B /* tkGeometry.c */; }; + F966BDF708F27A3F005CB29B /* tkGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD408F27A39005CB29B /* tkGet.c */; }; + F966BDF808F27A3F005CB29B /* tkGrab.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD508F27A39005CB29B /* tkGrab.c */; }; + F966BDF908F27A3F005CB29B /* tkGrid.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD608F27A39005CB29B /* tkGrid.c */; }; + F966BDFA08F27A3F005CB29B /* tkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD708F27A39005CB29B /* tkImage.c */; }; + F966BDFB08F27A3F005CB29B /* tkImgBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD808F27A39005CB29B /* tkImgBmap.c */; }; + F966BDFC08F27A3F005CB29B /* tkImgGIF.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD908F27A39005CB29B /* tkImgGIF.c */; }; + F966BDFD08F27A3F005CB29B /* tkImgPhoto.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADA08F27A39005CB29B /* tkImgPhoto.c */; }; + F966BDFE08F27A3F005CB29B /* tkImgPPM.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADB08F27A39005CB29B /* tkImgPPM.c */; }; + F966BE0708F27A3F005CB29B /* tkListbox.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE408F27A39005CB29B /* tkListbox.c */; }; + F966BE0808F27A3F005CB29B /* tkMacWinMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE508F27A39005CB29B /* tkMacWinMenu.c */; }; + F966BE0908F27A3F005CB29B /* tkMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE608F27A39005CB29B /* tkMain.c */; }; + F966BE0A08F27A3F005CB29B /* tkMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE708F27A39005CB29B /* tkMenu.c */; }; + F966BE0C08F27A3F005CB29B /* tkMenubutton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE908F27A39005CB29B /* tkMenubutton.c */; }; + F966BE0E08F27A3F005CB29B /* tkMenuDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEB08F27A39005CB29B /* tkMenuDraw.c */; }; + F966BE0F08F27A3F005CB29B /* tkMessage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEC08F27A39005CB29B /* tkMessage.c */; }; + F966BE1008F27A3F005CB29B /* tkObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAED08F27A39005CB29B /* tkObj.c */; }; + F966BE1108F27A3F005CB29B /* tkOldConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEE08F27A39005CB29B /* tkOldConfig.c */; }; + F966BE1208F27A3F005CB29B /* tkOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEF08F27A39005CB29B /* tkOption.c */; }; + F966BE1308F27A3F005CB29B /* tkPack.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF008F27A39005CB29B /* tkPack.c */; }; + F966BE1408F27A3F005CB29B /* tkPanedWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF108F27A39005CB29B /* tkPanedWindow.c */; }; + F966BE1508F27A3F005CB29B /* tkPlace.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF208F27A39005CB29B /* tkPlace.c */; }; + F966BE1708F27A3F005CB29B /* tkPointer.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF408F27A39005CB29B /* tkPointer.c */; }; + F966BE1908F27A3F005CB29B /* tkRectOval.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF608F27A39005CB29B /* tkRectOval.c */; }; + F966BE1A08F27A3F005CB29B /* tkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF708F27A39005CB29B /* tkScale.c */; }; + F966BE1C08F27A40005CB29B /* tkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF908F27A39005CB29B /* tkScrollbar.c */; }; + F966BE1E08F27A40005CB29B /* tkSelect.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFB08F27A39005CB29B /* tkSelect.c */; }; + F966BE2008F27A40005CB29B /* tkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFD08F27A39005CB29B /* tkSquare.c */; }; + F966BE2208F27A40005CB29B /* tkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFF08F27A39005CB29B /* tkStubInit.c */; }; + F966BE2308F27A40005CB29B /* tkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0008F27A39005CB29B /* tkStubLib.c */; }; + F966BE2408F27A40005CB29B /* tkStyle.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0108F27A39005CB29B /* tkStyle.c */; }; + F966BE2508F27A40005CB29B /* tkTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0208F27A39005CB29B /* tkTest.c */; }; + F966BE2608F27A40005CB29B /* tkText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0308F27A39005CB29B /* tkText.c */; }; + F966BE2808F27A40005CB29B /* tkTextBTree.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0508F27A39005CB29B /* tkTextBTree.c */; }; + F966BE2908F27A40005CB29B /* tkTextDisp.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0608F27A39005CB29B /* tkTextDisp.c */; }; + F966BE2B08F27A40005CB29B /* tkTextImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0808F27A39005CB29B /* tkTextImage.c */; }; + F966BE2C08F27A40005CB29B /* tkTextIndex.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0908F27A39005CB29B /* tkTextIndex.c */; }; + F966BE2D08F27A40005CB29B /* tkTextMark.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0A08F27A39005CB29B /* tkTextMark.c */; }; + F966BE2E08F27A40005CB29B /* tkTextTag.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0B08F27A39005CB29B /* tkTextTag.c */; }; + F966BE2F08F27A40005CB29B /* tkTextWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0C08F27A39005CB29B /* tkTextWind.c */; }; + F966BE3008F27A40005CB29B /* tkTrig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0D08F27A39005CB29B /* tkTrig.c */; }; + F966BE3108F27A40005CB29B /* tkUndo.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0E08F27A39005CB29B /* tkUndo.c */; }; + F966BE3308F27A40005CB29B /* tkUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1008F27A39005CB29B /* tkUtil.c */; }; + F966BE3408F27A40005CB29B /* tkVisual.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1108F27A39005CB29B /* tkVisual.c */; }; + F966BE3508F27A40005CB29B /* tkWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1208F27A39005CB29B /* tkWindow.c */; }; + F966BEDB08F27A40005CB29B /* tkMacOSXBitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC508F27A3B005CB29B /* tkMacOSXBitmap.c */; }; + F966BEDC08F27A40005CB29B /* tkMacOSXButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC608F27A3B005CB29B /* tkMacOSXButton.c */; }; + F966BEDE08F27A40005CB29B /* tkMacOSXClipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC808F27A3B005CB29B /* tkMacOSXClipboard.c */; }; + F966BEDF08F27A40005CB29B /* tkMacOSXColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC908F27A3B005CB29B /* tkMacOSXColor.c */; }; + F966BEE008F27A40005CB29B /* tkMacOSXConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBCA08F27A3B005CB29B /* tkMacOSXConfig.c */; }; + F966BEE108F27A40005CB29B /* tkMacOSXCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBCB08F27A3B005CB29B /* tkMacOSXCursor.c */; }; + F966BEE308F27A40005CB29B /* tkMacOSXDebug.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBCD08F27A3B005CB29B /* tkMacOSXDebug.c */; }; + F966BEE608F27A40005CB29B /* tkMacOSXDialog.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD008F27A3B005CB29B /* tkMacOSXDialog.c */; }; + F966BEE708F27A40005CB29B /* tkMacOSXDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD108F27A3B005CB29B /* tkMacOSXDraw.c */; }; + F966BEE808F27A40005CB29B /* tkMacOSXEmbed.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD208F27A3B005CB29B /* tkMacOSXEmbed.c */; }; + F966BEE908F27A40005CB29B /* tkMacOSXEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD308F27A3B005CB29B /* tkMacOSXEntry.c */; }; + F966BEEA08F27A40005CB29B /* tkMacOSXEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD408F27A3B005CB29B /* tkMacOSXEvent.c */; }; + F966BEEC08F27A40005CB29B /* tkMacOSXFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD608F27A3B005CB29B /* tkMacOSXFont.c */; }; + F966BEED08F27A40005CB29B /* tkMacOSXHLEvents.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD708F27A3B005CB29B /* tkMacOSXHLEvents.c */; }; + F966BEEE08F27A40005CB29B /* tkMacOSXInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD808F27A3B005CB29B /* tkMacOSXInit.c */; settings = {COMPILER_FLAGS = "-DTK_LIBRARY=\\\"$(TK_LIBRARY)\\\""; }; }; + F966BEF108F27A40005CB29B /* tkMacOSXKeyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBDB08F27A3B005CB29B /* tkMacOSXKeyboard.c */; }; + F966BEF208F27A40005CB29B /* tkMacOSXKeyEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBDC08F27A3B005CB29B /* tkMacOSXKeyEvent.c */; }; + F966BEF308F27A40005CB29B /* tkMacOSXMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBDD08F27A3B005CB29B /* tkMacOSXMenu.c */; }; + F966BEF608F27A40005CB29B /* tkMacOSXMenubutton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE008F27A3B005CB29B /* tkMacOSXMenubutton.c */; }; + F966BEF708F27A40005CB29B /* tkMacOSXMenus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE108F27A3B005CB29B /* tkMacOSXMenus.c */; }; + F966BEF808F27A40005CB29B /* tkMacOSXMouseEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE208F27A3B005CB29B /* tkMacOSXMouseEvent.c */; }; + F966BEF908F27A40005CB29B /* tkMacOSXNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE308F27A3B005CB29B /* tkMacOSXNotify.c */; }; + F966BF0108F27A40005CB29B /* tkMacOSXRegion.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBEB08F27A3C005CB29B /* tkMacOSXRegion.c */; }; + F966BF0308F27A40005CB29B /* tkMacOSXScrlbr.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBED08F27A3C005CB29B /* tkMacOSXScrlbr.c */; }; + F966BF0408F27A40005CB29B /* tkMacOSXSend.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBEE08F27A3C005CB29B /* tkMacOSXSend.c */; }; + F966BF0508F27A40005CB29B /* tkMacOSXSubwindows.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBEF08F27A3C005CB29B /* tkMacOSXSubwindows.c */; }; + F966BF0608F27A40005CB29B /* tkMacOSXTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF008F27A3C005CB29B /* tkMacOSXTest.c */; }; + F966BF0708F27A40005CB29B /* tkMacOSXWindowEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF108F27A3C005CB29B /* tkMacOSXWindowEvent.c */; }; + F966BF0808F27A40005CB29B /* tkMacOSXWm.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF208F27A3C005CB29B /* tkMacOSXWm.c */; }; + F966BF0B08F27A40005CB29B /* tkMacOSXXStubs.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF508F27A3C005CB29B /* tkMacOSXXStubs.c */; }; + F966BF7F08F27A41005CB29B /* tkAppInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7508F27A3D005CB29B /* tkAppInit.c */; settings = {COMPILER_FLAGS = "-DTK_TEST"; }; }; + F966BF8308F27A41005CB29B /* tkUnix3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7908F27A3D005CB29B /* tkUnix3d.c */; }; + F966BF9608F27A41005CB29B /* tkUnixScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8C08F27A3D005CB29B /* tkUnixScale.c */; }; + F966C02A08F27A42005CB29B /* xcolors.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2408F27A3F005CB29B /* xcolors.c */; }; + F966C02B08F27A42005CB29B /* xdraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2508F27A3F005CB29B /* xdraw.c */; }; + F966C02C08F27A42005CB29B /* xgc.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2608F27A3F005CB29B /* xgc.c */; }; + F966C02D08F27A42005CB29B /* ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2708F27A3F005CB29B /* ximage.c */; }; + F966C02E08F27A42005CB29B /* xutil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2808F27A3F005CB29B /* xutil.c */; }; + F966C07508F2820D005CB29B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07408F2820D005CB29B /* CoreFoundation.framework */; }; + F966C07708F2821B005CB29B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07608F2821B005CB29B /* Carbon.framework */; }; + F966C07908F28233005CB29B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07808F28233005CB29B /* IOKit.framework */; }; + F96888050AF786D5000797B5 /* ttkBlink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E10AF786D5000797B5 /* ttkBlink.c */; }; + F96888060AF786D5000797B5 /* ttkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E20AF786D5000797B5 /* ttkButton.c */; }; + F96888070AF786D5000797B5 /* ttkCache.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E30AF786D5000797B5 /* ttkCache.c */; }; + F96888080AF786D5000797B5 /* ttkClamTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E40AF786D5000797B5 /* ttkClamTheme.c */; }; + F96888090AF786D5000797B5 /* ttkClassicTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E50AF786D5000797B5 /* ttkClassicTheme.c */; }; + F968880A0AF786D5000797B5 /* ttkDefaultTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */; }; + F968880B0AF786D5000797B5 /* ttkElements.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E80AF786D5000797B5 /* ttkElements.c */; }; + F968880C0AF786D5000797B5 /* ttkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E90AF786D5000797B5 /* ttkEntry.c */; }; + F968880D0AF786D5000797B5 /* ttkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EA0AF786D5000797B5 /* ttkFrame.c */; }; + F968880E0AF786D5000797B5 /* ttkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EB0AF786D5000797B5 /* ttkImage.c */; }; + F968880F0AF786D5000797B5 /* ttkInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EC0AF786D5000797B5 /* ttkInit.c */; }; + F96888100AF786D5000797B5 /* ttkLabel.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887ED0AF786D5000797B5 /* ttkLabel.c */; }; + F96888110AF786D5000797B5 /* ttkLayout.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EE0AF786D5000797B5 /* ttkLayout.c */; }; + F96888120AF786D5000797B5 /* ttkManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EF0AF786D5000797B5 /* ttkManager.c */; }; + F96888130AF786D5000797B5 /* ttkNotebook.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F10AF786D5000797B5 /* ttkNotebook.c */; }; + F96888140AF786D5000797B5 /* ttkPanedwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F20AF786D5000797B5 /* ttkPanedwindow.c */; }; + F96888150AF786D5000797B5 /* ttkProgress.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F30AF786D5000797B5 /* ttkProgress.c */; }; + F96888160AF786D5000797B5 /* ttkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F40AF786D5000797B5 /* ttkScale.c */; }; + F96888170AF786D5000797B5 /* ttkScroll.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F50AF786D5000797B5 /* ttkScroll.c */; }; + F96888180AF786D5000797B5 /* ttkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F60AF786D5000797B5 /* ttkScrollbar.c */; }; + F96888190AF786D5000797B5 /* ttkSeparator.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F70AF786D5000797B5 /* ttkSeparator.c */; }; + F968881A0AF786D5000797B5 /* ttkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F80AF786D5000797B5 /* ttkSquare.c */; }; + F968881B0AF786D5000797B5 /* ttkState.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F90AF786D5000797B5 /* ttkState.c */; }; + F968881C0AF786D5000797B5 /* ttkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FA0AF786D5000797B5 /* ttkStubInit.c */; }; + F968881D0AF786D5000797B5 /* ttkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FB0AF786D5000797B5 /* ttkStubLib.c */; }; + F968881E0AF786D5000797B5 /* ttkTagSet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FC0AF786D5000797B5 /* ttkTagSet.c */; }; + F968881F0AF786D5000797B5 /* ttkTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FD0AF786D5000797B5 /* ttkTheme.c */; }; + F96888200AF786D5000797B5 /* ttkTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888000AF786D5000797B5 /* ttkTrace.c */; }; + F96888210AF786D5000797B5 /* ttkTrack.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888010AF786D5000797B5 /* ttkTrack.c */; }; + F96888220AF786D5000797B5 /* ttkTreeview.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888020AF786D5000797B5 /* ttkTreeview.c */; }; + F96888230AF786D5000797B5 /* ttkWidget.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888030AF786D5000797B5 /* ttkWidget.c */; }; + F96888850AF78938000797B5 /* ttkMacOSXTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888840AF78938000797B5 /* ttkMacOSXTheme.c */; }; + F96D456F08F272BB004A47F5 /* regcomp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED008F272A7004A47F5 /* regcomp.c */; }; + F96D457208F272BB004A47F5 /* regerror.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED308F272A7004A47F5 /* regerror.c */; }; + F96D457508F272BB004A47F5 /* regexec.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED608F272A7004A47F5 /* regexec.c */; }; + F96D457608F272BB004A47F5 /* regfree.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED708F272A7004A47F5 /* regfree.c */; }; + F96D457B08F272BB004A47F5 /* tclAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDC08F272A7004A47F5 /* tclAlloc.c */; settings = {COMPILER_FLAGS = "-DUSE_TCLALLOC=0"; }; }; + F96D457C08F272BB004A47F5 /* tclAsync.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDD08F272A7004A47F5 /* tclAsync.c */; }; + F96D457D08F272BB004A47F5 /* tclBasic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDE08F272A7004A47F5 /* tclBasic.c */; }; + F96D457E08F272BC004A47F5 /* tclBinary.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDF08F272A7004A47F5 /* tclBinary.c */; }; + F96D457F08F272BC004A47F5 /* tclCkalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE008F272A7004A47F5 /* tclCkalloc.c */; }; + F96D458008F272BC004A47F5 /* tclClock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE108F272A7004A47F5 /* tclClock.c */; }; + F96D458108F272BC004A47F5 /* tclCmdAH.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE208F272A7004A47F5 /* tclCmdAH.c */; }; + F96D458208F272BC004A47F5 /* tclCmdIL.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE308F272A7004A47F5 /* tclCmdIL.c */; }; + F96D458308F272BC004A47F5 /* tclCmdMZ.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */; }; + F96D458408F272BC004A47F5 /* tclCompCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE508F272A7004A47F5 /* tclCompCmds.c */; }; + F96D458508F272BC004A47F5 /* tclCompExpr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE608F272A7004A47F5 /* tclCompExpr.c */; }; + F96D458608F272BC004A47F5 /* tclCompile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE708F272A7004A47F5 /* tclCompile.c */; }; + F96D458808F272BC004A47F5 /* tclConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE908F272A7004A47F5 /* tclConfig.c */; }; + F96D458908F272BC004A47F5 /* tclDate.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEA08F272A7004A47F5 /* tclDate.c */; }; + F96D458B08F272BC004A47F5 /* tclDictObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEC08F272A7004A47F5 /* tclDictObj.c */; }; + F96D458C08F272BC004A47F5 /* tclEncoding.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EED08F272A7004A47F5 /* tclEncoding.c */; }; + F96D458D08F272BC004A47F5 /* tclEnv.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEE08F272A7004A47F5 /* tclEnv.c */; }; + F96D458E08F272BC004A47F5 /* tclEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEF08F272A7004A47F5 /* tclEvent.c */; }; + F96D458F08F272BC004A47F5 /* tclExecute.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF008F272A7004A47F5 /* tclExecute.c */; }; + F96D459008F272BC004A47F5 /* tclFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF108F272A7004A47F5 /* tclFCmd.c */; }; + F96D459108F272BC004A47F5 /* tclFileName.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF208F272A7004A47F5 /* tclFileName.c */; }; + F96D459308F272BC004A47F5 /* tclGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF408F272A7004A47F5 /* tclGet.c */; }; + F96D459508F272BC004A47F5 /* tclHash.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF608F272A7004A47F5 /* tclHash.c */; }; + F96D459608F272BC004A47F5 /* tclHistory.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF708F272A7004A47F5 /* tclHistory.c */; }; + F96D459708F272BC004A47F5 /* tclIndexObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF808F272A7004A47F5 /* tclIndexObj.c */; }; + F96D459B08F272BC004A47F5 /* tclInterp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFC08F272A7004A47F5 /* tclInterp.c */; }; + F96D459D08F272BC004A47F5 /* tclIO.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFE08F272A7004A47F5 /* tclIO.c */; }; + F96D459F08F272BC004A47F5 /* tclIOCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0008F272A7004A47F5 /* tclIOCmd.c */; }; + F96D45A008F272BC004A47F5 /* tclIOGT.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0108F272A7004A47F5 /* tclIOGT.c */; }; + F96D45A108F272BC004A47F5 /* tclIORChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0208F272A7004A47F5 /* tclIORChan.c */; }; + F96D45A208F272BC004A47F5 /* tclIOSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0308F272A7004A47F5 /* tclIOSock.c */; }; + F96D45A308F272BC004A47F5 /* tclIOUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0408F272A7004A47F5 /* tclIOUtil.c */; }; + F96D45A408F272BC004A47F5 /* tclLink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0508F272A7004A47F5 /* tclLink.c */; }; + F96D45A508F272BC004A47F5 /* tclListObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0608F272A7004A47F5 /* tclListObj.c */; }; + F96D45A608F272BC004A47F5 /* tclLiteral.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0708F272A7004A47F5 /* tclLiteral.c */; }; + F96D45A708F272BC004A47F5 /* tclLoad.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0808F272A7004A47F5 /* tclLoad.c */; }; + F96D45A908F272BC004A47F5 /* tclMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0A08F272A7004A47F5 /* tclMain.c */; }; + F96D45AA08F272BC004A47F5 /* tclNamesp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0B08F272A7004A47F5 /* tclNamesp.c */; }; + F96D45AB08F272BC004A47F5 /* tclNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0C08F272A7004A47F5 /* tclNotify.c */; }; + F96D45AC08F272BC004A47F5 /* tclObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0D08F272A7004A47F5 /* tclObj.c */; }; + F96D45AD08F272BC004A47F5 /* tclPanic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0E08F272A7004A47F5 /* tclPanic.c */; }; + F96D45AE08F272BC004A47F5 /* tclParse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0F08F272A7004A47F5 /* tclParse.c */; }; + F96D45B008F272BC004A47F5 /* tclPathObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1108F272A7004A47F5 /* tclPathObj.c */; }; + F96D45B108F272BC004A47F5 /* tclPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1208F272A7004A47F5 /* tclPipe.c */; }; + F96D45B208F272BC004A47F5 /* tclPkg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1308F272A7004A47F5 /* tclPkg.c */; }; + F96D45B308F272BC004A47F5 /* tclPkgConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */; settings = {COMPILER_FLAGS = "-DCFG_INSTALL_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_INSTALL_BINDIR=\\\"$(BINDIR)\\\" -DCFG_INSTALL_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_INSTALL_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_INSTALL_DOCDIR=\\\"$(MANDIR)\\\" -DCFG_RUNTIME_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_RUNTIME_BINDIR=\\\"$(BINDIR)\\\" -DCFG_RUNTIME_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_RUNTIME_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_RUNTIME_DOCDIR=\\\"$(MANDIR)\\\""; }; }; + F96D45B608F272BC004A47F5 /* tclPosixStr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1708F272A7004A47F5 /* tclPosixStr.c */; }; + F96D45B708F272BC004A47F5 /* tclPreserve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1808F272A7004A47F5 /* tclPreserve.c */; }; + F96D45B808F272BC004A47F5 /* tclProc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1908F272A7004A47F5 /* tclProc.c */; }; + F96D45B908F272BC004A47F5 /* tclRegexp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1A08F272A7004A47F5 /* tclRegexp.c */; }; + F96D45BB08F272BC004A47F5 /* tclResolve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1C08F272A7004A47F5 /* tclResolve.c */; }; + F96D45BC08F272BC004A47F5 /* tclResult.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1D08F272A7004A47F5 /* tclResult.c */; }; + F96D45BD08F272BC004A47F5 /* tclScan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1E08F272A7004A47F5 /* tclScan.c */; }; + F96D45BE08F272BC004A47F5 /* tclStringObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1F08F272A7004A47F5 /* tclStringObj.c */; }; + F96D45C308F272BC004A47F5 /* tclStrToD.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2408F272A7004A47F5 /* tclStrToD.c */; }; + F96D45C408F272BC004A47F5 /* tclStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2508F272A7004A47F5 /* tclStubInit.c */; }; + F96D45C508F272BC004A47F5 /* tclStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2608F272A7004A47F5 /* tclStubLib.c */; }; + F96D45C908F272BC004A47F5 /* tclThread.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2A08F272A7004A47F5 /* tclThread.c */; }; + F96D45CA08F272BC004A47F5 /* tclThreadAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */; }; + F96D45CB08F272BC004A47F5 /* tclThreadJoin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */; }; + F96D45CC08F272BC004A47F5 /* tclThreadStorage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */; }; + F96D45CE08F272BC004A47F5 /* tclTimer.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2F08F272A7004A47F5 /* tclTimer.c */; }; + F96D45D008F272BC004A47F5 /* tclTomMathInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */; }; + F96D45D108F272BC004A47F5 /* tclTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3208F272A7004A47F5 /* tclTrace.c */; }; + F96D45D308F272BC004A47F5 /* tclUtf.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3408F272A7004A47F5 /* tclUtf.c */; }; + F96D45D408F272BC004A47F5 /* tclUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3508F272A7004A47F5 /* tclUtil.c */; }; + F96D45D508F272BC004A47F5 /* tclVar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3608F272A7004A47F5 /* tclVar.c */; }; + F96D48E208F272C3004A47F5 /* bn_fast_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */; }; + F96D48E408F272C3004A47F5 /* bn_fast_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */; }; + F96D48E708F272C3004A47F5 /* bn_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426908F272B3004A47F5 /* bn_mp_add.c */; }; + F96D48E808F272C3004A47F5 /* bn_mp_add_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */; }; + F96D48EB08F272C3004A47F5 /* bn_mp_clamp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */; }; + F96D48EC08F272C3004A47F5 /* bn_mp_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426E08F272B3004A47F5 /* bn_mp_clear.c */; }; + F96D48ED08F272C3004A47F5 /* bn_mp_clear_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */; }; + F96D48EE08F272C3004A47F5 /* bn_mp_cmp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427008F272B3004A47F5 /* bn_mp_cmp.c */; }; + F96D48F008F272C3004A47F5 /* bn_mp_cmp_mag.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */; }; + F96D48F208F272C3004A47F5 /* bn_mp_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427408F272B3004A47F5 /* bn_mp_copy.c */; }; + F96D48F308F272C3004A47F5 /* bn_mp_count_bits.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */; }; + F96D48F408F272C3004A47F5 /* bn_mp_div.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427608F272B3004A47F5 /* bn_mp_div.c */; }; + F96D48F508F272C3004A47F5 /* bn_mp_div_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427708F272B3004A47F5 /* bn_mp_div_2.c */; }; + F96D48F608F272C3004A47F5 /* bn_mp_div_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */; }; + F96D48F708F272C3004A47F5 /* bn_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427908F272B3004A47F5 /* bn_mp_div_3.c */; }; + F96D48F808F272C3004A47F5 /* bn_mp_div_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */; }; + F96D48FC08F272C3004A47F5 /* bn_mp_exch.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427E08F272B3004A47F5 /* bn_mp_exch.c */; }; + F96D490508F272C3004A47F5 /* bn_mp_grow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428708F272B3004A47F5 /* bn_mp_grow.c */; }; + F96D490608F272C3004A47F5 /* bn_mp_init.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428808F272B3004A47F5 /* bn_mp_init.c */; }; + F96D490708F272C3004A47F5 /* bn_mp_init_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */; }; + F96D490808F272C3004A47F5 /* bn_mp_init_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */; }; + F96D490908F272C3004A47F5 /* bn_mp_init_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */; }; + F96D490B08F272C3004A47F5 /* bn_mp_init_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */; }; + F96D491008F272C3004A47F5 /* bn_mp_karatsuba_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */; }; + F96D491108F272C3004A47F5 /* bn_mp_karatsuba_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */; }; + F96D491308F272C3004A47F5 /* bn_mp_lshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429508F272B3004A47F5 /* bn_mp_lshd.c */; }; + F96D491408F272C3004A47F5 /* bn_mp_mod.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429608F272B3004A47F5 /* bn_mp_mod.c */; }; + F96D491508F272C3004A47F5 /* bn_mp_mod_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */; }; + F96D491A08F272C3004A47F5 /* bn_mp_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429C08F272B3004A47F5 /* bn_mp_mul.c */; }; + F96D491B08F272C3004A47F5 /* bn_mp_mul_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */; }; + F96D491C08F272C3004A47F5 /* bn_mp_mul_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */; }; + F96D491D08F272C3004A47F5 /* bn_mp_mul_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */; }; + F96D492908F272C3004A47F5 /* bn_mp_radix_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */; }; + F96D492A08F272C3004A47F5 /* bn_mp_radix_smap.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */; }; + F96D492C08F272C3004A47F5 /* bn_mp_read_radix.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */; }; + F96D493708F272C3004A47F5 /* bn_mp_rshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */; }; + F96D493808F272C3004A47F5 /* bn_mp_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BA08F272B3004A47F5 /* bn_mp_set.c */; }; + F96D493C08F272C3004A47F5 /* bn_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */; }; + F96D493F08F272C3004A47F5 /* bn_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C108F272B3004A47F5 /* bn_mp_sub.c */; }; + F96D494008F272C3004A47F5 /* bn_mp_sub_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */; }; + F96D494608F272C3004A47F5 /* bn_mp_toom_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */; }; + F96D494708F272C3004A47F5 /* bn_mp_toom_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */; }; + F96D494908F272C3004A47F5 /* bn_mp_toradix_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */; }; + F96D494C08F272C3004A47F5 /* bn_mp_zero.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */; }; + F96D494E08F272C3004A47F5 /* bn_reverse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D008F272B3004A47F5 /* bn_reverse.c */; }; + F96D494F08F272C3004A47F5 /* bn_s_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */; }; + F96D495108F272C3004A47F5 /* bn_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */; }; + F96D495308F272C3004A47F5 /* bn_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */; }; + F96D495408F272C3004A47F5 /* bn_s_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */; }; + F96D495508F272C3004A47F5 /* bncore.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D708F272B3004A47F5 /* bncore.c */; }; + F96D49A908F272C4004A47F5 /* tclMacOSXBundle.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */; }; + F96D49AD08F272C4004A47F5 /* tclMacOSXFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */; }; + F96D49AE08F272C4004A47F5 /* tclMacOSXNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */; }; + F96D4AC608F272C9004A47F5 /* tclLoadDyld.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445B08F272B9004A47F5 /* tclLoadDyld.c */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; }; + F96D4ACA08F272C9004A47F5 /* tclUnixChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445F08F272B9004A47F5 /* tclUnixChan.c */; }; + F96D4ACB08F272C9004A47F5 /* tclUnixEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446008F272B9004A47F5 /* tclUnixEvent.c */; }; + F96D4ACC08F272C9004A47F5 /* tclUnixFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446108F272B9004A47F5 /* tclUnixFCmd.c */; }; + F96D4ACD08F272C9004A47F5 /* tclUnixFile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446208F272B9004A47F5 /* tclUnixFile.c */; }; + F96D4ACE08F272C9004A47F5 /* tclUnixInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446308F272B9004A47F5 /* tclUnixInit.c */; settings = {COMPILER_FLAGS = "-DTCL_LIBRARY=\\\"$(TCL_LIBRARY)\\\" -DTCL_PACKAGE_PATH=\\\"$(TCL_PACKAGE_PATH)\\\""; }; }; + F96D4ACF08F272C9004A47F5 /* tclUnixNotfy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446408F272B9004A47F5 /* tclUnixNotfy.c */; }; + F96D4AD008F272C9004A47F5 /* tclUnixPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446508F272B9004A47F5 /* tclUnixPipe.c */; }; + F96D4AD208F272CA004A47F5 /* tclUnixSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446708F272B9004A47F5 /* tclUnixSock.c */; }; + F96D4AD408F272CA004A47F5 /* tclUnixThrd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446908F272B9004A47F5 /* tclUnixThrd.c */; }; + F96D4AD608F272CA004A47F5 /* tclUnixTime.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446B08F272B9004A47F5 /* tclUnixTime.c */; }; + F9C9CC000E84059800E00935 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C9CBFF0E84059800E00935 /* ApplicationServices.framework */; }; + F9E61D28090A481F002B3151 /* bn_mp_cmp_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */; }; + F9E61D29090A486C002B3151 /* bn_mp_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A208F272B3004A47F5 /* bn_mp_neg.c */; }; + F9E61D2A090A4891002B3151 /* bn_mp_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */; }; + F9E61D2B090A48A4002B3151 /* bn_mp_and.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426C08F272B3004A47F5 /* bn_mp_and.c */; }; + F9E61D2C090A48AC002B3151 /* bn_mp_expt_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */; }; + F9E61D2D090A48BB002B3151 /* bn_mp_xor.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */; }; + F9E61D2E090A48BF002B3151 /* bn_mp_or.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A308F272B3004A47F5 /* bn_mp_or.c */; }; + F9E61D2F090A48C7002B3151 /* bn_mp_shrink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */; }; + F9E61D30090A48E2002B3151 /* bn_mp_to_unsigned_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */; }; + F9E61D31090A48F9002B3151 /* bn_mp_to_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */; }; + F9E61D32090A48FA002B3151 /* bn_mp_unsigned_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */; }; + F9F4415E0C8BAE6F00BCCD67 /* tclDTrace.d in Sources */ = {isa = PBXBuildFile; fileRef = F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */; }; + F9FC77B80AB29E9100B7077D /* tclUnixCompat.c in Sources */ = {isa = PBXBuildFile; fileRef = F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */; }; + F9FD30BC0CC1AD070073837D /* regcomp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED008F272A7004A47F5 /* regcomp.c */; }; + F9FD30BD0CC1AD070073837D /* regerror.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED308F272A7004A47F5 /* regerror.c */; }; + F9FD30BE0CC1AD070073837D /* regexec.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED608F272A7004A47F5 /* regexec.c */; }; + F9FD30BF0CC1AD070073837D /* regfree.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED708F272A7004A47F5 /* regfree.c */; }; + F9FD30C00CC1AD070073837D /* tclAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDC08F272A7004A47F5 /* tclAlloc.c */; settings = {COMPILER_FLAGS = "-DUSE_TCLALLOC=0"; }; }; + F9FD30C10CC1AD070073837D /* tclAsync.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDD08F272A7004A47F5 /* tclAsync.c */; }; + F9FD30C20CC1AD070073837D /* tclBasic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDE08F272A7004A47F5 /* tclBasic.c */; }; + F9FD30C30CC1AD070073837D /* tclBinary.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDF08F272A7004A47F5 /* tclBinary.c */; }; + F9FD30C40CC1AD070073837D /* tclCkalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE008F272A7004A47F5 /* tclCkalloc.c */; }; + F9FD30C50CC1AD070073837D /* tclClock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE108F272A7004A47F5 /* tclClock.c */; }; + F9FD30C60CC1AD070073837D /* tclCmdAH.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE208F272A7004A47F5 /* tclCmdAH.c */; }; + F9FD30C70CC1AD070073837D /* tclCmdIL.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE308F272A7004A47F5 /* tclCmdIL.c */; }; + F9FD30C80CC1AD070073837D /* tclCmdMZ.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */; }; + F9FD30C90CC1AD070073837D /* tclCompCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE508F272A7004A47F5 /* tclCompCmds.c */; }; + F9FD30CA0CC1AD070073837D /* tclCompExpr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE608F272A7004A47F5 /* tclCompExpr.c */; }; + F9FD30CB0CC1AD070073837D /* tclCompile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE708F272A7004A47F5 /* tclCompile.c */; }; + F9FD30CC0CC1AD070073837D /* tclConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE908F272A7004A47F5 /* tclConfig.c */; }; + F9FD30CD0CC1AD070073837D /* tclDate.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEA08F272A7004A47F5 /* tclDate.c */; }; + F9FD30CE0CC1AD070073837D /* tclDictObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEC08F272A7004A47F5 /* tclDictObj.c */; }; + F9FD30CF0CC1AD070073837D /* tclEncoding.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EED08F272A7004A47F5 /* tclEncoding.c */; }; + F9FD30D00CC1AD070073837D /* tclEnv.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEE08F272A7004A47F5 /* tclEnv.c */; }; + F9FD30D10CC1AD070073837D /* tclEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEF08F272A7004A47F5 /* tclEvent.c */; }; + F9FD30D20CC1AD070073837D /* tclExecute.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF008F272A7004A47F5 /* tclExecute.c */; }; + F9FD30D30CC1AD070073837D /* tclFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF108F272A7004A47F5 /* tclFCmd.c */; }; + F9FD30D40CC1AD070073837D /* tclFileName.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF208F272A7004A47F5 /* tclFileName.c */; }; + F9FD30D50CC1AD070073837D /* tclGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF408F272A7004A47F5 /* tclGet.c */; }; + F9FD30D60CC1AD070073837D /* tclHash.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF608F272A7004A47F5 /* tclHash.c */; }; + F9FD30D70CC1AD070073837D /* tclHistory.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF708F272A7004A47F5 /* tclHistory.c */; }; + F9FD30D80CC1AD070073837D /* tclIndexObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF808F272A7004A47F5 /* tclIndexObj.c */; }; + F9FD30D90CC1AD070073837D /* tclInterp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFC08F272A7004A47F5 /* tclInterp.c */; }; + F9FD30DA0CC1AD070073837D /* tclIO.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFE08F272A7004A47F5 /* tclIO.c */; }; + F9FD30DB0CC1AD070073837D /* tclIOCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0008F272A7004A47F5 /* tclIOCmd.c */; }; + F9FD30DC0CC1AD070073837D /* tclIOGT.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0108F272A7004A47F5 /* tclIOGT.c */; }; + F9FD30DD0CC1AD070073837D /* tclIORChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0208F272A7004A47F5 /* tclIORChan.c */; }; + F9FD30DE0CC1AD070073837D /* tclIOSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0308F272A7004A47F5 /* tclIOSock.c */; }; + F9FD30DF0CC1AD070073837D /* tclIOUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0408F272A7004A47F5 /* tclIOUtil.c */; }; + F9FD30E00CC1AD070073837D /* tclLink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0508F272A7004A47F5 /* tclLink.c */; }; + F9FD30E10CC1AD070073837D /* tclListObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0608F272A7004A47F5 /* tclListObj.c */; }; + F9FD30E20CC1AD070073837D /* tclLiteral.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0708F272A7004A47F5 /* tclLiteral.c */; }; + F9FD30E30CC1AD070073837D /* tclLoad.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0808F272A7004A47F5 /* tclLoad.c */; }; + F9FD30E40CC1AD070073837D /* tclMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0A08F272A7004A47F5 /* tclMain.c */; }; + F9FD30E50CC1AD070073837D /* tclNamesp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0B08F272A7004A47F5 /* tclNamesp.c */; }; + F9FD30E60CC1AD070073837D /* tclNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0C08F272A7004A47F5 /* tclNotify.c */; }; + F9FD30E70CC1AD070073837D /* tclObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0D08F272A7004A47F5 /* tclObj.c */; }; + F9FD30E80CC1AD070073837D /* tclPanic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0E08F272A7004A47F5 /* tclPanic.c */; }; + F9FD30E90CC1AD070073837D /* tclParse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0F08F272A7004A47F5 /* tclParse.c */; }; + F9FD30EA0CC1AD070073837D /* tclPathObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1108F272A7004A47F5 /* tclPathObj.c */; }; + F9FD30EB0CC1AD070073837D /* tclPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1208F272A7004A47F5 /* tclPipe.c */; }; + F9FD30EC0CC1AD070073837D /* tclPkg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1308F272A7004A47F5 /* tclPkg.c */; }; + F9FD30ED0CC1AD070073837D /* tclPkgConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */; settings = {COMPILER_FLAGS = "-DCFG_INSTALL_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_INSTALL_BINDIR=\\\"$(BINDIR)\\\" -DCFG_INSTALL_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_INSTALL_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_INSTALL_DOCDIR=\\\"$(MANDIR)\\\" -DCFG_RUNTIME_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_RUNTIME_BINDIR=\\\"$(BINDIR)\\\" -DCFG_RUNTIME_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_RUNTIME_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_RUNTIME_DOCDIR=\\\"$(MANDIR)\\\""; }; }; + F9FD30EE0CC1AD070073837D /* tclPosixStr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1708F272A7004A47F5 /* tclPosixStr.c */; }; + F9FD30EF0CC1AD070073837D /* tclPreserve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1808F272A7004A47F5 /* tclPreserve.c */; }; + F9FD30F00CC1AD070073837D /* tclProc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1908F272A7004A47F5 /* tclProc.c */; }; + F9FD30F10CC1AD070073837D /* tclRegexp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1A08F272A7004A47F5 /* tclRegexp.c */; }; + F9FD30F20CC1AD070073837D /* tclResolve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1C08F272A7004A47F5 /* tclResolve.c */; }; + F9FD30F30CC1AD070073837D /* tclResult.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1D08F272A7004A47F5 /* tclResult.c */; }; + F9FD30F40CC1AD070073837D /* tclScan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1E08F272A7004A47F5 /* tclScan.c */; }; + F9FD30F50CC1AD070073837D /* tclStringObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1F08F272A7004A47F5 /* tclStringObj.c */; }; + F9FD30F60CC1AD070073837D /* tclStrToD.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2408F272A7004A47F5 /* tclStrToD.c */; }; + F9FD30F70CC1AD070073837D /* tclStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2508F272A7004A47F5 /* tclStubInit.c */; }; + F9FD30F80CC1AD070073837D /* tclStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2608F272A7004A47F5 /* tclStubLib.c */; }; + F9FD30F90CC1AD070073837D /* tclThread.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2A08F272A7004A47F5 /* tclThread.c */; }; + F9FD30FA0CC1AD070073837D /* tclThreadAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */; }; + F9FD30FB0CC1AD070073837D /* tclThreadJoin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */; }; + F9FD30FC0CC1AD070073837D /* tclThreadStorage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */; }; + F9FD30FD0CC1AD070073837D /* tclTimer.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2F08F272A7004A47F5 /* tclTimer.c */; }; + F9FD30FE0CC1AD070073837D /* tclTomMathInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */; }; + F9FD30FF0CC1AD070073837D /* tclTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3208F272A7004A47F5 /* tclTrace.c */; }; + F9FD31000CC1AD070073837D /* tclUtf.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3408F272A7004A47F5 /* tclUtf.c */; }; + F9FD31010CC1AD070073837D /* tclUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3508F272A7004A47F5 /* tclUtil.c */; }; + F9FD31020CC1AD070073837D /* tclVar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3608F272A7004A47F5 /* tclVar.c */; }; + F9FD31030CC1AD070073837D /* bn_fast_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */; }; + F9FD31040CC1AD070073837D /* bn_fast_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */; }; + F9FD31050CC1AD070073837D /* bn_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426908F272B3004A47F5 /* bn_mp_add.c */; }; + F9FD31060CC1AD070073837D /* bn_mp_add_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */; }; + F9FD31070CC1AD070073837D /* bn_mp_and.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426C08F272B3004A47F5 /* bn_mp_and.c */; }; + F9FD31080CC1AD070073837D /* bn_mp_clamp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */; }; + F9FD31090CC1AD070073837D /* bn_mp_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426E08F272B3004A47F5 /* bn_mp_clear.c */; }; + F9FD310A0CC1AD070073837D /* bn_mp_clear_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */; }; + F9FD310B0CC1AD070073837D /* bn_mp_cmp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427008F272B3004A47F5 /* bn_mp_cmp.c */; }; + F9FD310C0CC1AD070073837D /* bn_mp_cmp_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */; }; + F9FD310D0CC1AD070073837D /* bn_mp_cmp_mag.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */; }; + F9FD310E0CC1AD070073837D /* bn_mp_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427408F272B3004A47F5 /* bn_mp_copy.c */; }; + F9FD310F0CC1AD070073837D /* bn_mp_count_bits.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */; }; + F9FD31100CC1AD070073837D /* bn_mp_div.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427608F272B3004A47F5 /* bn_mp_div.c */; }; + F9FD31110CC1AD070073837D /* bn_mp_div_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427708F272B3004A47F5 /* bn_mp_div_2.c */; }; + F9FD31120CC1AD070073837D /* bn_mp_div_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */; }; + F9FD31130CC1AD070073837D /* bn_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427908F272B3004A47F5 /* bn_mp_div_3.c */; }; + F9FD31140CC1AD070073837D /* bn_mp_div_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */; }; + F9FD31150CC1AD070073837D /* bn_mp_exch.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427E08F272B3004A47F5 /* bn_mp_exch.c */; }; + F9FD31160CC1AD070073837D /* bn_mp_expt_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */; }; + F9FD31170CC1AD070073837D /* bn_mp_grow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428708F272B3004A47F5 /* bn_mp_grow.c */; }; + F9FD31180CC1AD070073837D /* bn_mp_init.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428808F272B3004A47F5 /* bn_mp_init.c */; }; + F9FD31190CC1AD070073837D /* bn_mp_init_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */; }; + F9FD311A0CC1AD070073837D /* bn_mp_init_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */; }; + F9FD311B0CC1AD070073837D /* bn_mp_init_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */; }; + F9FD311C0CC1AD070073837D /* bn_mp_init_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */; }; + F9FD311D0CC1AD070073837D /* bn_mp_karatsuba_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */; }; + F9FD311E0CC1AD070073837D /* bn_mp_karatsuba_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */; }; + F9FD311F0CC1AD070073837D /* bn_mp_lshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429508F272B3004A47F5 /* bn_mp_lshd.c */; }; + F9FD31200CC1AD070073837D /* bn_mp_mod.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429608F272B3004A47F5 /* bn_mp_mod.c */; }; + F9FD31210CC1AD070073837D /* bn_mp_mod_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */; }; + F9FD31220CC1AD070073837D /* bn_mp_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429C08F272B3004A47F5 /* bn_mp_mul.c */; }; + F9FD31230CC1AD070073837D /* bn_mp_mul_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */; }; + F9FD31240CC1AD070073837D /* bn_mp_mul_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */; }; + F9FD31250CC1AD070073837D /* bn_mp_mul_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */; }; + F9FD31260CC1AD070073837D /* bn_mp_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A208F272B3004A47F5 /* bn_mp_neg.c */; }; + F9FD31270CC1AD070073837D /* bn_mp_or.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A308F272B3004A47F5 /* bn_mp_or.c */; }; + F9FD31280CC1AD070073837D /* bn_mp_radix_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */; }; + F9FD31290CC1AD070073837D /* bn_mp_radix_smap.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */; }; + F9FD312A0CC1AD070073837D /* bn_mp_read_radix.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */; }; + F9FD312B0CC1AD070073837D /* bn_mp_rshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */; }; + F9FD312C0CC1AD070073837D /* bn_mp_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BA08F272B3004A47F5 /* bn_mp_set.c */; }; + F9FD312D0CC1AD070073837D /* bn_mp_shrink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */; }; + F9FD312E0CC1AD070073837D /* bn_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */; }; + F9FD312F0CC1AD070073837D /* bn_mp_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */; }; + F9FD31300CC1AD070073837D /* bn_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C108F272B3004A47F5 /* bn_mp_sub.c */; }; + F9FD31310CC1AD070073837D /* bn_mp_sub_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */; }; + F9FD31320CC1AD070073837D /* bn_mp_to_unsigned_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */; }; + F9FD31330CC1AD070073837D /* bn_mp_to_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */; }; + F9FD31340CC1AD070073837D /* bn_mp_toom_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */; }; + F9FD31350CC1AD070073837D /* bn_mp_toom_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */; }; + F9FD31360CC1AD070073837D /* bn_mp_toradix_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */; }; + F9FD31370CC1AD070073837D /* bn_mp_unsigned_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */; }; + F9FD31380CC1AD070073837D /* bn_mp_xor.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */; }; + F9FD31390CC1AD070073837D /* bn_mp_zero.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */; }; + F9FD313A0CC1AD070073837D /* bn_reverse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D008F272B3004A47F5 /* bn_reverse.c */; }; + F9FD313B0CC1AD070073837D /* bn_s_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */; }; + F9FD313C0CC1AD070073837D /* bn_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */; }; + F9FD313D0CC1AD070073837D /* bn_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */; }; + F9FD313E0CC1AD070073837D /* bn_s_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */; }; + F9FD313F0CC1AD070073837D /* bncore.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D708F272B3004A47F5 /* bncore.c */; }; + F9FD31400CC1AD070073837D /* tclMacOSXBundle.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */; }; + F9FD31410CC1AD070073837D /* tclMacOSXFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */; }; + F9FD31420CC1AD070073837D /* tclMacOSXNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */; }; + F9FD31430CC1AD070073837D /* tclLoadDyld.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445B08F272B9004A47F5 /* tclLoadDyld.c */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; }; + F9FD31440CC1AD070073837D /* tclUnixChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445F08F272B9004A47F5 /* tclUnixChan.c */; }; + F9FD31450CC1AD070073837D /* tclUnixCompat.c in Sources */ = {isa = PBXBuildFile; fileRef = F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */; }; + F9FD31460CC1AD070073837D /* tclUnixEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446008F272B9004A47F5 /* tclUnixEvent.c */; }; + F9FD31470CC1AD070073837D /* tclUnixFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446108F272B9004A47F5 /* tclUnixFCmd.c */; }; + F9FD31480CC1AD070073837D /* tclUnixFile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446208F272B9004A47F5 /* tclUnixFile.c */; }; + F9FD31490CC1AD070073837D /* tclUnixInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446308F272B9004A47F5 /* tclUnixInit.c */; settings = {COMPILER_FLAGS = "-DTCL_LIBRARY=\\\"$(TCL_LIBRARY)\\\" -DTCL_PACKAGE_PATH=\\\"$(TCL_PACKAGE_PATH)\\\""; }; }; + F9FD314A0CC1AD070073837D /* tclUnixNotfy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446408F272B9004A47F5 /* tclUnixNotfy.c */; }; + F9FD314B0CC1AD070073837D /* tclUnixPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446508F272B9004A47F5 /* tclUnixPipe.c */; }; + F9FD314C0CC1AD070073837D /* tclUnixSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446708F272B9004A47F5 /* tclUnixSock.c */; }; + F9FD314D0CC1AD070073837D /* tclUnixThrd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446908F272B9004A47F5 /* tclUnixThrd.c */; }; + F9FD314E0CC1AD070073837D /* tclUnixTime.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446B08F272B9004A47F5 /* tclUnixTime.c */; }; + F9FD314F0CC1AD070073837D /* tk3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAC08F27A39005CB29B /* tk3d.c */; }; + F9FD31500CC1AD070073837D /* tkArgv.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAE08F27A39005CB29B /* tkArgv.c */; }; + F9FD31510CC1AD070073837D /* tkAtom.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAF08F27A39005CB29B /* tkAtom.c */; }; + F9FD31520CC1AD070073837D /* tkBind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB008F27A39005CB29B /* tkBind.c */; }; + F9FD31530CC1AD070073837D /* tkBitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB108F27A39005CB29B /* tkBitmap.c */; }; + F9FD31540CC1AD070073837D /* tkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB208F27A39005CB29B /* tkButton.c */; }; + F9FD31550CC1AD070073837D /* tkCanvArc.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB408F27A39005CB29B /* tkCanvArc.c */; }; + F9FD31560CC1AD070073837D /* tkCanvas.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB508F27A39005CB29B /* tkCanvas.c */; }; + F9FD31570CC1AD070073837D /* tkCanvBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB708F27A39005CB29B /* tkCanvBmap.c */; }; + F9FD31580CC1AD070073837D /* tkCanvImg.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB808F27A39005CB29B /* tkCanvImg.c */; }; + F9FD31590CC1AD070073837D /* tkCanvLine.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB908F27A39005CB29B /* tkCanvLine.c */; }; + F9FD315A0CC1AD070073837D /* tkCanvPoly.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABA08F27A39005CB29B /* tkCanvPoly.c */; }; + F9FD315B0CC1AD070073837D /* tkCanvPs.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABB08F27A39005CB29B /* tkCanvPs.c */; }; + F9FD315C0CC1AD070073837D /* tkCanvText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABD08F27A39005CB29B /* tkCanvText.c */; }; + F9FD315D0CC1AD070073837D /* tkCanvUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABE08F27A39005CB29B /* tkCanvUtil.c */; }; + F9FD315E0CC1AD070073837D /* tkCanvWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABF08F27A39005CB29B /* tkCanvWind.c */; }; + F9FD315F0CC1AD070073837D /* tkClipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC008F27A39005CB29B /* tkClipboard.c */; }; + F9FD31600CC1AD070073837D /* tkCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC108F27A39005CB29B /* tkCmds.c */; }; + F9FD31610CC1AD070073837D /* tkColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC208F27A39005CB29B /* tkColor.c */; }; + F9FD31620CC1AD070073837D /* tkConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC408F27A39005CB29B /* tkConfig.c */; }; + F9FD31630CC1AD070073837D /* tkConsole.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC508F27A39005CB29B /* tkConsole.c */; }; + F9FD31640CC1AD070073837D /* tkCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC608F27A39005CB29B /* tkCursor.c */; }; + F9FD31650CC1AD070073837D /* tkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC808F27A39005CB29B /* tkEntry.c */; }; + F9FD31660CC1AD070073837D /* tkError.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACA08F27A39005CB29B /* tkError.c */; }; + F9FD31670CC1AD070073837D /* tkEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACB08F27A39005CB29B /* tkEvent.c */; }; + F9FD31680CC1AD070073837D /* tkFileFilter.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACC08F27A39005CB29B /* tkFileFilter.c */; }; + F9FD31690CC1AD070073837D /* tkFocus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACE08F27A39005CB29B /* tkFocus.c */; }; + F9FD316A0CC1AD070073837D /* tkFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACF08F27A39005CB29B /* tkFont.c */; }; + F9FD316B0CC1AD070073837D /* tkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD108F27A39005CB29B /* tkFrame.c */; }; + F9FD316C0CC1AD070073837D /* tkGC.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD208F27A39005CB29B /* tkGC.c */; }; + F9FD316D0CC1AD070073837D /* tkGeometry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD308F27A39005CB29B /* tkGeometry.c */; }; + F9FD316E0CC1AD070073837D /* tkGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD408F27A39005CB29B /* tkGet.c */; }; + F9FD316F0CC1AD070073837D /* tkGrab.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD508F27A39005CB29B /* tkGrab.c */; }; + F9FD31700CC1AD070073837D /* tkGrid.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD608F27A39005CB29B /* tkGrid.c */; }; + F9FD31710CC1AD070073837D /* tkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD708F27A39005CB29B /* tkImage.c */; }; + F9FD31720CC1AD070073837D /* tkImgBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD808F27A39005CB29B /* tkImgBmap.c */; }; + F9FD31730CC1AD070073837D /* tkImgGIF.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD908F27A39005CB29B /* tkImgGIF.c */; }; + F9FD31740CC1AD070073837D /* tkImgPhoto.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADA08F27A39005CB29B /* tkImgPhoto.c */; }; + F9FD31750CC1AD070073837D /* tkImgPPM.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADB08F27A39005CB29B /* tkImgPPM.c */; }; + F9FD31760CC1AD070073837D /* tkListbox.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE408F27A39005CB29B /* tkListbox.c */; }; + F9FD31770CC1AD070073837D /* tkMacWinMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE508F27A39005CB29B /* tkMacWinMenu.c */; }; + F9FD31780CC1AD070073837D /* tkMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE608F27A39005CB29B /* tkMain.c */; }; + F9FD31790CC1AD070073837D /* tkMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE708F27A39005CB29B /* tkMenu.c */; }; + F9FD317A0CC1AD070073837D /* tkMenubutton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE908F27A39005CB29B /* tkMenubutton.c */; }; + F9FD317B0CC1AD070073837D /* tkMenuDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEB08F27A39005CB29B /* tkMenuDraw.c */; }; + F9FD317C0CC1AD070073837D /* tkMessage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEC08F27A39005CB29B /* tkMessage.c */; }; + F9FD317D0CC1AD070073837D /* tkObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAED08F27A39005CB29B /* tkObj.c */; }; + F9FD317E0CC1AD070073837D /* tkOldConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEE08F27A39005CB29B /* tkOldConfig.c */; }; + F9FD317F0CC1AD070073837D /* tkOldTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFE08F27A39005CB29B /* tkOldTest.c */; }; + F9FD31800CC1AD070073837D /* tkOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEF08F27A39005CB29B /* tkOption.c */; }; + F9FD31810CC1AD070073837D /* tkPack.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF008F27A39005CB29B /* tkPack.c */; }; + F9FD31820CC1AD070073837D /* tkPanedWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF108F27A39005CB29B /* tkPanedWindow.c */; }; + F9FD31830CC1AD070073837D /* tkPlace.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF208F27A39005CB29B /* tkPlace.c */; }; + F9FD31850CC1AD070073837D /* tkRectOval.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF608F27A39005CB29B /* tkRectOval.c */; }; + F9FD31860CC1AD070073837D /* tkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF708F27A39005CB29B /* tkScale.c */; }; + F9FD31870CC1AD070073837D /* tkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF908F27A39005CB29B /* tkScrollbar.c */; }; + F9FD31880CC1AD070073837D /* tkSelect.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFB08F27A39005CB29B /* tkSelect.c */; }; + F9FD31890CC1AD070073837D /* tkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFD08F27A39005CB29B /* tkSquare.c */; }; + F9FD318A0CC1AD070073837D /* tkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFF08F27A39005CB29B /* tkStubInit.c */; }; + F9FD318B0CC1AD070073837D /* tkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0008F27A39005CB29B /* tkStubLib.c */; }; + F9FD318C0CC1AD070073837D /* tkStyle.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0108F27A39005CB29B /* tkStyle.c */; }; + F9FD318D0CC1AD070073837D /* tkTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0208F27A39005CB29B /* tkTest.c */; }; + F9FD318E0CC1AD070073837D /* tkText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0308F27A39005CB29B /* tkText.c */; }; + F9FD318F0CC1AD070073837D /* tkTextBTree.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0508F27A39005CB29B /* tkTextBTree.c */; }; + F9FD31900CC1AD070073837D /* tkTextDisp.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0608F27A39005CB29B /* tkTextDisp.c */; }; + F9FD31910CC1AD070073837D /* tkTextImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0808F27A39005CB29B /* tkTextImage.c */; }; + F9FD31920CC1AD070073837D /* tkTextIndex.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0908F27A39005CB29B /* tkTextIndex.c */; }; + F9FD31930CC1AD070073837D /* tkTextMark.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0A08F27A39005CB29B /* tkTextMark.c */; }; + F9FD31940CC1AD070073837D /* tkTextTag.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0B08F27A39005CB29B /* tkTextTag.c */; }; + F9FD31950CC1AD070073837D /* tkTextWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0C08F27A39005CB29B /* tkTextWind.c */; }; + F9FD31960CC1AD070073837D /* tkTrig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0D08F27A39005CB29B /* tkTrig.c */; }; + F9FD31970CC1AD070073837D /* tkUndo.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0E08F27A39005CB29B /* tkUndo.c */; }; + F9FD31980CC1AD070073837D /* tkUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1008F27A39005CB29B /* tkUtil.c */; }; + F9FD31990CC1AD070073837D /* tkVisual.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1108F27A39005CB29B /* tkVisual.c */; }; + F9FD319A0CC1AD070073837D /* tkWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1208F27A39005CB29B /* tkWindow.c */; }; + F9FD319B0CC1AD070073837D /* ttkBlink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E10AF786D5000797B5 /* ttkBlink.c */; }; + F9FD319C0CC1AD070073837D /* ttkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E20AF786D5000797B5 /* ttkButton.c */; }; + F9FD319D0CC1AD070073837D /* ttkCache.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E30AF786D5000797B5 /* ttkCache.c */; }; + F9FD319E0CC1AD070073837D /* ttkClamTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E40AF786D5000797B5 /* ttkClamTheme.c */; }; + F9FD319F0CC1AD070073837D /* ttkClassicTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E50AF786D5000797B5 /* ttkClassicTheme.c */; }; + F9FD31A00CC1AD070073837D /* ttkDefaultTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */; }; + F9FD31A10CC1AD070073837D /* ttkElements.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E80AF786D5000797B5 /* ttkElements.c */; }; + F9FD31A20CC1AD070073837D /* ttkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E90AF786D5000797B5 /* ttkEntry.c */; }; + F9FD31A30CC1AD070073837D /* ttkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EA0AF786D5000797B5 /* ttkFrame.c */; }; + F9FD31A40CC1AD070073837D /* ttkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EB0AF786D5000797B5 /* ttkImage.c */; }; + F9FD31A50CC1AD070073837D /* ttkInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EC0AF786D5000797B5 /* ttkInit.c */; }; + F9FD31A60CC1AD070073837D /* ttkLabel.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887ED0AF786D5000797B5 /* ttkLabel.c */; }; + F9FD31A70CC1AD070073837D /* ttkLayout.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EE0AF786D5000797B5 /* ttkLayout.c */; }; + F9FD31A80CC1AD070073837D /* ttkManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EF0AF786D5000797B5 /* ttkManager.c */; }; + F9FD31A90CC1AD070073837D /* ttkNotebook.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F10AF786D5000797B5 /* ttkNotebook.c */; }; + F9FD31AA0CC1AD070073837D /* ttkPanedwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F20AF786D5000797B5 /* ttkPanedwindow.c */; }; + F9FD31AB0CC1AD070073837D /* ttkProgress.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F30AF786D5000797B5 /* ttkProgress.c */; }; + F9FD31AC0CC1AD070073837D /* ttkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F40AF786D5000797B5 /* ttkScale.c */; }; + F9FD31AD0CC1AD070073837D /* ttkScroll.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F50AF786D5000797B5 /* ttkScroll.c */; }; + F9FD31AE0CC1AD070073837D /* ttkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F60AF786D5000797B5 /* ttkScrollbar.c */; }; + F9FD31AF0CC1AD070073837D /* ttkSeparator.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F70AF786D5000797B5 /* ttkSeparator.c */; }; + F9FD31B00CC1AD070073837D /* ttkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F80AF786D5000797B5 /* ttkSquare.c */; }; + F9FD31B10CC1AD070073837D /* ttkState.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F90AF786D5000797B5 /* ttkState.c */; }; + F9FD31B20CC1AD070073837D /* ttkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FA0AF786D5000797B5 /* ttkStubInit.c */; }; + F9FD31B30CC1AD070073837D /* ttkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FB0AF786D5000797B5 /* ttkStubLib.c */; }; + F9FD31B40CC1AD070073837D /* ttkTagSet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FC0AF786D5000797B5 /* ttkTagSet.c */; }; + F9FD31B50CC1AD070073837D /* ttkTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FD0AF786D5000797B5 /* ttkTheme.c */; }; + F9FD31B60CC1AD070073837D /* ttkTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888000AF786D5000797B5 /* ttkTrace.c */; }; + F9FD31B70CC1AD070073837D /* ttkTrack.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888010AF786D5000797B5 /* ttkTrack.c */; }; + F9FD31B80CC1AD070073837D /* ttkTreeview.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888020AF786D5000797B5 /* ttkTreeview.c */; }; + F9FD31B90CC1AD070073837D /* ttkWidget.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888030AF786D5000797B5 /* ttkWidget.c */; }; + F9FD31DA0CC1AD070073837D /* tkAppInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7508F27A3D005CB29B /* tkAppInit.c */; settings = {COMPILER_FLAGS = "-DTK_TEST"; }; }; + F9FD31DB0CC1AD070073837D /* tkUnix3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7908F27A3D005CB29B /* tkUnix3d.c */; }; + F9FD31DC0CC1AD070073837D /* tkUnixScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8C08F27A3D005CB29B /* tkUnixScale.c */; }; + F9FD31E20CC1AD070073837D /* tclDTrace.d in Sources */ = {isa = PBXBuildFile; fileRef = F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */; }; + F9FD31E40CC1AD070073837D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07408F2820D005CB29B /* CoreFoundation.framework */; }; + F9FD31F80CC1ADB70073837D /* tkUnixCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7D08F27A3D005CB29B /* tkUnixCursor.c */; }; + F9FD31FA0CC1ADB70073837D /* tkUnixKey.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8708F27A3D005CB29B /* tkUnixKey.c */; }; + F9FD31FB0CC1ADB70073837D /* tkUnixXId.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC9108F27A3D005CB29B /* tkUnixXId.c */; }; + F9FD31FC0CC1ADB70073837D /* tkUnixInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8508F27A3D005CB29B /* tkUnixInit.c */; }; + F9FD31FD0CC1ADB70073837D /* tkUnixEmbed.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8108F27A3D005CB29B /* tkUnixEmbed.c */; }; + F9FD31FE0CC1ADB70073837D /* tkUnixSend.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8F08F27A3D005CB29B /* tkUnixSend.c */; }; + F9FD31FF0CC1ADB70073837D /* tkUnixFocus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8308F27A3D005CB29B /* tkUnixFocus.c */; }; + F9FD32000CC1ADB70073837D /* tkUnixWm.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC9008F27A3D005CB29B /* tkUnixWm.c */; }; + F9FD32010CC1ADB70073837D /* tkUnixRFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8B08F27A3D005CB29B /* tkUnixRFont.c */; }; + F9FD32020CC1ADB70073837D /* tkUnix.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7808F27A3D005CB29B /* tkUnix.c */; }; + F9FD32030CC1ADB70073837D /* tkUnixMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8808F27A3D005CB29B /* tkUnixMenu.c */; }; + F9FD32040CC1ADB70073837D /* tkUnixConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7C08F27A3D005CB29B /* tkUnixConfig.c */; }; + F9FD32050CC1ADB70073837D /* tkUnixDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8008F27A3D005CB29B /* tkUnixDraw.c */; }; + F9FD32060CC1ADB70073837D /* tkUnixDialog.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7F08F27A3D005CB29B /* tkUnixDialog.c */; }; + F9FD32070CC1ADB70073837D /* tkUnixSelect.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8E08F27A3D005CB29B /* tkUnixSelect.c */; }; + F9FD32080CC1ADB70073837D /* tkUnixEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8208F27A3D005CB29B /* tkUnixEvent.c */; }; + F9FD32090CC1ADB70073837D /* tkUnixColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7B08F27A3D005CB29B /* tkUnixColor.c */; }; + F9FD320A0CC1ADB70073837D /* tkUnixButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7A08F27A3D005CB29B /* tkUnixButton.c */; }; + F9FD320B0CC1ADB70073837D /* tkUnixMenubu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8908F27A3D005CB29B /* tkUnixMenubu.c */; }; + F9FD320C0CC1ADB70073837D /* tkUnixScrlbr.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8D08F27A3D005CB29B /* tkUnixScrlbr.c */; }; + F9FD32170CC1AF170073837D /* libX11.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD32140CC1AF170073837D /* libX11.dylib */; }; + F9FD32180CC1AF170073837D /* libXext.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD32150CC1AF170073837D /* libXext.dylib */; }; + F9FD32190CC1AF170073837D /* libXss.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD32160CC1AF170073837D /* libXss.dylib */; }; + F9FD349B0CC1BB0D0073837D /* libfreetype.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD34990CC1BB0D0073837D /* libfreetype.dylib */; }; + F9FD349C0CC1BB0D0073837D /* libXft.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD349A0CC1BB0D0073837D /* libXft.dylib */; }; + F9FD34C40CC1BBD70073837D /* libfontconfig.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD34C30CC1BBD70073837D /* libfontconfig.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 8DD76FB20486AB0100D96B5E /* tktest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tktest; sourceTree = BUILT_PRODUCTS_DIR; }; + F9099B8A0CC67D30005A9580 /* textpeer.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textpeer.tcl; sourceTree = "<group>"; }; + F9099B8B0CC67D3E005A9580 /* ttkbut.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttkbut.tcl; sourceTree = "<group>"; }; + F91E62260C1AE686006C9D96 /* Tclsh-Info.plist.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Tclsh-Info.plist.in"; sourceTree = "<group>"; }; + F92240290D7C620F005EC715 /* knightstour.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = knightstour.tcl; sourceTree = "<group>"; }; + F936FCD70CCD984500716967 /* ttkprogress.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttkprogress.tcl; sourceTree = "<group>"; }; + F936FCD80CCD984600716967 /* tree.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tree.tcl; sourceTree = "<group>"; }; + F936FCD90CCD984600716967 /* toolbar.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = toolbar.tcl; sourceTree = "<group>"; }; + F936FCDA0CCD984600716967 /* ttknote.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttknote.tcl; sourceTree = "<group>"; }; + F936FCDB0CCD984600716967 /* combo.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = combo.tcl; sourceTree = "<group>"; }; + F93E5EFD09CF8711008FA367 /* tkMacOSXFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXFont.h; sourceTree = "<group>"; }; + F94523A10E6FC2AC00C1D987 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; + F95D8D4B0F1715610006B020 /* Tk.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Tk.icns; sourceTree = "<group>"; }; + F95D8D4C0F1715610006B020 /* Tk.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Tk.tiff; sourceTree = "<group>"; }; + F95FAFF90B34F1130072E431 /* macOSXLoad.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = macOSXLoad.test; sourceTree = "<group>"; }; + F962F7C60DADC26200648DB8 /* vsapi.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = vsapi.test; sourceTree = "<group>"; }; + F966BA0408F27A37005CB29B /* error.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = error.xbm; sourceTree = "<group>"; }; + F966BA0508F27A37005CB29B /* gray12.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray12.xbm; sourceTree = "<group>"; }; + F966BA0608F27A37005CB29B /* gray25.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray25.xbm; sourceTree = "<group>"; }; + F966BA0708F27A37005CB29B /* gray50.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray50.xbm; sourceTree = "<group>"; }; + F966BA0808F27A37005CB29B /* gray75.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray75.xbm; sourceTree = "<group>"; }; + F966BA0908F27A37005CB29B /* hourglass.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = hourglass.xbm; sourceTree = "<group>"; }; + F966BA0A08F27A37005CB29B /* info.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = info.xbm; sourceTree = "<group>"; }; + F966BA0B08F27A37005CB29B /* questhead.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = questhead.xbm; sourceTree = "<group>"; }; + F966BA0C08F27A37005CB29B /* question.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = question.xbm; sourceTree = "<group>"; }; + F966BA0D08F27A37005CB29B /* warning.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = warning.xbm; sourceTree = "<group>"; }; + F966BA0E08F27A37005CB29B /* ChangeLog */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = ChangeLog; sourceTree = "<group>"; }; + F966BA0F08F27A37005CB29B /* changes */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = changes; sourceTree = "<group>"; }; + F966BA1108F27A37005CB29B /* 3DBorder.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = 3DBorder.3; sourceTree = "<group>"; }; + F966BA1208F27A37005CB29B /* AddOption.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AddOption.3; sourceTree = "<group>"; }; + F966BA1308F27A37005CB29B /* bell.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bell.n; sourceTree = "<group>"; }; + F966BA1408F27A37005CB29B /* bind.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bind.n; sourceTree = "<group>"; }; + F966BA1508F27A37005CB29B /* BindTable.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = BindTable.3; sourceTree = "<group>"; }; + F966BA1608F27A37005CB29B /* bindtags.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bindtags.n; sourceTree = "<group>"; }; + F966BA1708F27A37005CB29B /* bitmap.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bitmap.n; sourceTree = "<group>"; }; + F966BA1808F27A37005CB29B /* button.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = button.n; sourceTree = "<group>"; }; + F966BA1908F27A37005CB29B /* canvas.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = canvas.n; sourceTree = "<group>"; }; + F966BA1A08F27A37005CB29B /* CanvPsY.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CanvPsY.3; sourceTree = "<group>"; }; + F966BA1B08F27A37005CB29B /* CanvTkwin.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CanvTkwin.3; sourceTree = "<group>"; }; + F966BA1C08F27A37005CB29B /* CanvTxtInfo.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CanvTxtInfo.3; sourceTree = "<group>"; }; + F966BA1D08F27A37005CB29B /* checkbutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = checkbutton.n; sourceTree = "<group>"; }; + F966BA1E08F27A37005CB29B /* chooseColor.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = chooseColor.n; sourceTree = "<group>"; }; + F966BA1F08F27A37005CB29B /* chooseDirectory.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = chooseDirectory.n; sourceTree = "<group>"; }; + F966BA2008F27A37005CB29B /* Clipboard.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Clipboard.3; sourceTree = "<group>"; }; + F966BA2108F27A37005CB29B /* clipboard.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = clipboard.n; sourceTree = "<group>"; }; + F966BA2208F27A37005CB29B /* ClrSelect.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ClrSelect.3; sourceTree = "<group>"; }; + F966BA2308F27A37005CB29B /* colors.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = colors.n; sourceTree = "<group>"; }; + F966BA2408F27A37005CB29B /* ConfigWidg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ConfigWidg.3; sourceTree = "<group>"; }; + F966BA2508F27A37005CB29B /* ConfigWind.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ConfigWind.3; sourceTree = "<group>"; }; + F966BA2608F27A37005CB29B /* console.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = console.n; sourceTree = "<group>"; }; + F966BA2708F27A37005CB29B /* CoordToWin.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CoordToWin.3; sourceTree = "<group>"; }; + F966BA2808F27A37005CB29B /* CrtCmHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtCmHdlr.3; sourceTree = "<group>"; }; + F966BA2908F27A37005CB29B /* CrtErrHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtErrHdlr.3; sourceTree = "<group>"; }; + F966BA2A08F27A37005CB29B /* CrtGenHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtGenHdlr.3; sourceTree = "<group>"; }; + F966BA2B08F27A37005CB29B /* CrtImgType.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtImgType.3; sourceTree = "<group>"; }; + F966BA2C08F27A37005CB29B /* CrtItemType.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtItemType.3; sourceTree = "<group>"; }; + F966BA2D08F27A37005CB29B /* CrtPhImgFmt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtPhImgFmt.3; sourceTree = "<group>"; }; + F966BA2E08F27A37005CB29B /* CrtSelHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtSelHdlr.3; sourceTree = "<group>"; }; + F966BA2F08F27A37005CB29B /* CrtWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtWindow.3; sourceTree = "<group>"; }; + F966BA3008F27A37005CB29B /* cursors.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = cursors.n; sourceTree = "<group>"; }; + F966BA3108F27A37005CB29B /* DeleteImg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DeleteImg.3; sourceTree = "<group>"; }; + F966BA3208F27A37005CB29B /* destroy.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = destroy.n; sourceTree = "<group>"; }; + F966BA3308F27A37005CB29B /* dialog.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = dialog.n; sourceTree = "<group>"; }; + F966BA3408F27A37005CB29B /* DrawFocHlt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DrawFocHlt.3; sourceTree = "<group>"; }; + F966BA3508F27A37005CB29B /* entry.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = entry.n; sourceTree = "<group>"; }; + F966BA3608F27A37005CB29B /* event.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = event.n; sourceTree = "<group>"; }; + F966BA3708F27A37005CB29B /* EventHndlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = EventHndlr.3; sourceTree = "<group>"; }; + F966BA3808F27A37005CB29B /* FindPhoto.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FindPhoto.3; sourceTree = "<group>"; }; + F966BA3908F27A37005CB29B /* focus.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = focus.n; sourceTree = "<group>"; }; + F966BA3A08F27A37005CB29B /* focusNext.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = focusNext.n; sourceTree = "<group>"; }; + F966BA3B08F27A37005CB29B /* font.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = font.n; sourceTree = "<group>"; }; + F966BA3C08F27A37005CB29B /* FontId.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FontId.3; sourceTree = "<group>"; }; + F966BA3D08F27A37005CB29B /* frame.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = frame.n; sourceTree = "<group>"; }; + F966BA3E08F27A37005CB29B /* FreeXId.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FreeXId.3; sourceTree = "<group>"; }; + F966BA3F08F27A37005CB29B /* GeomReq.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GeomReq.3; sourceTree = "<group>"; }; + F966BA4008F27A37005CB29B /* GetAnchor.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetAnchor.3; sourceTree = "<group>"; }; + F966BA4108F27A37005CB29B /* GetBitmap.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetBitmap.3; sourceTree = "<group>"; }; + F966BA4208F27A37005CB29B /* GetCapStyl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetCapStyl.3; sourceTree = "<group>"; }; + F966BA4308F27A37005CB29B /* GetClrmap.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetClrmap.3; sourceTree = "<group>"; }; + F966BA4408F27A37005CB29B /* GetColor.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetColor.3; sourceTree = "<group>"; }; + F966BA4508F27A37005CB29B /* GetCursor.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetCursor.3; sourceTree = "<group>"; }; + F966BA4608F27A37005CB29B /* GetDash.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetDash.3; sourceTree = "<group>"; }; + F966BA4708F27A37005CB29B /* GetFont.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetFont.3; sourceTree = "<group>"; }; + F966BA4808F27A37005CB29B /* GetGC.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetGC.3; sourceTree = "<group>"; }; + F966BA4908F27A37005CB29B /* GetHINSTANCE.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetHINSTANCE.3; sourceTree = "<group>"; }; + F966BA4A08F27A37005CB29B /* GetHWND.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetHWND.3; sourceTree = "<group>"; }; + F966BA4B08F27A37005CB29B /* GetImage.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetImage.3; sourceTree = "<group>"; }; + F966BA4C08F27A37005CB29B /* GetJoinStl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetJoinStl.3; sourceTree = "<group>"; }; + F966BA4D08F27A37005CB29B /* GetJustify.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetJustify.3; sourceTree = "<group>"; }; + F966BA4E08F27A37005CB29B /* getOpenFile.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = getOpenFile.n; sourceTree = "<group>"; }; + F966BA4F08F27A37005CB29B /* GetOption.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetOption.3; sourceTree = "<group>"; }; + F966BA5008F27A38005CB29B /* GetPixels.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetPixels.3; sourceTree = "<group>"; }; + F966BA5108F27A38005CB29B /* GetPixmap.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetPixmap.3; sourceTree = "<group>"; }; + F966BA5208F27A38005CB29B /* GetRelief.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetRelief.3; sourceTree = "<group>"; }; + F966BA5308F27A38005CB29B /* GetRootCrd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetRootCrd.3; sourceTree = "<group>"; }; + F966BA5408F27A38005CB29B /* GetScroll.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetScroll.3; sourceTree = "<group>"; }; + F966BA5508F27A38005CB29B /* GetSelect.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetSelect.3; sourceTree = "<group>"; }; + F966BA5608F27A38005CB29B /* GetUid.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetUid.3; sourceTree = "<group>"; }; + F966BA5708F27A38005CB29B /* GetVisual.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetVisual.3; sourceTree = "<group>"; }; + F966BA5808F27A38005CB29B /* GetVRoot.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetVRoot.3; sourceTree = "<group>"; }; + F966BA5908F27A38005CB29B /* Grab.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Grab.3; sourceTree = "<group>"; }; + F966BA5A08F27A38005CB29B /* grab.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = grab.n; sourceTree = "<group>"; }; + F966BA5B08F27A38005CB29B /* grid.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = grid.n; sourceTree = "<group>"; }; + F966BA5C08F27A38005CB29B /* HandleEvent.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = HandleEvent.3; sourceTree = "<group>"; }; + F966BA5D08F27A38005CB29B /* HWNDToWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = HWNDToWindow.3; sourceTree = "<group>"; }; + F966BA5E08F27A38005CB29B /* IdToWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = IdToWindow.3; sourceTree = "<group>"; }; + F966BA5F08F27A38005CB29B /* image.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = image.n; sourceTree = "<group>"; }; + F966BA6008F27A38005CB29B /* ImgChanged.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ImgChanged.3; sourceTree = "<group>"; }; + F966BA6108F27A38005CB29B /* Inactive.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Inactive.3; sourceTree = "<group>"; }; + F966BA6208F27A38005CB29B /* InternAtom.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = InternAtom.3; sourceTree = "<group>"; }; + F966BA6308F27A38005CB29B /* keysyms.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = keysyms.n; sourceTree = "<group>"; }; + F966BA6408F27A38005CB29B /* label.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = label.n; sourceTree = "<group>"; }; + F966BA6508F27A38005CB29B /* labelframe.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = labelframe.n; sourceTree = "<group>"; }; + F966BA6608F27A38005CB29B /* listbox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = listbox.n; sourceTree = "<group>"; }; + F966BA6708F27A38005CB29B /* loadTk.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = loadTk.n; sourceTree = "<group>"; }; + F966BA6808F27A38005CB29B /* lower.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lower.n; sourceTree = "<group>"; }; + F966BA6908F27A38005CB29B /* MainLoop.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MainLoop.3; sourceTree = "<group>"; }; + F966BA6A08F27A38005CB29B /* MaintGeom.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MaintGeom.3; sourceTree = "<group>"; }; + F966BA6B08F27A38005CB29B /* MainWin.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MainWin.3; sourceTree = "<group>"; }; + F966BA6D08F27A38005CB29B /* ManageGeom.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ManageGeom.3; sourceTree = "<group>"; }; + F966BA6E08F27A38005CB29B /* MapWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MapWindow.3; sourceTree = "<group>"; }; + F966BA6F08F27A38005CB29B /* MeasureChar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MeasureChar.3; sourceTree = "<group>"; }; + F966BA7008F27A38005CB29B /* menu.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = menu.n; sourceTree = "<group>"; }; + F966BA7108F27A38005CB29B /* menubar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = menubar.n; sourceTree = "<group>"; }; + F966BA7208F27A38005CB29B /* menubutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = menubutton.n; sourceTree = "<group>"; }; + F966BA7308F27A38005CB29B /* message.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = message.n; sourceTree = "<group>"; }; + F966BA7408F27A38005CB29B /* messageBox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = messageBox.n; sourceTree = "<group>"; }; + F966BA7508F27A38005CB29B /* MoveToplev.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MoveToplev.3; sourceTree = "<group>"; }; + F966BA7608F27A38005CB29B /* Name.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Name.3; sourceTree = "<group>"; }; + F966BA7708F27A38005CB29B /* NameOfImg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = NameOfImg.3; sourceTree = "<group>"; }; + F966BA7808F27A38005CB29B /* option.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = option.n; sourceTree = "<group>"; }; + F966BA7908F27A38005CB29B /* optionMenu.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = optionMenu.n; sourceTree = "<group>"; }; + F966BA7A08F27A38005CB29B /* options.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = options.n; sourceTree = "<group>"; }; + F966BA7B08F27A38005CB29B /* OwnSelect.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = OwnSelect.3; sourceTree = "<group>"; }; + F966BA7C08F27A38005CB29B /* pack-old.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = "pack-old.n"; sourceTree = "<group>"; }; + F966BA7D08F27A38005CB29B /* pack.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pack.n; sourceTree = "<group>"; }; + F966BA7E08F27A38005CB29B /* palette.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = palette.n; sourceTree = "<group>"; }; + F966BA7F08F27A38005CB29B /* panedwindow.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = panedwindow.n; sourceTree = "<group>"; }; + F966BA8008F27A38005CB29B /* ParseArgv.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ParseArgv.3; sourceTree = "<group>"; }; + F966BA8108F27A38005CB29B /* photo.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = photo.n; sourceTree = "<group>"; }; + F966BA8208F27A38005CB29B /* place.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = place.n; sourceTree = "<group>"; }; + F966BA8308F27A38005CB29B /* popup.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = popup.n; sourceTree = "<group>"; }; + F966BA8408F27A38005CB29B /* QWinEvent.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = QWinEvent.3; sourceTree = "<group>"; }; + F966BA8508F27A38005CB29B /* radiobutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = radiobutton.n; sourceTree = "<group>"; }; + F966BA8608F27A38005CB29B /* raise.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = raise.n; sourceTree = "<group>"; }; + F966BA8708F27A38005CB29B /* Restack.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Restack.3; sourceTree = "<group>"; }; + F966BA8808F27A38005CB29B /* RestrictEv.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RestrictEv.3; sourceTree = "<group>"; }; + F966BA8908F27A38005CB29B /* scale.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = scale.n; sourceTree = "<group>"; }; + F966BA8A08F27A38005CB29B /* scrollbar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = scrollbar.n; sourceTree = "<group>"; }; + F966BA8B08F27A38005CB29B /* selection.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = selection.n; sourceTree = "<group>"; }; + F966BA8C08F27A38005CB29B /* send.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = send.n; sourceTree = "<group>"; }; + F966BA8D08F27A38005CB29B /* SetAppName.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetAppName.3; sourceTree = "<group>"; }; + F966BA8E08F27A38005CB29B /* SetCaret.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetCaret.3; sourceTree = "<group>"; }; + F966BA8F08F27A38005CB29B /* SetClass.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetClass.3; sourceTree = "<group>"; }; + F966BA9008F27A38005CB29B /* SetClassProcs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetClassProcs.3; sourceTree = "<group>"; }; + F966BA9108F27A38005CB29B /* SetGrid.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetGrid.3; sourceTree = "<group>"; }; + F966BA9208F27A38005CB29B /* SetOptions.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetOptions.3; sourceTree = "<group>"; }; + F966BA9308F27A38005CB29B /* SetVisual.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetVisual.3; sourceTree = "<group>"; }; + F966BA9408F27A38005CB29B /* spinbox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = spinbox.n; sourceTree = "<group>"; }; + F966BA9508F27A38005CB29B /* StrictMotif.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StrictMotif.3; sourceTree = "<group>"; }; + F966BA9608F27A38005CB29B /* text.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = text.n; sourceTree = "<group>"; }; + F966BA9708F27A38005CB29B /* TextLayout.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TextLayout.3; sourceTree = "<group>"; }; + F966BA9808F27A38005CB29B /* tk.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tk.n; sourceTree = "<group>"; }; + F966BA9908F27A38005CB29B /* tk4.0.ps */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = tk4.0.ps; sourceTree = "<group>"; }; + F966BA9A08F27A38005CB29B /* Tk_Init.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tk_Init.3; sourceTree = "<group>"; }; + F966BA9B08F27A38005CB29B /* Tk_Main.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tk_Main.3; sourceTree = "<group>"; }; + F966BA9C08F27A38005CB29B /* tkerror.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tkerror.n; sourceTree = "<group>"; }; + F966BA9D08F27A38005CB29B /* TkInitStubs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TkInitStubs.3; sourceTree = "<group>"; }; + F966BA9E08F27A38005CB29B /* tkvars.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tkvars.n; sourceTree = "<group>"; }; + F966BA9F08F27A38005CB29B /* tkwait.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tkwait.n; sourceTree = "<group>"; }; + F966BAA008F27A38005CB29B /* toplevel.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = toplevel.n; sourceTree = "<group>"; }; + F966BAA108F27A38005CB29B /* WindowId.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = WindowId.3; sourceTree = "<group>"; }; + F966BAA208F27A38005CB29B /* winfo.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = winfo.n; sourceTree = "<group>"; }; + F966BAA308F27A38005CB29B /* wish.1 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = wish.1; sourceTree = "<group>"; }; + F966BAA408F27A38005CB29B /* wm.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = wm.n; sourceTree = "<group>"; }; + F966BAA608F27A38005CB29B /* default.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = default.h; sourceTree = "<group>"; }; + F966BAA708F27A38005CB29B /* ks_names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ks_names.h; sourceTree = "<group>"; }; + F966BAA808F27A38005CB29B /* prolog.ps */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = prolog.ps; sourceTree = "<group>"; }; + F966BAA908F27A39005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BAAA08F27A39005CB29B /* tk.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tk.decls; sourceTree = "<group>"; }; + F966BAAB08F27A39005CB29B /* tk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tk.h; sourceTree = "<group>"; }; + F966BAAC08F27A39005CB29B /* tk3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tk3d.c; sourceTree = "<group>"; }; + F966BAAD08F27A39005CB29B /* tk3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tk3d.h; sourceTree = "<group>"; }; + F966BAAE08F27A39005CB29B /* tkArgv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkArgv.c; sourceTree = "<group>"; }; + F966BAAF08F27A39005CB29B /* tkAtom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkAtom.c; sourceTree = "<group>"; }; + F966BAB008F27A39005CB29B /* tkBind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkBind.c; sourceTree = "<group>"; }; + F966BAB108F27A39005CB29B /* tkBitmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkBitmap.c; sourceTree = "<group>"; }; + F966BAB208F27A39005CB29B /* tkButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkButton.c; sourceTree = "<group>"; }; + F966BAB308F27A39005CB29B /* tkButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkButton.h; sourceTree = "<group>"; }; + F966BAB408F27A39005CB29B /* tkCanvArc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvArc.c; sourceTree = "<group>"; }; + F966BAB508F27A39005CB29B /* tkCanvas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvas.c; sourceTree = "<group>"; }; + F966BAB608F27A39005CB29B /* tkCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkCanvas.h; sourceTree = "<group>"; }; + F966BAB708F27A39005CB29B /* tkCanvBmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvBmap.c; sourceTree = "<group>"; }; + F966BAB808F27A39005CB29B /* tkCanvImg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvImg.c; sourceTree = "<group>"; }; + F966BAB908F27A39005CB29B /* tkCanvLine.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvLine.c; sourceTree = "<group>"; }; + F966BABA08F27A39005CB29B /* tkCanvPoly.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvPoly.c; sourceTree = "<group>"; }; + F966BABB08F27A39005CB29B /* tkCanvPs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvPs.c; sourceTree = "<group>"; }; + F966BABD08F27A39005CB29B /* tkCanvText.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvText.c; sourceTree = "<group>"; }; + F966BABE08F27A39005CB29B /* tkCanvUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvUtil.c; sourceTree = "<group>"; }; + F966BABF08F27A39005CB29B /* tkCanvWind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvWind.c; sourceTree = "<group>"; }; + F966BAC008F27A39005CB29B /* tkClipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkClipboard.c; sourceTree = "<group>"; }; + F966BAC108F27A39005CB29B /* tkCmds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCmds.c; sourceTree = "<group>"; }; + F966BAC208F27A39005CB29B /* tkColor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkColor.c; sourceTree = "<group>"; }; + F966BAC308F27A39005CB29B /* tkColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkColor.h; sourceTree = "<group>"; }; + F966BAC408F27A39005CB29B /* tkConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkConfig.c; sourceTree = "<group>"; }; + F966BAC508F27A39005CB29B /* tkConsole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkConsole.c; sourceTree = "<group>"; }; + F966BAC608F27A39005CB29B /* tkCursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCursor.c; sourceTree = "<group>"; }; + F966BAC708F27A39005CB29B /* tkDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkDecls.h; sourceTree = "<group>"; }; + F966BAC808F27A39005CB29B /* tkEntry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkEntry.c; sourceTree = "<group>"; }; + F966BAC908F27A39005CB29B /* tkEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkEntry.h; sourceTree = "<group>"; }; + F966BACA08F27A39005CB29B /* tkError.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkError.c; sourceTree = "<group>"; }; + F966BACB08F27A39005CB29B /* tkEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkEvent.c; sourceTree = "<group>"; }; + F966BACC08F27A39005CB29B /* tkFileFilter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFileFilter.c; sourceTree = "<group>"; }; + F966BACD08F27A39005CB29B /* tkFileFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkFileFilter.h; sourceTree = "<group>"; }; + F966BACE08F27A39005CB29B /* tkFocus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFocus.c; sourceTree = "<group>"; }; + F966BACF08F27A39005CB29B /* tkFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFont.c; sourceTree = "<group>"; }; + F966BAD008F27A39005CB29B /* tkFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkFont.h; sourceTree = "<group>"; }; + F966BAD108F27A39005CB29B /* tkFrame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFrame.c; sourceTree = "<group>"; }; + F966BAD208F27A39005CB29B /* tkGC.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGC.c; sourceTree = "<group>"; }; + F966BAD308F27A39005CB29B /* tkGeometry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGeometry.c; sourceTree = "<group>"; }; + F966BAD408F27A39005CB29B /* tkGet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGet.c; sourceTree = "<group>"; }; + F966BAD508F27A39005CB29B /* tkGrab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGrab.c; sourceTree = "<group>"; }; + F966BAD608F27A39005CB29B /* tkGrid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGrid.c; sourceTree = "<group>"; }; + F966BAD708F27A39005CB29B /* tkImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImage.c; sourceTree = "<group>"; }; + F966BAD808F27A39005CB29B /* tkImgBmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgBmap.c; sourceTree = "<group>"; }; + F966BAD908F27A39005CB29B /* tkImgGIF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgGIF.c; sourceTree = "<group>"; }; + F966BADA08F27A39005CB29B /* tkImgPhoto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgPhoto.c; sourceTree = "<group>"; }; + F966BADB08F27A39005CB29B /* tkImgPPM.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgPPM.c; sourceTree = "<group>"; }; + F966BADC08F27A39005CB29B /* tkImgUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgUtil.c; sourceTree = "<group>"; }; + F966BADE08F27A39005CB29B /* tkInt.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tkInt.decls; sourceTree = "<group>"; }; + F966BADF08F27A39005CB29B /* tkInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkInt.h; sourceTree = "<group>"; }; + F966BAE108F27A39005CB29B /* tkIntDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkIntDecls.h; sourceTree = "<group>"; }; + F966BAE208F27A39005CB29B /* tkIntPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkIntPlatDecls.h; sourceTree = "<group>"; }; + F966BAE308F27A39005CB29B /* tkIntXlibDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkIntXlibDecls.h; sourceTree = "<group>"; }; + F966BAE408F27A39005CB29B /* tkListbox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkListbox.c; sourceTree = "<group>"; }; + F966BAE508F27A39005CB29B /* tkMacWinMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMacWinMenu.c; sourceTree = "<group>"; }; + F966BAE608F27A39005CB29B /* tkMain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMain.c; sourceTree = "<group>"; }; + F966BAE708F27A39005CB29B /* tkMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMenu.c; sourceTree = "<group>"; }; + F966BAE808F27A39005CB29B /* tkMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMenu.h; sourceTree = "<group>"; }; + F966BAE908F27A39005CB29B /* tkMenubutton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMenubutton.c; sourceTree = "<group>"; }; + F966BAEA08F27A39005CB29B /* tkMenubutton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMenubutton.h; sourceTree = "<group>"; }; + F966BAEB08F27A39005CB29B /* tkMenuDraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMenuDraw.c; sourceTree = "<group>"; }; + F966BAEC08F27A39005CB29B /* tkMessage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMessage.c; sourceTree = "<group>"; }; + F966BAED08F27A39005CB29B /* tkObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkObj.c; sourceTree = "<group>"; }; + F966BAEE08F27A39005CB29B /* tkOldConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkOldConfig.c; sourceTree = "<group>"; }; + F966BAEF08F27A39005CB29B /* tkOption.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkOption.c; sourceTree = "<group>"; }; + F966BAF008F27A39005CB29B /* tkPack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPack.c; sourceTree = "<group>"; }; + F966BAF108F27A39005CB29B /* tkPanedWindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPanedWindow.c; sourceTree = "<group>"; }; + F966BAF208F27A39005CB29B /* tkPlace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPlace.c; sourceTree = "<group>"; }; + F966BAF308F27A39005CB29B /* tkPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkPlatDecls.h; sourceTree = "<group>"; }; + F966BAF408F27A39005CB29B /* tkPointer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPointer.c; sourceTree = "<group>"; }; + F966BAF508F27A39005CB29B /* tkPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkPort.h; sourceTree = "<group>"; }; + F966BAF608F27A39005CB29B /* tkRectOval.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkRectOval.c; sourceTree = "<group>"; }; + F966BAF708F27A39005CB29B /* tkScale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkScale.c; sourceTree = "<group>"; }; + F966BAF808F27A39005CB29B /* tkScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkScale.h; sourceTree = "<group>"; }; + F966BAF908F27A39005CB29B /* tkScrollbar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkScrollbar.c; sourceTree = "<group>"; }; + F966BAFA08F27A39005CB29B /* tkScrollbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkScrollbar.h; sourceTree = "<group>"; }; + F966BAFB08F27A39005CB29B /* tkSelect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkSelect.c; sourceTree = "<group>"; }; + F966BAFC08F27A39005CB29B /* tkSelect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkSelect.h; sourceTree = "<group>"; }; + F966BAFD08F27A39005CB29B /* tkSquare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkSquare.c; sourceTree = "<group>"; }; + F966BAFE08F27A39005CB29B /* tkOldTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkOldTest.c; sourceTree = "<group>"; }; + F966BAFF08F27A39005CB29B /* tkStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkStubInit.c; sourceTree = "<group>"; }; + F966BB0008F27A39005CB29B /* tkStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkStubLib.c; sourceTree = "<group>"; }; + F966BB0108F27A39005CB29B /* tkStyle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkStyle.c; sourceTree = "<group>"; }; + F966BB0208F27A39005CB29B /* tkTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTest.c; sourceTree = "<group>"; }; + F966BB0308F27A39005CB29B /* tkText.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkText.c; sourceTree = "<group>"; }; + F966BB0408F27A39005CB29B /* tkText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkText.h; sourceTree = "<group>"; }; + F966BB0508F27A39005CB29B /* tkTextBTree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextBTree.c; sourceTree = "<group>"; }; + F966BB0608F27A39005CB29B /* tkTextDisp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextDisp.c; sourceTree = "<group>"; }; + F966BB0808F27A39005CB29B /* tkTextImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextImage.c; sourceTree = "<group>"; }; + F966BB0908F27A39005CB29B /* tkTextIndex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextIndex.c; sourceTree = "<group>"; }; + F966BB0A08F27A39005CB29B /* tkTextMark.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextMark.c; sourceTree = "<group>"; }; + F966BB0B08F27A39005CB29B /* tkTextTag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextTag.c; sourceTree = "<group>"; }; + F966BB0C08F27A39005CB29B /* tkTextWind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextWind.c; sourceTree = "<group>"; }; + F966BB0D08F27A39005CB29B /* tkTrig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTrig.c; sourceTree = "<group>"; }; + F966BB0E08F27A39005CB29B /* tkUndo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUndo.c; sourceTree = "<group>"; }; + F966BB0F08F27A39005CB29B /* tkUndo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUndo.h; sourceTree = "<group>"; }; + F966BB1008F27A39005CB29B /* tkUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUtil.c; sourceTree = "<group>"; }; + F966BB1108F27A39005CB29B /* tkVisual.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkVisual.c; sourceTree = "<group>"; }; + F966BB1208F27A39005CB29B /* tkWindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWindow.c; sourceTree = "<group>"; }; + F966BB1408F27A39005CB29B /* bgerror.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bgerror.tcl; sourceTree = "<group>"; }; + F966BB1508F27A39005CB29B /* button.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.tcl; sourceTree = "<group>"; }; + F966BB1608F27A39005CB29B /* choosedir.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = choosedir.tcl; sourceTree = "<group>"; }; + F966BB1708F27A39005CB29B /* clrpick.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clrpick.tcl; sourceTree = "<group>"; }; + F966BB1808F27A39005CB29B /* comdlg.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = comdlg.tcl; sourceTree = "<group>"; }; + F966BB1908F27A39005CB29B /* console.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = console.tcl; sourceTree = "<group>"; }; + F966BB1B08F27A39005CB29B /* anilabel.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = anilabel.tcl; sourceTree = "<group>"; }; + F966BB1C08F27A39005CB29B /* aniwave.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = aniwave.tcl; sourceTree = "<group>"; }; + F966BB1D08F27A39005CB29B /* arrow.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = arrow.tcl; sourceTree = "<group>"; }; + F966BB1E08F27A39005CB29B /* bind.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bind.tcl; sourceTree = "<group>"; }; + F966BB1F08F27A39005CB29B /* bitmap.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bitmap.tcl; sourceTree = "<group>"; }; + F966BB2008F27A39005CB29B /* browse */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = browse; sourceTree = "<group>"; }; + F966BB2108F27A39005CB29B /* button.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.tcl; sourceTree = "<group>"; }; + F966BB2208F27A39005CB29B /* check.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = check.tcl; sourceTree = "<group>"; }; + F966BB2308F27A39005CB29B /* clrpick.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clrpick.tcl; sourceTree = "<group>"; }; + F966BB2408F27A39005CB29B /* colors.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = colors.tcl; sourceTree = "<group>"; }; + F966BB2508F27A39005CB29B /* cscroll.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cscroll.tcl; sourceTree = "<group>"; }; + F966BB2608F27A39005CB29B /* ctext.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ctext.tcl; sourceTree = "<group>"; }; + F966BB2708F27A39005CB29B /* dialog1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog1.tcl; sourceTree = "<group>"; }; + F966BB2808F27A39005CB29B /* dialog2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog2.tcl; sourceTree = "<group>"; }; + F966BB2A08F27A39005CB29B /* entry1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry1.tcl; sourceTree = "<group>"; }; + F966BB2B08F27A39005CB29B /* entry2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry2.tcl; sourceTree = "<group>"; }; + F966BB2C08F27A39005CB29B /* entry3.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry3.tcl; sourceTree = "<group>"; }; + F966BB2D08F27A39005CB29B /* filebox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = filebox.tcl; sourceTree = "<group>"; }; + F966BB2E08F27A39005CB29B /* floor.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = floor.tcl; sourceTree = "<group>"; }; + F966BB2F08F27A39005CB29B /* form.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = form.tcl; sourceTree = "<group>"; }; + F966BB3008F27A39005CB29B /* goldberg.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = goldberg.tcl; sourceTree = "<group>"; }; + F966BB3108F27A39005CB29B /* hello */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = hello; sourceTree = "<group>"; }; + F966BB3208F27A39005CB29B /* hscale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = hscale.tcl; sourceTree = "<group>"; }; + F966BB3308F27A39005CB29B /* icon.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = icon.tcl; sourceTree = "<group>"; }; + F966BB3408F27A39005CB29B /* image1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image1.tcl; sourceTree = "<group>"; }; + F966BB3508F27A39005CB29B /* image2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image2.tcl; sourceTree = "<group>"; }; + F966BB4208F27A3A005CB29B /* items.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = items.tcl; sourceTree = "<group>"; }; + F966BB4308F27A3A005CB29B /* ixset */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ixset; sourceTree = "<group>"; }; + F966BB4408F27A3A005CB29B /* label.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = label.tcl; sourceTree = "<group>"; }; + F966BB4508F27A3A005CB29B /* labelframe.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = labelframe.tcl; sourceTree = "<group>"; }; + F966BB4608F27A3A005CB29B /* menu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menu.tcl; sourceTree = "<group>"; }; + F966BB4708F27A3A005CB29B /* menubu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menubu.tcl; sourceTree = "<group>"; }; + F966BB4808F27A3A005CB29B /* msgbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgbox.tcl; sourceTree = "<group>"; }; + F966BB4A08F27A3A005CB29B /* paned1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = paned1.tcl; sourceTree = "<group>"; }; + F966BB4B08F27A3A005CB29B /* paned2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = paned2.tcl; sourceTree = "<group>"; }; + F966BB4C08F27A3A005CB29B /* pendulum.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pendulum.tcl; sourceTree = "<group>"; }; + F966BB4D08F27A3A005CB29B /* plot.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = plot.tcl; sourceTree = "<group>"; }; + F966BB4E08F27A3A005CB29B /* puzzle.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = puzzle.tcl; sourceTree = "<group>"; }; + F966BB4F08F27A3A005CB29B /* radio.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = radio.tcl; sourceTree = "<group>"; }; + F966BB5008F27A3A005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BB5108F27A3A005CB29B /* rmt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = rmt; sourceTree = "<group>"; }; + F966BB5208F27A3A005CB29B /* rolodex */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = rolodex; sourceTree = "<group>"; }; + F966BB5308F27A3A005CB29B /* ruler.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ruler.tcl; sourceTree = "<group>"; }; + F966BB5408F27A3A005CB29B /* sayings.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = sayings.tcl; sourceTree = "<group>"; }; + F966BB5508F27A3A005CB29B /* search.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = search.tcl; sourceTree = "<group>"; }; + F966BB5608F27A3A005CB29B /* spin.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = spin.tcl; sourceTree = "<group>"; }; + F966BB5708F27A3A005CB29B /* square */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = square; sourceTree = "<group>"; }; + F966BB5808F27A3A005CB29B /* states.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = states.tcl; sourceTree = "<group>"; }; + F966BB5908F27A3A005CB29B /* style.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = style.tcl; sourceTree = "<group>"; }; + F966BB5A08F27A3A005CB29B /* tclIndex */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclIndex; sourceTree = "<group>"; }; + F966BB5B08F27A3A005CB29B /* tcolor */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = tcolor; sourceTree = "<group>"; }; + F966BB5C08F27A3A005CB29B /* text.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = text.tcl; sourceTree = "<group>"; }; + F966BB5D08F27A3A005CB29B /* timer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = timer; sourceTree = "<group>"; }; + F966BB5E08F27A3A005CB29B /* twind.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = twind.tcl; sourceTree = "<group>"; }; + F966BB5F08F27A3A005CB29B /* unicodeout.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unicodeout.tcl; sourceTree = "<group>"; }; + F966BB6008F27A3A005CB29B /* vscale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = vscale.tcl; sourceTree = "<group>"; }; + F966BB6108F27A3A005CB29B /* widget */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = widget; sourceTree = "<group>"; }; + F966BB6208F27A3A005CB29B /* dialog.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog.tcl; sourceTree = "<group>"; }; + F966BB6308F27A3A005CB29B /* entry.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.tcl; sourceTree = "<group>"; }; + F966BB6408F27A3A005CB29B /* focus.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = focus.tcl; sourceTree = "<group>"; }; + F966BB7308F27A3A005CB29B /* listbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = listbox.tcl; sourceTree = "<group>"; }; + F966BB7408F27A3A005CB29B /* menu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menu.tcl; sourceTree = "<group>"; }; + F966BB7508F27A3A005CB29B /* mkpsenc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = mkpsenc.tcl; sourceTree = "<group>"; }; + F966BB7608F27A3A005CB29B /* msgbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgbox.tcl; sourceTree = "<group>"; }; + F966BB8608F27A3A005CB29B /* obsolete.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = obsolete.tcl; sourceTree = "<group>"; }; + F966BB8708F27A3A005CB29B /* optMenu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = optMenu.tcl; sourceTree = "<group>"; }; + F966BB8808F27A3A005CB29B /* palette.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = palette.tcl; sourceTree = "<group>"; }; + F966BB8908F27A3B005CB29B /* panedwindow.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.tcl; sourceTree = "<group>"; }; + F966BB8A08F27A3B005CB29B /* prolog.ps */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = prolog.ps; sourceTree = "<group>"; }; + F966BB8B08F27A3B005CB29B /* safetk.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safetk.tcl; sourceTree = "<group>"; }; + F966BB8C08F27A3B005CB29B /* scale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scale.tcl; sourceTree = "<group>"; }; + F966BB8D08F27A3B005CB29B /* scrlbar.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrlbar.tcl; sourceTree = "<group>"; }; + F966BB8E08F27A3B005CB29B /* spinbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = spinbox.tcl; sourceTree = "<group>"; }; + F966BB8F08F27A3B005CB29B /* tclIndex */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclIndex; sourceTree = "<group>"; }; + F966BB9008F27A3B005CB29B /* tearoff.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tearoff.tcl; sourceTree = "<group>"; }; + F966BB9108F27A3B005CB29B /* text.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = text.tcl; sourceTree = "<group>"; }; + F966BB9208F27A3B005CB29B /* tk.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tk.tcl; sourceTree = "<group>"; }; + F966BB9308F27A3B005CB29B /* tkfbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tkfbox.tcl; sourceTree = "<group>"; }; + F966BB9408F27A3B005CB29B /* unsupported.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unsupported.tcl; sourceTree = "<group>"; }; + F966BB9508F27A3B005CB29B /* xmfbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = xmfbox.tcl; sourceTree = "<group>"; }; + F966BB9608F27A3B005CB29B /* license.terms */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = license.terms; sourceTree = "<group>"; }; + F966BBBA08F27A3B005CB29B /* configure.ac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure.ac; sourceTree = "<group>"; }; + F966BBBB08F27A3B005CB29B /* GNUmakefile */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = GNUmakefile; sourceTree = "<group>"; }; + F966BBBE08F27A3B005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BBC008F27A3B005CB29B /* Tk-Info.plist.in */ = {isa = PBXFileReference; explicitFileType = text.plist; fileEncoding = 4; path = "Tk-Info.plist.in"; sourceTree = "<group>"; }; + F966BBC208F27A3B005CB29B /* tkMacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSX.h; sourceTree = "<group>"; }; + F966BBC508F27A3B005CB29B /* tkMacOSXBitmap.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXBitmap.c; sourceTree = "<group>"; }; + F966BBC608F27A3B005CB29B /* tkMacOSXButton.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXButton.c; sourceTree = "<group>"; }; + F966BBC808F27A3B005CB29B /* tkMacOSXClipboard.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXClipboard.c; sourceTree = "<group>"; }; + F966BBC908F27A3B005CB29B /* tkMacOSXColor.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXColor.c; sourceTree = "<group>"; }; + F966BBCA08F27A3B005CB29B /* tkMacOSXConfig.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXConfig.c; sourceTree = "<group>"; }; + F966BBCB08F27A3B005CB29B /* tkMacOSXCursor.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXCursor.c; sourceTree = "<group>"; }; + F966BBCC08F27A3B005CB29B /* tkMacOSXCursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXCursors.h; sourceTree = "<group>"; }; + F966BBCD08F27A3B005CB29B /* tkMacOSXDebug.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXDebug.c; sourceTree = "<group>"; }; + F966BBCE08F27A3B005CB29B /* tkMacOSXDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXDebug.h; sourceTree = "<group>"; }; + F966BBCF08F27A3B005CB29B /* tkMacOSXDefault.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXDefault.h; sourceTree = "<group>"; }; + F966BBD008F27A3B005CB29B /* tkMacOSXDialog.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXDialog.c; sourceTree = "<group>"; }; + F966BBD108F27A3B005CB29B /* tkMacOSXDraw.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXDraw.c; sourceTree = "<group>"; }; + F966BBD208F27A3B005CB29B /* tkMacOSXEmbed.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXEmbed.c; sourceTree = "<group>"; }; + F966BBD308F27A3B005CB29B /* tkMacOSXEntry.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXEntry.c; sourceTree = "<group>"; }; + F966BBD408F27A3B005CB29B /* tkMacOSXEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXEvent.c; sourceTree = "<group>"; }; + F966BBD508F27A3B005CB29B /* tkMacOSXEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXEvent.h; sourceTree = "<group>"; }; + F966BBD608F27A3B005CB29B /* tkMacOSXFont.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXFont.c; sourceTree = "<group>"; }; + F966BBD708F27A3B005CB29B /* tkMacOSXHLEvents.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXHLEvents.c; sourceTree = "<group>"; }; + F966BBD808F27A3B005CB29B /* tkMacOSXInit.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXInit.c; sourceTree = "<group>"; }; + F966BBDA08F27A3B005CB29B /* tkMacOSXInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXInt.h; sourceTree = "<group>"; }; + F966BBDB08F27A3B005CB29B /* tkMacOSXKeyboard.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXKeyboard.c; sourceTree = "<group>"; }; + F966BBDC08F27A3B005CB29B /* tkMacOSXKeyEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXKeyEvent.c; sourceTree = "<group>"; }; + F966BBDD08F27A3B005CB29B /* tkMacOSXMenu.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMenu.c; sourceTree = "<group>"; }; + F966BBE008F27A3B005CB29B /* tkMacOSXMenubutton.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMenubutton.c; sourceTree = "<group>"; }; + F966BBE108F27A3B005CB29B /* tkMacOSXMenus.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMenus.c; sourceTree = "<group>"; }; + F966BBE208F27A3B005CB29B /* tkMacOSXMouseEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMouseEvent.c; sourceTree = "<group>"; }; + F966BBE308F27A3B005CB29B /* tkMacOSXNotify.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXNotify.c; sourceTree = "<group>"; }; + F966BBEA08F27A3C005CB29B /* tkMacOSXPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXPort.h; sourceTree = "<group>"; }; + F966BBEB08F27A3C005CB29B /* tkMacOSXRegion.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXRegion.c; sourceTree = "<group>"; }; + F966BBEC08F27A3C005CB29B /* tkMacOSXScale.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXScale.c; sourceTree = "<group>"; }; + F966BBED08F27A3C005CB29B /* tkMacOSXScrlbr.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXScrlbr.c; sourceTree = "<group>"; }; + F966BBEE08F27A3C005CB29B /* tkMacOSXSend.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXSend.c; sourceTree = "<group>"; }; + F966BBEF08F27A3C005CB29B /* tkMacOSXSubwindows.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXSubwindows.c; sourceTree = "<group>"; }; + F966BBF008F27A3C005CB29B /* tkMacOSXTest.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXTest.c; sourceTree = "<group>"; }; + F966BBF108F27A3C005CB29B /* tkMacOSXWindowEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXWindowEvent.c; sourceTree = "<group>"; }; + F966BBF208F27A3C005CB29B /* tkMacOSXWm.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXWm.c; sourceTree = "<group>"; }; + F966BBF308F27A3C005CB29B /* tkMacOSXWm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXWm.h; sourceTree = "<group>"; }; + F966BBF408F27A3C005CB29B /* tkMacOSXXCursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXXCursors.h; sourceTree = "<group>"; }; + F966BBF508F27A3C005CB29B /* tkMacOSXXStubs.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXXStubs.c; sourceTree = "<group>"; }; + F966BBF708F27A3C005CB29B /* Wish-Info.plist.in */ = {isa = PBXFileReference; explicitFileType = text.plist; fileEncoding = 4; path = "Wish-Info.plist.in"; sourceTree = "<group>"; }; + F966BC0308F27A3C005CB29B /* README */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = README; sourceTree = "<group>"; }; + F966BC0508F27A3C005CB29B /* all.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = all.tcl; sourceTree = "<group>"; }; + F966BC0608F27A3C005CB29B /* arc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = arc.tcl; sourceTree = "<group>"; }; + F966BC0708F27A3C005CB29B /* bell.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bell.test; sourceTree = "<group>"; }; + F966BC0808F27A3C005CB29B /* bevel.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bevel.tcl; sourceTree = "<group>"; }; + F966BC0908F27A3C005CB29B /* bgerror.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bgerror.test; sourceTree = "<group>"; }; + F966BC0A08F27A3C005CB29B /* bind.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bind.test; sourceTree = "<group>"; }; + F966BC0B08F27A3C005CB29B /* bitmap.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bitmap.test; sourceTree = "<group>"; }; + F966BC0C08F27A3C005CB29B /* border.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = border.test; sourceTree = "<group>"; }; + F966BC0D08F27A3C005CB29B /* bugs.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bugs.tcl; sourceTree = "<group>"; }; + F966BC0E08F27A3C005CB29B /* butGeom.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = butGeom.tcl; sourceTree = "<group>"; }; + F966BC0F08F27A3C005CB29B /* butGeom2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = butGeom2.tcl; sourceTree = "<group>"; }; + F966BC1008F27A3C005CB29B /* button.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.test; sourceTree = "<group>"; }; + F966BC1108F27A3C005CB29B /* canvas.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvas.test; sourceTree = "<group>"; }; + F966BC1208F27A3C005CB29B /* canvImg.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvImg.test; sourceTree = "<group>"; }; + F966BC1308F27A3C005CB29B /* canvPs.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPs.test; sourceTree = "<group>"; }; + F966BC1408F27A3C005CB29B /* canvPsArc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsArc.tcl; sourceTree = "<group>"; }; + F966BC1508F27A3C005CB29B /* canvPsBmap.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsBmap.tcl; sourceTree = "<group>"; }; + F966BC1608F27A3C005CB29B /* canvPsGrph.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsGrph.tcl; sourceTree = "<group>"; }; + F966BC1708F27A3C005CB29B /* canvPsImg.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsImg.tcl; sourceTree = "<group>"; }; + F966BC1808F27A3C005CB29B /* canvPsText.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsText.tcl; sourceTree = "<group>"; }; + F966BC1908F27A3C005CB29B /* canvRect.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvRect.test; sourceTree = "<group>"; }; + F966BC1A08F27A3C005CB29B /* canvText.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvText.test; sourceTree = "<group>"; }; + F966BC1B08F27A3C005CB29B /* canvWind.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvWind.test; sourceTree = "<group>"; }; + F966BC1C08F27A3C005CB29B /* choosedir.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = choosedir.test; sourceTree = "<group>"; }; + F966BC1D08F27A3C005CB29B /* clipboard.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clipboard.test; sourceTree = "<group>"; }; + F966BC1E08F27A3C005CB29B /* clrpick.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clrpick.test; sourceTree = "<group>"; }; + F966BC1F08F27A3C005CB29B /* cmap.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmap.tcl; sourceTree = "<group>"; }; + F966BC2008F27A3C005CB29B /* cmds.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmds.test; sourceTree = "<group>"; }; + F966BC2108F27A3C005CB29B /* color.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = color.test; sourceTree = "<group>"; }; + F966BC2208F27A3C005CB29B /* config.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = config.test; sourceTree = "<group>"; }; + F966BC2308F27A3C005CB29B /* constraints.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = constraints.tcl; sourceTree = "<group>"; }; + F966BC2408F27A3C005CB29B /* cursor.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cursor.test; sourceTree = "<group>"; }; + F966BC2508F27A3C005CB29B /* dialog.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog.test; sourceTree = "<group>"; }; + F966BC2608F27A3C005CB29B /* embed.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = embed.test; sourceTree = "<group>"; }; + F966BC2708F27A3C005CB29B /* entry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.test; sourceTree = "<group>"; }; + F966BC2808F27A3C005CB29B /* event.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = event.test; sourceTree = "<group>"; }; + F966BC2908F27A3C005CB29B /* filebox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = filebox.test; sourceTree = "<group>"; }; + F966BC2A08F27A3C005CB29B /* focus.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = focus.test; sourceTree = "<group>"; }; + F966BC2B08F27A3C005CB29B /* focusTcl.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = focusTcl.test; sourceTree = "<group>"; }; + F966BC2C08F27A3C005CB29B /* font.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = font.test; sourceTree = "<group>"; }; + F966BC2D08F27A3C005CB29B /* frame.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = frame.test; sourceTree = "<group>"; }; + F966BC2E08F27A3C005CB29B /* geometry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = geometry.test; sourceTree = "<group>"; }; + F966BC2F08F27A3C005CB29B /* get.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = get.test; sourceTree = "<group>"; }; + F966BC3008F27A3C005CB29B /* grab.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = grab.test; sourceTree = "<group>"; }; + F966BC3108F27A3C005CB29B /* grid.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = grid.test; sourceTree = "<group>"; }; + F966BC3208F27A3C005CB29B /* id.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = id.test; sourceTree = "<group>"; }; + F966BC3308F27A3C005CB29B /* image.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image.test; sourceTree = "<group>"; }; + F966BC3408F27A3C005CB29B /* imgBmap.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = imgBmap.test; sourceTree = "<group>"; }; + F966BC3508F27A3C005CB29B /* imgPhoto.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = imgPhoto.test; sourceTree = "<group>"; }; + F966BC3608F27A3C005CB29B /* imgPPM.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = imgPPM.test; sourceTree = "<group>"; }; + F966BC3708F27A3C005CB29B /* listbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = listbox.test; sourceTree = "<group>"; }; + F966BC3808F27A3C005CB29B /* main.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = main.test; sourceTree = "<group>"; }; + F966BC3908F27A3C005CB29B /* menu.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menu.test; sourceTree = "<group>"; }; + F966BC3A08F27A3C005CB29B /* menubut.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menubut.test; sourceTree = "<group>"; }; + F966BC3B08F27A3C005CB29B /* menuDraw.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menuDraw.test; sourceTree = "<group>"; }; + F966BC3C08F27A3C005CB29B /* message.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = message.test; sourceTree = "<group>"; }; + F966BC3D08F27A3C005CB29B /* msgbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgbox.test; sourceTree = "<group>"; }; + F966BC3E08F27A3C005CB29B /* obj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = obj.test; sourceTree = "<group>"; }; + F966BC3F08F27A3C005CB29B /* oldpack.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = oldpack.test; sourceTree = "<group>"; }; + F966BC4008F27A3C005CB29B /* option.file1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = option.file1; sourceTree = "<group>"; }; + F966BC4108F27A3C005CB29B /* option.file2 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = option.file2; sourceTree = "<group>"; }; + F966BC4208F27A3C005CB29B /* option.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = option.test; sourceTree = "<group>"; }; + F966BC4308F27A3C005CB29B /* pack.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pack.test; sourceTree = "<group>"; }; + F966BC4408F27A3C005CB29B /* panedwindow.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.test; sourceTree = "<group>"; }; + F966BC4508F27A3D005CB29B /* place.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = place.test; sourceTree = "<group>"; }; + F966BC4608F27A3D005CB29B /* raise.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = raise.test; sourceTree = "<group>"; }; + F966BC4708F27A3D005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BC4808F27A3D005CB29B /* safe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safe.test; sourceTree = "<group>"; }; + F966BC4908F27A3D005CB29B /* scale.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scale.test; sourceTree = "<group>"; }; + F966BC4A08F27A3D005CB29B /* scrollbar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrollbar.test; sourceTree = "<group>"; }; + F966BC4B08F27A3D005CB29B /* select.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = select.test; sourceTree = "<group>"; }; + F966BC4C08F27A3D005CB29B /* send.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = send.test; sourceTree = "<group>"; }; + F966BC4D08F27A3D005CB29B /* spinbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = spinbox.test; sourceTree = "<group>"; }; + F966BC4E08F27A3D005CB29B /* text.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = text.test; sourceTree = "<group>"; }; + F966BC4F08F27A3D005CB29B /* textBTree.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textBTree.test; sourceTree = "<group>"; }; + F966BC5008F27A3D005CB29B /* textDisp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textDisp.test; sourceTree = "<group>"; }; + F966BC5108F27A3D005CB29B /* textImage.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textImage.test; sourceTree = "<group>"; }; + F966BC5208F27A3D005CB29B /* textIndex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textIndex.test; sourceTree = "<group>"; }; + F966BC5308F27A3D005CB29B /* textMark.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textMark.test; sourceTree = "<group>"; }; + F966BC5408F27A3D005CB29B /* textTag.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textTag.test; sourceTree = "<group>"; }; + F966BC5508F27A3D005CB29B /* textWind.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textWind.test; sourceTree = "<group>"; }; + F966BC5608F27A3D005CB29B /* tk.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tk.test; sourceTree = "<group>"; }; + F966BC5708F27A3D005CB29B /* unixButton.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixButton.test; sourceTree = "<group>"; }; + F966BC5808F27A3D005CB29B /* unixEmbed.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixEmbed.test; sourceTree = "<group>"; }; + F966BC5908F27A3D005CB29B /* unixFont.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixFont.test; sourceTree = "<group>"; }; + F966BC5A08F27A3D005CB29B /* unixMenu.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixMenu.test; sourceTree = "<group>"; }; + F966BC5B08F27A3D005CB29B /* unixSelect.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixSelect.test; sourceTree = "<group>"; }; + F966BC5C08F27A3D005CB29B /* unixWm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixWm.test; sourceTree = "<group>"; }; + F966BC5D08F27A3D005CB29B /* util.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = util.test; sourceTree = "<group>"; }; + F966BC5E08F27A3D005CB29B /* visual.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = visual.test; sourceTree = "<group>"; }; + F966BC5F08F27A3D005CB29B /* visual_bb.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = visual_bb.test; sourceTree = "<group>"; }; + F966BC6008F27A3D005CB29B /* winButton.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winButton.test; sourceTree = "<group>"; }; + F966BC6108F27A3D005CB29B /* winClipboard.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winClipboard.test; sourceTree = "<group>"; }; + F966BC6208F27A3D005CB29B /* winDialog.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winDialog.test; sourceTree = "<group>"; }; + F966BC6308F27A3D005CB29B /* window.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = window.test; sourceTree = "<group>"; }; + F966BC6408F27A3D005CB29B /* winfo.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winfo.test; sourceTree = "<group>"; }; + F966BC6508F27A3D005CB29B /* winFont.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winFont.test; sourceTree = "<group>"; }; + F966BC6608F27A3D005CB29B /* winMenu.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winMenu.test; sourceTree = "<group>"; }; + F966BC6708F27A3D005CB29B /* winSend.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winSend.test; sourceTree = "<group>"; }; + F966BC6808F27A3D005CB29B /* winWm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winWm.test; sourceTree = "<group>"; }; + F966BC6908F27A3D005CB29B /* wm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = wm.test; sourceTree = "<group>"; }; + F966BC6A08F27A3D005CB29B /* xmfbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = xmfbox.test; sourceTree = "<group>"; }; + F966BC6C08F27A3D005CB29B /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F966BC6D08F27A3D005CB29B /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F966BC6E08F27A3D005CB29B /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F966BC6F08F27A3D005CB29B /* install-sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "install-sh"; sourceTree = "<group>"; }; + F966BC7008F27A3D005CB29B /* installManPage */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = installManPage; sourceTree = "<group>"; }; + F966BC7108F27A3D005CB29B /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F966BC7208F27A3D005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BC7308F27A3D005CB29B /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F966BC7408F27A3D005CB29B /* tk.spec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tk.spec; sourceTree = "<group>"; }; + F966BC7508F27A3D005CB29B /* tkAppInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkAppInit.c; sourceTree = "<group>"; }; + F966BC7608F27A3D005CB29B /* tkConfig.h.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = tkConfig.h.in; sourceTree = "<group>"; }; + F966BC7708F27A3D005CB29B /* tkConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tkConfig.sh.in; sourceTree = "<group>"; }; + F966BC7808F27A3D005CB29B /* tkUnix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnix.c; sourceTree = "<group>"; }; + F966BC7908F27A3D005CB29B /* tkUnix3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnix3d.c; sourceTree = "<group>"; }; + F966BC7A08F27A3D005CB29B /* tkUnixButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixButton.c; sourceTree = "<group>"; }; + F966BC7B08F27A3D005CB29B /* tkUnixColor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixColor.c; sourceTree = "<group>"; }; + F966BC7C08F27A3D005CB29B /* tkUnixConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixConfig.c; sourceTree = "<group>"; }; + F966BC7D08F27A3D005CB29B /* tkUnixCursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixCursor.c; sourceTree = "<group>"; }; + F966BC7E08F27A3D005CB29B /* tkUnixDefault.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUnixDefault.h; sourceTree = "<group>"; }; + F966BC7F08F27A3D005CB29B /* tkUnixDialog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixDialog.c; sourceTree = "<group>"; }; + F966BC8008F27A3D005CB29B /* tkUnixDraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixDraw.c; sourceTree = "<group>"; }; + F966BC8108F27A3D005CB29B /* tkUnixEmbed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixEmbed.c; sourceTree = "<group>"; }; + F966BC8208F27A3D005CB29B /* tkUnixEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixEvent.c; sourceTree = "<group>"; }; + F966BC8308F27A3D005CB29B /* tkUnixFocus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixFocus.c; sourceTree = "<group>"; }; + F966BC8408F27A3D005CB29B /* tkUnixFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixFont.c; sourceTree = "<group>"; }; + F966BC8508F27A3D005CB29B /* tkUnixInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixInit.c; sourceTree = "<group>"; }; + F966BC8608F27A3D005CB29B /* tkUnixInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUnixInt.h; sourceTree = "<group>"; }; + F966BC8708F27A3D005CB29B /* tkUnixKey.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixKey.c; sourceTree = "<group>"; }; + F966BC8808F27A3D005CB29B /* tkUnixMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixMenu.c; sourceTree = "<group>"; }; + F966BC8908F27A3D005CB29B /* tkUnixMenubu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixMenubu.c; sourceTree = "<group>"; }; + F966BC8A08F27A3D005CB29B /* tkUnixPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUnixPort.h; sourceTree = "<group>"; }; + F966BC8B08F27A3D005CB29B /* tkUnixRFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixRFont.c; sourceTree = "<group>"; }; + F966BC8C08F27A3D005CB29B /* tkUnixScale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixScale.c; sourceTree = "<group>"; }; + F966BC8D08F27A3D005CB29B /* tkUnixScrlbr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixScrlbr.c; sourceTree = "<group>"; }; + F966BC8E08F27A3D005CB29B /* tkUnixSelect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixSelect.c; sourceTree = "<group>"; }; + F966BC8F08F27A3D005CB29B /* tkUnixSend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixSend.c; sourceTree = "<group>"; }; + F966BC9008F27A3D005CB29B /* tkUnixWm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixWm.c; sourceTree = "<group>"; }; + F966BC9108F27A3D005CB29B /* tkUnixXId.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixXId.c; sourceTree = "<group>"; }; + F966BC9408F27A3D005CB29B /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F966BC9508F27A3D005CB29B /* buildall.vc.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buildall.vc.bat; sourceTree = "<group>"; }; + F966BC9608F27A3E005CB29B /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F966BC9708F27A3E005CB29B /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F966BC9808F27A3E005CB29B /* makefile.bc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.bc; sourceTree = "<group>"; }; + F966BC9908F27A3E005CB29B /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F966BC9A08F27A3E005CB29B /* makefile.vc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.vc; sourceTree = "<group>"; }; + F966BC9B08F27A3E005CB29B /* mkd.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mkd.bat; sourceTree = "<group>"; }; + F966BC9C08F27A3E005CB29B /* nmakehlp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nmakehlp.c; sourceTree = "<group>"; }; + F966BCEE08F27A3E005CB29B /* tk.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tk.rc; sourceTree = "<group>"; }; + F966BCEF08F27A3E005CB29B /* tk_base.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tk_base.rc; sourceTree = "<group>"; }; + F966BCF208F27A3E005CB29B /* wish.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wish.rc; sourceTree = "<group>"; }; + F966BCF308F27A3E005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BCF408F27A3E005CB29B /* rmd.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rmd.bat; sourceTree = "<group>"; }; + F966BCF508F27A3F005CB29B /* rules.vc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rules.vc; sourceTree = "<group>"; }; + F966BCF608F27A3F005CB29B /* stubs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stubs.c; sourceTree = "<group>"; }; + F966BCF708F27A3F005CB29B /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F966BCF808F27A3F005CB29B /* tkConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tkConfig.sh.in; sourceTree = "<group>"; }; + F966BCF908F27A3F005CB29B /* tkWin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWin.h; sourceTree = "<group>"; }; + F966BCFA08F27A3F005CB29B /* tkWin32Dll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWin32Dll.c; sourceTree = "<group>"; }; + F966BCFB08F27A3F005CB29B /* tkWin3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWin3d.c; sourceTree = "<group>"; }; + F966BCFC08F27A3F005CB29B /* tkWinButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinButton.c; sourceTree = "<group>"; }; + F966BCFD08F27A3F005CB29B /* tkWinClipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinClipboard.c; sourceTree = "<group>"; }; + F966BCFE08F27A3F005CB29B /* tkWinColor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinColor.c; sourceTree = "<group>"; }; + F966BCFF08F27A3F005CB29B /* tkWinConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinConfig.c; sourceTree = "<group>"; }; + F966BD0008F27A3F005CB29B /* tkWinCursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinCursor.c; sourceTree = "<group>"; }; + F966BD0108F27A3F005CB29B /* tkWinDefault.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinDefault.h; sourceTree = "<group>"; }; + F966BD0208F27A3F005CB29B /* tkWinDialog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinDialog.c; sourceTree = "<group>"; }; + F966BD0308F27A3F005CB29B /* tkWinDraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinDraw.c; sourceTree = "<group>"; }; + F966BD0408F27A3F005CB29B /* tkWinEmbed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinEmbed.c; sourceTree = "<group>"; }; + F966BD0508F27A3F005CB29B /* tkWinFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinFont.c; sourceTree = "<group>"; }; + F966BD0708F27A3F005CB29B /* tkWinImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinImage.c; sourceTree = "<group>"; }; + F966BD0808F27A3F005CB29B /* tkWinInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinInit.c; sourceTree = "<group>"; }; + F966BD0908F27A3F005CB29B /* tkWinInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinInt.h; sourceTree = "<group>"; }; + F966BD0A08F27A3F005CB29B /* tkWinKey.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinKey.c; sourceTree = "<group>"; }; + F966BD0B08F27A3F005CB29B /* tkWinMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinMenu.c; sourceTree = "<group>"; }; + F966BD0C08F27A3F005CB29B /* tkWinPixmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinPixmap.c; sourceTree = "<group>"; }; + F966BD0D08F27A3F005CB29B /* tkWinPointer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinPointer.c; sourceTree = "<group>"; }; + F966BD0E08F27A3F005CB29B /* tkWinPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinPort.h; sourceTree = "<group>"; }; + F966BD0F08F27A3F005CB29B /* tkWinRegion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinRegion.c; sourceTree = "<group>"; }; + F966BD1008F27A3F005CB29B /* tkWinScrlbr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinScrlbr.c; sourceTree = "<group>"; }; + F966BD1108F27A3F005CB29B /* tkWinSend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinSend.c; sourceTree = "<group>"; }; + F966BD1208F27A3F005CB29B /* tkWinSendCom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinSendCom.c; sourceTree = "<group>"; }; + F966BD1308F27A3F005CB29B /* tkWinSendCom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinSendCom.h; sourceTree = "<group>"; }; + F966BD1408F27A3F005CB29B /* tkWinTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinTest.c; sourceTree = "<group>"; }; + F966BD1508F27A3F005CB29B /* tkWinWindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinWindow.c; sourceTree = "<group>"; }; + F966BD1608F27A3F005CB29B /* tkWinWm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinWm.c; sourceTree = "<group>"; }; + F966BD1708F27A3F005CB29B /* tkWinX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinX.c; sourceTree = "<group>"; }; + F966BD1808F27A3F005CB29B /* winMain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = winMain.c; sourceTree = "<group>"; }; + F966BD1B08F27A3F005CB29B /* cursorfont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cursorfont.h; sourceTree = "<group>"; }; + F966BD1C08F27A3F005CB29B /* keysym.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keysym.h; sourceTree = "<group>"; }; + F966BD1D08F27A3F005CB29B /* keysymdef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keysymdef.h; sourceTree = "<group>"; }; + F966BD1E08F27A3F005CB29B /* X.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = X.h; sourceTree = "<group>"; }; + F966BD1F08F27A3F005CB29B /* Xatom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xatom.h; sourceTree = "<group>"; }; + F966BD2008F27A3F005CB29B /* Xfuncproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xfuncproto.h; sourceTree = "<group>"; }; + F966BD2108F27A3F005CB29B /* Xlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xlib.h; sourceTree = "<group>"; }; + F966BD2208F27A3F005CB29B /* Xutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xutil.h; sourceTree = "<group>"; }; + F966BD2308F27A3F005CB29B /* xbytes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xbytes.h; sourceTree = "<group>"; }; + F966BD2408F27A3F005CB29B /* xcolors.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xcolors.c; sourceTree = "<group>"; }; + F966BD2508F27A3F005CB29B /* xdraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xdraw.c; sourceTree = "<group>"; }; + F966BD2608F27A3F005CB29B /* xgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xgc.c; sourceTree = "<group>"; }; + F966BD2708F27A3F005CB29B /* ximage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ximage.c; sourceTree = "<group>"; }; + F966BD2808F27A3F005CB29B /* xutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xutil.c; sourceTree = "<group>"; }; + F966C07408F2820D005CB29B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; + F966C07608F2821B005CB29B /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; + F966C07808F28233005CB29B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; + F96887E00AF786D5000797B5 /* ttk.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttk.decls; sourceTree = "<group>"; }; + F96887E10AF786D5000797B5 /* ttkBlink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkBlink.c; sourceTree = "<group>"; }; + F96887E20AF786D5000797B5 /* ttkButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkButton.c; sourceTree = "<group>"; }; + F96887E30AF786D5000797B5 /* ttkCache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkCache.c; sourceTree = "<group>"; }; + F96887E40AF786D5000797B5 /* ttkClamTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkClamTheme.c; sourceTree = "<group>"; }; + F96887E50AF786D5000797B5 /* ttkClassicTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkClassicTheme.c; sourceTree = "<group>"; }; + F96887E60AF786D5000797B5 /* ttkDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkDecls.h; sourceTree = "<group>"; }; + F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkDefaultTheme.c; sourceTree = "<group>"; }; + F96887E80AF786D5000797B5 /* ttkElements.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkElements.c; sourceTree = "<group>"; }; + F96887E90AF786D5000797B5 /* ttkEntry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkEntry.c; sourceTree = "<group>"; }; + F96887EA0AF786D5000797B5 /* ttkFrame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkFrame.c; sourceTree = "<group>"; }; + F96887EB0AF786D5000797B5 /* ttkImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkImage.c; sourceTree = "<group>"; }; + F96887EC0AF786D5000797B5 /* ttkInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkInit.c; sourceTree = "<group>"; }; + F96887ED0AF786D5000797B5 /* ttkLabel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkLabel.c; sourceTree = "<group>"; }; + F96887EE0AF786D5000797B5 /* ttkLayout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkLayout.c; sourceTree = "<group>"; }; + F96887EF0AF786D5000797B5 /* ttkManager.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkManager.c; sourceTree = "<group>"; }; + F96887F00AF786D5000797B5 /* ttkManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkManager.h; sourceTree = "<group>"; }; + F96887F10AF786D5000797B5 /* ttkNotebook.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkNotebook.c; sourceTree = "<group>"; }; + F96887F20AF786D5000797B5 /* ttkPanedwindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkPanedwindow.c; sourceTree = "<group>"; }; + F96887F30AF786D5000797B5 /* ttkProgress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkProgress.c; sourceTree = "<group>"; }; + F96887F40AF786D5000797B5 /* ttkScale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkScale.c; sourceTree = "<group>"; }; + F96887F50AF786D5000797B5 /* ttkScroll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkScroll.c; sourceTree = "<group>"; }; + F96887F60AF786D5000797B5 /* ttkScrollbar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkScrollbar.c; sourceTree = "<group>"; }; + F96887F70AF786D5000797B5 /* ttkSeparator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkSeparator.c; sourceTree = "<group>"; }; + F96887F80AF786D5000797B5 /* ttkSquare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkSquare.c; sourceTree = "<group>"; }; + F96887F90AF786D5000797B5 /* ttkState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkState.c; sourceTree = "<group>"; }; + F96887FA0AF786D5000797B5 /* ttkStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkStubInit.c; sourceTree = "<group>"; }; + F96887FB0AF786D5000797B5 /* ttkStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkStubLib.c; sourceTree = "<group>"; }; + F96887FC0AF786D5000797B5 /* ttkTagSet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTagSet.c; sourceTree = "<group>"; }; + F96887FD0AF786D5000797B5 /* ttkTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTheme.c; sourceTree = "<group>"; }; + F96887FE0AF786D5000797B5 /* ttkTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkTheme.h; sourceTree = "<group>"; }; + F96887FF0AF786D5000797B5 /* ttkThemeInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkThemeInt.h; sourceTree = "<group>"; }; + F96888000AF786D5000797B5 /* ttkTrace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTrace.c; sourceTree = "<group>"; }; + F96888010AF786D5000797B5 /* ttkTrack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTrack.c; sourceTree = "<group>"; }; + F96888020AF786D5000797B5 /* ttkTreeview.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTreeview.c; sourceTree = "<group>"; }; + F96888030AF786D5000797B5 /* ttkWidget.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWidget.c; sourceTree = "<group>"; }; + F96888040AF786D5000797B5 /* ttkWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkWidget.h; sourceTree = "<group>"; }; + F96888370AF787B3000797B5 /* altTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = altTheme.tcl; sourceTree = "<group>"; }; + F96888380AF787B3000797B5 /* aquaTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = aquaTheme.tcl; sourceTree = "<group>"; }; + F96888390AF787B3000797B5 /* button.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.tcl; sourceTree = "<group>"; }; + F968883A0AF787B3000797B5 /* clamTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clamTheme.tcl; sourceTree = "<group>"; }; + F968883B0AF787B3000797B5 /* classicTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = classicTheme.tcl; sourceTree = "<group>"; }; + F968883C0AF787B3000797B5 /* combobox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = combobox.tcl; sourceTree = "<group>"; }; + F968883D0AF787B3000797B5 /* cursors.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cursors.tcl; sourceTree = "<group>"; }; + F968883E0AF787B3000797B5 /* defaults.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = defaults.tcl; sourceTree = "<group>"; }; + F96888400AF787B3000797B5 /* entry.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.tcl; sourceTree = "<group>"; }; + F96888410AF787B3000797B5 /* fonts.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fonts.tcl; sourceTree = "<group>"; }; + F96888440AF787B3000797B5 /* menubutton.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menubutton.tcl; sourceTree = "<group>"; }; + F96888450AF787B3000797B5 /* notebook.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = notebook.tcl; sourceTree = "<group>"; }; + F96888460AF787B3000797B5 /* panedwindow.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.tcl; sourceTree = "<group>"; }; + F96888470AF787B3000797B5 /* progress.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = progress.tcl; sourceTree = "<group>"; }; + F96888480AF787B3000797B5 /* scale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scale.tcl; sourceTree = "<group>"; }; + F96888490AF787B3000797B5 /* scrollbar.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrollbar.tcl; sourceTree = "<group>"; }; + F968884A0AF787B3000797B5 /* sizegrip.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = sizegrip.tcl; sourceTree = "<group>"; }; + F968884B0AF787B3000797B5 /* treeview.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = treeview.tcl; sourceTree = "<group>"; }; + F968884C0AF787B3000797B5 /* ttk.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttk.tcl; sourceTree = "<group>"; }; + F968884D0AF787B3000797B5 /* utils.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = utils.tcl; sourceTree = "<group>"; }; + F968884E0AF787B3000797B5 /* winTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winTheme.tcl; sourceTree = "<group>"; }; + F968884F0AF787B3000797B5 /* xpTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = xpTheme.tcl; sourceTree = "<group>"; }; + F96888540AF7880C000797B5 /* all.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = all.tcl; sourceTree = "<group>"; }; + F96888560AF7880C000797B5 /* combobox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = combobox.test; sourceTree = "<group>"; }; + F96888570AF7880C000797B5 /* entry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.test; sourceTree = "<group>"; }; + F96888580AF7880C000797B5 /* image.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image.test; sourceTree = "<group>"; }; + F96888590AF7880C000797B5 /* labelframe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = labelframe.test; sourceTree = "<group>"; }; + F968885A0AF7880C000797B5 /* layout.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = layout.test; sourceTree = "<group>"; }; + F968885C0AF7880C000797B5 /* notebook.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = notebook.test; sourceTree = "<group>"; }; + F968885D0AF7880C000797B5 /* panedwindow.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.test; sourceTree = "<group>"; }; + F968885E0AF7880C000797B5 /* progressbar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = progressbar.test; sourceTree = "<group>"; }; + F968885F0AF7880C000797B5 /* scrollbar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrollbar.test; sourceTree = "<group>"; }; + F96888600AF7880C000797B5 /* treetags.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = treetags.test; sourceTree = "<group>"; }; + F96888610AF7880C000797B5 /* treeview.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = treeview.test; sourceTree = "<group>"; }; + F96888620AF7880C000797B5 /* ttk.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttk.test; sourceTree = "<group>"; }; + F96888630AF7880C000797B5 /* validate.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = validate.test; sourceTree = "<group>"; }; + F968886B0AF788F6000797B5 /* ttk_button.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_button.n; sourceTree = "<group>"; }; + F968886C0AF788F6000797B5 /* ttk_checkbutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_checkbutton.n; sourceTree = "<group>"; }; + F968886D0AF788F6000797B5 /* ttk_combobox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_combobox.n; sourceTree = "<group>"; }; + F968886F0AF788F6000797B5 /* ttk_entry.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_entry.n; sourceTree = "<group>"; }; + F96888700AF788F6000797B5 /* ttk_frame.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_frame.n; sourceTree = "<group>"; }; + F96888710AF788F6000797B5 /* ttk_Geometry.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_Geometry.3; sourceTree = "<group>"; }; + F96888720AF788F6000797B5 /* ttk_image.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_image.n; sourceTree = "<group>"; }; + F96888730AF788F6000797B5 /* ttk_intro.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_intro.n; sourceTree = "<group>"; }; + F96888740AF788F6000797B5 /* ttk_label.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_label.n; sourceTree = "<group>"; }; + F96888750AF788F6000797B5 /* ttk_labelframe.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_labelframe.n; sourceTree = "<group>"; }; + F96888760AF788F6000797B5 /* ttk_menubutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_menubutton.n; sourceTree = "<group>"; }; + F96888770AF788F6000797B5 /* ttk_notebook.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_notebook.n; sourceTree = "<group>"; }; + F96888780AF788F6000797B5 /* ttk_panedwindow.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_panedwindow.n; sourceTree = "<group>"; }; + F96888790AF788F6000797B5 /* ttk_progressbar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_progressbar.n; sourceTree = "<group>"; }; + F968887A0AF788F6000797B5 /* ttk_radiobutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_radiobutton.n; sourceTree = "<group>"; }; + F968887B0AF788F6000797B5 /* ttk_scrollbar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_scrollbar.n; sourceTree = "<group>"; }; + F968887C0AF788F6000797B5 /* ttk_separator.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_separator.n; sourceTree = "<group>"; }; + F968887D0AF788F6000797B5 /* ttk_sizegrip.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_sizegrip.n; sourceTree = "<group>"; }; + F968887E0AF788F6000797B5 /* ttk_style.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_style.n; sourceTree = "<group>"; }; + F968887F0AF788F6000797B5 /* ttk_Theme.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_Theme.3; sourceTree = "<group>"; }; + F96888800AF788F6000797B5 /* ttk_treeview.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_treeview.n; sourceTree = "<group>"; }; + F96888810AF788F6000797B5 /* ttk_widget.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_widget.n; sourceTree = "<group>"; }; + F96888840AF78938000797B5 /* ttkMacOSXTheme.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = ttkMacOSXTheme.c; sourceTree = "<group>"; }; + F96888860AF78953000797B5 /* ttkWinMonitor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWinMonitor.c; sourceTree = "<group>"; }; + F96888870AF78953000797B5 /* ttkWinTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWinTheme.c; sourceTree = "<group>"; }; + F96888880AF78953000797B5 /* ttkWinXPTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWinXPTheme.c; sourceTree = "<group>"; }; + F96D3DFA08F272A4004A47F5 /* ChangeLog */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = ChangeLog; sourceTree = "<group>"; }; + F96D3DFB08F272A4004A47F5 /* changes */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = changes; sourceTree = "<group>"; }; + F96D3DFD08F272A4004A47F5 /* Access.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Access.3; sourceTree = "<group>"; }; + F96D3DFE08F272A4004A47F5 /* AddErrInfo.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AddErrInfo.3; sourceTree = "<group>"; }; + F96D3DFF08F272A4004A47F5 /* after.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = after.n; sourceTree = "<group>"; }; + F96D3E0008F272A4004A47F5 /* Alloc.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Alloc.3; sourceTree = "<group>"; }; + F96D3E0108F272A4004A47F5 /* AllowExc.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AllowExc.3; sourceTree = "<group>"; }; + F96D3E0208F272A4004A47F5 /* append.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = append.n; sourceTree = "<group>"; }; + F96D3E0308F272A4004A47F5 /* AppInit.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AppInit.3; sourceTree = "<group>"; }; + F96D3E0408F272A5004A47F5 /* array.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = array.n; sourceTree = "<group>"; }; + F96D3E0508F272A5004A47F5 /* AssocData.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AssocData.3; sourceTree = "<group>"; }; + F96D3E0608F272A5004A47F5 /* Async.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Async.3; sourceTree = "<group>"; }; + F96D3E0708F272A5004A47F5 /* BackgdErr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = BackgdErr.3; sourceTree = "<group>"; }; + F96D3E0808F272A5004A47F5 /* Backslash.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Backslash.3; sourceTree = "<group>"; }; + F96D3E0908F272A5004A47F5 /* bgerror.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bgerror.n; sourceTree = "<group>"; }; + F96D3E0A08F272A5004A47F5 /* binary.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = binary.n; sourceTree = "<group>"; }; + F96D3E0B08F272A5004A47F5 /* BoolObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = BoolObj.3; sourceTree = "<group>"; }; + F96D3E0C08F272A5004A47F5 /* break.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = break.n; sourceTree = "<group>"; }; + F96D3E0D08F272A5004A47F5 /* ByteArrObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ByteArrObj.3; sourceTree = "<group>"; }; + F96D3E0E08F272A5004A47F5 /* CallDel.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CallDel.3; sourceTree = "<group>"; }; + F96D3E0F08F272A5004A47F5 /* case.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = case.n; sourceTree = "<group>"; }; + F96D3E1008F272A5004A47F5 /* catch.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = catch.n; sourceTree = "<group>"; }; + F96D3E1108F272A5004A47F5 /* cd.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = cd.n; sourceTree = "<group>"; }; + F96D3E1208F272A5004A47F5 /* chan.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = chan.n; sourceTree = "<group>"; }; + F96D3E1308F272A5004A47F5 /* ChnlStack.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ChnlStack.3; sourceTree = "<group>"; }; + F96D3E1408F272A5004A47F5 /* clock.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = clock.n; sourceTree = "<group>"; }; + F96D3E1508F272A5004A47F5 /* close.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = close.n; sourceTree = "<group>"; }; + F96D3E1608F272A5004A47F5 /* CmdCmplt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CmdCmplt.3; sourceTree = "<group>"; }; + F96D3E1708F272A5004A47F5 /* Concat.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Concat.3; sourceTree = "<group>"; }; + F96D3E1808F272A5004A47F5 /* concat.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = concat.n; sourceTree = "<group>"; }; + F96D3E1908F272A5004A47F5 /* continue.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = continue.n; sourceTree = "<group>"; }; + F96D3E1A08F272A5004A47F5 /* CrtChannel.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtChannel.3; sourceTree = "<group>"; }; + F96D3E1B08F272A5004A47F5 /* CrtChnlHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtChnlHdlr.3; sourceTree = "<group>"; }; + F96D3E1C08F272A5004A47F5 /* CrtCloseHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtCloseHdlr.3; sourceTree = "<group>"; }; + F96D3E1D08F272A5004A47F5 /* CrtCommand.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtCommand.3; sourceTree = "<group>"; }; + F96D3E1E08F272A5004A47F5 /* CrtFileHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtFileHdlr.3; sourceTree = "<group>"; }; + F96D3E1F08F272A5004A47F5 /* CrtInterp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtInterp.3; sourceTree = "<group>"; }; + F96D3E2008F272A5004A47F5 /* CrtMathFnc.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtMathFnc.3; sourceTree = "<group>"; }; + F96D3E2108F272A5004A47F5 /* CrtObjCmd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtObjCmd.3; sourceTree = "<group>"; }; + F96D3E2208F272A5004A47F5 /* CrtSlave.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtSlave.3; sourceTree = "<group>"; }; + F96D3E2308F272A5004A47F5 /* CrtTimerHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtTimerHdlr.3; sourceTree = "<group>"; }; + F96D3E2408F272A5004A47F5 /* CrtTrace.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtTrace.3; sourceTree = "<group>"; }; + F96D3E2508F272A5004A47F5 /* dde.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = dde.n; sourceTree = "<group>"; }; + F96D3E2608F272A5004A47F5 /* DetachPids.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DetachPids.3; sourceTree = "<group>"; }; + F96D3E2708F272A5004A47F5 /* dict.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = dict.n; sourceTree = "<group>"; }; + F96D3E2808F272A5004A47F5 /* DictObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DictObj.3; sourceTree = "<group>"; }; + F96D3E2908F272A5004A47F5 /* DoOneEvent.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DoOneEvent.3; sourceTree = "<group>"; }; + F96D3E2A08F272A5004A47F5 /* DoubleObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DoubleObj.3; sourceTree = "<group>"; }; + F96D3E2B08F272A5004A47F5 /* DoWhenIdle.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DoWhenIdle.3; sourceTree = "<group>"; }; + F96D3E2C08F272A5004A47F5 /* DString.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DString.3; sourceTree = "<group>"; }; + F96D3E2D08F272A5004A47F5 /* DumpActiveMemory.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DumpActiveMemory.3; sourceTree = "<group>"; }; + F96D3E2E08F272A5004A47F5 /* Encoding.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Encoding.3; sourceTree = "<group>"; }; + F96D3E2F08F272A5004A47F5 /* encoding.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = encoding.n; sourceTree = "<group>"; }; + F96D3E3008F272A5004A47F5 /* Ensemble.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Ensemble.3; sourceTree = "<group>"; }; + F96D3E3108F272A5004A47F5 /* Environment.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Environment.3; sourceTree = "<group>"; }; + F96D3E3208F272A5004A47F5 /* eof.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = eof.n; sourceTree = "<group>"; }; + F96D3E3308F272A5004A47F5 /* error.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = error.n; sourceTree = "<group>"; }; + F96D3E3408F272A5004A47F5 /* Eval.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Eval.3; sourceTree = "<group>"; }; + F96D3E3508F272A5004A47F5 /* eval.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = eval.n; sourceTree = "<group>"; }; + F96D3E3608F272A5004A47F5 /* exec.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = exec.n; sourceTree = "<group>"; }; + F96D3E3708F272A5004A47F5 /* Exit.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Exit.3; sourceTree = "<group>"; }; + F96D3E3808F272A5004A47F5 /* exit.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = exit.n; sourceTree = "<group>"; }; + F96D3E3908F272A5004A47F5 /* expr.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = expr.n; sourceTree = "<group>"; }; + F96D3E3A08F272A5004A47F5 /* ExprLong.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ExprLong.3; sourceTree = "<group>"; }; + F96D3E3B08F272A5004A47F5 /* ExprLongObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ExprLongObj.3; sourceTree = "<group>"; }; + F96D3E3C08F272A5004A47F5 /* fblocked.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fblocked.n; sourceTree = "<group>"; }; + F96D3E3D08F272A5004A47F5 /* fconfigure.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fconfigure.n; sourceTree = "<group>"; }; + F96D3E3E08F272A5004A47F5 /* fcopy.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fcopy.n; sourceTree = "<group>"; }; + F96D3E3F08F272A5004A47F5 /* file.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = file.n; sourceTree = "<group>"; }; + F96D3E4008F272A5004A47F5 /* fileevent.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fileevent.n; sourceTree = "<group>"; }; + F96D3E4108F272A5004A47F5 /* filename.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = filename.n; sourceTree = "<group>"; }; + F96D3E4208F272A5004A47F5 /* FileSystem.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FileSystem.3; sourceTree = "<group>"; }; + F96D3E4308F272A5004A47F5 /* FindExec.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FindExec.3; sourceTree = "<group>"; }; + F96D3E4408F272A5004A47F5 /* flush.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = flush.n; sourceTree = "<group>"; }; + F96D3E4508F272A5004A47F5 /* for.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = for.n; sourceTree = "<group>"; }; + F96D3E4608F272A5004A47F5 /* foreach.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = foreach.n; sourceTree = "<group>"; }; + F96D3E4708F272A5004A47F5 /* format.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = format.n; sourceTree = "<group>"; }; + F96D3E4808F272A5004A47F5 /* GetCwd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetCwd.3; sourceTree = "<group>"; }; + F96D3E4908F272A5004A47F5 /* GetHostName.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetHostName.3; sourceTree = "<group>"; }; + F96D3E4A08F272A5004A47F5 /* GetIndex.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetIndex.3; sourceTree = "<group>"; }; + F96D3E4B08F272A5004A47F5 /* GetInt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetInt.3; sourceTree = "<group>"; }; + F96D3E4C08F272A5004A47F5 /* GetOpnFl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetOpnFl.3; sourceTree = "<group>"; }; + F96D3E4D08F272A5004A47F5 /* gets.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = gets.n; sourceTree = "<group>"; }; + F96D3E4E08F272A5004A47F5 /* GetStdChan.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetStdChan.3; sourceTree = "<group>"; }; + F96D3E4F08F272A5004A47F5 /* GetTime.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetTime.3; sourceTree = "<group>"; }; + F96D3E5008F272A5004A47F5 /* GetVersion.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetVersion.3; sourceTree = "<group>"; }; + F96D3E5108F272A5004A47F5 /* glob.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = glob.n; sourceTree = "<group>"; }; + F96D3E5208F272A6004A47F5 /* global.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = global.n; sourceTree = "<group>"; }; + F96D3E5308F272A6004A47F5 /* Hash.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Hash.3; sourceTree = "<group>"; }; + F96D3E5408F272A6004A47F5 /* history.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = history.n; sourceTree = "<group>"; }; + F96D3E5508F272A6004A47F5 /* http.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = http.n; sourceTree = "<group>"; }; + F96D3E5608F272A6004A47F5 /* if.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = if.n; sourceTree = "<group>"; }; + F96D3E5708F272A6004A47F5 /* incr.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = incr.n; sourceTree = "<group>"; }; + F96D3E5808F272A6004A47F5 /* info.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = info.n; sourceTree = "<group>"; }; + F96D3E5908F272A6004A47F5 /* Init.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Init.3; sourceTree = "<group>"; }; + F96D3E5A08F272A6004A47F5 /* InitStubs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = InitStubs.3; sourceTree = "<group>"; }; + F96D3E5B08F272A6004A47F5 /* Interp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Interp.3; sourceTree = "<group>"; }; + F96D3E5C08F272A6004A47F5 /* interp.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = interp.n; sourceTree = "<group>"; }; + F96D3E5D08F272A6004A47F5 /* IntObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = IntObj.3; sourceTree = "<group>"; }; + F96D3E5E08F272A6004A47F5 /* join.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = join.n; sourceTree = "<group>"; }; + F96D3E5F08F272A6004A47F5 /* lappend.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lappend.n; sourceTree = "<group>"; }; + F96D3E6008F272A6004A47F5 /* lassign.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lassign.n; sourceTree = "<group>"; }; + F96D3E6108F272A6004A47F5 /* library.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = library.n; sourceTree = "<group>"; }; + F96D3E6208F272A6004A47F5 /* Limit.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Limit.3; sourceTree = "<group>"; }; + F96D3E6308F272A6004A47F5 /* lindex.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lindex.n; sourceTree = "<group>"; }; + F96D3E6408F272A6004A47F5 /* LinkVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = LinkVar.3; sourceTree = "<group>"; }; + F96D3E6508F272A6004A47F5 /* linsert.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = linsert.n; sourceTree = "<group>"; }; + F96D3E6608F272A6004A47F5 /* list.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = list.n; sourceTree = "<group>"; }; + F96D3E6708F272A6004A47F5 /* ListObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ListObj.3; sourceTree = "<group>"; }; + F96D3E6808F272A6004A47F5 /* llength.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = llength.n; sourceTree = "<group>"; }; + F96D3E6908F272A6004A47F5 /* load.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = load.n; sourceTree = "<group>"; }; + F96D3E6A08F272A6004A47F5 /* lrange.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lrange.n; sourceTree = "<group>"; }; + F96D3E6B08F272A6004A47F5 /* lrepeat.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lrepeat.n; sourceTree = "<group>"; }; + F96D3E6C08F272A6004A47F5 /* lreplace.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lreplace.n; sourceTree = "<group>"; }; + F96D3E6D08F272A6004A47F5 /* lsearch.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lsearch.n; sourceTree = "<group>"; }; + F96D3E6E08F272A6004A47F5 /* lset.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lset.n; sourceTree = "<group>"; }; + F96D3E6F08F272A6004A47F5 /* lsort.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lsort.n; sourceTree = "<group>"; }; + F96D3E7008F272A6004A47F5 /* man.macros */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = man.macros; sourceTree = "<group>"; }; + F96D3E7108F272A6004A47F5 /* mathfunc.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = mathfunc.n; sourceTree = "<group>"; }; + F96D3E7208F272A6004A47F5 /* memory.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = memory.n; sourceTree = "<group>"; }; + F96D3E7308F272A6004A47F5 /* msgcat.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = msgcat.n; sourceTree = "<group>"; }; + F96D3E7408F272A6004A47F5 /* Namespace.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Namespace.3; sourceTree = "<group>"; }; + F96D3E7508F272A6004A47F5 /* namespace.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = namespace.n; sourceTree = "<group>"; }; + F96D3E7608F272A6004A47F5 /* Notifier.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Notifier.3; sourceTree = "<group>"; }; + F96D3E7708F272A6004A47F5 /* Object.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Object.3; sourceTree = "<group>"; }; + F96D3E7808F272A6004A47F5 /* ObjectType.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ObjectType.3; sourceTree = "<group>"; }; + F96D3E7908F272A6004A47F5 /* open.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = open.n; sourceTree = "<group>"; }; + F96D3E7A08F272A6004A47F5 /* OpenFileChnl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = OpenFileChnl.3; sourceTree = "<group>"; }; + F96D3E7B08F272A6004A47F5 /* OpenTcp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = OpenTcp.3; sourceTree = "<group>"; }; + F96D3E7C08F272A6004A47F5 /* package.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = package.n; sourceTree = "<group>"; }; + F96D3E7D08F272A6004A47F5 /* packagens.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = packagens.n; sourceTree = "<group>"; }; + F96D3E7E08F272A6004A47F5 /* Panic.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Panic.3; sourceTree = "<group>"; }; + F96D3E7F08F272A6004A47F5 /* ParseCmd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ParseCmd.3; sourceTree = "<group>"; }; + F96D3E8008F272A6004A47F5 /* pid.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pid.n; sourceTree = "<group>"; }; + F96D3E8108F272A6004A47F5 /* pkgMkIndex.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pkgMkIndex.n; sourceTree = "<group>"; }; + F96D3E8208F272A6004A47F5 /* PkgRequire.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = PkgRequire.3; sourceTree = "<group>"; }; + F96D3E8308F272A6004A47F5 /* Preserve.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Preserve.3; sourceTree = "<group>"; }; + F96D3E8408F272A6004A47F5 /* PrintDbl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = PrintDbl.3; sourceTree = "<group>"; }; + F96D3E8508F272A6004A47F5 /* proc.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = proc.n; sourceTree = "<group>"; }; + F96D3E8608F272A6004A47F5 /* puts.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = puts.n; sourceTree = "<group>"; }; + F96D3E8708F272A6004A47F5 /* pwd.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pwd.n; sourceTree = "<group>"; }; + F96D3E8808F272A6004A47F5 /* re_syntax.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = re_syntax.n; sourceTree = "<group>"; }; + F96D3E8908F272A6004A47F5 /* read.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = read.n; sourceTree = "<group>"; }; + F96D3E8A08F272A6004A47F5 /* RecEvalObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RecEvalObj.3; sourceTree = "<group>"; }; + F96D3E8B08F272A6004A47F5 /* RecordEval.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RecordEval.3; sourceTree = "<group>"; }; + F96D3E8C08F272A6004A47F5 /* RegConfig.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RegConfig.3; sourceTree = "<group>"; }; + F96D3E8D08F272A6004A47F5 /* RegExp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RegExp.3; sourceTree = "<group>"; }; + F96D3E8E08F272A6004A47F5 /* regexp.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = regexp.n; sourceTree = "<group>"; }; + F96D3E8F08F272A6004A47F5 /* registry.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = registry.n; sourceTree = "<group>"; }; + F96D3E9008F272A6004A47F5 /* regsub.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = regsub.n; sourceTree = "<group>"; }; + F96D3E9108F272A6004A47F5 /* rename.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = rename.n; sourceTree = "<group>"; }; + F96D3E9208F272A6004A47F5 /* return.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = return.n; sourceTree = "<group>"; }; + F96D3E9308F272A6004A47F5 /* safe.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = safe.n; sourceTree = "<group>"; }; + F96D3E9408F272A6004A47F5 /* SaveResult.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SaveResult.3; sourceTree = "<group>"; }; + F96D3E9508F272A6004A47F5 /* scan.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = scan.n; sourceTree = "<group>"; }; + F96D3E9608F272A6004A47F5 /* seek.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = seek.n; sourceTree = "<group>"; }; + F96D3E9708F272A6004A47F5 /* set.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = set.n; sourceTree = "<group>"; }; + F96D3E9808F272A6004A47F5 /* SetChanErr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetChanErr.3; sourceTree = "<group>"; }; + F96D3E9908F272A6004A47F5 /* SetErrno.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetErrno.3; sourceTree = "<group>"; }; + F96D3E9A08F272A6004A47F5 /* SetRecLmt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetRecLmt.3; sourceTree = "<group>"; }; + F96D3E9B08F272A7004A47F5 /* SetResult.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetResult.3; sourceTree = "<group>"; }; + F96D3E9C08F272A7004A47F5 /* SetVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetVar.3; sourceTree = "<group>"; }; + F96D3E9D08F272A7004A47F5 /* Signal.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Signal.3; sourceTree = "<group>"; }; + F96D3E9E08F272A7004A47F5 /* Sleep.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Sleep.3; sourceTree = "<group>"; }; + F96D3E9F08F272A7004A47F5 /* socket.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = socket.n; sourceTree = "<group>"; }; + F96D3EA008F272A7004A47F5 /* source.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = source.n; sourceTree = "<group>"; }; + F96D3EA108F272A7004A47F5 /* SourceRCFile.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SourceRCFile.3; sourceTree = "<group>"; }; + F96D3EA208F272A7004A47F5 /* split.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = split.n; sourceTree = "<group>"; }; + F96D3EA308F272A7004A47F5 /* SplitList.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SplitList.3; sourceTree = "<group>"; }; + F96D3EA408F272A7004A47F5 /* SplitPath.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SplitPath.3; sourceTree = "<group>"; }; + F96D3EA508F272A7004A47F5 /* StaticPkg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StaticPkg.3; sourceTree = "<group>"; }; + F96D3EA608F272A7004A47F5 /* StdChannels.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StdChannels.3; sourceTree = "<group>"; }; + F96D3EA708F272A7004A47F5 /* string.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = string.n; sourceTree = "<group>"; }; + F96D3EA808F272A7004A47F5 /* StringObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StringObj.3; sourceTree = "<group>"; }; + F96D3EA908F272A7004A47F5 /* StrMatch.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StrMatch.3; sourceTree = "<group>"; }; + F96D3EAA08F272A7004A47F5 /* subst.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = subst.n; sourceTree = "<group>"; }; + F96D3EAB08F272A7004A47F5 /* SubstObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SubstObj.3; sourceTree = "<group>"; }; + F96D3EAC08F272A7004A47F5 /* switch.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = switch.n; sourceTree = "<group>"; }; + F96D3EAD08F272A7004A47F5 /* Tcl.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tcl.n; sourceTree = "<group>"; }; + F96D3EAE08F272A7004A47F5 /* Tcl_Main.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tcl_Main.3; sourceTree = "<group>"; }; + F96D3EAF08F272A7004A47F5 /* TCL_MEM_DEBUG.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TCL_MEM_DEBUG.3; sourceTree = "<group>"; }; + F96D3EB008F272A7004A47F5 /* tclsh.1 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tclsh.1; sourceTree = "<group>"; }; + F96D3EB108F272A7004A47F5 /* tcltest.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tcltest.n; sourceTree = "<group>"; }; + F96D3EB208F272A7004A47F5 /* tclvars.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tclvars.n; sourceTree = "<group>"; }; + F96D3EB308F272A7004A47F5 /* tell.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tell.n; sourceTree = "<group>"; }; + F96D3EB408F272A7004A47F5 /* Thread.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Thread.3; sourceTree = "<group>"; }; + F96D3EB508F272A7004A47F5 /* time.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = time.n; sourceTree = "<group>"; }; + F96D3EB608F272A7004A47F5 /* tm.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tm.n; sourceTree = "<group>"; }; + F96D3EB708F272A7004A47F5 /* ToUpper.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ToUpper.3; sourceTree = "<group>"; }; + F96D3EB808F272A7004A47F5 /* trace.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = trace.n; sourceTree = "<group>"; }; + F96D3EB908F272A7004A47F5 /* TraceCmd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TraceCmd.3; sourceTree = "<group>"; }; + F96D3EBA08F272A7004A47F5 /* TraceVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TraceVar.3; sourceTree = "<group>"; }; + F96D3EBB08F272A7004A47F5 /* Translate.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Translate.3; sourceTree = "<group>"; }; + F96D3EBC08F272A7004A47F5 /* UniCharIsAlpha.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = UniCharIsAlpha.3; sourceTree = "<group>"; }; + F96D3EBD08F272A7004A47F5 /* unknown.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = unknown.n; sourceTree = "<group>"; }; + F96D3EBE08F272A7004A47F5 /* unload.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = unload.n; sourceTree = "<group>"; }; + F96D3EBF08F272A7004A47F5 /* unset.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = unset.n; sourceTree = "<group>"; }; + F96D3EC008F272A7004A47F5 /* update.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = update.n; sourceTree = "<group>"; }; + F96D3EC108F272A7004A47F5 /* uplevel.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = uplevel.n; sourceTree = "<group>"; }; + F96D3EC208F272A7004A47F5 /* UpVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = UpVar.3; sourceTree = "<group>"; }; + F96D3EC308F272A7004A47F5 /* upvar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = upvar.n; sourceTree = "<group>"; }; + F96D3EC408F272A7004A47F5 /* Utf.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Utf.3; sourceTree = "<group>"; }; + F96D3EC508F272A7004A47F5 /* variable.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = variable.n; sourceTree = "<group>"; }; + F96D3EC608F272A7004A47F5 /* vwait.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = vwait.n; sourceTree = "<group>"; }; + F96D3EC708F272A7004A47F5 /* while.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = while.n; sourceTree = "<group>"; }; + F96D3EC808F272A7004A47F5 /* WrongNumArgs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = WrongNumArgs.3; sourceTree = "<group>"; }; + F96D3ECA08F272A7004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D3ECB08F272A7004A47F5 /* regc_color.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_color.c; sourceTree = "<group>"; }; + F96D3ECC08F272A7004A47F5 /* regc_cvec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_cvec.c; sourceTree = "<group>"; }; + F96D3ECD08F272A7004A47F5 /* regc_lex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_lex.c; sourceTree = "<group>"; }; + F96D3ECE08F272A7004A47F5 /* regc_locale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_locale.c; sourceTree = "<group>"; }; + F96D3ECF08F272A7004A47F5 /* regc_nfa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_nfa.c; sourceTree = "<group>"; }; + F96D3ED008F272A7004A47F5 /* regcomp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regcomp.c; sourceTree = "<group>"; }; + F96D3ED108F272A7004A47F5 /* regcustom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regcustom.h; sourceTree = "<group>"; }; + F96D3ED208F272A7004A47F5 /* rege_dfa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rege_dfa.c; sourceTree = "<group>"; }; + F96D3ED308F272A7004A47F5 /* regerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regerror.c; sourceTree = "<group>"; }; + F96D3ED408F272A7004A47F5 /* regerrs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regerrs.h; sourceTree = "<group>"; }; + F96D3ED508F272A7004A47F5 /* regex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regex.h; sourceTree = "<group>"; }; + F96D3ED608F272A7004A47F5 /* regexec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regexec.c; sourceTree = "<group>"; }; + F96D3ED708F272A7004A47F5 /* regfree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regfree.c; sourceTree = "<group>"; }; + F96D3ED808F272A7004A47F5 /* regfronts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regfronts.c; sourceTree = "<group>"; }; + F96D3ED908F272A7004A47F5 /* regguts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regguts.h; sourceTree = "<group>"; }; + F96D3EDA08F272A7004A47F5 /* tcl.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tcl.decls; sourceTree = "<group>"; }; + F96D3EDB08F272A7004A47F5 /* tcl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tcl.h; sourceTree = "<group>"; }; + F96D3EDC08F272A7004A47F5 /* tclAlloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAlloc.c; sourceTree = "<group>"; }; + F96D3EDD08F272A7004A47F5 /* tclAsync.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAsync.c; sourceTree = "<group>"; }; + F96D3EDE08F272A7004A47F5 /* tclBasic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclBasic.c; sourceTree = "<group>"; }; + F96D3EDF08F272A7004A47F5 /* tclBinary.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclBinary.c; sourceTree = "<group>"; }; + F96D3EE008F272A7004A47F5 /* tclCkalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCkalloc.c; sourceTree = "<group>"; }; + F96D3EE108F272A7004A47F5 /* tclClock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclClock.c; sourceTree = "<group>"; }; + F96D3EE208F272A7004A47F5 /* tclCmdAH.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCmdAH.c; sourceTree = "<group>"; }; + F96D3EE308F272A7004A47F5 /* tclCmdIL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCmdIL.c; sourceTree = "<group>"; }; + F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCmdMZ.c; sourceTree = "<group>"; }; + F96D3EE508F272A7004A47F5 /* tclCompCmds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCompCmds.c; sourceTree = "<group>"; }; + F96D3EE608F272A7004A47F5 /* tclCompExpr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCompExpr.c; sourceTree = "<group>"; }; + F96D3EE708F272A7004A47F5 /* tclCompile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCompile.c; sourceTree = "<group>"; }; + F96D3EE808F272A7004A47F5 /* tclCompile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclCompile.h; sourceTree = "<group>"; }; + F96D3EE908F272A7004A47F5 /* tclConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclConfig.c; sourceTree = "<group>"; }; + F96D3EEA08F272A7004A47F5 /* tclDate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclDate.c; sourceTree = "<group>"; }; + F96D3EEB08F272A7004A47F5 /* tclDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclDecls.h; sourceTree = "<group>"; }; + F96D3EEC08F272A7004A47F5 /* tclDictObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclDictObj.c; sourceTree = "<group>"; }; + F96D3EED08F272A7004A47F5 /* tclEncoding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclEncoding.c; sourceTree = "<group>"; }; + F96D3EEE08F272A7004A47F5 /* tclEnv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclEnv.c; sourceTree = "<group>"; }; + F96D3EEF08F272A7004A47F5 /* tclEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclEvent.c; sourceTree = "<group>"; }; + F96D3EF008F272A7004A47F5 /* tclExecute.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclExecute.c; sourceTree = "<group>"; }; + F96D3EF108F272A7004A47F5 /* tclFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclFCmd.c; sourceTree = "<group>"; }; + F96D3EF208F272A7004A47F5 /* tclFileName.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclFileName.c; sourceTree = "<group>"; }; + F96D3EF308F272A7004A47F5 /* tclFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclFileSystem.h; sourceTree = "<group>"; }; + F96D3EF408F272A7004A47F5 /* tclGet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclGet.c; sourceTree = "<group>"; }; + F96D3EF508F272A7004A47F5 /* tclGetDate.y */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.yacc; path = tclGetDate.y; sourceTree = "<group>"; }; + F96D3EF608F272A7004A47F5 /* tclHash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclHash.c; sourceTree = "<group>"; }; + F96D3EF708F272A7004A47F5 /* tclHistory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclHistory.c; sourceTree = "<group>"; }; + F96D3EF808F272A7004A47F5 /* tclIndexObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIndexObj.c; sourceTree = "<group>"; }; + F96D3EF908F272A7004A47F5 /* tclInt.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclInt.decls; sourceTree = "<group>"; }; + F96D3EFA08F272A7004A47F5 /* tclInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclInt.h; sourceTree = "<group>"; }; + F96D3EFB08F272A7004A47F5 /* tclIntDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclIntDecls.h; sourceTree = "<group>"; }; + F96D3EFC08F272A7004A47F5 /* tclInterp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclInterp.c; sourceTree = "<group>"; }; + F96D3EFD08F272A7004A47F5 /* tclIntPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclIntPlatDecls.h; sourceTree = "<group>"; }; + F96D3EFE08F272A7004A47F5 /* tclIO.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIO.c; sourceTree = "<group>"; }; + F96D3EFF08F272A7004A47F5 /* tclIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclIO.h; sourceTree = "<group>"; }; + F96D3F0008F272A7004A47F5 /* tclIOCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOCmd.c; sourceTree = "<group>"; }; + F96D3F0108F272A7004A47F5 /* tclIOGT.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOGT.c; sourceTree = "<group>"; }; + F96D3F0208F272A7004A47F5 /* tclIORChan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIORChan.c; sourceTree = "<group>"; }; + F96D3F0308F272A7004A47F5 /* tclIOSock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOSock.c; sourceTree = "<group>"; }; + F96D3F0408F272A7004A47F5 /* tclIOUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOUtil.c; sourceTree = "<group>"; }; + F96D3F0508F272A7004A47F5 /* tclLink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLink.c; sourceTree = "<group>"; }; + F96D3F0608F272A7004A47F5 /* tclListObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclListObj.c; sourceTree = "<group>"; }; + F96D3F0708F272A7004A47F5 /* tclLiteral.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLiteral.c; sourceTree = "<group>"; }; + F96D3F0808F272A7004A47F5 /* tclLoad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoad.c; sourceTree = "<group>"; }; + F96D3F0908F272A7004A47F5 /* tclLoadNone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadNone.c; sourceTree = "<group>"; }; + F96D3F0A08F272A7004A47F5 /* tclMain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMain.c; sourceTree = "<group>"; }; + F96D3F0B08F272A7004A47F5 /* tclNamesp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclNamesp.c; sourceTree = "<group>"; }; + F96D3F0C08F272A7004A47F5 /* tclNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclNotify.c; sourceTree = "<group>"; }; + F96D3F0D08F272A7004A47F5 /* tclObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclObj.c; sourceTree = "<group>"; }; + F96D3F0E08F272A7004A47F5 /* tclPanic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPanic.c; sourceTree = "<group>"; }; + F96D3F0F08F272A7004A47F5 /* tclParse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclParse.c; sourceTree = "<group>"; }; + F96D3F1108F272A7004A47F5 /* tclPathObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPathObj.c; sourceTree = "<group>"; }; + F96D3F1208F272A7004A47F5 /* tclPipe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPipe.c; sourceTree = "<group>"; }; + F96D3F1308F272A7004A47F5 /* tclPkg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPkg.c; sourceTree = "<group>"; }; + F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPkgConfig.c; sourceTree = "<group>"; }; + F96D3F1508F272A7004A47F5 /* tclPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclPlatDecls.h; sourceTree = "<group>"; }; + F96D3F1608F272A7004A47F5 /* tclPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclPort.h; sourceTree = "<group>"; }; + F96D3F1708F272A7004A47F5 /* tclPosixStr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPosixStr.c; sourceTree = "<group>"; }; + F96D3F1808F272A7004A47F5 /* tclPreserve.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPreserve.c; sourceTree = "<group>"; }; + F96D3F1908F272A7004A47F5 /* tclProc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclProc.c; sourceTree = "<group>"; }; + F96D3F1A08F272A7004A47F5 /* tclRegexp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclRegexp.c; sourceTree = "<group>"; }; + F96D3F1B08F272A7004A47F5 /* tclRegexp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclRegexp.h; sourceTree = "<group>"; }; + F96D3F1C08F272A7004A47F5 /* tclResolve.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclResolve.c; sourceTree = "<group>"; }; + F96D3F1D08F272A7004A47F5 /* tclResult.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclResult.c; sourceTree = "<group>"; }; + F96D3F1E08F272A7004A47F5 /* tclScan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclScan.c; sourceTree = "<group>"; }; + F96D3F1F08F272A7004A47F5 /* tclStringObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStringObj.c; sourceTree = "<group>"; }; + F96D3F2408F272A7004A47F5 /* tclStrToD.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStrToD.c; sourceTree = "<group>"; }; + F96D3F2508F272A7004A47F5 /* tclStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStubInit.c; sourceTree = "<group>"; }; + F96D3F2608F272A7004A47F5 /* tclStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStubLib.c; sourceTree = "<group>"; }; + F96D3F2708F272A7004A47F5 /* tclTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTest.c; sourceTree = "<group>"; }; + F96D3F2808F272A7004A47F5 /* tclTestObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTestObj.c; sourceTree = "<group>"; }; + F96D3F2908F272A7004A47F5 /* tclTestProcBodyObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTestProcBodyObj.c; sourceTree = "<group>"; }; + F96D3F2A08F272A7004A47F5 /* tclThread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThread.c; sourceTree = "<group>"; }; + F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadAlloc.c; sourceTree = "<group>"; }; + F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadJoin.c; sourceTree = "<group>"; }; + F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadStorage.c; sourceTree = "<group>"; }; + F96D3F2E08F272A7004A47F5 /* tclThreadTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadTest.c; sourceTree = "<group>"; }; + F96D3F2F08F272A7004A47F5 /* tclTimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTimer.c; sourceTree = "<group>"; }; + F96D3F3008F272A7004A47F5 /* tclTomMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclTomMath.h; sourceTree = "<group>"; }; + F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTomMathInterface.c; sourceTree = "<group>"; }; + F96D3F3208F272A7004A47F5 /* tclTrace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTrace.c; sourceTree = "<group>"; }; + F96D3F3308F272A7004A47F5 /* tclUniData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUniData.c; sourceTree = "<group>"; }; + F96D3F3408F272A7004A47F5 /* tclUtf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUtf.c; sourceTree = "<group>"; }; + F96D3F3508F272A7004A47F5 /* tclUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUtil.c; sourceTree = "<group>"; }; + F96D3F3608F272A7004A47F5 /* tclVar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclVar.c; sourceTree = "<group>"; }; + F96D3F3708F272A7004A47F5 /* tommath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath.h; sourceTree = "<group>"; }; + F96D3F3908F272A8004A47F5 /* auto.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = auto.tcl; sourceTree = "<group>"; }; + F96D3F3A08F272A8004A47F5 /* clock.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clock.tcl; sourceTree = "<group>"; }; + F96D3F3C08F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D3F8C08F272A8004A47F5 /* history.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = history.tcl; sourceTree = "<group>"; }; + F96D3F8E08F272A8004A47F5 /* http.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = http.tcl; sourceTree = "<group>"; }; + F96D3F8F08F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D3F9108F272A8004A47F5 /* http.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = http.tcl; sourceTree = "<group>"; }; + F96D3F9208F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D3F9308F272A8004A47F5 /* init.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = init.tcl; sourceTree = "<group>"; }; + F96D3F9508F272A8004A47F5 /* msgcat.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgcat.tcl; sourceTree = "<group>"; }; + F96D3F9608F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D401808F272AA004A47F5 /* optparse.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = optparse.tcl; sourceTree = "<group>"; }; + F96D401908F272AA004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D401A08F272AA004A47F5 /* package.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = package.tcl; sourceTree = "<group>"; }; + F96D401B08F272AA004A47F5 /* parray.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parray.tcl; sourceTree = "<group>"; }; + F96D401D08F272AA004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D401E08F272AA004A47F5 /* safe.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safe.tcl; sourceTree = "<group>"; }; + F96D401F08F272AA004A47F5 /* tclIndex */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclIndex; sourceTree = "<group>"; }; + F96D402108F272AA004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D402208F272AA004A47F5 /* tcltest.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tcltest.tcl; sourceTree = "<group>"; }; + F96D402308F272AA004A47F5 /* tm.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tm.tcl; sourceTree = "<group>"; }; + F96D425B08F272B2004A47F5 /* word.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = word.tcl; sourceTree = "<group>"; }; + F96D425F08F272B3004A47F5 /* bn.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = bn.pdf; sourceTree = "<group>"; }; + F96D426108F272B3004A47F5 /* bn_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_error.c; sourceTree = "<group>"; }; + F96D426208F272B3004A47F5 /* bn_fast_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_invmod.c; sourceTree = "<group>"; }; + F96D426308F272B3004A47F5 /* bn_fast_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_montgomery_reduce.c; sourceTree = "<group>"; }; + F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_digs.c; sourceTree = "<group>"; }; + F96D426508F272B3004A47F5 /* bn_fast_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_high_digs.c; sourceTree = "<group>"; }; + F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_sqr.c; sourceTree = "<group>"; }; + F96D426708F272B3004A47F5 /* bn_mp_2expt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_2expt.c; sourceTree = "<group>"; }; + F96D426808F272B3004A47F5 /* bn_mp_abs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_abs.c; sourceTree = "<group>"; }; + F96D426908F272B3004A47F5 /* bn_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add.c; sourceTree = "<group>"; }; + F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add_d.c; sourceTree = "<group>"; }; + F96D426B08F272B3004A47F5 /* bn_mp_addmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_addmod.c; sourceTree = "<group>"; }; + F96D426C08F272B3004A47F5 /* bn_mp_and.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_and.c; sourceTree = "<group>"; }; + F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clamp.c; sourceTree = "<group>"; }; + F96D426E08F272B3004A47F5 /* bn_mp_clear.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear.c; sourceTree = "<group>"; }; + F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear_multi.c; sourceTree = "<group>"; }; + F96D427008F272B3004A47F5 /* bn_mp_cmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp.c; sourceTree = "<group>"; }; + F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_d.c; sourceTree = "<group>"; }; + F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_mag.c; sourceTree = "<group>"; }; + F96D427308F272B3004A47F5 /* bn_mp_cnt_lsb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cnt_lsb.c; sourceTree = "<group>"; }; + F96D427408F272B3004A47F5 /* bn_mp_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_copy.c; sourceTree = "<group>"; }; + F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_count_bits.c; sourceTree = "<group>"; }; + F96D427608F272B3004A47F5 /* bn_mp_div.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div.c; sourceTree = "<group>"; }; + F96D427708F272B3004A47F5 /* bn_mp_div_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2.c; sourceTree = "<group>"; }; + F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2d.c; sourceTree = "<group>"; }; + F96D427908F272B3004A47F5 /* bn_mp_div_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_3.c; sourceTree = "<group>"; }; + F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_d.c; sourceTree = "<group>"; }; + F96D427B08F272B3004A47F5 /* bn_mp_dr_is_modulus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_is_modulus.c; sourceTree = "<group>"; }; + F96D427C08F272B3004A47F5 /* bn_mp_dr_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_reduce.c; sourceTree = "<group>"; }; + F96D427D08F272B3004A47F5 /* bn_mp_dr_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_setup.c; sourceTree = "<group>"; }; + F96D427E08F272B3004A47F5 /* bn_mp_exch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exch.c; sourceTree = "<group>"; }; + F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_expt_d.c; sourceTree = "<group>"; }; + F96D428008F272B3004A47F5 /* bn_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod.c; sourceTree = "<group>"; }; + F96D428108F272B3004A47F5 /* bn_mp_exptmod_fast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod_fast.c; sourceTree = "<group>"; }; + F96D428208F272B3004A47F5 /* bn_mp_exteuclid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exteuclid.c; sourceTree = "<group>"; }; + F96D428308F272B3004A47F5 /* bn_mp_fread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fread.c; sourceTree = "<group>"; }; + F96D428408F272B3004A47F5 /* bn_mp_fwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fwrite.c; sourceTree = "<group>"; }; + F96D428508F272B3004A47F5 /* bn_mp_gcd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_gcd.c; sourceTree = "<group>"; }; + F96D428608F272B3004A47F5 /* bn_mp_get_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_get_int.c; sourceTree = "<group>"; }; + F96D428708F272B3004A47F5 /* bn_mp_grow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_grow.c; sourceTree = "<group>"; }; + F96D428808F272B3004A47F5 /* bn_mp_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init.c; sourceTree = "<group>"; }; + F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_copy.c; sourceTree = "<group>"; }; + F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_multi.c; sourceTree = "<group>"; }; + F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set.c; sourceTree = "<group>"; }; + F96D428C08F272B3004A47F5 /* bn_mp_init_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set_int.c; sourceTree = "<group>"; }; + F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_size.c; sourceTree = "<group>"; }; + F96D428E08F272B3004A47F5 /* bn_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod.c; sourceTree = "<group>"; }; + F96D428F08F272B3004A47F5 /* bn_mp_invmod_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod_slow.c; sourceTree = "<group>"; }; + F96D429008F272B3004A47F5 /* bn_mp_is_square.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_is_square.c; sourceTree = "<group>"; }; + F96D429108F272B3004A47F5 /* bn_mp_jacobi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_jacobi.c; sourceTree = "<group>"; }; + F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_mul.c; sourceTree = "<group>"; }; + F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_sqr.c; sourceTree = "<group>"; }; + F96D429408F272B3004A47F5 /* bn_mp_lcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lcm.c; sourceTree = "<group>"; }; + F96D429508F272B3004A47F5 /* bn_mp_lshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lshd.c; sourceTree = "<group>"; }; + F96D429608F272B3004A47F5 /* bn_mp_mod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod.c; sourceTree = "<group>"; }; + F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_2d.c; sourceTree = "<group>"; }; + F96D429808F272B3004A47F5 /* bn_mp_mod_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_d.c; sourceTree = "<group>"; }; + F96D429908F272B3004A47F5 /* bn_mp_montgomery_calc_normalization.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_calc_normalization.c; sourceTree = "<group>"; }; + F96D429A08F272B3004A47F5 /* bn_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_reduce.c; sourceTree = "<group>"; }; + F96D429B08F272B3004A47F5 /* bn_mp_montgomery_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_setup.c; sourceTree = "<group>"; }; + F96D429C08F272B3004A47F5 /* bn_mp_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul.c; sourceTree = "<group>"; }; + F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2.c; sourceTree = "<group>"; }; + F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2d.c; sourceTree = "<group>"; }; + F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_d.c; sourceTree = "<group>"; }; + F96D42A008F272B3004A47F5 /* bn_mp_mulmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mulmod.c; sourceTree = "<group>"; }; + F96D42A108F272B3004A47F5 /* bn_mp_n_root.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_n_root.c; sourceTree = "<group>"; }; + F96D42A208F272B3004A47F5 /* bn_mp_neg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_neg.c; sourceTree = "<group>"; }; + F96D42A308F272B3004A47F5 /* bn_mp_or.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_or.c; sourceTree = "<group>"; }; + F96D42A408F272B3004A47F5 /* bn_mp_prime_fermat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_fermat.c; sourceTree = "<group>"; }; + F96D42A508F272B3004A47F5 /* bn_mp_prime_is_divisible.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_divisible.c; sourceTree = "<group>"; }; + F96D42A608F272B3004A47F5 /* bn_mp_prime_is_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_prime.c; sourceTree = "<group>"; }; + F96D42A708F272B3004A47F5 /* bn_mp_prime_miller_rabin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_miller_rabin.c; sourceTree = "<group>"; }; + F96D42A808F272B3004A47F5 /* bn_mp_prime_next_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_next_prime.c; sourceTree = "<group>"; }; + F96D42A908F272B3004A47F5 /* bn_mp_prime_rabin_miller_trials.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_rabin_miller_trials.c; sourceTree = "<group>"; }; + F96D42AA08F272B3004A47F5 /* bn_mp_prime_random_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_random_ex.c; sourceTree = "<group>"; }; + F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_size.c; sourceTree = "<group>"; }; + F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_smap.c; sourceTree = "<group>"; }; + F96D42AD08F272B3004A47F5 /* bn_mp_rand.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rand.c; sourceTree = "<group>"; }; + F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_radix.c; sourceTree = "<group>"; }; + F96D42AF08F272B3004A47F5 /* bn_mp_read_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_signed_bin.c; sourceTree = "<group>"; }; + F96D42B008F272B3004A47F5 /* bn_mp_read_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_unsigned_bin.c; sourceTree = "<group>"; }; + F96D42B108F272B3004A47F5 /* bn_mp_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce.c; sourceTree = "<group>"; }; + F96D42B208F272B3004A47F5 /* bn_mp_reduce_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k.c; sourceTree = "<group>"; }; + F96D42B308F272B3004A47F5 /* bn_mp_reduce_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_l.c; sourceTree = "<group>"; }; + F96D42B408F272B3004A47F5 /* bn_mp_reduce_2k_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup.c; sourceTree = "<group>"; }; + F96D42B508F272B3004A47F5 /* bn_mp_reduce_2k_setup_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup_l.c; sourceTree = "<group>"; }; + F96D42B608F272B3004A47F5 /* bn_mp_reduce_is_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k.c; sourceTree = "<group>"; }; + F96D42B708F272B3004A47F5 /* bn_mp_reduce_is_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k_l.c; sourceTree = "<group>"; }; + F96D42B808F272B3004A47F5 /* bn_mp_reduce_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_setup.c; sourceTree = "<group>"; }; + F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rshd.c; sourceTree = "<group>"; }; + F96D42BA08F272B3004A47F5 /* bn_mp_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set.c; sourceTree = "<group>"; }; + F96D42BB08F272B3004A47F5 /* bn_mp_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set_int.c; sourceTree = "<group>"; }; + F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_shrink.c; sourceTree = "<group>"; }; + F96D42BD08F272B3004A47F5 /* bn_mp_signed_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_signed_bin_size.c; sourceTree = "<group>"; }; + F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqr.c; sourceTree = "<group>"; }; + F96D42BF08F272B3004A47F5 /* bn_mp_sqrmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrmod.c; sourceTree = "<group>"; }; + F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrt.c; sourceTree = "<group>"; }; + F96D42C108F272B3004A47F5 /* bn_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub.c; sourceTree = "<group>"; }; + F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub_d.c; sourceTree = "<group>"; }; + F96D42C308F272B3004A47F5 /* bn_mp_submod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_submod.c; sourceTree = "<group>"; }; + F96D42C408F272B3004A47F5 /* bn_mp_to_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin.c; sourceTree = "<group>"; }; + F96D42C508F272B3004A47F5 /* bn_mp_to_signed_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin_n.c; sourceTree = "<group>"; }; + F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin.c; sourceTree = "<group>"; }; + F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin_n.c; sourceTree = "<group>"; }; + F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_mul.c; sourceTree = "<group>"; }; + F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_sqr.c; sourceTree = "<group>"; }; + F96D42CA08F272B3004A47F5 /* bn_mp_toradix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix.c; sourceTree = "<group>"; }; + F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix_n.c; sourceTree = "<group>"; }; + F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_unsigned_bin_size.c; sourceTree = "<group>"; }; + F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_xor.c; sourceTree = "<group>"; }; + F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_zero.c; sourceTree = "<group>"; }; + F96D42CF08F272B3004A47F5 /* bn_prime_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_prime_tab.c; sourceTree = "<group>"; }; + F96D42D008F272B3004A47F5 /* bn_reverse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_reverse.c; sourceTree = "<group>"; }; + F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_add.c; sourceTree = "<group>"; }; + F96D42D208F272B3004A47F5 /* bn_s_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_exptmod.c; sourceTree = "<group>"; }; + F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_digs.c; sourceTree = "<group>"; }; + F96D42D408F272B3004A47F5 /* bn_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_high_digs.c; sourceTree = "<group>"; }; + F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sqr.c; sourceTree = "<group>"; }; + F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sub.c; sourceTree = "<group>"; }; + F96D42D708F272B3004A47F5 /* bncore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bncore.c; sourceTree = "<group>"; }; + F96D42D908F272B3004A47F5 /* callgraph.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = callgraph.txt; sourceTree = "<group>"; }; + F96D42DA08F272B3004A47F5 /* changes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changes.txt; sourceTree = "<group>"; }; + F96D42F008F272B3004A47F5 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; + F96D431D08F272B4004A47F5 /* poster.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = poster.pdf; sourceTree = "<group>"; }; + F96D432608F272B4004A47F5 /* tommath.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = tommath.pdf; sourceTree = "<group>"; }; + F96D432908F272B4004A47F5 /* tommath_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_class.h; sourceTree = "<group>"; }; + F96D432A08F272B4004A47F5 /* tommath_superclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_superclass.h; sourceTree = "<group>"; }; + F96D432B08F272B4004A47F5 /* license.terms */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = license.terms; sourceTree = "<group>"; }; + F96D432E08F272B5004A47F5 /* configure.ac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure.ac; sourceTree = "<group>"; }; + F96D432F08F272B5004A47F5 /* GNUmakefile */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = GNUmakefile; sourceTree = "<group>"; }; + F96D433108F272B5004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D433208F272B5004A47F5 /* Tcl-Info.plist.in */ = {isa = PBXFileReference; explicitFileType = text.plist; fileEncoding = 4; path = "Tcl-Info.plist.in"; sourceTree = "<group>"; }; + F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMacOSXBundle.c; sourceTree = "<group>"; }; + F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMacOSXFCmd.c; sourceTree = "<group>"; }; + F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMacOSXNotify.c; sourceTree = "<group>"; }; + F96D434308F272B5004A47F5 /* README */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = README; sourceTree = "<group>"; }; + F96D434508F272B5004A47F5 /* all.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = all.tcl; sourceTree = "<group>"; }; + F96D434608F272B5004A47F5 /* append.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = append.test; sourceTree = "<group>"; }; + F96D434708F272B5004A47F5 /* appendComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = appendComp.test; sourceTree = "<group>"; }; + F96D434808F272B5004A47F5 /* assocd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = assocd.test; sourceTree = "<group>"; }; + F96D434908F272B5004A47F5 /* async.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = async.test; sourceTree = "<group>"; }; + F96D434A08F272B5004A47F5 /* autoMkindex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = autoMkindex.test; sourceTree = "<group>"; }; + F96D434B08F272B5004A47F5 /* basic.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = basic.test; sourceTree = "<group>"; }; + F96D434C08F272B5004A47F5 /* binary.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = binary.test; sourceTree = "<group>"; }; + F96D434D08F272B5004A47F5 /* case.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = case.test; sourceTree = "<group>"; }; + F96D434E08F272B5004A47F5 /* chan.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = chan.test; sourceTree = "<group>"; }; + F96D434F08F272B5004A47F5 /* clock.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clock.test; sourceTree = "<group>"; }; + F96D435008F272B5004A47F5 /* cmdAH.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdAH.test; sourceTree = "<group>"; }; + F96D435108F272B5004A47F5 /* cmdIL.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdIL.test; sourceTree = "<group>"; }; + F96D435208F272B5004A47F5 /* cmdInfo.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdInfo.test; sourceTree = "<group>"; }; + F96D435308F272B5004A47F5 /* cmdMZ.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdMZ.test; sourceTree = "<group>"; }; + F96D435408F272B5004A47F5 /* compExpr-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "compExpr-old.test"; sourceTree = "<group>"; }; + F96D435508F272B5004A47F5 /* compExpr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = compExpr.test; sourceTree = "<group>"; }; + F96D435608F272B5004A47F5 /* compile.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = compile.test; sourceTree = "<group>"; }; + F96D435708F272B5004A47F5 /* concat.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = concat.test; sourceTree = "<group>"; }; + F96D435808F272B5004A47F5 /* config.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = config.test; sourceTree = "<group>"; }; + F96D435908F272B5004A47F5 /* dcall.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dcall.test; sourceTree = "<group>"; }; + F96D435A08F272B5004A47F5 /* dict.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dict.test; sourceTree = "<group>"; }; + F96D435C08F272B5004A47F5 /* dstring.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dstring.test; sourceTree = "<group>"; }; + F96D435E08F272B5004A47F5 /* encoding.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = encoding.test; sourceTree = "<group>"; }; + F96D435F08F272B5004A47F5 /* env.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = env.test; sourceTree = "<group>"; }; + F96D436008F272B5004A47F5 /* error.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = error.test; sourceTree = "<group>"; }; + F96D436108F272B5004A47F5 /* eval.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = eval.test; sourceTree = "<group>"; }; + F96D436208F272B5004A47F5 /* event.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = event.test; sourceTree = "<group>"; }; + F96D436308F272B5004A47F5 /* exec.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = exec.test; sourceTree = "<group>"; }; + F96D436408F272B5004A47F5 /* execute.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = execute.test; sourceTree = "<group>"; }; + F96D436508F272B5004A47F5 /* expr-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "expr-old.test"; sourceTree = "<group>"; }; + F96D436608F272B5004A47F5 /* expr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = expr.test; sourceTree = "<group>"; }; + F96D436708F272B6004A47F5 /* fCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fCmd.test; sourceTree = "<group>"; }; + F96D436808F272B6004A47F5 /* fileName.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fileName.test; sourceTree = "<group>"; }; + F96D436908F272B6004A47F5 /* fileSystem.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fileSystem.test; sourceTree = "<group>"; }; + F96D436A08F272B6004A47F5 /* for-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "for-old.test"; sourceTree = "<group>"; }; + F96D436B08F272B6004A47F5 /* for.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = for.test; sourceTree = "<group>"; }; + F96D436C08F272B6004A47F5 /* foreach.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = foreach.test; sourceTree = "<group>"; }; + F96D436D08F272B6004A47F5 /* format.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = format.test; sourceTree = "<group>"; }; + F96D436E08F272B6004A47F5 /* get.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = get.test; sourceTree = "<group>"; }; + F96D436F08F272B6004A47F5 /* history.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = history.test; sourceTree = "<group>"; }; + F96D437008F272B6004A47F5 /* http.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = http.test; sourceTree = "<group>"; }; + F96D437108F272B6004A47F5 /* httpd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = httpd; sourceTree = "<group>"; }; + F96D437208F272B6004A47F5 /* httpold.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = httpold.test; sourceTree = "<group>"; }; + F96D437308F272B6004A47F5 /* if-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "if-old.test"; sourceTree = "<group>"; }; + F96D437408F272B6004A47F5 /* if.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = if.test; sourceTree = "<group>"; }; + F96D437508F272B6004A47F5 /* incr-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "incr-old.test"; sourceTree = "<group>"; }; + F96D437608F272B6004A47F5 /* incr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = incr.test; sourceTree = "<group>"; }; + F96D437708F272B6004A47F5 /* indexObj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = indexObj.test; sourceTree = "<group>"; }; + F96D437808F272B6004A47F5 /* info.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = info.test; sourceTree = "<group>"; }; + F96D437908F272B6004A47F5 /* init.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = init.test; sourceTree = "<group>"; }; + F96D437A08F272B6004A47F5 /* interp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = interp.test; sourceTree = "<group>"; }; + F96D437B08F272B6004A47F5 /* io.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = io.test; sourceTree = "<group>"; }; + F96D437C08F272B6004A47F5 /* ioCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ioCmd.test; sourceTree = "<group>"; }; + F96D437D08F272B6004A47F5 /* iogt.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = iogt.test; sourceTree = "<group>"; }; + F96D437E08F272B6004A47F5 /* ioUtil.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ioUtil.test; sourceTree = "<group>"; }; + F96D437F08F272B6004A47F5 /* join.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = join.test; sourceTree = "<group>"; }; + F96D438008F272B6004A47F5 /* lindex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lindex.test; sourceTree = "<group>"; }; + F96D438108F272B6004A47F5 /* link.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = link.test; sourceTree = "<group>"; }; + F96D438208F272B6004A47F5 /* linsert.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = linsert.test; sourceTree = "<group>"; }; + F96D438308F272B6004A47F5 /* list.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = list.test; sourceTree = "<group>"; }; + F96D438408F272B6004A47F5 /* listObj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = listObj.test; sourceTree = "<group>"; }; + F96D438508F272B6004A47F5 /* llength.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = llength.test; sourceTree = "<group>"; }; + F96D438608F272B6004A47F5 /* load.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = load.test; sourceTree = "<group>"; }; + F96D438708F272B6004A47F5 /* lrange.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lrange.test; sourceTree = "<group>"; }; + F96D438808F272B6004A47F5 /* lrepeat.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lrepeat.test; sourceTree = "<group>"; }; + F96D438908F272B6004A47F5 /* lreplace.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lreplace.test; sourceTree = "<group>"; }; + F96D438A08F272B6004A47F5 /* lsearch.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lsearch.test; sourceTree = "<group>"; }; + F96D438B08F272B6004A47F5 /* lset.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lset.test; sourceTree = "<group>"; }; + F96D438C08F272B6004A47F5 /* lsetComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lsetComp.test; sourceTree = "<group>"; }; + F96D438D08F272B6004A47F5 /* macOSXFCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = macOSXFCmd.test; sourceTree = "<group>"; }; + F96D438E08F272B6004A47F5 /* main.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = main.test; sourceTree = "<group>"; }; + F96D438F08F272B6004A47F5 /* misc.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = misc.test; sourceTree = "<group>"; }; + F96D439008F272B6004A47F5 /* msgcat.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgcat.test; sourceTree = "<group>"; }; + F96D439108F272B6004A47F5 /* namespace-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "namespace-old.test"; sourceTree = "<group>"; }; + F96D439208F272B7004A47F5 /* namespace.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = namespace.test; sourceTree = "<group>"; }; + F96D439308F272B7004A47F5 /* notify.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = notify.test; sourceTree = "<group>"; }; + F96D439408F272B7004A47F5 /* obj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = obj.test; sourceTree = "<group>"; }; + F96D439508F272B7004A47F5 /* opt.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = opt.test; sourceTree = "<group>"; }; + F96D439608F272B7004A47F5 /* package.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = package.test; sourceTree = "<group>"; }; + F96D439708F272B7004A47F5 /* parse.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parse.test; sourceTree = "<group>"; }; + F96D439808F272B7004A47F5 /* parseExpr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parseExpr.test; sourceTree = "<group>"; }; + F96D439908F272B7004A47F5 /* parseOld.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parseOld.test; sourceTree = "<group>"; }; + F96D439A08F272B7004A47F5 /* pid.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pid.test; sourceTree = "<group>"; }; + F96D439B08F272B7004A47F5 /* pkg.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkg.test; sourceTree = "<group>"; }; + F96D439C08F272B7004A47F5 /* pkgMkIndex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgMkIndex.test; sourceTree = "<group>"; }; + F96D439D08F272B7004A47F5 /* platform.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = platform.test; sourceTree = "<group>"; }; + F96D439E08F272B7004A47F5 /* proc-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "proc-old.test"; sourceTree = "<group>"; }; + F96D439F08F272B7004A47F5 /* proc.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = proc.test; sourceTree = "<group>"; }; + F96D43A008F272B7004A47F5 /* pwd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pwd.test; sourceTree = "<group>"; }; + F96D43A108F272B7004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D43A208F272B7004A47F5 /* reg.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = reg.test; sourceTree = "<group>"; }; + F96D43A308F272B7004A47F5 /* regexp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = regexp.test; sourceTree = "<group>"; }; + F96D43A408F272B7004A47F5 /* regexpComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = regexpComp.test; sourceTree = "<group>"; }; + F96D43A508F272B7004A47F5 /* registry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = registry.test; sourceTree = "<group>"; }; + F96D43A608F272B7004A47F5 /* remote.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = remote.tcl; sourceTree = "<group>"; }; + F96D43A708F272B7004A47F5 /* rename.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = rename.test; sourceTree = "<group>"; }; + F96D43A808F272B7004A47F5 /* result.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = result.test; sourceTree = "<group>"; }; + F96D43A908F272B7004A47F5 /* safe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safe.test; sourceTree = "<group>"; }; + F96D43AA08F272B7004A47F5 /* scan.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scan.test; sourceTree = "<group>"; }; + F96D43AB08F272B7004A47F5 /* security.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = security.test; sourceTree = "<group>"; }; + F96D43AC08F272B7004A47F5 /* set-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "set-old.test"; sourceTree = "<group>"; }; + F96D43AD08F272B7004A47F5 /* set.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = set.test; sourceTree = "<group>"; }; + F96D43AE08F272B7004A47F5 /* socket.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = socket.test; sourceTree = "<group>"; }; + F96D43AF08F272B7004A47F5 /* source.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = source.test; sourceTree = "<group>"; }; + F96D43B008F272B7004A47F5 /* split.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = split.test; sourceTree = "<group>"; }; + F96D43B108F272B7004A47F5 /* stack.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = stack.test; sourceTree = "<group>"; }; + F96D43B208F272B7004A47F5 /* string.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = string.test; sourceTree = "<group>"; }; + F96D43B308F272B7004A47F5 /* stringComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = stringComp.test; sourceTree = "<group>"; }; + F96D43B408F272B7004A47F5 /* stringObj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = stringObj.test; sourceTree = "<group>"; }; + F96D43B508F272B7004A47F5 /* subst.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = subst.test; sourceTree = "<group>"; }; + F96D43B608F272B7004A47F5 /* switch.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = switch.test; sourceTree = "<group>"; }; + F96D43B708F272B7004A47F5 /* tcltest.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tcltest.test; sourceTree = "<group>"; }; + F96D43B808F272B7004A47F5 /* thread.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = thread.test; sourceTree = "<group>"; }; + F96D43B908F272B7004A47F5 /* timer.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = timer.test; sourceTree = "<group>"; }; + F96D43BA08F272B7004A47F5 /* tm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tm.test; sourceTree = "<group>"; }; + F96D43BB08F272B7004A47F5 /* trace.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = trace.test; sourceTree = "<group>"; }; + F96D43BC08F272B7004A47F5 /* unixFCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixFCmd.test; sourceTree = "<group>"; }; + F96D43BD08F272B7004A47F5 /* unixFile.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixFile.test; sourceTree = "<group>"; }; + F96D43BE08F272B7004A47F5 /* unixInit.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixInit.test; sourceTree = "<group>"; }; + F96D43BF08F272B7004A47F5 /* unixNotfy.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixNotfy.test; sourceTree = "<group>"; }; + F96D43C008F272B7004A47F5 /* unknown.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unknown.test; sourceTree = "<group>"; }; + F96D43C108F272B7004A47F5 /* unload.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unload.test; sourceTree = "<group>"; }; + F96D43C208F272B7004A47F5 /* uplevel.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = uplevel.test; sourceTree = "<group>"; }; + F96D43C308F272B7004A47F5 /* upvar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = upvar.test; sourceTree = "<group>"; }; + F96D43C408F272B7004A47F5 /* utf.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = utf.test; sourceTree = "<group>"; }; + F96D43C508F272B7004A47F5 /* util.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = util.test; sourceTree = "<group>"; }; + F96D43C608F272B7004A47F5 /* var.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = var.test; sourceTree = "<group>"; }; + F96D43C708F272B7004A47F5 /* while-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "while-old.test"; sourceTree = "<group>"; }; + F96D43C808F272B7004A47F5 /* while.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = while.test; sourceTree = "<group>"; }; + F96D43C908F272B7004A47F5 /* winConsole.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winConsole.test; sourceTree = "<group>"; }; + F96D43CA08F272B7004A47F5 /* winDde.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winDde.test; sourceTree = "<group>"; }; + F96D43CB08F272B7004A47F5 /* winFCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winFCmd.test; sourceTree = "<group>"; }; + F96D43CC08F272B7004A47F5 /* winFile.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winFile.test; sourceTree = "<group>"; }; + F96D43CD08F272B7004A47F5 /* winNotify.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winNotify.test; sourceTree = "<group>"; }; + F96D43CE08F272B7004A47F5 /* winPipe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winPipe.test; sourceTree = "<group>"; }; + F96D43CF08F272B7004A47F5 /* winTime.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winTime.test; sourceTree = "<group>"; }; + F96D43D108F272B8004A47F5 /* checkLibraryDoc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = checkLibraryDoc.tcl; sourceTree = "<group>"; }; + F96D43D208F272B8004A47F5 /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F96D43D308F272B8004A47F5 /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F96D442208F272B8004A47F5 /* eolFix.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = eolFix.tcl; sourceTree = "<group>"; }; + F96D442408F272B8004A47F5 /* fix_tommath_h.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fix_tommath_h.tcl; sourceTree = "<group>"; }; + F96D442508F272B8004A47F5 /* genStubs.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = genStubs.tcl; sourceTree = "<group>"; }; + F96D442708F272B8004A47F5 /* index.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = index.tcl; sourceTree = "<group>"; }; + F96D442808F272B8004A47F5 /* installData.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = installData.tcl; sourceTree = "<group>"; }; + F96D442908F272B8004A47F5 /* loadICU.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = loadICU.tcl; sourceTree = "<group>"; }; + F96D442A08F272B8004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D442B08F272B8004A47F5 /* makeTestCases.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = makeTestCases.tcl; sourceTree = "<group>"; }; + F96D442C08F272B8004A47F5 /* man2help.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2help.tcl; sourceTree = "<group>"; }; + F96D442D08F272B8004A47F5 /* man2help2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2help2.tcl; sourceTree = "<group>"; }; + F96D442E08F272B8004A47F5 /* man2html.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2html.tcl; sourceTree = "<group>"; }; + F96D442F08F272B8004A47F5 /* man2html1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2html1.tcl; sourceTree = "<group>"; }; + F96D443008F272B8004A47F5 /* man2html2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2html2.tcl; sourceTree = "<group>"; }; + F96D443108F272B8004A47F5 /* man2tcl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = man2tcl.c; sourceTree = "<group>"; }; + F96D443208F272B8004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D443308F272B8004A47F5 /* regexpTestLib.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = regexpTestLib.tcl; sourceTree = "<group>"; }; + F96D443408F272B8004A47F5 /* str2c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = str2c; sourceTree = "<group>"; }; + F96D443508F272B8004A47F5 /* tcl.hpj.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.hpj.in; sourceTree = "<group>"; }; + F96D443608F272B8004A47F5 /* tcl.wse.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.wse.in; sourceTree = "<group>"; }; + F96D443708F272B9004A47F5 /* tclmin.wse */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tclmin.wse; sourceTree = "<group>"; }; + F96D443908F272B9004A47F5 /* tcltk-man2html.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "tcltk-man2html.tcl"; sourceTree = "<group>"; }; + F96D443A08F272B9004A47F5 /* tclZIC.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclZIC.tcl; sourceTree = "<group>"; }; + F96D443B08F272B9004A47F5 /* uniClass.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = uniClass.tcl; sourceTree = "<group>"; }; + F96D443C08F272B9004A47F5 /* uniParse.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = uniParse.tcl; sourceTree = "<group>"; }; + F96D444008F272B9004A47F5 /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F96D444108F272B9004A47F5 /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F96D444208F272B9004A47F5 /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F96D444408F272B9004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D444508F272B9004A47F5 /* pkga.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkga.c; sourceTree = "<group>"; }; + F96D444608F272B9004A47F5 /* pkgb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgb.c; sourceTree = "<group>"; }; + F96D444708F272B9004A47F5 /* pkgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgc.c; sourceTree = "<group>"; }; + F96D444808F272B9004A47F5 /* pkgd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgd.c; sourceTree = "<group>"; }; + F96D444908F272B9004A47F5 /* pkge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkge.c; sourceTree = "<group>"; }; + F96D444B08F272B9004A47F5 /* pkgua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgua.c; sourceTree = "<group>"; }; + F96D444C08F272B9004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D444D08F272B9004A47F5 /* install-sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "install-sh"; sourceTree = "<group>"; }; + F96D444E08F272B9004A47F5 /* installManPage */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = installManPage; sourceTree = "<group>"; }; + F96D444F08F272B9004A47F5 /* ldAix */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ldAix; sourceTree = "<group>"; }; + F96D445008F272B9004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D445208F272B9004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D445308F272B9004A47F5 /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F96D445408F272B9004A47F5 /* tcl.spec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.spec; sourceTree = "<group>"; }; + F96D445508F272B9004A47F5 /* tclAppInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAppInit.c; sourceTree = "<group>"; }; + F96D445608F272B9004A47F5 /* tclConfig.h.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = tclConfig.h.in; sourceTree = "<group>"; }; + F96D445708F272B9004A47F5 /* tclConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tclConfig.sh.in; sourceTree = "<group>"; }; + F96D445808F272B9004A47F5 /* tclLoadAix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadAix.c; sourceTree = "<group>"; }; + F96D445908F272B9004A47F5 /* tclLoadDl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadDl.c; sourceTree = "<group>"; }; + F96D445B08F272B9004A47F5 /* tclLoadDyld.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadDyld.c; sourceTree = "<group>"; }; + F96D445C08F272B9004A47F5 /* tclLoadNext.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadNext.c; sourceTree = "<group>"; }; + F96D445D08F272B9004A47F5 /* tclLoadOSF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadOSF.c; sourceTree = "<group>"; }; + F96D445E08F272B9004A47F5 /* tclLoadShl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadShl.c; sourceTree = "<group>"; }; + F96D445F08F272B9004A47F5 /* tclUnixChan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixChan.c; sourceTree = "<group>"; }; + F96D446008F272B9004A47F5 /* tclUnixEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixEvent.c; sourceTree = "<group>"; }; + F96D446108F272B9004A47F5 /* tclUnixFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixFCmd.c; sourceTree = "<group>"; }; + F96D446208F272B9004A47F5 /* tclUnixFile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixFile.c; sourceTree = "<group>"; }; + F96D446308F272B9004A47F5 /* tclUnixInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixInit.c; sourceTree = "<group>"; }; + F96D446408F272B9004A47F5 /* tclUnixNotfy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixNotfy.c; sourceTree = "<group>"; }; + F96D446508F272B9004A47F5 /* tclUnixPipe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixPipe.c; sourceTree = "<group>"; }; + F96D446608F272B9004A47F5 /* tclUnixPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclUnixPort.h; sourceTree = "<group>"; }; + F96D446708F272B9004A47F5 /* tclUnixSock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixSock.c; sourceTree = "<group>"; }; + F96D446808F272B9004A47F5 /* tclUnixTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixTest.c; sourceTree = "<group>"; }; + F96D446908F272B9004A47F5 /* tclUnixThrd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixThrd.c; sourceTree = "<group>"; }; + F96D446A08F272B9004A47F5 /* tclUnixThrd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclUnixThrd.h; sourceTree = "<group>"; }; + F96D446B08F272B9004A47F5 /* tclUnixTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixTime.c; sourceTree = "<group>"; }; + F96D446C08F272B9004A47F5 /* tclXtNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclXtNotify.c; sourceTree = "<group>"; }; + F96D446D08F272B9004A47F5 /* tclXtTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclXtTest.c; sourceTree = "<group>"; }; + F96D447008F272BA004A47F5 /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F96D447108F272BA004A47F5 /* buildall.vc.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buildall.vc.bat; sourceTree = "<group>"; }; + F96D447208F272BA004A47F5 /* cat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cat.c; sourceTree = "<group>"; }; + F96D447308F272BA004A47F5 /* coffbase.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coffbase.txt; sourceTree = "<group>"; }; + F96D447408F272BA004A47F5 /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F96D447508F272BA004A47F5 /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F96D447608F272BA004A47F5 /* makefile.bc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.bc; sourceTree = "<group>"; }; + F96D447708F272BA004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D447808F272BA004A47F5 /* makefile.vc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.vc; sourceTree = "<group>"; }; + F96D447908F272BA004A47F5 /* nmakehlp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nmakehlp.c; sourceTree = "<group>"; }; + F96D447A08F272BA004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D447C08F272BA004A47F5 /* rules.vc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rules.vc; sourceTree = "<group>"; }; + F96D447D08F272BA004A47F5 /* stub16.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stub16.c; sourceTree = "<group>"; }; + F96D447E08F272BA004A47F5 /* tcl.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.dsp; sourceTree = "<group>"; }; + F96D447F08F272BA004A47F5 /* tcl.dsw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.dsw; sourceTree = "<group>"; }; + F96D448008F272BA004A47F5 /* tcl.hpj.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.hpj.in; sourceTree = "<group>"; }; + F96D448108F272BA004A47F5 /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F96D448208F272BA004A47F5 /* tcl.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.rc; sourceTree = "<group>"; }; + F96D448308F272BA004A47F5 /* tclAppInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAppInit.c; sourceTree = "<group>"; }; + F96D448408F272BA004A47F5 /* tclConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tclConfig.sh.in; sourceTree = "<group>"; }; + F96D448608F272BA004A47F5 /* tclsh.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tclsh.rc; sourceTree = "<group>"; }; + F96D448708F272BA004A47F5 /* tclWin32Dll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWin32Dll.c; sourceTree = "<group>"; }; + F96D448808F272BA004A47F5 /* tclWinChan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinChan.c; sourceTree = "<group>"; }; + F96D448908F272BA004A47F5 /* tclWinConsole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinConsole.c; sourceTree = "<group>"; }; + F96D448A08F272BA004A47F5 /* tclWinDde.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinDde.c; sourceTree = "<group>"; }; + F96D448B08F272BA004A47F5 /* tclWinError.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinError.c; sourceTree = "<group>"; }; + F96D448C08F272BA004A47F5 /* tclWinFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinFCmd.c; sourceTree = "<group>"; }; + F96D448D08F272BA004A47F5 /* tclWinFile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinFile.c; sourceTree = "<group>"; }; + F96D448E08F272BA004A47F5 /* tclWinInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinInit.c; sourceTree = "<group>"; }; + F96D448F08F272BA004A47F5 /* tclWinInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclWinInt.h; sourceTree = "<group>"; }; + F96D449008F272BA004A47F5 /* tclWinLoad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinLoad.c; sourceTree = "<group>"; }; + F96D449108F272BA004A47F5 /* tclWinNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinNotify.c; sourceTree = "<group>"; }; + F96D449208F272BA004A47F5 /* tclWinPipe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinPipe.c; sourceTree = "<group>"; }; + F96D449308F272BA004A47F5 /* tclWinPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclWinPort.h; sourceTree = "<group>"; }; + F96D449408F272BA004A47F5 /* tclWinReg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinReg.c; sourceTree = "<group>"; }; + F96D449508F272BA004A47F5 /* tclWinSerial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinSerial.c; sourceTree = "<group>"; }; + F96D449608F272BA004A47F5 /* tclWinSock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinSock.c; sourceTree = "<group>"; }; + F96D449708F272BA004A47F5 /* tclWinTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinTest.c; sourceTree = "<group>"; }; + F96D449808F272BA004A47F5 /* tclWinThrd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinThrd.c; sourceTree = "<group>"; }; + F96D449908F272BA004A47F5 /* tclWinThrd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclWinThrd.h; sourceTree = "<group>"; }; + F96D449A08F272BA004A47F5 /* tclWinTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinTime.c; sourceTree = "<group>"; }; + F976F6A70C325FB6005066D9 /* tkMacOSXPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXPrivate.h; sourceTree = "<group>"; }; + F97AE7F10B65C1E900310EA2 /* Wish-Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Wish-Common.xcconfig"; sourceTree = "<group>"; }; + F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Wish-Release.xcconfig"; sourceTree = "<group>"; }; + F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Wish-Debug.xcconfig"; sourceTree = "<group>"; }; + F9903CAF094FAADA004613E9 /* tclTomMath.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclTomMath.decls; sourceTree = "<group>"; }; + F9903CB0094FAADA004613E9 /* tclTomMathDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclTomMathDecls.h; sourceTree = "<group>"; }; + F9A3082D08F2D4AB00BAE1AB /* Tk.framework */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Tk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F9A3084B08F2D4CE00BAE1AB /* Wish.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Wish.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F9A3084E08F2D4F400BAE1AB /* Tcl.framework */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Tcl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F9A493240CEBF38300B78AE2 /* chanio.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = chanio.test; sourceTree = "<group>"; }; + F9C9CBFF0E84059800E00935 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; + F9D1360A0CDC252C00DBE0B5 /* mclist.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = mclist.tcl; sourceTree = "<group>"; }; + F9ECB1120B26521500A28025 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F9ECB1130B26521500A28025 /* platform.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = platform.tcl; sourceTree = "<group>"; }; + F9ECB1140B26521500A28025 /* shell.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = shell.tcl; sourceTree = "<group>"; }; + F9ECB1CA0B2652D300A28025 /* apply.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = apply.test; sourceTree = "<group>"; }; + F9ECB1CB0B26534C00A28025 /* mathop.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = mathop.test; sourceTree = "<group>"; }; + F9ECB1E10B26543C00A28025 /* platform_shell.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = platform_shell.n; sourceTree = "<group>"; }; + F9ECB1E20B26543C00A28025 /* platform.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = platform.n; sourceTree = "<group>"; }; + F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = tclDTrace.d; sourceTree = "<group>"; }; + F9F4EFDC0CC7B3CA00378A27 /* ttkpane.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; languageSpecificationIdentifier = shell; path = ttkpane.tcl; sourceTree = "<group>"; }; + F9F4EFDD0CC7B3CB00378A27 /* ttkmenu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; languageSpecificationIdentifier = shell; path = ttkmenu.tcl; sourceTree = "<group>"; }; + F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixCompat.c; sourceTree = "<group>"; }; + F9FD31F40CC1AD070073837D /* tktest-X11 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "tktest-X11"; sourceTree = BUILT_PRODUCTS_DIR; }; + F9FD32140CC1AF170073837D /* libX11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libX11.dylib; path = /usr/X11R6/lib/libX11.dylib; sourceTree = "<absolute>"; }; + F9FD32150CC1AF170073837D /* libXext.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libXext.dylib; path = /usr/X11R6/lib/libXext.dylib; sourceTree = "<absolute>"; }; + F9FD32160CC1AF170073837D /* libXss.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libXss.dylib; path = /usr/X11R6/lib/libXss.dylib; sourceTree = "<absolute>"; }; + F9FD34990CC1BB0D0073837D /* libfreetype.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfreetype.dylib; path = /usr/X11R6/lib/libfreetype.dylib; sourceTree = "<absolute>"; }; + F9FD349A0CC1BB0D0073837D /* libXft.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libXft.dylib; path = /usr/X11R6/lib/libXft.dylib; sourceTree = "<absolute>"; }; + F9FD34C30CC1BBD70073837D /* libfontconfig.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfontconfig.dylib; path = /usr/X11R6/lib/libfontconfig.dylib; sourceTree = "<absolute>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76FAD0486AB0100D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F966C07508F2820D005CB29B /* CoreFoundation.framework in Frameworks */, + F966C07708F2821B005CB29B /* Carbon.framework in Frameworks */, + F966C07908F28233005CB29B /* IOKit.framework in Frameworks */, + F94523A20E6FC2AC00C1D987 /* Cocoa.framework in Frameworks */, + F9C9CC000E84059800E00935 /* ApplicationServices.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F9FD31E30CC1AD070073837D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F9FD31E40CC1AD070073837D /* CoreFoundation.framework in Frameworks */, + F9FD32170CC1AF170073837D /* libX11.dylib in Frameworks */, + F9FD32180CC1AF170073837D /* libXext.dylib in Frameworks */, + F9FD32190CC1AF170073837D /* libXss.dylib in Frameworks */, + F9FD349C0CC1BB0D0073837D /* libXft.dylib in Frameworks */, + F9FD349B0CC1BB0D0073837D /* libfreetype.dylib in Frameworks */, + F9FD34C40CC1BBD70073837D /* libfontconfig.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* Wish */ = { + isa = PBXGroup; + children = ( + F96D3DF708F271BE004A47F5 /* Tk Sources */, + F96D3DF608F27169004A47F5 /* Tcl Sources */, + F966C06F08F281DC005CB29B /* Frameworks */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + comments = "Copyright (c) 2004-2009 Daniel A. Steffen <das@users.sourceforge.net>\nCopyright 2008-2009, Apple Inc.\n\nSee the file \"license.terms\" for information on usage and redistribution of\nthis file, and for a DISCLAIMER OF ALL WARRANTIES.\n"; + name = Wish; + path = .; + sourceTree = SOURCE_ROOT; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + F9A3084B08F2D4CE00BAE1AB /* Wish.app */, + F9A3082D08F2D4AB00BAE1AB /* Tk.framework */, + F9A3084E08F2D4F400BAE1AB /* Tcl.framework */, + 8DD76FB20486AB0100D96B5E /* tktest */, + F9FD31F40CC1AD070073837D /* tktest-X11 */, + ); + includeInIndex = 0; + name = Products; + sourceTree = "<group>"; + }; + F966BA0308F27A37005CB29B /* bitmaps */ = { + isa = PBXGroup; + children = ( + F966BA0408F27A37005CB29B /* error.xbm */, + F966BA0508F27A37005CB29B /* gray12.xbm */, + F966BA0608F27A37005CB29B /* gray25.xbm */, + F966BA0708F27A37005CB29B /* gray50.xbm */, + F966BA0808F27A37005CB29B /* gray75.xbm */, + F966BA0908F27A37005CB29B /* hourglass.xbm */, + F966BA0A08F27A37005CB29B /* info.xbm */, + F966BA0B08F27A37005CB29B /* questhead.xbm */, + F966BA0C08F27A37005CB29B /* question.xbm */, + F966BA0D08F27A37005CB29B /* warning.xbm */, + ); + path = bitmaps; + sourceTree = "<group>"; + }; + F966BA1008F27A37005CB29B /* doc */ = { + isa = PBXGroup; + children = ( + F966BA1108F27A37005CB29B /* 3DBorder.3 */, + F966BA1208F27A37005CB29B /* AddOption.3 */, + F966BA1308F27A37005CB29B /* bell.n */, + F966BA1408F27A37005CB29B /* bind.n */, + F966BA1508F27A37005CB29B /* BindTable.3 */, + F966BA1608F27A37005CB29B /* bindtags.n */, + F966BA1708F27A37005CB29B /* bitmap.n */, + F966BA1808F27A37005CB29B /* button.n */, + F966BA1908F27A37005CB29B /* canvas.n */, + F966BA1A08F27A37005CB29B /* CanvPsY.3 */, + F966BA1B08F27A37005CB29B /* CanvTkwin.3 */, + F966BA1C08F27A37005CB29B /* CanvTxtInfo.3 */, + F966BA1D08F27A37005CB29B /* checkbutton.n */, + F966BA1E08F27A37005CB29B /* chooseColor.n */, + F966BA1F08F27A37005CB29B /* chooseDirectory.n */, + F966BA2008F27A37005CB29B /* Clipboard.3 */, + F966BA2108F27A37005CB29B /* clipboard.n */, + F966BA2208F27A37005CB29B /* ClrSelect.3 */, + F966BA2308F27A37005CB29B /* colors.n */, + F966BA2408F27A37005CB29B /* ConfigWidg.3 */, + F966BA2508F27A37005CB29B /* ConfigWind.3 */, + F966BA2608F27A37005CB29B /* console.n */, + F966BA2708F27A37005CB29B /* CoordToWin.3 */, + F966BA2808F27A37005CB29B /* CrtCmHdlr.3 */, + F966BA2908F27A37005CB29B /* CrtErrHdlr.3 */, + F966BA2A08F27A37005CB29B /* CrtGenHdlr.3 */, + F966BA2B08F27A37005CB29B /* CrtImgType.3 */, + F966BA2C08F27A37005CB29B /* CrtItemType.3 */, + F966BA2D08F27A37005CB29B /* CrtPhImgFmt.3 */, + F966BA2E08F27A37005CB29B /* CrtSelHdlr.3 */, + F966BA2F08F27A37005CB29B /* CrtWindow.3 */, + F966BA3008F27A37005CB29B /* cursors.n */, + F966BA3108F27A37005CB29B /* DeleteImg.3 */, + F966BA3208F27A37005CB29B /* destroy.n */, + F966BA3308F27A37005CB29B /* dialog.n */, + F966BA3408F27A37005CB29B /* DrawFocHlt.3 */, + F966BA3508F27A37005CB29B /* entry.n */, + F966BA3608F27A37005CB29B /* event.n */, + F966BA3708F27A37005CB29B /* EventHndlr.3 */, + F966BA3808F27A37005CB29B /* FindPhoto.3 */, + F966BA3908F27A37005CB29B /* focus.n */, + F966BA3A08F27A37005CB29B /* focusNext.n */, + F966BA3B08F27A37005CB29B /* font.n */, + F966BA3C08F27A37005CB29B /* FontId.3 */, + F966BA3D08F27A37005CB29B /* frame.n */, + F966BA3E08F27A37005CB29B /* FreeXId.3 */, + F966BA3F08F27A37005CB29B /* GeomReq.3 */, + F966BA4008F27A37005CB29B /* GetAnchor.3 */, + F966BA4108F27A37005CB29B /* GetBitmap.3 */, + F966BA4208F27A37005CB29B /* GetCapStyl.3 */, + F966BA4308F27A37005CB29B /* GetClrmap.3 */, + F966BA4408F27A37005CB29B /* GetColor.3 */, + F966BA4508F27A37005CB29B /* GetCursor.3 */, + F966BA4608F27A37005CB29B /* GetDash.3 */, + F966BA4708F27A37005CB29B /* GetFont.3 */, + F966BA4808F27A37005CB29B /* GetGC.3 */, + F966BA4908F27A37005CB29B /* GetHINSTANCE.3 */, + F966BA4A08F27A37005CB29B /* GetHWND.3 */, + F966BA4B08F27A37005CB29B /* GetImage.3 */, + F966BA4C08F27A37005CB29B /* GetJoinStl.3 */, + F966BA4D08F27A37005CB29B /* GetJustify.3 */, + F966BA4E08F27A37005CB29B /* getOpenFile.n */, + F966BA4F08F27A37005CB29B /* GetOption.3 */, + F966BA5008F27A38005CB29B /* GetPixels.3 */, + F966BA5108F27A38005CB29B /* GetPixmap.3 */, + F966BA5208F27A38005CB29B /* GetRelief.3 */, + F966BA5308F27A38005CB29B /* GetRootCrd.3 */, + F966BA5408F27A38005CB29B /* GetScroll.3 */, + F966BA5508F27A38005CB29B /* GetSelect.3 */, + F966BA5608F27A38005CB29B /* GetUid.3 */, + F966BA5708F27A38005CB29B /* GetVisual.3 */, + F966BA5808F27A38005CB29B /* GetVRoot.3 */, + F966BA5908F27A38005CB29B /* Grab.3 */, + F966BA5A08F27A38005CB29B /* grab.n */, + F966BA5B08F27A38005CB29B /* grid.n */, + F966BA5C08F27A38005CB29B /* HandleEvent.3 */, + F966BA5D08F27A38005CB29B /* HWNDToWindow.3 */, + F966BA5E08F27A38005CB29B /* IdToWindow.3 */, + F966BA5F08F27A38005CB29B /* image.n */, + F966BA6008F27A38005CB29B /* ImgChanged.3 */, + F966BA6108F27A38005CB29B /* Inactive.3 */, + F966BA6208F27A38005CB29B /* InternAtom.3 */, + F966BA6308F27A38005CB29B /* keysyms.n */, + F966BA6408F27A38005CB29B /* label.n */, + F966BA6508F27A38005CB29B /* labelframe.n */, + F966BA6608F27A38005CB29B /* listbox.n */, + F966BA6708F27A38005CB29B /* loadTk.n */, + F966BA6808F27A38005CB29B /* lower.n */, + F966BA6908F27A38005CB29B /* MainLoop.3 */, + F966BA6A08F27A38005CB29B /* MaintGeom.3 */, + F966BA6B08F27A38005CB29B /* MainWin.3 */, + F966BA6D08F27A38005CB29B /* ManageGeom.3 */, + F966BA6E08F27A38005CB29B /* MapWindow.3 */, + F966BA6F08F27A38005CB29B /* MeasureChar.3 */, + F966BA7008F27A38005CB29B /* menu.n */, + F966BA7108F27A38005CB29B /* menubar.n */, + F966BA7208F27A38005CB29B /* menubutton.n */, + F966BA7308F27A38005CB29B /* message.n */, + F966BA7408F27A38005CB29B /* messageBox.n */, + F966BA7508F27A38005CB29B /* MoveToplev.3 */, + F966BA7608F27A38005CB29B /* Name.3 */, + F966BA7708F27A38005CB29B /* NameOfImg.3 */, + F966BA7808F27A38005CB29B /* option.n */, + F966BA7908F27A38005CB29B /* optionMenu.n */, + F966BA7A08F27A38005CB29B /* options.n */, + F966BA7B08F27A38005CB29B /* OwnSelect.3 */, + F966BA7C08F27A38005CB29B /* pack-old.n */, + F966BA7D08F27A38005CB29B /* pack.n */, + F966BA7E08F27A38005CB29B /* palette.n */, + F966BA7F08F27A38005CB29B /* panedwindow.n */, + F966BA8008F27A38005CB29B /* ParseArgv.3 */, + F966BA8108F27A38005CB29B /* photo.n */, + F966BA8208F27A38005CB29B /* place.n */, + F966BA8308F27A38005CB29B /* popup.n */, + F966BA8408F27A38005CB29B /* QWinEvent.3 */, + F966BA8508F27A38005CB29B /* radiobutton.n */, + F966BA8608F27A38005CB29B /* raise.n */, + F966BA8708F27A38005CB29B /* Restack.3 */, + F966BA8808F27A38005CB29B /* RestrictEv.3 */, + F966BA8908F27A38005CB29B /* scale.n */, + F966BA8A08F27A38005CB29B /* scrollbar.n */, + F966BA8B08F27A38005CB29B /* selection.n */, + F966BA8C08F27A38005CB29B /* send.n */, + F966BA8D08F27A38005CB29B /* SetAppName.3 */, + F966BA8E08F27A38005CB29B /* SetCaret.3 */, + F966BA8F08F27A38005CB29B /* SetClass.3 */, + F966BA9008F27A38005CB29B /* SetClassProcs.3 */, + F966BA9108F27A38005CB29B /* SetGrid.3 */, + F966BA9208F27A38005CB29B /* SetOptions.3 */, + F966BA9308F27A38005CB29B /* SetVisual.3 */, + F966BA9408F27A38005CB29B /* spinbox.n */, + F966BA9508F27A38005CB29B /* StrictMotif.3 */, + F966BA9608F27A38005CB29B /* text.n */, + F966BA9708F27A38005CB29B /* TextLayout.3 */, + F966BA9808F27A38005CB29B /* tk.n */, + F966BA9908F27A38005CB29B /* tk4.0.ps */, + F966BA9A08F27A38005CB29B /* Tk_Init.3 */, + F966BA9B08F27A38005CB29B /* Tk_Main.3 */, + F966BA9C08F27A38005CB29B /* tkerror.n */, + F966BA9D08F27A38005CB29B /* TkInitStubs.3 */, + F966BA9E08F27A38005CB29B /* tkvars.n */, + F966BA9F08F27A38005CB29B /* tkwait.n */, + F966BAA008F27A38005CB29B /* toplevel.n */, + F968886B0AF788F6000797B5 /* ttk_button.n */, + F968886C0AF788F6000797B5 /* ttk_checkbutton.n */, + F968886D0AF788F6000797B5 /* ttk_combobox.n */, + F968886F0AF788F6000797B5 /* ttk_entry.n */, + F96888700AF788F6000797B5 /* ttk_frame.n */, + F96888710AF788F6000797B5 /* ttk_Geometry.3 */, + F96888720AF788F6000797B5 /* ttk_image.n */, + F96888730AF788F6000797B5 /* ttk_intro.n */, + F96888740AF788F6000797B5 /* ttk_label.n */, + F96888750AF788F6000797B5 /* ttk_labelframe.n */, + F96888760AF788F6000797B5 /* ttk_menubutton.n */, + F96888770AF788F6000797B5 /* ttk_notebook.n */, + F96888780AF788F6000797B5 /* ttk_panedwindow.n */, + F96888790AF788F6000797B5 /* ttk_progressbar.n */, + F968887A0AF788F6000797B5 /* ttk_radiobutton.n */, + F968887B0AF788F6000797B5 /* ttk_scrollbar.n */, + F968887C0AF788F6000797B5 /* ttk_separator.n */, + F968887D0AF788F6000797B5 /* ttk_sizegrip.n */, + F968887E0AF788F6000797B5 /* ttk_style.n */, + F968887F0AF788F6000797B5 /* ttk_Theme.3 */, + F96888800AF788F6000797B5 /* ttk_treeview.n */, + F96888810AF788F6000797B5 /* ttk_widget.n */, + F966BAA108F27A38005CB29B /* WindowId.3 */, + F966BAA208F27A38005CB29B /* winfo.n */, + F966BAA308F27A38005CB29B /* wish.1 */, + F966BAA408F27A38005CB29B /* wm.n */, + ); + path = doc; + sourceTree = "<group>"; + }; + F966BAA508F27A38005CB29B /* generic */ = { + isa = PBXGroup; + children = ( + F966BAA608F27A38005CB29B /* default.h */, + F966BAA708F27A38005CB29B /* ks_names.h */, + F966BAA808F27A38005CB29B /* prolog.ps */, + F966BAA908F27A39005CB29B /* README */, + F966BAAA08F27A39005CB29B /* tk.decls */, + F966BAAB08F27A39005CB29B /* tk.h */, + F966BAAC08F27A39005CB29B /* tk3d.c */, + F966BAAD08F27A39005CB29B /* tk3d.h */, + F966BAAE08F27A39005CB29B /* tkArgv.c */, + F966BAAF08F27A39005CB29B /* tkAtom.c */, + F966BAB008F27A39005CB29B /* tkBind.c */, + F966BAB108F27A39005CB29B /* tkBitmap.c */, + F966BAB208F27A39005CB29B /* tkButton.c */, + F966BAB308F27A39005CB29B /* tkButton.h */, + F966BAB408F27A39005CB29B /* tkCanvArc.c */, + F966BAB508F27A39005CB29B /* tkCanvas.c */, + F966BAB608F27A39005CB29B /* tkCanvas.h */, + F966BAB708F27A39005CB29B /* tkCanvBmap.c */, + F966BAB808F27A39005CB29B /* tkCanvImg.c */, + F966BAB908F27A39005CB29B /* tkCanvLine.c */, + F966BABA08F27A39005CB29B /* tkCanvPoly.c */, + F966BABB08F27A39005CB29B /* tkCanvPs.c */, + F966BABD08F27A39005CB29B /* tkCanvText.c */, + F966BABE08F27A39005CB29B /* tkCanvUtil.c */, + F966BABF08F27A39005CB29B /* tkCanvWind.c */, + F966BAC008F27A39005CB29B /* tkClipboard.c */, + F966BAC108F27A39005CB29B /* tkCmds.c */, + F966BAC208F27A39005CB29B /* tkColor.c */, + F966BAC308F27A39005CB29B /* tkColor.h */, + F966BAC408F27A39005CB29B /* tkConfig.c */, + F966BAC508F27A39005CB29B /* tkConsole.c */, + F966BAC608F27A39005CB29B /* tkCursor.c */, + F966BAC708F27A39005CB29B /* tkDecls.h */, + F966BAC808F27A39005CB29B /* tkEntry.c */, + F966BAC908F27A39005CB29B /* tkEntry.h */, + F966BACA08F27A39005CB29B /* tkError.c */, + F966BACB08F27A39005CB29B /* tkEvent.c */, + F966BACC08F27A39005CB29B /* tkFileFilter.c */, + F966BACD08F27A39005CB29B /* tkFileFilter.h */, + F966BACE08F27A39005CB29B /* tkFocus.c */, + F966BACF08F27A39005CB29B /* tkFont.c */, + F966BAD008F27A39005CB29B /* tkFont.h */, + F966BAD108F27A39005CB29B /* tkFrame.c */, + F966BAD208F27A39005CB29B /* tkGC.c */, + F966BAD308F27A39005CB29B /* tkGeometry.c */, + F966BAD408F27A39005CB29B /* tkGet.c */, + F966BAD508F27A39005CB29B /* tkGrab.c */, + F966BAD608F27A39005CB29B /* tkGrid.c */, + F966BAD708F27A39005CB29B /* tkImage.c */, + F966BAD808F27A39005CB29B /* tkImgBmap.c */, + F966BAD908F27A39005CB29B /* tkImgGIF.c */, + F966BADA08F27A39005CB29B /* tkImgPhoto.c */, + F966BADB08F27A39005CB29B /* tkImgPPM.c */, + F966BADC08F27A39005CB29B /* tkImgUtil.c */, + F966BADE08F27A39005CB29B /* tkInt.decls */, + F966BADF08F27A39005CB29B /* tkInt.h */, + F966BAE108F27A39005CB29B /* tkIntDecls.h */, + F966BAE208F27A39005CB29B /* tkIntPlatDecls.h */, + F966BAE308F27A39005CB29B /* tkIntXlibDecls.h */, + F966BAE408F27A39005CB29B /* tkListbox.c */, + F966BAE508F27A39005CB29B /* tkMacWinMenu.c */, + F966BAE608F27A39005CB29B /* tkMain.c */, + F966BAE708F27A39005CB29B /* tkMenu.c */, + F966BAE808F27A39005CB29B /* tkMenu.h */, + F966BAE908F27A39005CB29B /* tkMenubutton.c */, + F966BAEA08F27A39005CB29B /* tkMenubutton.h */, + F966BAEB08F27A39005CB29B /* tkMenuDraw.c */, + F966BAEC08F27A39005CB29B /* tkMessage.c */, + F966BAED08F27A39005CB29B /* tkObj.c */, + F966BAEE08F27A39005CB29B /* tkOldConfig.c */, + F966BAEF08F27A39005CB29B /* tkOption.c */, + F966BAF008F27A39005CB29B /* tkPack.c */, + F966BAF108F27A39005CB29B /* tkPanedWindow.c */, + F966BAF208F27A39005CB29B /* tkPlace.c */, + F966BAF308F27A39005CB29B /* tkPlatDecls.h */, + F966BAF408F27A39005CB29B /* tkPointer.c */, + F966BAF508F27A39005CB29B /* tkPort.h */, + F966BAF608F27A39005CB29B /* tkRectOval.c */, + F966BAF708F27A39005CB29B /* tkScale.c */, + F966BAF808F27A39005CB29B /* tkScale.h */, + F966BAF908F27A39005CB29B /* tkScrollbar.c */, + F966BAFA08F27A39005CB29B /* tkScrollbar.h */, + F966BAFB08F27A39005CB29B /* tkSelect.c */, + F966BAFC08F27A39005CB29B /* tkSelect.h */, + F966BAFD08F27A39005CB29B /* tkSquare.c */, + F966BAFE08F27A39005CB29B /* tkOldTest.c */, + F966BAFF08F27A39005CB29B /* tkStubInit.c */, + F966BB0008F27A39005CB29B /* tkStubLib.c */, + F966BB0108F27A39005CB29B /* tkStyle.c */, + F966BB0208F27A39005CB29B /* tkTest.c */, + F966BB0308F27A39005CB29B /* tkText.c */, + F966BB0408F27A39005CB29B /* tkText.h */, + F966BB0508F27A39005CB29B /* tkTextBTree.c */, + F966BB0608F27A39005CB29B /* tkTextDisp.c */, + F966BB0808F27A39005CB29B /* tkTextImage.c */, + F966BB0908F27A39005CB29B /* tkTextIndex.c */, + F966BB0A08F27A39005CB29B /* tkTextMark.c */, + F966BB0B08F27A39005CB29B /* tkTextTag.c */, + F966BB0C08F27A39005CB29B /* tkTextWind.c */, + F966BB0D08F27A39005CB29B /* tkTrig.c */, + F966BB0E08F27A39005CB29B /* tkUndo.c */, + F966BB0F08F27A39005CB29B /* tkUndo.h */, + F966BB1008F27A39005CB29B /* tkUtil.c */, + F966BB1108F27A39005CB29B /* tkVisual.c */, + F966BB1208F27A39005CB29B /* tkWindow.c */, + F96887DF0AF786D5000797B5 /* ttk */, + ); + path = generic; + sourceTree = "<group>"; + }; + F966BB1308F27A39005CB29B /* library */ = { + isa = PBXGroup; + children = ( + F966BB1408F27A39005CB29B /* bgerror.tcl */, + F966BB1508F27A39005CB29B /* button.tcl */, + F966BB1608F27A39005CB29B /* choosedir.tcl */, + F966BB1708F27A39005CB29B /* clrpick.tcl */, + F966BB1808F27A39005CB29B /* comdlg.tcl */, + F966BB1908F27A39005CB29B /* console.tcl */, + F966BB1A08F27A39005CB29B /* demos */, + F966BB6208F27A3A005CB29B /* dialog.tcl */, + F966BB6308F27A3A005CB29B /* entry.tcl */, + F966BB6408F27A3A005CB29B /* focus.tcl */, + F966BB7308F27A3A005CB29B /* listbox.tcl */, + F966BB7408F27A3A005CB29B /* menu.tcl */, + F966BB7508F27A3A005CB29B /* mkpsenc.tcl */, + F966BB7608F27A3A005CB29B /* msgbox.tcl */, + F966BB8608F27A3A005CB29B /* obsolete.tcl */, + F966BB8708F27A3A005CB29B /* optMenu.tcl */, + F966BB8808F27A3A005CB29B /* palette.tcl */, + F966BB8908F27A3B005CB29B /* panedwindow.tcl */, + F966BB8A08F27A3B005CB29B /* prolog.ps */, + F966BB8B08F27A3B005CB29B /* safetk.tcl */, + F966BB8C08F27A3B005CB29B /* scale.tcl */, + F966BB8D08F27A3B005CB29B /* scrlbar.tcl */, + F966BB8E08F27A3B005CB29B /* spinbox.tcl */, + F966BB8F08F27A3B005CB29B /* tclIndex */, + F966BB9008F27A3B005CB29B /* tearoff.tcl */, + F966BB9108F27A3B005CB29B /* text.tcl */, + F966BB9208F27A3B005CB29B /* tk.tcl */, + F966BB9308F27A3B005CB29B /* tkfbox.tcl */, + F96888360AF787B3000797B5 /* ttk */, + F966BB9408F27A3B005CB29B /* unsupported.tcl */, + F966BB9508F27A3B005CB29B /* xmfbox.tcl */, + ); + path = library; + sourceTree = "<group>"; + }; + F966BB1A08F27A39005CB29B /* demos */ = { + isa = PBXGroup; + children = ( + F966BB1B08F27A39005CB29B /* anilabel.tcl */, + F966BB1C08F27A39005CB29B /* aniwave.tcl */, + F966BB1D08F27A39005CB29B /* arrow.tcl */, + F966BB1E08F27A39005CB29B /* bind.tcl */, + F966BB1F08F27A39005CB29B /* bitmap.tcl */, + F966BB2008F27A39005CB29B /* browse */, + F966BB2108F27A39005CB29B /* button.tcl */, + F966BB2208F27A39005CB29B /* check.tcl */, + F966BB2308F27A39005CB29B /* clrpick.tcl */, + F966BB2408F27A39005CB29B /* colors.tcl */, + F936FCDB0CCD984600716967 /* combo.tcl */, + F966BB2508F27A39005CB29B /* cscroll.tcl */, + F966BB2608F27A39005CB29B /* ctext.tcl */, + F966BB2708F27A39005CB29B /* dialog1.tcl */, + F966BB2808F27A39005CB29B /* dialog2.tcl */, + F966BB2A08F27A39005CB29B /* entry1.tcl */, + F966BB2B08F27A39005CB29B /* entry2.tcl */, + F966BB2C08F27A39005CB29B /* entry3.tcl */, + F966BB2D08F27A39005CB29B /* filebox.tcl */, + F966BB2E08F27A39005CB29B /* floor.tcl */, + F966BB2F08F27A39005CB29B /* form.tcl */, + F966BB3008F27A39005CB29B /* goldberg.tcl */, + F966BB3108F27A39005CB29B /* hello */, + F966BB3208F27A39005CB29B /* hscale.tcl */, + F966BB3308F27A39005CB29B /* icon.tcl */, + F966BB3408F27A39005CB29B /* image1.tcl */, + F966BB3508F27A39005CB29B /* image2.tcl */, + F966BB4208F27A3A005CB29B /* items.tcl */, + F966BB4308F27A3A005CB29B /* ixset */, + F92240290D7C620F005EC715 /* knightstour.tcl */, + F966BB4408F27A3A005CB29B /* label.tcl */, + F966BB4508F27A3A005CB29B /* labelframe.tcl */, + F9D1360A0CDC252C00DBE0B5 /* mclist.tcl */, + F966BB4608F27A3A005CB29B /* menu.tcl */, + F966BB4708F27A3A005CB29B /* menubu.tcl */, + F966BB4808F27A3A005CB29B /* msgbox.tcl */, + F966BB4A08F27A3A005CB29B /* paned1.tcl */, + F966BB4B08F27A3A005CB29B /* paned2.tcl */, + F966BB4C08F27A3A005CB29B /* pendulum.tcl */, + F966BB4D08F27A3A005CB29B /* plot.tcl */, + F966BB4E08F27A3A005CB29B /* puzzle.tcl */, + F966BB4F08F27A3A005CB29B /* radio.tcl */, + F966BB5008F27A3A005CB29B /* README */, + F966BB5108F27A3A005CB29B /* rmt */, + F966BB5208F27A3A005CB29B /* rolodex */, + F966BB5308F27A3A005CB29B /* ruler.tcl */, + F966BB5408F27A3A005CB29B /* sayings.tcl */, + F966BB5508F27A3A005CB29B /* search.tcl */, + F966BB5608F27A3A005CB29B /* spin.tcl */, + F966BB5708F27A3A005CB29B /* square */, + F966BB5808F27A3A005CB29B /* states.tcl */, + F966BB5908F27A3A005CB29B /* style.tcl */, + F966BB5A08F27A3A005CB29B /* tclIndex */, + F966BB5B08F27A3A005CB29B /* tcolor */, + F966BB5C08F27A3A005CB29B /* text.tcl */, + F9099B8A0CC67D30005A9580 /* textpeer.tcl */, + F966BB5D08F27A3A005CB29B /* timer */, + F936FCD90CCD984600716967 /* toolbar.tcl */, + F936FCD80CCD984600716967 /* tree.tcl */, + F9099B8B0CC67D3E005A9580 /* ttkbut.tcl */, + F9F4EFDD0CC7B3CB00378A27 /* ttkmenu.tcl */, + F936FCDA0CCD984600716967 /* ttknote.tcl */, + F9F4EFDC0CC7B3CA00378A27 /* ttkpane.tcl */, + F936FCD70CCD984500716967 /* ttkprogress.tcl */, + F966BB5E08F27A3A005CB29B /* twind.tcl */, + F966BB5F08F27A3A005CB29B /* unicodeout.tcl */, + F966BB6008F27A3A005CB29B /* vscale.tcl */, + F966BB6108F27A3A005CB29B /* widget */, + ); + path = demos; + sourceTree = "<group>"; + }; + F966BB9708F27A3B005CB29B /* macosx */ = { + isa = PBXGroup; + children = ( + F966BBBA08F27A3B005CB29B /* configure.ac */, + F966BBBB08F27A3B005CB29B /* GNUmakefile */, + F966BBBE08F27A3B005CB29B /* README */, + F966BBC008F27A3B005CB29B /* Tk-Info.plist.in */, + F966BBC208F27A3B005CB29B /* tkMacOSX.h */, + F966BBC508F27A3B005CB29B /* tkMacOSXBitmap.c */, + F966BBC608F27A3B005CB29B /* tkMacOSXButton.c */, + F966BBC808F27A3B005CB29B /* tkMacOSXClipboard.c */, + F966BBC908F27A3B005CB29B /* tkMacOSXColor.c */, + F966BBCA08F27A3B005CB29B /* tkMacOSXConfig.c */, + F966BBCB08F27A3B005CB29B /* tkMacOSXCursor.c */, + F966BBCC08F27A3B005CB29B /* tkMacOSXCursors.h */, + F966BBCD08F27A3B005CB29B /* tkMacOSXDebug.c */, + F966BBCE08F27A3B005CB29B /* tkMacOSXDebug.h */, + F966BBCF08F27A3B005CB29B /* tkMacOSXDefault.h */, + F966BBD008F27A3B005CB29B /* tkMacOSXDialog.c */, + F966BBD108F27A3B005CB29B /* tkMacOSXDraw.c */, + F966BBD208F27A3B005CB29B /* tkMacOSXEmbed.c */, + F966BBD308F27A3B005CB29B /* tkMacOSXEntry.c */, + F966BBD408F27A3B005CB29B /* tkMacOSXEvent.c */, + F966BBD508F27A3B005CB29B /* tkMacOSXEvent.h */, + F966BBD608F27A3B005CB29B /* tkMacOSXFont.c */, + F93E5EFD09CF8711008FA367 /* tkMacOSXFont.h */, + F966BBD708F27A3B005CB29B /* tkMacOSXHLEvents.c */, + F966BBD808F27A3B005CB29B /* tkMacOSXInit.c */, + F966BBDA08F27A3B005CB29B /* tkMacOSXInt.h */, + F966BBDB08F27A3B005CB29B /* tkMacOSXKeyboard.c */, + F966BBDC08F27A3B005CB29B /* tkMacOSXKeyEvent.c */, + F966BBDD08F27A3B005CB29B /* tkMacOSXMenu.c */, + F966BBE008F27A3B005CB29B /* tkMacOSXMenubutton.c */, + F966BBE108F27A3B005CB29B /* tkMacOSXMenus.c */, + F966BBE208F27A3B005CB29B /* tkMacOSXMouseEvent.c */, + F966BBE308F27A3B005CB29B /* tkMacOSXNotify.c */, + F966BBEA08F27A3C005CB29B /* tkMacOSXPort.h */, + F976F6A70C325FB6005066D9 /* tkMacOSXPrivate.h */, + F966BBEB08F27A3C005CB29B /* tkMacOSXRegion.c */, + F966BBEC08F27A3C005CB29B /* tkMacOSXScale.c */, + F966BBED08F27A3C005CB29B /* tkMacOSXScrlbr.c */, + F966BBEE08F27A3C005CB29B /* tkMacOSXSend.c */, + F966BBEF08F27A3C005CB29B /* tkMacOSXSubwindows.c */, + F966BBF008F27A3C005CB29B /* tkMacOSXTest.c */, + F966BBF108F27A3C005CB29B /* tkMacOSXWindowEvent.c */, + F966BBF208F27A3C005CB29B /* tkMacOSXWm.c */, + F966BBF308F27A3C005CB29B /* tkMacOSXWm.h */, + F966BBF408F27A3C005CB29B /* tkMacOSXXCursors.h */, + F966BBF508F27A3C005CB29B /* tkMacOSXXStubs.c */, + F96888840AF78938000797B5 /* ttkMacOSXTheme.c */, + F95D8D4B0F1715610006B020 /* Tk.icns */, + F95D8D4C0F1715610006B020 /* Tk.tiff */, + F966BBF708F27A3C005CB29B /* Wish-Info.plist.in */, + F97AE7F10B65C1E900310EA2 /* Wish-Common.xcconfig */, + F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */, + F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */, + ); + path = macosx; + sourceTree = "<group>"; + }; + F966BC0408F27A3C005CB29B /* tests */ = { + isa = PBXGroup; + children = ( + F966BC0508F27A3C005CB29B /* all.tcl */, + F966BC0608F27A3C005CB29B /* arc.tcl */, + F966BC0708F27A3C005CB29B /* bell.test */, + F966BC0808F27A3C005CB29B /* bevel.tcl */, + F966BC0908F27A3C005CB29B /* bgerror.test */, + F966BC0A08F27A3C005CB29B /* bind.test */, + F966BC0B08F27A3C005CB29B /* bitmap.test */, + F966BC0C08F27A3C005CB29B /* border.test */, + F966BC0D08F27A3C005CB29B /* bugs.tcl */, + F966BC0E08F27A3C005CB29B /* butGeom.tcl */, + F966BC0F08F27A3C005CB29B /* butGeom2.tcl */, + F966BC1008F27A3C005CB29B /* button.test */, + F966BC1108F27A3C005CB29B /* canvas.test */, + F966BC1208F27A3C005CB29B /* canvImg.test */, + F966BC1308F27A3C005CB29B /* canvPs.test */, + F966BC1408F27A3C005CB29B /* canvPsArc.tcl */, + F966BC1508F27A3C005CB29B /* canvPsBmap.tcl */, + F966BC1608F27A3C005CB29B /* canvPsGrph.tcl */, + F966BC1708F27A3C005CB29B /* canvPsImg.tcl */, + F966BC1808F27A3C005CB29B /* canvPsText.tcl */, + F966BC1908F27A3C005CB29B /* canvRect.test */, + F966BC1A08F27A3C005CB29B /* canvText.test */, + F966BC1B08F27A3C005CB29B /* canvWind.test */, + F966BC1C08F27A3C005CB29B /* choosedir.test */, + F966BC1D08F27A3C005CB29B /* clipboard.test */, + F966BC1E08F27A3C005CB29B /* clrpick.test */, + F966BC1F08F27A3C005CB29B /* cmap.tcl */, + F966BC2008F27A3C005CB29B /* cmds.test */, + F966BC2108F27A3C005CB29B /* color.test */, + F966BC2208F27A3C005CB29B /* config.test */, + F966BC2308F27A3C005CB29B /* constraints.tcl */, + F966BC2408F27A3C005CB29B /* cursor.test */, + F966BC2508F27A3C005CB29B /* dialog.test */, + F966BC2608F27A3C005CB29B /* embed.test */, + F966BC2708F27A3C005CB29B /* entry.test */, + F966BC2808F27A3C005CB29B /* event.test */, + F966BC2908F27A3C005CB29B /* filebox.test */, + F966BC2A08F27A3C005CB29B /* focus.test */, + F966BC2B08F27A3C005CB29B /* focusTcl.test */, + F966BC2C08F27A3C005CB29B /* font.test */, + F966BC2D08F27A3C005CB29B /* frame.test */, + F966BC2E08F27A3C005CB29B /* geometry.test */, + F966BC2F08F27A3C005CB29B /* get.test */, + F966BC3008F27A3C005CB29B /* grab.test */, + F966BC3108F27A3C005CB29B /* grid.test */, + F966BC3208F27A3C005CB29B /* id.test */, + F966BC3308F27A3C005CB29B /* image.test */, + F966BC3408F27A3C005CB29B /* imgBmap.test */, + F966BC3508F27A3C005CB29B /* imgPhoto.test */, + F966BC3608F27A3C005CB29B /* imgPPM.test */, + F966BC3708F27A3C005CB29B /* listbox.test */, + F966BC3808F27A3C005CB29B /* main.test */, + F966BC3908F27A3C005CB29B /* menu.test */, + F966BC3A08F27A3C005CB29B /* menubut.test */, + F966BC3B08F27A3C005CB29B /* menuDraw.test */, + F966BC3C08F27A3C005CB29B /* message.test */, + F966BC3D08F27A3C005CB29B /* msgbox.test */, + F966BC3E08F27A3C005CB29B /* obj.test */, + F966BC3F08F27A3C005CB29B /* oldpack.test */, + F966BC4008F27A3C005CB29B /* option.file1 */, + F966BC4108F27A3C005CB29B /* option.file2 */, + F966BC4208F27A3C005CB29B /* option.test */, + F966BC4308F27A3C005CB29B /* pack.test */, + F966BC4408F27A3C005CB29B /* panedwindow.test */, + F966BC4508F27A3D005CB29B /* place.test */, + F966BC4608F27A3D005CB29B /* raise.test */, + F966BC4708F27A3D005CB29B /* README */, + F966BC4808F27A3D005CB29B /* safe.test */, + F966BC4908F27A3D005CB29B /* scale.test */, + F966BC4A08F27A3D005CB29B /* scrollbar.test */, + F966BC4B08F27A3D005CB29B /* select.test */, + F966BC4C08F27A3D005CB29B /* send.test */, + F966BC4D08F27A3D005CB29B /* spinbox.test */, + F966BC4E08F27A3D005CB29B /* text.test */, + F966BC4F08F27A3D005CB29B /* textBTree.test */, + F966BC5008F27A3D005CB29B /* textDisp.test */, + F966BC5108F27A3D005CB29B /* textImage.test */, + F966BC5208F27A3D005CB29B /* textIndex.test */, + F966BC5308F27A3D005CB29B /* textMark.test */, + F966BC5408F27A3D005CB29B /* textTag.test */, + F966BC5508F27A3D005CB29B /* textWind.test */, + F966BC5608F27A3D005CB29B /* tk.test */, + F96888530AF7880C000797B5 /* ttk */, + F966BC5708F27A3D005CB29B /* unixButton.test */, + F966BC5808F27A3D005CB29B /* unixEmbed.test */, + F966BC5908F27A3D005CB29B /* unixFont.test */, + F966BC5A08F27A3D005CB29B /* unixMenu.test */, + F966BC5B08F27A3D005CB29B /* unixSelect.test */, + F966BC5C08F27A3D005CB29B /* unixWm.test */, + F966BC5D08F27A3D005CB29B /* util.test */, + F966BC5E08F27A3D005CB29B /* visual.test */, + F966BC5F08F27A3D005CB29B /* visual_bb.test */, + F966BC6008F27A3D005CB29B /* winButton.test */, + F966BC6108F27A3D005CB29B /* winClipboard.test */, + F966BC6208F27A3D005CB29B /* winDialog.test */, + F966BC6308F27A3D005CB29B /* window.test */, + F966BC6408F27A3D005CB29B /* winfo.test */, + F966BC6508F27A3D005CB29B /* winFont.test */, + F966BC6608F27A3D005CB29B /* winMenu.test */, + F966BC6708F27A3D005CB29B /* winSend.test */, + F966BC6808F27A3D005CB29B /* winWm.test */, + F966BC6908F27A3D005CB29B /* wm.test */, + F966BC6A08F27A3D005CB29B /* xmfbox.test */, + ); + path = tests; + sourceTree = "<group>"; + }; + F966BC6B08F27A3D005CB29B /* unix */ = { + isa = PBXGroup; + children = ( + F966BC6C08F27A3D005CB29B /* aclocal.m4 */, + F966BC6D08F27A3D005CB29B /* configure */, + F966BC6E08F27A3D005CB29B /* configure.in */, + F966BC6F08F27A3D005CB29B /* install-sh */, + F966BC7008F27A3D005CB29B /* installManPage */, + F966BC7108F27A3D005CB29B /* Makefile.in */, + F966BC7208F27A3D005CB29B /* README */, + F966BC7308F27A3D005CB29B /* tcl.m4 */, + F966BC7408F27A3D005CB29B /* tk.spec */, + F966BC7508F27A3D005CB29B /* tkAppInit.c */, + F966BC7608F27A3D005CB29B /* tkConfig.h.in */, + F966BC7708F27A3D005CB29B /* tkConfig.sh.in */, + F966BC7808F27A3D005CB29B /* tkUnix.c */, + F966BC7908F27A3D005CB29B /* tkUnix3d.c */, + F966BC7A08F27A3D005CB29B /* tkUnixButton.c */, + F966BC7B08F27A3D005CB29B /* tkUnixColor.c */, + F966BC7C08F27A3D005CB29B /* tkUnixConfig.c */, + F966BC7D08F27A3D005CB29B /* tkUnixCursor.c */, + F966BC7E08F27A3D005CB29B /* tkUnixDefault.h */, + F966BC7F08F27A3D005CB29B /* tkUnixDialog.c */, + F966BC8008F27A3D005CB29B /* tkUnixDraw.c */, + F966BC8108F27A3D005CB29B /* tkUnixEmbed.c */, + F966BC8208F27A3D005CB29B /* tkUnixEvent.c */, + F966BC8308F27A3D005CB29B /* tkUnixFocus.c */, + F966BC8408F27A3D005CB29B /* tkUnixFont.c */, + F966BC8508F27A3D005CB29B /* tkUnixInit.c */, + F966BC8608F27A3D005CB29B /* tkUnixInt.h */, + F966BC8708F27A3D005CB29B /* tkUnixKey.c */, + F966BC8808F27A3D005CB29B /* tkUnixMenu.c */, + F966BC8908F27A3D005CB29B /* tkUnixMenubu.c */, + F966BC8A08F27A3D005CB29B /* tkUnixPort.h */, + F966BC8B08F27A3D005CB29B /* tkUnixRFont.c */, + F966BC8C08F27A3D005CB29B /* tkUnixScale.c */, + F966BC8D08F27A3D005CB29B /* tkUnixScrlbr.c */, + F966BC8E08F27A3D005CB29B /* tkUnixSelect.c */, + F966BC8F08F27A3D005CB29B /* tkUnixSend.c */, + F966BC9008F27A3D005CB29B /* tkUnixWm.c */, + F966BC9108F27A3D005CB29B /* tkUnixXId.c */, + ); + path = unix; + sourceTree = "<group>"; + }; + F966BC9208F27A3D005CB29B /* win */ = { + isa = PBXGroup; + children = ( + F966BC9408F27A3D005CB29B /* aclocal.m4 */, + F966BC9508F27A3D005CB29B /* buildall.vc.bat */, + F966BC9608F27A3E005CB29B /* configure */, + F966BC9708F27A3E005CB29B /* configure.in */, + F966BC9808F27A3E005CB29B /* makefile.bc */, + F966BC9908F27A3E005CB29B /* Makefile.in */, + F966BC9A08F27A3E005CB29B /* makefile.vc */, + F966BC9B08F27A3E005CB29B /* mkd.bat */, + F966BC9C08F27A3E005CB29B /* nmakehlp.c */, + F966BC9D08F27A3E005CB29B /* rc */, + F966BCF308F27A3E005CB29B /* README */, + F966BCF408F27A3E005CB29B /* rmd.bat */, + F966BCF508F27A3F005CB29B /* rules.vc */, + F966BCF608F27A3F005CB29B /* stubs.c */, + F966BCF708F27A3F005CB29B /* tcl.m4 */, + F966BCF808F27A3F005CB29B /* tkConfig.sh.in */, + F966BCF908F27A3F005CB29B /* tkWin.h */, + F966BCFA08F27A3F005CB29B /* tkWin32Dll.c */, + F966BCFB08F27A3F005CB29B /* tkWin3d.c */, + F966BCFC08F27A3F005CB29B /* tkWinButton.c */, + F966BCFD08F27A3F005CB29B /* tkWinClipboard.c */, + F966BCFE08F27A3F005CB29B /* tkWinColor.c */, + F966BCFF08F27A3F005CB29B /* tkWinConfig.c */, + F966BD0008F27A3F005CB29B /* tkWinCursor.c */, + F966BD0108F27A3F005CB29B /* tkWinDefault.h */, + F966BD0208F27A3F005CB29B /* tkWinDialog.c */, + F966BD0308F27A3F005CB29B /* tkWinDraw.c */, + F966BD0408F27A3F005CB29B /* tkWinEmbed.c */, + F966BD0508F27A3F005CB29B /* tkWinFont.c */, + F966BD0708F27A3F005CB29B /* tkWinImage.c */, + F966BD0808F27A3F005CB29B /* tkWinInit.c */, + F966BD0908F27A3F005CB29B /* tkWinInt.h */, + F966BD0A08F27A3F005CB29B /* tkWinKey.c */, + F966BD0B08F27A3F005CB29B /* tkWinMenu.c */, + F966BD0C08F27A3F005CB29B /* tkWinPixmap.c */, + F966BD0D08F27A3F005CB29B /* tkWinPointer.c */, + F966BD0E08F27A3F005CB29B /* tkWinPort.h */, + F966BD0F08F27A3F005CB29B /* tkWinRegion.c */, + F966BD1008F27A3F005CB29B /* tkWinScrlbr.c */, + F966BD1108F27A3F005CB29B /* tkWinSend.c */, + F966BD1208F27A3F005CB29B /* tkWinSendCom.c */, + F966BD1308F27A3F005CB29B /* tkWinSendCom.h */, + F966BD1408F27A3F005CB29B /* tkWinTest.c */, + F966BD1508F27A3F005CB29B /* tkWinWindow.c */, + F966BD1608F27A3F005CB29B /* tkWinWm.c */, + F966BD1708F27A3F005CB29B /* tkWinX.c */, + F96888860AF78953000797B5 /* ttkWinMonitor.c */, + F96888870AF78953000797B5 /* ttkWinTheme.c */, + F96888880AF78953000797B5 /* ttkWinXPTheme.c */, + F966BD1808F27A3F005CB29B /* winMain.c */, + ); + path = win; + sourceTree = "<group>"; + }; + F966BC9D08F27A3E005CB29B /* rc */ = { + isa = PBXGroup; + children = ( + F966BCEE08F27A3E005CB29B /* tk.rc */, + F966BCEF08F27A3E005CB29B /* tk_base.rc */, + F966BCF208F27A3E005CB29B /* wish.rc */, + ); + path = rc; + sourceTree = "<group>"; + }; + F966BD1908F27A3F005CB29B /* xlib */ = { + isa = PBXGroup; + children = ( + F966BD1A08F27A3F005CB29B /* X11 */, + F966BD2308F27A3F005CB29B /* xbytes.h */, + F966BD2408F27A3F005CB29B /* xcolors.c */, + F966BD2508F27A3F005CB29B /* xdraw.c */, + F966BD2608F27A3F005CB29B /* xgc.c */, + F966BD2708F27A3F005CB29B /* ximage.c */, + F966BD2808F27A3F005CB29B /* xutil.c */, + ); + path = xlib; + sourceTree = "<group>"; + }; + F966BD1A08F27A3F005CB29B /* X11 */ = { + isa = PBXGroup; + children = ( + F966BD1B08F27A3F005CB29B /* cursorfont.h */, + F966BD1C08F27A3F005CB29B /* keysym.h */, + F966BD1D08F27A3F005CB29B /* keysymdef.h */, + F966BD1E08F27A3F005CB29B /* X.h */, + F966BD1F08F27A3F005CB29B /* Xatom.h */, + F966BD2008F27A3F005CB29B /* Xfuncproto.h */, + F966BD2108F27A3F005CB29B /* Xlib.h */, + F966BD2208F27A3F005CB29B /* Xutil.h */, + ); + path = X11; + sourceTree = "<group>"; + }; + F966C06F08F281DC005CB29B /* Frameworks */ = { + isa = PBXGroup; + children = ( + F9C9CBFF0E84059800E00935 /* ApplicationServices.framework */, + F966C07408F2820D005CB29B /* CoreFoundation.framework */, + F966C07608F2821B005CB29B /* Carbon.framework */, + F94523A10E6FC2AC00C1D987 /* Cocoa.framework */, + F966C07808F28233005CB29B /* IOKit.framework */, + F9FD32140CC1AF170073837D /* libX11.dylib */, + F9FD32150CC1AF170073837D /* libXext.dylib */, + F9FD32160CC1AF170073837D /* libXss.dylib */, + F9FD349A0CC1BB0D0073837D /* libXft.dylib */, + F9FD34990CC1BB0D0073837D /* libfreetype.dylib */, + F9FD34C30CC1BBD70073837D /* libfontconfig.dylib */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + F96887DF0AF786D5000797B5 /* ttk */ = { + isa = PBXGroup; + children = ( + F96887E00AF786D5000797B5 /* ttk.decls */, + F96887E10AF786D5000797B5 /* ttkBlink.c */, + F96887E20AF786D5000797B5 /* ttkButton.c */, + F96887E30AF786D5000797B5 /* ttkCache.c */, + F96887E40AF786D5000797B5 /* ttkClamTheme.c */, + F96887E50AF786D5000797B5 /* ttkClassicTheme.c */, + F96887E60AF786D5000797B5 /* ttkDecls.h */, + F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */, + F96887E80AF786D5000797B5 /* ttkElements.c */, + F96887E90AF786D5000797B5 /* ttkEntry.c */, + F96887EA0AF786D5000797B5 /* ttkFrame.c */, + F96887EB0AF786D5000797B5 /* ttkImage.c */, + F96887EC0AF786D5000797B5 /* ttkInit.c */, + F96887ED0AF786D5000797B5 /* ttkLabel.c */, + F96887EE0AF786D5000797B5 /* ttkLayout.c */, + F96887EF0AF786D5000797B5 /* ttkManager.c */, + F96887F00AF786D5000797B5 /* ttkManager.h */, + F96887F10AF786D5000797B5 /* ttkNotebook.c */, + F96887F20AF786D5000797B5 /* ttkPanedwindow.c */, + F96887F30AF786D5000797B5 /* ttkProgress.c */, + F96887F40AF786D5000797B5 /* ttkScale.c */, + F96887F50AF786D5000797B5 /* ttkScroll.c */, + F96887F60AF786D5000797B5 /* ttkScrollbar.c */, + F96887F70AF786D5000797B5 /* ttkSeparator.c */, + F96887F80AF786D5000797B5 /* ttkSquare.c */, + F96887F90AF786D5000797B5 /* ttkState.c */, + F96887FA0AF786D5000797B5 /* ttkStubInit.c */, + F96887FB0AF786D5000797B5 /* ttkStubLib.c */, + F96887FC0AF786D5000797B5 /* ttkTagSet.c */, + F96887FD0AF786D5000797B5 /* ttkTheme.c */, + F96887FE0AF786D5000797B5 /* ttkTheme.h */, + F96887FF0AF786D5000797B5 /* ttkThemeInt.h */, + F96888000AF786D5000797B5 /* ttkTrace.c */, + F96888010AF786D5000797B5 /* ttkTrack.c */, + F96888020AF786D5000797B5 /* ttkTreeview.c */, + F96888030AF786D5000797B5 /* ttkWidget.c */, + F96888040AF786D5000797B5 /* ttkWidget.h */, + ); + path = ttk; + sourceTree = "<group>"; + }; + F96888360AF787B3000797B5 /* ttk */ = { + isa = PBXGroup; + children = ( + F96888370AF787B3000797B5 /* altTheme.tcl */, + F96888380AF787B3000797B5 /* aquaTheme.tcl */, + F96888390AF787B3000797B5 /* button.tcl */, + F968883A0AF787B3000797B5 /* clamTheme.tcl */, + F968883B0AF787B3000797B5 /* classicTheme.tcl */, + F968883C0AF787B3000797B5 /* combobox.tcl */, + F968883D0AF787B3000797B5 /* cursors.tcl */, + F968883E0AF787B3000797B5 /* defaults.tcl */, + F96888400AF787B3000797B5 /* entry.tcl */, + F96888410AF787B3000797B5 /* fonts.tcl */, + F96888440AF787B3000797B5 /* menubutton.tcl */, + F96888450AF787B3000797B5 /* notebook.tcl */, + F96888460AF787B3000797B5 /* panedwindow.tcl */, + F96888470AF787B3000797B5 /* progress.tcl */, + F96888480AF787B3000797B5 /* scale.tcl */, + F96888490AF787B3000797B5 /* scrollbar.tcl */, + F968884A0AF787B3000797B5 /* sizegrip.tcl */, + F968884B0AF787B3000797B5 /* treeview.tcl */, + F968884C0AF787B3000797B5 /* ttk.tcl */, + F968884D0AF787B3000797B5 /* utils.tcl */, + F968884E0AF787B3000797B5 /* winTheme.tcl */, + F968884F0AF787B3000797B5 /* xpTheme.tcl */, + ); + path = ttk; + sourceTree = "<group>"; + }; + F96888530AF7880C000797B5 /* ttk */ = { + isa = PBXGroup; + children = ( + F96888540AF7880C000797B5 /* all.tcl */, + F96888560AF7880C000797B5 /* combobox.test */, + F96888570AF7880C000797B5 /* entry.test */, + F96888580AF7880C000797B5 /* image.test */, + F96888590AF7880C000797B5 /* labelframe.test */, + F968885A0AF7880C000797B5 /* layout.test */, + F968885C0AF7880C000797B5 /* notebook.test */, + F968885D0AF7880C000797B5 /* panedwindow.test */, + F968885E0AF7880C000797B5 /* progressbar.test */, + F968885F0AF7880C000797B5 /* scrollbar.test */, + F96888600AF7880C000797B5 /* treetags.test */, + F96888610AF7880C000797B5 /* treeview.test */, + F96888620AF7880C000797B5 /* ttk.test */, + F96888630AF7880C000797B5 /* validate.test */, + F962F7C60DADC26200648DB8 /* vsapi.test */, + ); + path = ttk; + sourceTree = "<group>"; + }; + F96D3DF608F27169004A47F5 /* Tcl Sources */ = { + isa = PBXGroup; + children = ( + F96D3EC908F272A7004A47F5 /* generic */, + F96D432C08F272B4004A47F5 /* macosx */, + F96D443E08F272B9004A47F5 /* unix */, + F96D425C08F272B2004A47F5 /* libtommath */, + F96D446E08F272B9004A47F5 /* win */, + F96D3F3808F272A7004A47F5 /* library */, + F96D434408F272B5004A47F5 /* tests */, + F96D3DFC08F272A4004A47F5 /* doc */, + F96D43D008F272B8004A47F5 /* tools */, + F96D3DFA08F272A4004A47F5 /* ChangeLog */, + F96D3DFB08F272A4004A47F5 /* changes */, + F96D434308F272B5004A47F5 /* README */, + F96D432B08F272B4004A47F5 /* license.terms */, + ); + name = "Tcl Sources"; + sourceTree = TCL_SRCROOT; + }; + F96D3DF708F271BE004A47F5 /* Tk Sources */ = { + isa = PBXGroup; + children = ( + F966BAA508F27A38005CB29B /* generic */, + F966BB9708F27A3B005CB29B /* macosx */, + F966BC6B08F27A3D005CB29B /* unix */, + F966BD1908F27A3F005CB29B /* xlib */, + F966BA0308F27A37005CB29B /* bitmaps */, + F966BC9208F27A3D005CB29B /* win */, + F966BB1308F27A39005CB29B /* library */, + F966BC0408F27A3C005CB29B /* tests */, + F966BA1008F27A37005CB29B /* doc */, + F966BA0E08F27A37005CB29B /* ChangeLog */, + F966BA0F08F27A37005CB29B /* changes */, + F966BC0308F27A3C005CB29B /* README */, + F966BB9608F27A3B005CB29B /* license.terms */, + ); + name = "Tk Sources"; + sourceTree = TK_SRCROOT; + }; + F96D3DFC08F272A4004A47F5 /* doc */ = { + isa = PBXGroup; + children = ( + F96D3DFD08F272A4004A47F5 /* Access.3 */, + F96D3DFE08F272A4004A47F5 /* AddErrInfo.3 */, + F96D3DFF08F272A4004A47F5 /* after.n */, + F96D3E0008F272A4004A47F5 /* Alloc.3 */, + F96D3E0108F272A4004A47F5 /* AllowExc.3 */, + F96D3E0208F272A4004A47F5 /* append.n */, + F96D3E0308F272A4004A47F5 /* AppInit.3 */, + F96D3E0408F272A5004A47F5 /* array.n */, + F96D3E0508F272A5004A47F5 /* AssocData.3 */, + F96D3E0608F272A5004A47F5 /* Async.3 */, + F96D3E0708F272A5004A47F5 /* BackgdErr.3 */, + F96D3E0808F272A5004A47F5 /* Backslash.3 */, + F96D3E0908F272A5004A47F5 /* bgerror.n */, + F96D3E0A08F272A5004A47F5 /* binary.n */, + F96D3E0B08F272A5004A47F5 /* BoolObj.3 */, + F96D3E0C08F272A5004A47F5 /* break.n */, + F96D3E0D08F272A5004A47F5 /* ByteArrObj.3 */, + F96D3E0E08F272A5004A47F5 /* CallDel.3 */, + F96D3E0F08F272A5004A47F5 /* case.n */, + F96D3E1008F272A5004A47F5 /* catch.n */, + F96D3E1108F272A5004A47F5 /* cd.n */, + F96D3E1208F272A5004A47F5 /* chan.n */, + F96D3E1308F272A5004A47F5 /* ChnlStack.3 */, + F96D3E1408F272A5004A47F5 /* clock.n */, + F96D3E1508F272A5004A47F5 /* close.n */, + F96D3E1608F272A5004A47F5 /* CmdCmplt.3 */, + F96D3E1708F272A5004A47F5 /* Concat.3 */, + F96D3E1808F272A5004A47F5 /* concat.n */, + F96D3E1908F272A5004A47F5 /* continue.n */, + F96D3E1A08F272A5004A47F5 /* CrtChannel.3 */, + F96D3E1B08F272A5004A47F5 /* CrtChnlHdlr.3 */, + F96D3E1C08F272A5004A47F5 /* CrtCloseHdlr.3 */, + F96D3E1D08F272A5004A47F5 /* CrtCommand.3 */, + F96D3E1E08F272A5004A47F5 /* CrtFileHdlr.3 */, + F96D3E1F08F272A5004A47F5 /* CrtInterp.3 */, + F96D3E2008F272A5004A47F5 /* CrtMathFnc.3 */, + F96D3E2108F272A5004A47F5 /* CrtObjCmd.3 */, + F96D3E2208F272A5004A47F5 /* CrtSlave.3 */, + F96D3E2308F272A5004A47F5 /* CrtTimerHdlr.3 */, + F96D3E2408F272A5004A47F5 /* CrtTrace.3 */, + F96D3E2508F272A5004A47F5 /* dde.n */, + F96D3E2608F272A5004A47F5 /* DetachPids.3 */, + F96D3E2708F272A5004A47F5 /* dict.n */, + F96D3E2808F272A5004A47F5 /* DictObj.3 */, + F96D3E2908F272A5004A47F5 /* DoOneEvent.3 */, + F96D3E2A08F272A5004A47F5 /* DoubleObj.3 */, + F96D3E2B08F272A5004A47F5 /* DoWhenIdle.3 */, + F96D3E2C08F272A5004A47F5 /* DString.3 */, + F96D3E2D08F272A5004A47F5 /* DumpActiveMemory.3 */, + F96D3E2E08F272A5004A47F5 /* Encoding.3 */, + F96D3E2F08F272A5004A47F5 /* encoding.n */, + F96D3E3008F272A5004A47F5 /* Ensemble.3 */, + F96D3E3108F272A5004A47F5 /* Environment.3 */, + F96D3E3208F272A5004A47F5 /* eof.n */, + F96D3E3308F272A5004A47F5 /* error.n */, + F96D3E3408F272A5004A47F5 /* Eval.3 */, + F96D3E3508F272A5004A47F5 /* eval.n */, + F96D3E3608F272A5004A47F5 /* exec.n */, + F96D3E3708F272A5004A47F5 /* Exit.3 */, + F96D3E3808F272A5004A47F5 /* exit.n */, + F96D3E3908F272A5004A47F5 /* expr.n */, + F96D3E3A08F272A5004A47F5 /* ExprLong.3 */, + F96D3E3B08F272A5004A47F5 /* ExprLongObj.3 */, + F96D3E3C08F272A5004A47F5 /* fblocked.n */, + F96D3E3D08F272A5004A47F5 /* fconfigure.n */, + F96D3E3E08F272A5004A47F5 /* fcopy.n */, + F96D3E3F08F272A5004A47F5 /* file.n */, + F96D3E4008F272A5004A47F5 /* fileevent.n */, + F96D3E4108F272A5004A47F5 /* filename.n */, + F96D3E4208F272A5004A47F5 /* FileSystem.3 */, + F96D3E4308F272A5004A47F5 /* FindExec.3 */, + F96D3E4408F272A5004A47F5 /* flush.n */, + F96D3E4508F272A5004A47F5 /* for.n */, + F96D3E4608F272A5004A47F5 /* foreach.n */, + F96D3E4708F272A5004A47F5 /* format.n */, + F96D3E4808F272A5004A47F5 /* GetCwd.3 */, + F96D3E4908F272A5004A47F5 /* GetHostName.3 */, + F96D3E4A08F272A5004A47F5 /* GetIndex.3 */, + F96D3E4B08F272A5004A47F5 /* GetInt.3 */, + F96D3E4C08F272A5004A47F5 /* GetOpnFl.3 */, + F96D3E4D08F272A5004A47F5 /* gets.n */, + F96D3E4E08F272A5004A47F5 /* GetStdChan.3 */, + F96D3E4F08F272A5004A47F5 /* GetTime.3 */, + F96D3E5008F272A5004A47F5 /* GetVersion.3 */, + F96D3E5108F272A5004A47F5 /* glob.n */, + F96D3E5208F272A6004A47F5 /* global.n */, + F96D3E5308F272A6004A47F5 /* Hash.3 */, + F96D3E5408F272A6004A47F5 /* history.n */, + F96D3E5508F272A6004A47F5 /* http.n */, + F96D3E5608F272A6004A47F5 /* if.n */, + F96D3E5708F272A6004A47F5 /* incr.n */, + F96D3E5808F272A6004A47F5 /* info.n */, + F96D3E5908F272A6004A47F5 /* Init.3 */, + F96D3E5A08F272A6004A47F5 /* InitStubs.3 */, + F96D3E5B08F272A6004A47F5 /* Interp.3 */, + F96D3E5C08F272A6004A47F5 /* interp.n */, + F96D3E5D08F272A6004A47F5 /* IntObj.3 */, + F96D3E5E08F272A6004A47F5 /* join.n */, + F96D3E5F08F272A6004A47F5 /* lappend.n */, + F96D3E6008F272A6004A47F5 /* lassign.n */, + F96D3E6108F272A6004A47F5 /* library.n */, + F96D3E6208F272A6004A47F5 /* Limit.3 */, + F96D3E6308F272A6004A47F5 /* lindex.n */, + F96D3E6408F272A6004A47F5 /* LinkVar.3 */, + F96D3E6508F272A6004A47F5 /* linsert.n */, + F96D3E6608F272A6004A47F5 /* list.n */, + F96D3E6708F272A6004A47F5 /* ListObj.3 */, + F96D3E6808F272A6004A47F5 /* llength.n */, + F96D3E6908F272A6004A47F5 /* load.n */, + F96D3E6A08F272A6004A47F5 /* lrange.n */, + F96D3E6B08F272A6004A47F5 /* lrepeat.n */, + F96D3E6C08F272A6004A47F5 /* lreplace.n */, + F96D3E6D08F272A6004A47F5 /* lsearch.n */, + F96D3E6E08F272A6004A47F5 /* lset.n */, + F96D3E6F08F272A6004A47F5 /* lsort.n */, + F96D3E7008F272A6004A47F5 /* man.macros */, + F96D3E7108F272A6004A47F5 /* mathfunc.n */, + F96D3E7208F272A6004A47F5 /* memory.n */, + F96D3E7308F272A6004A47F5 /* msgcat.n */, + F96D3E7408F272A6004A47F5 /* Namespace.3 */, + F96D3E7508F272A6004A47F5 /* namespace.n */, + F96D3E7608F272A6004A47F5 /* Notifier.3 */, + F96D3E7708F272A6004A47F5 /* Object.3 */, + F96D3E7808F272A6004A47F5 /* ObjectType.3 */, + F96D3E7908F272A6004A47F5 /* open.n */, + F96D3E7A08F272A6004A47F5 /* OpenFileChnl.3 */, + F96D3E7B08F272A6004A47F5 /* OpenTcp.3 */, + F96D3E7C08F272A6004A47F5 /* package.n */, + F96D3E7D08F272A6004A47F5 /* packagens.n */, + F96D3E7E08F272A6004A47F5 /* Panic.3 */, + F96D3E7F08F272A6004A47F5 /* ParseCmd.3 */, + F96D3E8008F272A6004A47F5 /* pid.n */, + F96D3E8108F272A6004A47F5 /* pkgMkIndex.n */, + F96D3E8208F272A6004A47F5 /* PkgRequire.3 */, + F9ECB1E10B26543C00A28025 /* platform_shell.n */, + F9ECB1E20B26543C00A28025 /* platform.n */, + F96D3E8308F272A6004A47F5 /* Preserve.3 */, + F96D3E8408F272A6004A47F5 /* PrintDbl.3 */, + F96D3E8508F272A6004A47F5 /* proc.n */, + F96D3E8608F272A6004A47F5 /* puts.n */, + F96D3E8708F272A6004A47F5 /* pwd.n */, + F96D3E8808F272A6004A47F5 /* re_syntax.n */, + F96D3E8908F272A6004A47F5 /* read.n */, + F96D3E8A08F272A6004A47F5 /* RecEvalObj.3 */, + F96D3E8B08F272A6004A47F5 /* RecordEval.3 */, + F96D3E8C08F272A6004A47F5 /* RegConfig.3 */, + F96D3E8D08F272A6004A47F5 /* RegExp.3 */, + F96D3E8E08F272A6004A47F5 /* regexp.n */, + F96D3E8F08F272A6004A47F5 /* registry.n */, + F96D3E9008F272A6004A47F5 /* regsub.n */, + F96D3E9108F272A6004A47F5 /* rename.n */, + F96D3E9208F272A6004A47F5 /* return.n */, + F96D3E9308F272A6004A47F5 /* safe.n */, + F96D3E9408F272A6004A47F5 /* SaveResult.3 */, + F96D3E9508F272A6004A47F5 /* scan.n */, + F96D3E9608F272A6004A47F5 /* seek.n */, + F96D3E9708F272A6004A47F5 /* set.n */, + F96D3E9808F272A6004A47F5 /* SetChanErr.3 */, + F96D3E9908F272A6004A47F5 /* SetErrno.3 */, + F96D3E9A08F272A6004A47F5 /* SetRecLmt.3 */, + F96D3E9B08F272A7004A47F5 /* SetResult.3 */, + F96D3E9C08F272A7004A47F5 /* SetVar.3 */, + F96D3E9D08F272A7004A47F5 /* Signal.3 */, + F96D3E9E08F272A7004A47F5 /* Sleep.3 */, + F96D3E9F08F272A7004A47F5 /* socket.n */, + F96D3EA008F272A7004A47F5 /* source.n */, + F96D3EA108F272A7004A47F5 /* SourceRCFile.3 */, + F96D3EA208F272A7004A47F5 /* split.n */, + F96D3EA308F272A7004A47F5 /* SplitList.3 */, + F96D3EA408F272A7004A47F5 /* SplitPath.3 */, + F96D3EA508F272A7004A47F5 /* StaticPkg.3 */, + F96D3EA608F272A7004A47F5 /* StdChannels.3 */, + F96D3EA708F272A7004A47F5 /* string.n */, + F96D3EA808F272A7004A47F5 /* StringObj.3 */, + F96D3EA908F272A7004A47F5 /* StrMatch.3 */, + F96D3EAA08F272A7004A47F5 /* subst.n */, + F96D3EAB08F272A7004A47F5 /* SubstObj.3 */, + F96D3EAC08F272A7004A47F5 /* switch.n */, + F96D3EAD08F272A7004A47F5 /* Tcl.n */, + F96D3EAE08F272A7004A47F5 /* Tcl_Main.3 */, + F96D3EAF08F272A7004A47F5 /* TCL_MEM_DEBUG.3 */, + F96D3EB008F272A7004A47F5 /* tclsh.1 */, + F96D3EB108F272A7004A47F5 /* tcltest.n */, + F96D3EB208F272A7004A47F5 /* tclvars.n */, + F96D3EB308F272A7004A47F5 /* tell.n */, + F96D3EB408F272A7004A47F5 /* Thread.3 */, + F96D3EB508F272A7004A47F5 /* time.n */, + F96D3EB608F272A7004A47F5 /* tm.n */, + F96D3EB708F272A7004A47F5 /* ToUpper.3 */, + F96D3EB808F272A7004A47F5 /* trace.n */, + F96D3EB908F272A7004A47F5 /* TraceCmd.3 */, + F96D3EBA08F272A7004A47F5 /* TraceVar.3 */, + F96D3EBB08F272A7004A47F5 /* Translate.3 */, + F96D3EBC08F272A7004A47F5 /* UniCharIsAlpha.3 */, + F96D3EBD08F272A7004A47F5 /* unknown.n */, + F96D3EBE08F272A7004A47F5 /* unload.n */, + F96D3EBF08F272A7004A47F5 /* unset.n */, + F96D3EC008F272A7004A47F5 /* update.n */, + F96D3EC108F272A7004A47F5 /* uplevel.n */, + F96D3EC208F272A7004A47F5 /* UpVar.3 */, + F96D3EC308F272A7004A47F5 /* upvar.n */, + F96D3EC408F272A7004A47F5 /* Utf.3 */, + F96D3EC508F272A7004A47F5 /* variable.n */, + F96D3EC608F272A7004A47F5 /* vwait.n */, + F96D3EC708F272A7004A47F5 /* while.n */, + F96D3EC808F272A7004A47F5 /* WrongNumArgs.3 */, + ); + path = doc; + sourceTree = "<group>"; + }; + F96D3EC908F272A7004A47F5 /* generic */ = { + isa = PBXGroup; + children = ( + F96D3ECA08F272A7004A47F5 /* README */, + F96D3ECB08F272A7004A47F5 /* regc_color.c */, + F96D3ECC08F272A7004A47F5 /* regc_cvec.c */, + F96D3ECD08F272A7004A47F5 /* regc_lex.c */, + F96D3ECE08F272A7004A47F5 /* regc_locale.c */, + F96D3ECF08F272A7004A47F5 /* regc_nfa.c */, + F96D3ED008F272A7004A47F5 /* regcomp.c */, + F96D3ED108F272A7004A47F5 /* regcustom.h */, + F96D3ED208F272A7004A47F5 /* rege_dfa.c */, + F96D3ED308F272A7004A47F5 /* regerror.c */, + F96D3ED408F272A7004A47F5 /* regerrs.h */, + F96D3ED508F272A7004A47F5 /* regex.h */, + F96D3ED608F272A7004A47F5 /* regexec.c */, + F96D3ED708F272A7004A47F5 /* regfree.c */, + F96D3ED808F272A7004A47F5 /* regfronts.c */, + F96D3ED908F272A7004A47F5 /* regguts.h */, + F96D3EDA08F272A7004A47F5 /* tcl.decls */, + F96D3EDB08F272A7004A47F5 /* tcl.h */, + F96D3EDC08F272A7004A47F5 /* tclAlloc.c */, + F96D3EDD08F272A7004A47F5 /* tclAsync.c */, + F96D3EDE08F272A7004A47F5 /* tclBasic.c */, + F96D3EDF08F272A7004A47F5 /* tclBinary.c */, + F96D3EE008F272A7004A47F5 /* tclCkalloc.c */, + F96D3EE108F272A7004A47F5 /* tclClock.c */, + F96D3EE208F272A7004A47F5 /* tclCmdAH.c */, + F96D3EE308F272A7004A47F5 /* tclCmdIL.c */, + F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */, + F96D3EE508F272A7004A47F5 /* tclCompCmds.c */, + F96D3EE608F272A7004A47F5 /* tclCompExpr.c */, + F96D3EE708F272A7004A47F5 /* tclCompile.c */, + F96D3EE808F272A7004A47F5 /* tclCompile.h */, + F96D3EE908F272A7004A47F5 /* tclConfig.c */, + F96D3EEA08F272A7004A47F5 /* tclDate.c */, + F96D3EEB08F272A7004A47F5 /* tclDecls.h */, + F96D3EEC08F272A7004A47F5 /* tclDictObj.c */, + F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */, + F96D3EED08F272A7004A47F5 /* tclEncoding.c */, + F96D3EEE08F272A7004A47F5 /* tclEnv.c */, + F96D3EEF08F272A7004A47F5 /* tclEvent.c */, + F96D3EF008F272A7004A47F5 /* tclExecute.c */, + F96D3EF108F272A7004A47F5 /* tclFCmd.c */, + F96D3EF208F272A7004A47F5 /* tclFileName.c */, + F96D3EF308F272A7004A47F5 /* tclFileSystem.h */, + F96D3EF408F272A7004A47F5 /* tclGet.c */, + F96D3EF508F272A7004A47F5 /* tclGetDate.y */, + F96D3EF608F272A7004A47F5 /* tclHash.c */, + F96D3EF708F272A7004A47F5 /* tclHistory.c */, + F96D3EF808F272A7004A47F5 /* tclIndexObj.c */, + F96D3EF908F272A7004A47F5 /* tclInt.decls */, + F96D3EFA08F272A7004A47F5 /* tclInt.h */, + F96D3EFB08F272A7004A47F5 /* tclIntDecls.h */, + F96D3EFC08F272A7004A47F5 /* tclInterp.c */, + F96D3EFD08F272A7004A47F5 /* tclIntPlatDecls.h */, + F96D3EFE08F272A7004A47F5 /* tclIO.c */, + F96D3EFF08F272A7004A47F5 /* tclIO.h */, + F96D3F0008F272A7004A47F5 /* tclIOCmd.c */, + F96D3F0108F272A7004A47F5 /* tclIOGT.c */, + F96D3F0208F272A7004A47F5 /* tclIORChan.c */, + F96D3F0308F272A7004A47F5 /* tclIOSock.c */, + F96D3F0408F272A7004A47F5 /* tclIOUtil.c */, + F96D3F0508F272A7004A47F5 /* tclLink.c */, + F96D3F0608F272A7004A47F5 /* tclListObj.c */, + F96D3F0708F272A7004A47F5 /* tclLiteral.c */, + F96D3F0808F272A7004A47F5 /* tclLoad.c */, + F96D3F0908F272A7004A47F5 /* tclLoadNone.c */, + F96D3F0A08F272A7004A47F5 /* tclMain.c */, + F96D3F0B08F272A7004A47F5 /* tclNamesp.c */, + F96D3F0C08F272A7004A47F5 /* tclNotify.c */, + F96D3F0D08F272A7004A47F5 /* tclObj.c */, + F96D3F0E08F272A7004A47F5 /* tclPanic.c */, + F96D3F0F08F272A7004A47F5 /* tclParse.c */, + F96D3F1108F272A7004A47F5 /* tclPathObj.c */, + F96D3F1208F272A7004A47F5 /* tclPipe.c */, + F96D3F1308F272A7004A47F5 /* tclPkg.c */, + F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */, + F96D3F1508F272A7004A47F5 /* tclPlatDecls.h */, + F96D3F1608F272A7004A47F5 /* tclPort.h */, + F96D3F1708F272A7004A47F5 /* tclPosixStr.c */, + F96D3F1808F272A7004A47F5 /* tclPreserve.c */, + F96D3F1908F272A7004A47F5 /* tclProc.c */, + F96D3F1A08F272A7004A47F5 /* tclRegexp.c */, + F96D3F1B08F272A7004A47F5 /* tclRegexp.h */, + F96D3F1C08F272A7004A47F5 /* tclResolve.c */, + F96D3F1D08F272A7004A47F5 /* tclResult.c */, + F96D3F1E08F272A7004A47F5 /* tclScan.c */, + F96D3F1F08F272A7004A47F5 /* tclStringObj.c */, + F96D3F2408F272A7004A47F5 /* tclStrToD.c */, + F96D3F2508F272A7004A47F5 /* tclStubInit.c */, + F96D3F2608F272A7004A47F5 /* tclStubLib.c */, + F96D3F2708F272A7004A47F5 /* tclTest.c */, + F96D3F2808F272A7004A47F5 /* tclTestObj.c */, + F96D3F2908F272A7004A47F5 /* tclTestProcBodyObj.c */, + F96D3F2A08F272A7004A47F5 /* tclThread.c */, + F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */, + F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */, + F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */, + F96D3F2E08F272A7004A47F5 /* tclThreadTest.c */, + F96D3F2F08F272A7004A47F5 /* tclTimer.c */, + F9903CAF094FAADA004613E9 /* tclTomMath.decls */, + F96D3F3008F272A7004A47F5 /* tclTomMath.h */, + F9903CB0094FAADA004613E9 /* tclTomMathDecls.h */, + F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */, + F96D3F3208F272A7004A47F5 /* tclTrace.c */, + F96D3F3308F272A7004A47F5 /* tclUniData.c */, + F96D3F3408F272A7004A47F5 /* tclUtf.c */, + F96D3F3508F272A7004A47F5 /* tclUtil.c */, + F96D3F3608F272A7004A47F5 /* tclVar.c */, + F96D3F3708F272A7004A47F5 /* tommath.h */, + ); + path = generic; + sourceTree = "<group>"; + }; + F96D3F3808F272A7004A47F5 /* library */ = { + isa = PBXGroup; + children = ( + F96D3F3908F272A8004A47F5 /* auto.tcl */, + F96D3F3A08F272A8004A47F5 /* clock.tcl */, + F96D3F3B08F272A8004A47F5 /* dde */, + F96D3F8C08F272A8004A47F5 /* history.tcl */, + F96D3F8D08F272A8004A47F5 /* http */, + F96D3F9008F272A8004A47F5 /* http1.0 */, + F96D3F9308F272A8004A47F5 /* init.tcl */, + F96D3F9408F272A8004A47F5 /* msgcat */, + F96D401708F272AA004A47F5 /* opt */, + F96D401A08F272AA004A47F5 /* package.tcl */, + F96D401B08F272AA004A47F5 /* parray.tcl */, + F9ECB1110B26521500A28025 /* platform */, + F96D401C08F272AA004A47F5 /* reg */, + F96D401E08F272AA004A47F5 /* safe.tcl */, + F96D401F08F272AA004A47F5 /* tclIndex */, + F96D402008F272AA004A47F5 /* tcltest */, + F96D402308F272AA004A47F5 /* tm.tcl */, + F96D425B08F272B2004A47F5 /* word.tcl */, + ); + path = library; + sourceTree = "<group>"; + }; + F96D3F3B08F272A8004A47F5 /* dde */ = { + isa = PBXGroup; + children = ( + F96D3F3C08F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = dde; + sourceTree = "<group>"; + }; + F96D3F8D08F272A8004A47F5 /* http */ = { + isa = PBXGroup; + children = ( + F96D3F8E08F272A8004A47F5 /* http.tcl */, + F96D3F8F08F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = http; + sourceTree = "<group>"; + }; + F96D3F9008F272A8004A47F5 /* http1.0 */ = { + isa = PBXGroup; + children = ( + F96D3F9108F272A8004A47F5 /* http.tcl */, + F96D3F9208F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = http1.0; + sourceTree = "<group>"; + }; + F96D3F9408F272A8004A47F5 /* msgcat */ = { + isa = PBXGroup; + children = ( + F96D3F9508F272A8004A47F5 /* msgcat.tcl */, + F96D3F9608F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = msgcat; + sourceTree = "<group>"; + }; + F96D401708F272AA004A47F5 /* opt */ = { + isa = PBXGroup; + children = ( + F96D401808F272AA004A47F5 /* optparse.tcl */, + F96D401908F272AA004A47F5 /* pkgIndex.tcl */, + ); + path = opt; + sourceTree = "<group>"; + }; + F96D401C08F272AA004A47F5 /* reg */ = { + isa = PBXGroup; + children = ( + F96D401D08F272AA004A47F5 /* pkgIndex.tcl */, + ); + path = reg; + sourceTree = "<group>"; + }; + F96D402008F272AA004A47F5 /* tcltest */ = { + isa = PBXGroup; + children = ( + F96D402108F272AA004A47F5 /* pkgIndex.tcl */, + F96D402208F272AA004A47F5 /* tcltest.tcl */, + ); + path = tcltest; + sourceTree = "<group>"; + }; + F96D425C08F272B2004A47F5 /* libtommath */ = { + isa = PBXGroup; + children = ( + F96D425F08F272B3004A47F5 /* bn.pdf */, + F96D426108F272B3004A47F5 /* bn_error.c */, + F96D426208F272B3004A47F5 /* bn_fast_mp_invmod.c */, + F96D426308F272B3004A47F5 /* bn_fast_mp_montgomery_reduce.c */, + F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */, + F96D426508F272B3004A47F5 /* bn_fast_s_mp_mul_high_digs.c */, + F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */, + F96D426708F272B3004A47F5 /* bn_mp_2expt.c */, + F96D426808F272B3004A47F5 /* bn_mp_abs.c */, + F96D426908F272B3004A47F5 /* bn_mp_add.c */, + F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */, + F96D426B08F272B3004A47F5 /* bn_mp_addmod.c */, + F96D426C08F272B3004A47F5 /* bn_mp_and.c */, + F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */, + F96D426E08F272B3004A47F5 /* bn_mp_clear.c */, + F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */, + F96D427008F272B3004A47F5 /* bn_mp_cmp.c */, + F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */, + F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */, + F96D427308F272B3004A47F5 /* bn_mp_cnt_lsb.c */, + F96D427408F272B3004A47F5 /* bn_mp_copy.c */, + F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */, + F96D427608F272B3004A47F5 /* bn_mp_div.c */, + F96D427708F272B3004A47F5 /* bn_mp_div_2.c */, + F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */, + F96D427908F272B3004A47F5 /* bn_mp_div_3.c */, + F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */, + F96D427B08F272B3004A47F5 /* bn_mp_dr_is_modulus.c */, + F96D427C08F272B3004A47F5 /* bn_mp_dr_reduce.c */, + F96D427D08F272B3004A47F5 /* bn_mp_dr_setup.c */, + F96D427E08F272B3004A47F5 /* bn_mp_exch.c */, + F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */, + F96D428008F272B3004A47F5 /* bn_mp_exptmod.c */, + F96D428108F272B3004A47F5 /* bn_mp_exptmod_fast.c */, + F96D428208F272B3004A47F5 /* bn_mp_exteuclid.c */, + F96D428308F272B3004A47F5 /* bn_mp_fread.c */, + F96D428408F272B3004A47F5 /* bn_mp_fwrite.c */, + F96D428508F272B3004A47F5 /* bn_mp_gcd.c */, + F96D428608F272B3004A47F5 /* bn_mp_get_int.c */, + F96D428708F272B3004A47F5 /* bn_mp_grow.c */, + F96D428808F272B3004A47F5 /* bn_mp_init.c */, + F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */, + F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */, + F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */, + F96D428C08F272B3004A47F5 /* bn_mp_init_set_int.c */, + F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */, + F96D428E08F272B3004A47F5 /* bn_mp_invmod.c */, + F96D428F08F272B3004A47F5 /* bn_mp_invmod_slow.c */, + F96D429008F272B3004A47F5 /* bn_mp_is_square.c */, + F96D429108F272B3004A47F5 /* bn_mp_jacobi.c */, + F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */, + F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */, + F96D429408F272B3004A47F5 /* bn_mp_lcm.c */, + F96D429508F272B3004A47F5 /* bn_mp_lshd.c */, + F96D429608F272B3004A47F5 /* bn_mp_mod.c */, + F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */, + F96D429808F272B3004A47F5 /* bn_mp_mod_d.c */, + F96D429908F272B3004A47F5 /* bn_mp_montgomery_calc_normalization.c */, + F96D429A08F272B3004A47F5 /* bn_mp_montgomery_reduce.c */, + F96D429B08F272B3004A47F5 /* bn_mp_montgomery_setup.c */, + F96D429C08F272B3004A47F5 /* bn_mp_mul.c */, + F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */, + F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */, + F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */, + F96D42A008F272B3004A47F5 /* bn_mp_mulmod.c */, + F96D42A108F272B3004A47F5 /* bn_mp_n_root.c */, + F96D42A208F272B3004A47F5 /* bn_mp_neg.c */, + F96D42A308F272B3004A47F5 /* bn_mp_or.c */, + F96D42A408F272B3004A47F5 /* bn_mp_prime_fermat.c */, + F96D42A508F272B3004A47F5 /* bn_mp_prime_is_divisible.c */, + F96D42A608F272B3004A47F5 /* bn_mp_prime_is_prime.c */, + F96D42A708F272B3004A47F5 /* bn_mp_prime_miller_rabin.c */, + F96D42A808F272B3004A47F5 /* bn_mp_prime_next_prime.c */, + F96D42A908F272B3004A47F5 /* bn_mp_prime_rabin_miller_trials.c */, + F96D42AA08F272B3004A47F5 /* bn_mp_prime_random_ex.c */, + F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */, + F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */, + F96D42AD08F272B3004A47F5 /* bn_mp_rand.c */, + F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */, + F96D42AF08F272B3004A47F5 /* bn_mp_read_signed_bin.c */, + F96D42B008F272B3004A47F5 /* bn_mp_read_unsigned_bin.c */, + F96D42B108F272B3004A47F5 /* bn_mp_reduce.c */, + F96D42B208F272B3004A47F5 /* bn_mp_reduce_2k.c */, + F96D42B308F272B3004A47F5 /* bn_mp_reduce_2k_l.c */, + F96D42B408F272B3004A47F5 /* bn_mp_reduce_2k_setup.c */, + F96D42B508F272B3004A47F5 /* bn_mp_reduce_2k_setup_l.c */, + F96D42B608F272B3004A47F5 /* bn_mp_reduce_is_2k.c */, + F96D42B708F272B3004A47F5 /* bn_mp_reduce_is_2k_l.c */, + F96D42B808F272B3004A47F5 /* bn_mp_reduce_setup.c */, + F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */, + F96D42BA08F272B3004A47F5 /* bn_mp_set.c */, + F96D42BB08F272B3004A47F5 /* bn_mp_set_int.c */, + F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */, + F96D42BD08F272B3004A47F5 /* bn_mp_signed_bin_size.c */, + F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */, + F96D42BF08F272B3004A47F5 /* bn_mp_sqrmod.c */, + F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */, + F96D42C108F272B3004A47F5 /* bn_mp_sub.c */, + F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */, + F96D42C308F272B3004A47F5 /* bn_mp_submod.c */, + F96D42C408F272B3004A47F5 /* bn_mp_to_signed_bin.c */, + F96D42C508F272B3004A47F5 /* bn_mp_to_signed_bin_n.c */, + F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */, + F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */, + F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */, + F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */, + F96D42CA08F272B3004A47F5 /* bn_mp_toradix.c */, + F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */, + F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */, + F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */, + F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */, + F96D42CF08F272B3004A47F5 /* bn_prime_tab.c */, + F96D42D008F272B3004A47F5 /* bn_reverse.c */, + F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */, + F96D42D208F272B3004A47F5 /* bn_s_mp_exptmod.c */, + F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */, + F96D42D408F272B3004A47F5 /* bn_s_mp_mul_high_digs.c */, + F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */, + F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */, + F96D42D708F272B3004A47F5 /* bncore.c */, + F96D42D908F272B3004A47F5 /* callgraph.txt */, + F96D42DA08F272B3004A47F5 /* changes.txt */, + F96D42F008F272B3004A47F5 /* LICENSE */, + F96D431D08F272B4004A47F5 /* poster.pdf */, + F96D432608F272B4004A47F5 /* tommath.pdf */, + F96D432908F272B4004A47F5 /* tommath_class.h */, + F96D432A08F272B4004A47F5 /* tommath_superclass.h */, + ); + path = libtommath; + sourceTree = "<group>"; + }; + F96D432C08F272B4004A47F5 /* macosx */ = { + isa = PBXGroup; + children = ( + F96D432E08F272B5004A47F5 /* configure.ac */, + F96D432F08F272B5004A47F5 /* GNUmakefile */, + F96D433108F272B5004A47F5 /* README */, + F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */, + F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */, + F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */, + F96D433208F272B5004A47F5 /* Tcl-Info.plist.in */, + F91E62260C1AE686006C9D96 /* Tclsh-Info.plist.in */, + ); + path = macosx; + sourceTree = "<group>"; + }; + F96D434408F272B5004A47F5 /* tests */ = { + isa = PBXGroup; + children = ( + F96D434508F272B5004A47F5 /* all.tcl */, + F96D434608F272B5004A47F5 /* append.test */, + F96D434708F272B5004A47F5 /* appendComp.test */, + F9ECB1CA0B2652D300A28025 /* apply.test */, + F96D434808F272B5004A47F5 /* assocd.test */, + F96D434908F272B5004A47F5 /* async.test */, + F96D434A08F272B5004A47F5 /* autoMkindex.test */, + F96D434B08F272B5004A47F5 /* basic.test */, + F96D434C08F272B5004A47F5 /* binary.test */, + F96D434D08F272B5004A47F5 /* case.test */, + F96D434E08F272B5004A47F5 /* chan.test */, + F9A493240CEBF38300B78AE2 /* chanio.test */, + F96D434F08F272B5004A47F5 /* clock.test */, + F96D435008F272B5004A47F5 /* cmdAH.test */, + F96D435108F272B5004A47F5 /* cmdIL.test */, + F96D435208F272B5004A47F5 /* cmdInfo.test */, + F96D435308F272B5004A47F5 /* cmdMZ.test */, + F96D435408F272B5004A47F5 /* compExpr-old.test */, + F96D435508F272B5004A47F5 /* compExpr.test */, + F96D435608F272B5004A47F5 /* compile.test */, + F96D435708F272B5004A47F5 /* concat.test */, + F96D435808F272B5004A47F5 /* config.test */, + F96D435908F272B5004A47F5 /* dcall.test */, + F96D435A08F272B5004A47F5 /* dict.test */, + F96D435C08F272B5004A47F5 /* dstring.test */, + F96D435E08F272B5004A47F5 /* encoding.test */, + F96D435F08F272B5004A47F5 /* env.test */, + F96D436008F272B5004A47F5 /* error.test */, + F96D436108F272B5004A47F5 /* eval.test */, + F96D436208F272B5004A47F5 /* event.test */, + F96D436308F272B5004A47F5 /* exec.test */, + F96D436408F272B5004A47F5 /* execute.test */, + F96D436508F272B5004A47F5 /* expr-old.test */, + F96D436608F272B5004A47F5 /* expr.test */, + F96D436708F272B6004A47F5 /* fCmd.test */, + F96D436808F272B6004A47F5 /* fileName.test */, + F96D436908F272B6004A47F5 /* fileSystem.test */, + F96D436A08F272B6004A47F5 /* for-old.test */, + F96D436B08F272B6004A47F5 /* for.test */, + F96D436C08F272B6004A47F5 /* foreach.test */, + F96D436D08F272B6004A47F5 /* format.test */, + F96D436E08F272B6004A47F5 /* get.test */, + F96D436F08F272B6004A47F5 /* history.test */, + F96D437008F272B6004A47F5 /* http.test */, + F96D437108F272B6004A47F5 /* httpd */, + F96D437208F272B6004A47F5 /* httpold.test */, + F96D437308F272B6004A47F5 /* if-old.test */, + F96D437408F272B6004A47F5 /* if.test */, + F96D437508F272B6004A47F5 /* incr-old.test */, + F96D437608F272B6004A47F5 /* incr.test */, + F96D437708F272B6004A47F5 /* indexObj.test */, + F96D437808F272B6004A47F5 /* info.test */, + F96D437908F272B6004A47F5 /* init.test */, + F96D437A08F272B6004A47F5 /* interp.test */, + F96D437B08F272B6004A47F5 /* io.test */, + F96D437C08F272B6004A47F5 /* ioCmd.test */, + F96D437D08F272B6004A47F5 /* iogt.test */, + F96D437E08F272B6004A47F5 /* ioUtil.test */, + F96D437F08F272B6004A47F5 /* join.test */, + F96D438008F272B6004A47F5 /* lindex.test */, + F96D438108F272B6004A47F5 /* link.test */, + F96D438208F272B6004A47F5 /* linsert.test */, + F96D438308F272B6004A47F5 /* list.test */, + F96D438408F272B6004A47F5 /* listObj.test */, + F96D438508F272B6004A47F5 /* llength.test */, + F96D438608F272B6004A47F5 /* load.test */, + F96D438708F272B6004A47F5 /* lrange.test */, + F96D438808F272B6004A47F5 /* lrepeat.test */, + F96D438908F272B6004A47F5 /* lreplace.test */, + F96D438A08F272B6004A47F5 /* lsearch.test */, + F96D438B08F272B6004A47F5 /* lset.test */, + F96D438C08F272B6004A47F5 /* lsetComp.test */, + F96D438D08F272B6004A47F5 /* macOSXFCmd.test */, + F95FAFF90B34F1130072E431 /* macOSXLoad.test */, + F96D438E08F272B6004A47F5 /* main.test */, + F9ECB1CB0B26534C00A28025 /* mathop.test */, + F96D438F08F272B6004A47F5 /* misc.test */, + F96D439008F272B6004A47F5 /* msgcat.test */, + F96D439108F272B6004A47F5 /* namespace-old.test */, + F96D439208F272B7004A47F5 /* namespace.test */, + F96D439308F272B7004A47F5 /* notify.test */, + F96D439408F272B7004A47F5 /* obj.test */, + F96D439508F272B7004A47F5 /* opt.test */, + F96D439608F272B7004A47F5 /* package.test */, + F96D439708F272B7004A47F5 /* parse.test */, + F96D439808F272B7004A47F5 /* parseExpr.test */, + F96D439908F272B7004A47F5 /* parseOld.test */, + F96D439A08F272B7004A47F5 /* pid.test */, + F96D439B08F272B7004A47F5 /* pkg.test */, + F96D439C08F272B7004A47F5 /* pkgMkIndex.test */, + F96D439D08F272B7004A47F5 /* platform.test */, + F96D439E08F272B7004A47F5 /* proc-old.test */, + F96D439F08F272B7004A47F5 /* proc.test */, + F96D43A008F272B7004A47F5 /* pwd.test */, + F96D43A108F272B7004A47F5 /* README */, + F96D43A208F272B7004A47F5 /* reg.test */, + F96D43A308F272B7004A47F5 /* regexp.test */, + F96D43A408F272B7004A47F5 /* regexpComp.test */, + F96D43A508F272B7004A47F5 /* registry.test */, + F96D43A608F272B7004A47F5 /* remote.tcl */, + F96D43A708F272B7004A47F5 /* rename.test */, + F96D43A808F272B7004A47F5 /* result.test */, + F96D43A908F272B7004A47F5 /* safe.test */, + F96D43AA08F272B7004A47F5 /* scan.test */, + F96D43AB08F272B7004A47F5 /* security.test */, + F96D43AC08F272B7004A47F5 /* set-old.test */, + F96D43AD08F272B7004A47F5 /* set.test */, + F96D43AE08F272B7004A47F5 /* socket.test */, + F96D43AF08F272B7004A47F5 /* source.test */, + F96D43B008F272B7004A47F5 /* split.test */, + F96D43B108F272B7004A47F5 /* stack.test */, + F96D43B208F272B7004A47F5 /* string.test */, + F96D43B308F272B7004A47F5 /* stringComp.test */, + F96D43B408F272B7004A47F5 /* stringObj.test */, + F96D43B508F272B7004A47F5 /* subst.test */, + F96D43B608F272B7004A47F5 /* switch.test */, + F96D43B708F272B7004A47F5 /* tcltest.test */, + F96D43B808F272B7004A47F5 /* thread.test */, + F96D43B908F272B7004A47F5 /* timer.test */, + F96D43BA08F272B7004A47F5 /* tm.test */, + F96D43BB08F272B7004A47F5 /* trace.test */, + F96D43BC08F272B7004A47F5 /* unixFCmd.test */, + F96D43BD08F272B7004A47F5 /* unixFile.test */, + F96D43BE08F272B7004A47F5 /* unixInit.test */, + F96D43BF08F272B7004A47F5 /* unixNotfy.test */, + F96D43C008F272B7004A47F5 /* unknown.test */, + F96D43C108F272B7004A47F5 /* unload.test */, + F96D43C208F272B7004A47F5 /* uplevel.test */, + F96D43C308F272B7004A47F5 /* upvar.test */, + F96D43C408F272B7004A47F5 /* utf.test */, + F96D43C508F272B7004A47F5 /* util.test */, + F96D43C608F272B7004A47F5 /* var.test */, + F96D43C708F272B7004A47F5 /* while-old.test */, + F96D43C808F272B7004A47F5 /* while.test */, + F96D43C908F272B7004A47F5 /* winConsole.test */, + F96D43CA08F272B7004A47F5 /* winDde.test */, + F96D43CB08F272B7004A47F5 /* winFCmd.test */, + F96D43CC08F272B7004A47F5 /* winFile.test */, + F96D43CD08F272B7004A47F5 /* winNotify.test */, + F96D43CE08F272B7004A47F5 /* winPipe.test */, + F96D43CF08F272B7004A47F5 /* winTime.test */, + ); + path = tests; + sourceTree = "<group>"; + }; + F96D43D008F272B8004A47F5 /* tools */ = { + isa = PBXGroup; + children = ( + F96D43D108F272B8004A47F5 /* checkLibraryDoc.tcl */, + F96D43D208F272B8004A47F5 /* configure */, + F96D43D308F272B8004A47F5 /* configure.in */, + F96D442208F272B8004A47F5 /* eolFix.tcl */, + F96D442408F272B8004A47F5 /* fix_tommath_h.tcl */, + F96D442508F272B8004A47F5 /* genStubs.tcl */, + F96D442708F272B8004A47F5 /* index.tcl */, + F96D442808F272B8004A47F5 /* installData.tcl */, + F96D442908F272B8004A47F5 /* loadICU.tcl */, + F96D442A08F272B8004A47F5 /* Makefile.in */, + F96D442B08F272B8004A47F5 /* makeTestCases.tcl */, + F96D442C08F272B8004A47F5 /* man2help.tcl */, + F96D442D08F272B8004A47F5 /* man2help2.tcl */, + F96D442E08F272B8004A47F5 /* man2html.tcl */, + F96D442F08F272B8004A47F5 /* man2html1.tcl */, + F96D443008F272B8004A47F5 /* man2html2.tcl */, + F96D443108F272B8004A47F5 /* man2tcl.c */, + F96D443208F272B8004A47F5 /* README */, + F96D443308F272B8004A47F5 /* regexpTestLib.tcl */, + F96D443408F272B8004A47F5 /* str2c */, + F96D443508F272B8004A47F5 /* tcl.hpj.in */, + F96D443608F272B8004A47F5 /* tcl.wse.in */, + F96D443708F272B9004A47F5 /* tclmin.wse */, + F96D443908F272B9004A47F5 /* tcltk-man2html.tcl */, + F96D443A08F272B9004A47F5 /* tclZIC.tcl */, + F96D443B08F272B9004A47F5 /* uniClass.tcl */, + F96D443C08F272B9004A47F5 /* uniParse.tcl */, + ); + path = tools; + sourceTree = "<group>"; + }; + F96D443E08F272B9004A47F5 /* unix */ = { + isa = PBXGroup; + children = ( + F96D444008F272B9004A47F5 /* aclocal.m4 */, + F96D444108F272B9004A47F5 /* configure */, + F96D444208F272B9004A47F5 /* configure.in */, + F96D444308F272B9004A47F5 /* dltest */, + F96D444D08F272B9004A47F5 /* install-sh */, + F96D444E08F272B9004A47F5 /* installManPage */, + F96D444F08F272B9004A47F5 /* ldAix */, + F96D445008F272B9004A47F5 /* Makefile.in */, + F96D445208F272B9004A47F5 /* README */, + F96D445308F272B9004A47F5 /* tcl.m4 */, + F96D445408F272B9004A47F5 /* tcl.spec */, + F96D445508F272B9004A47F5 /* tclAppInit.c */, + F96D445608F272B9004A47F5 /* tclConfig.h.in */, + F96D445708F272B9004A47F5 /* tclConfig.sh.in */, + F96D445808F272B9004A47F5 /* tclLoadAix.c */, + F96D445908F272B9004A47F5 /* tclLoadDl.c */, + F96D445B08F272B9004A47F5 /* tclLoadDyld.c */, + F96D445C08F272B9004A47F5 /* tclLoadNext.c */, + F96D445D08F272B9004A47F5 /* tclLoadOSF.c */, + F96D445E08F272B9004A47F5 /* tclLoadShl.c */, + F96D445F08F272B9004A47F5 /* tclUnixChan.c */, + F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */, + F96D446008F272B9004A47F5 /* tclUnixEvent.c */, + F96D446108F272B9004A47F5 /* tclUnixFCmd.c */, + F96D446208F272B9004A47F5 /* tclUnixFile.c */, + F96D446308F272B9004A47F5 /* tclUnixInit.c */, + F96D446408F272B9004A47F5 /* tclUnixNotfy.c */, + F96D446508F272B9004A47F5 /* tclUnixPipe.c */, + F96D446608F272B9004A47F5 /* tclUnixPort.h */, + F96D446708F272B9004A47F5 /* tclUnixSock.c */, + F96D446808F272B9004A47F5 /* tclUnixTest.c */, + F96D446908F272B9004A47F5 /* tclUnixThrd.c */, + F96D446A08F272B9004A47F5 /* tclUnixThrd.h */, + F96D446B08F272B9004A47F5 /* tclUnixTime.c */, + F96D446C08F272B9004A47F5 /* tclXtNotify.c */, + F96D446D08F272B9004A47F5 /* tclXtTest.c */, + ); + path = unix; + sourceTree = "<group>"; + }; + F96D444308F272B9004A47F5 /* dltest */ = { + isa = PBXGroup; + children = ( + F96D444408F272B9004A47F5 /* Makefile.in */, + F96D444508F272B9004A47F5 /* pkga.c */, + F96D444608F272B9004A47F5 /* pkgb.c */, + F96D444708F272B9004A47F5 /* pkgc.c */, + F96D444808F272B9004A47F5 /* pkgd.c */, + F96D444908F272B9004A47F5 /* pkge.c */, + F96D444B08F272B9004A47F5 /* pkgua.c */, + F96D444C08F272B9004A47F5 /* README */, + ); + path = dltest; + sourceTree = "<group>"; + }; + F96D446E08F272B9004A47F5 /* win */ = { + isa = PBXGroup; + children = ( + F96D447008F272BA004A47F5 /* aclocal.m4 */, + F96D447108F272BA004A47F5 /* buildall.vc.bat */, + F96D447208F272BA004A47F5 /* cat.c */, + F96D447308F272BA004A47F5 /* coffbase.txt */, + F96D447408F272BA004A47F5 /* configure */, + F96D447508F272BA004A47F5 /* configure.in */, + F96D447608F272BA004A47F5 /* makefile.bc */, + F96D447708F272BA004A47F5 /* Makefile.in */, + F96D447808F272BA004A47F5 /* makefile.vc */, + F96D447908F272BA004A47F5 /* nmakehlp.c */, + F96D447A08F272BA004A47F5 /* README */, + F96D447C08F272BA004A47F5 /* rules.vc */, + F96D447D08F272BA004A47F5 /* stub16.c */, + F96D447E08F272BA004A47F5 /* tcl.dsp */, + F96D447F08F272BA004A47F5 /* tcl.dsw */, + F96D448008F272BA004A47F5 /* tcl.hpj.in */, + F96D448108F272BA004A47F5 /* tcl.m4 */, + F96D448208F272BA004A47F5 /* tcl.rc */, + F96D448308F272BA004A47F5 /* tclAppInit.c */, + F96D448408F272BA004A47F5 /* tclConfig.sh.in */, + F96D448608F272BA004A47F5 /* tclsh.rc */, + F96D448708F272BA004A47F5 /* tclWin32Dll.c */, + F96D448808F272BA004A47F5 /* tclWinChan.c */, + F96D448908F272BA004A47F5 /* tclWinConsole.c */, + F96D448A08F272BA004A47F5 /* tclWinDde.c */, + F96D448B08F272BA004A47F5 /* tclWinError.c */, + F96D448C08F272BA004A47F5 /* tclWinFCmd.c */, + F96D448D08F272BA004A47F5 /* tclWinFile.c */, + F96D448E08F272BA004A47F5 /* tclWinInit.c */, + F96D448F08F272BA004A47F5 /* tclWinInt.h */, + F96D449008F272BA004A47F5 /* tclWinLoad.c */, + F96D449108F272BA004A47F5 /* tclWinNotify.c */, + F96D449208F272BA004A47F5 /* tclWinPipe.c */, + F96D449308F272BA004A47F5 /* tclWinPort.h */, + F96D449408F272BA004A47F5 /* tclWinReg.c */, + F96D449508F272BA004A47F5 /* tclWinSerial.c */, + F96D449608F272BA004A47F5 /* tclWinSock.c */, + F96D449708F272BA004A47F5 /* tclWinTest.c */, + F96D449808F272BA004A47F5 /* tclWinThrd.c */, + F96D449908F272BA004A47F5 /* tclWinThrd.h */, + F96D449A08F272BA004A47F5 /* tclWinTime.c */, + ); + path = win; + sourceTree = "<group>"; + }; + F9ECB1110B26521500A28025 /* platform */ = { + isa = PBXGroup; + children = ( + F9ECB1120B26521500A28025 /* pkgIndex.tcl */, + F9ECB1130B26521500A28025 /* platform.tcl */, + F9ECB1140B26521500A28025 /* shell.tcl */, + ); + path = platform; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76FA90486AB0100D96B5E /* tktest */ = { + isa = PBXNativeTarget; + buildConfigurationList = F95CC8B009158F3100EA5ACE /* Build configuration list for PBXNativeTarget "tktest" */; + buildPhases = ( + F9A5C5F508F651A2008AE941 /* ShellScript */, + F9A5C5F608F651AB008AE941 /* ShellScript */, + 8DD76FAB0486AB0100D96B5E /* Sources */, + 8DD76FAD0486AB0100D96B5E /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tktest; + productInstallPath = "$(BINDIR)"; + productName = tktest; + productReference = 8DD76FB20486AB0100D96B5E /* tktest */; + productType = "com.apple.product-type.tool"; + }; + F97258A50A86873C00096C78 /* tktest-X11 */ = { + isa = PBXNativeTarget; + buildConfigurationList = F97258A80A86873D00096C78 /* Build configuration list for PBXNativeTarget "tktest-X11" */; + buildPhases = ( + F9FD30B40CC1AD070073837D /* ShellScript */, + F9FD30B50CC1AD070073837D /* ShellScript */, + F9FD30BB0CC1AD070073837D /* Sources */, + F9FD31E30CC1AD070073837D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "tktest-X11"; + productInstallPath = "$(BINDIR)"; + productName = tktest; + productReference = F9FD31F40CC1AD070073837D /* tktest-X11 */; + productType = "com.apple.product-type.tool"; + }; + F9E61D16090A3E94002B3151 /* Tk */ = { + isa = PBXNativeTarget; + buildConfigurationList = F95CC8AB09158F3100EA5ACE /* Build configuration list for PBXNativeTarget "Tk" */; + buildPhases = ( + F97AF02F0B665DA900310EA2 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Tk; + productName = Wish; + productReference = F9A3084B08F2D4CE00BAE1AB /* Wish.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + }; + buildConfigurationList = F95CC8B509158F3100EA5ACE /* Build configuration list for PBXProject "Wish" */; + compatibilityVersion = "Xcode 3.1"; + hasScannedForEncodings = 1; + mainGroup = 08FB7794FE84155DC02AAC07 /* Wish */; + projectDirPath = ""; + projectRoot = ..; + targets = ( + F9E61D16090A3E94002B3151 /* Tk */, + 8DD76FA90486AB0100D96B5E /* tktest */, + F97258A50A86873C00096C78 /* tktest-X11 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + F97AF02F0B665DA900310EA2 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_TEMP_DIR}/.none", + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${WRAPPER_NAME}", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/bash; + shellScript = "gnumake -C \"${TK_SRCROOT}/macosx\" -j \"$(sysctl -n hw.activecpu)\" \"$(echo \"${ACTION}\" | sed -e s/build// -e s/clean/distclean/ -e s/..\\*/\\&-/)${MAKE_TARGET}\" CFLAGS_WARNING=\"${WARNING_CFLAGS}\" CFLAGS_OPTIMIZE=\"-O${GCC_OPTIMIZATION_LEVEL}\" SYMROOT=\"${BUILT_PRODUCTS_DIR}\" OBJ_DIR=\"${OBJECT_FILE_DIR}\" INSTALL_ROOT=\"${DSTROOT}\" PREFIX=\"${PREFIX}\" BINDIR=\"${BINDIR}\" LIBDIR=\"${FRAMEWORK_INSTALL_PATH}\" MANDIR=\"${MANDIR}\" EXTRA_CONFIGURE_ARGS=\"${CONFIGURE_ARGS}\" APPLICATION_INSTALL_PATH=\"${APPLICATION_INSTALL_PATH}\" TCL_BUILD_DIR=\"${TCL_BUILD_DIR}\" TCL_FRAMEWORK_DIR=\"${TCL_FRAMEWORK_DIR}\" ${EXTRA_MAKE_FLAGS}\nresult=$?\nif [ -e \"${BUILT_PRODUCTS_DIR}/tktest\" ]; then\n\trm -f \"${BUILT_PRODUCTS_DIR}/tktest\"\nfi\necho \"Done\"\nrm -f \"${SCRIPT_INPUT_FILE_0}\"\nexit ${result}\n"; + showEnvVarsInLog = 0; + }; + F9A5C5F508F651A2008AE941 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TCL_SRCROOT)/macosx/configure.ac", + "$(TCL_SRCROOT)/unix/configure.in", + "$(TCL_SRCROOT)/unix/tcl.m4", + "$(TCL_SRCROOT)/unix/aclocal.m4", + "$(TCL_SRCROOT)/unix/tclConfig.sh.in", + "$(TCL_SRCROOT)/unix/Makefile.in", + "$(TCL_SRCROOT)/unix/dltest/Makefile.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tcl/tclConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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"; + showEnvVarsInLog = 0; + }; + F9A5C5F608F651AB008AE941 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TK_SRCROOT)/macosx/configure.ac", + "$(TK_SRCROOT)/unix/configure.in", + "$(TK_SRCROOT)/unix/tcl.m4", + "$(TK_SRCROOT)/unix/aclocal.m4", + "$(TK_SRCROOT)/unix/tkConfig.sh.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tk/tkConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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"; + showEnvVarsInLog = 0; + }; + F9FD30B40CC1AD070073837D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TCL_SRCROOT)/macosx/configure.ac", + "$(TCL_SRCROOT)/unix/configure.in", + "$(TCL_SRCROOT)/unix/tcl.m4", + "$(TCL_SRCROOT)/unix/aclocal.m4", + "$(TCL_SRCROOT)/unix/tclConfig.sh.in", + "$(TCL_SRCROOT)/unix/Makefile.in", + "$(TCL_SRCROOT)/unix/dltest/Makefile.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tcl/tclConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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 --disable-corefoundation ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi\n"; + showEnvVarsInLog = 0; + }; + F9FD30B50CC1AD070073837D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TK_SRCROOT)/macosx/configure.ac", + "$(TK_SRCROOT)/unix/configure.in", + "$(TK_SRCROOT)/unix/tcl.m4", + "$(TK_SRCROOT)/unix/aclocal.m4", + "$(TK_SRCROOT)/unix/tkConfig.sh.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tk/tkConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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 PATH=\"${PATH}:/usr/X11R6/bin\" \"${TK_SRCROOT}\"/macosx/configure --cache-file=../config.cache --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} --mandir=${MANDIR} --includedir=${INCLUDEDIR} --disable-shared --disable-corefoundation --enable-xft --with-tcl=../tcl ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76FAB0486AB0100D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F96D456F08F272BB004A47F5 /* regcomp.c in Sources */, + F96D457208F272BB004A47F5 /* regerror.c in Sources */, + F96D457508F272BB004A47F5 /* regexec.c in Sources */, + F96D457608F272BB004A47F5 /* regfree.c in Sources */, + F96D457B08F272BB004A47F5 /* tclAlloc.c in Sources */, + F96D457C08F272BB004A47F5 /* tclAsync.c in Sources */, + F96D457D08F272BB004A47F5 /* tclBasic.c in Sources */, + F96D457E08F272BC004A47F5 /* tclBinary.c in Sources */, + F96D457F08F272BC004A47F5 /* tclCkalloc.c in Sources */, + F96D458008F272BC004A47F5 /* tclClock.c in Sources */, + F96D458108F272BC004A47F5 /* tclCmdAH.c in Sources */, + F96D458208F272BC004A47F5 /* tclCmdIL.c in Sources */, + F96D458308F272BC004A47F5 /* tclCmdMZ.c in Sources */, + F96D458408F272BC004A47F5 /* tclCompCmds.c in Sources */, + F96D458508F272BC004A47F5 /* tclCompExpr.c in Sources */, + F96D458608F272BC004A47F5 /* tclCompile.c in Sources */, + F96D458808F272BC004A47F5 /* tclConfig.c in Sources */, + F96D458908F272BC004A47F5 /* tclDate.c in Sources */, + F96D458B08F272BC004A47F5 /* tclDictObj.c in Sources */, + F96D458C08F272BC004A47F5 /* tclEncoding.c in Sources */, + F96D458D08F272BC004A47F5 /* tclEnv.c in Sources */, + F96D458E08F272BC004A47F5 /* tclEvent.c in Sources */, + F96D458F08F272BC004A47F5 /* tclExecute.c in Sources */, + F96D459008F272BC004A47F5 /* tclFCmd.c in Sources */, + F96D459108F272BC004A47F5 /* tclFileName.c in Sources */, + F96D459308F272BC004A47F5 /* tclGet.c in Sources */, + F96D459508F272BC004A47F5 /* tclHash.c in Sources */, + F96D459608F272BC004A47F5 /* tclHistory.c in Sources */, + F96D459708F272BC004A47F5 /* tclIndexObj.c in Sources */, + F96D459B08F272BC004A47F5 /* tclInterp.c in Sources */, + F96D459D08F272BC004A47F5 /* tclIO.c in Sources */, + F96D459F08F272BC004A47F5 /* tclIOCmd.c in Sources */, + F96D45A008F272BC004A47F5 /* tclIOGT.c in Sources */, + F96D45A108F272BC004A47F5 /* tclIORChan.c in Sources */, + F96D45A208F272BC004A47F5 /* tclIOSock.c in Sources */, + F96D45A308F272BC004A47F5 /* tclIOUtil.c in Sources */, + F96D45A408F272BC004A47F5 /* tclLink.c in Sources */, + F96D45A508F272BC004A47F5 /* tclListObj.c in Sources */, + F96D45A608F272BC004A47F5 /* tclLiteral.c in Sources */, + F96D45A708F272BC004A47F5 /* tclLoad.c in Sources */, + F96D45A908F272BC004A47F5 /* tclMain.c in Sources */, + F96D45AA08F272BC004A47F5 /* tclNamesp.c in Sources */, + F96D45AB08F272BC004A47F5 /* tclNotify.c in Sources */, + F96D45AC08F272BC004A47F5 /* tclObj.c in Sources */, + F96D45AD08F272BC004A47F5 /* tclPanic.c in Sources */, + F96D45AE08F272BC004A47F5 /* tclParse.c in Sources */, + F96D45B008F272BC004A47F5 /* tclPathObj.c in Sources */, + F96D45B108F272BC004A47F5 /* tclPipe.c in Sources */, + F96D45B208F272BC004A47F5 /* tclPkg.c in Sources */, + F96D45B308F272BC004A47F5 /* tclPkgConfig.c in Sources */, + F96D45B608F272BC004A47F5 /* tclPosixStr.c in Sources */, + F96D45B708F272BC004A47F5 /* tclPreserve.c in Sources */, + F96D45B808F272BC004A47F5 /* tclProc.c in Sources */, + F96D45B908F272BC004A47F5 /* tclRegexp.c in Sources */, + F96D45BB08F272BC004A47F5 /* tclResolve.c in Sources */, + F96D45BC08F272BC004A47F5 /* tclResult.c in Sources */, + F96D45BD08F272BC004A47F5 /* tclScan.c in Sources */, + F96D45BE08F272BC004A47F5 /* tclStringObj.c in Sources */, + F96D45C308F272BC004A47F5 /* tclStrToD.c in Sources */, + F96D45C408F272BC004A47F5 /* tclStubInit.c in Sources */, + F96D45C508F272BC004A47F5 /* tclStubLib.c in Sources */, + F96D45C908F272BC004A47F5 /* tclThread.c in Sources */, + F96D45CA08F272BC004A47F5 /* tclThreadAlloc.c in Sources */, + F96D45CB08F272BC004A47F5 /* tclThreadJoin.c in Sources */, + F96D45CC08F272BC004A47F5 /* tclThreadStorage.c in Sources */, + F96D45CE08F272BC004A47F5 /* tclTimer.c in Sources */, + F96D45D008F272BC004A47F5 /* tclTomMathInterface.c in Sources */, + F96D45D108F272BC004A47F5 /* tclTrace.c in Sources */, + F96D45D308F272BC004A47F5 /* tclUtf.c in Sources */, + F96D45D408F272BC004A47F5 /* tclUtil.c in Sources */, + F96D45D508F272BC004A47F5 /* tclVar.c in Sources */, + F96D48E208F272C3004A47F5 /* bn_fast_s_mp_mul_digs.c in Sources */, + F96D48E408F272C3004A47F5 /* bn_fast_s_mp_sqr.c in Sources */, + F96D48E708F272C3004A47F5 /* bn_mp_add.c in Sources */, + F96D48E808F272C3004A47F5 /* bn_mp_add_d.c in Sources */, + F9E61D2B090A48A4002B3151 /* bn_mp_and.c in Sources */, + F96D48EB08F272C3004A47F5 /* bn_mp_clamp.c in Sources */, + F96D48EC08F272C3004A47F5 /* bn_mp_clear.c in Sources */, + F96D48ED08F272C3004A47F5 /* bn_mp_clear_multi.c in Sources */, + F96D48EE08F272C3004A47F5 /* bn_mp_cmp.c in Sources */, + F9E61D28090A481F002B3151 /* bn_mp_cmp_d.c in Sources */, + F96D48F008F272C3004A47F5 /* bn_mp_cmp_mag.c in Sources */, + F96D48F208F272C3004A47F5 /* bn_mp_copy.c in Sources */, + F96D48F308F272C3004A47F5 /* bn_mp_count_bits.c in Sources */, + F96D48F408F272C3004A47F5 /* bn_mp_div.c in Sources */, + F96D48F508F272C3004A47F5 /* bn_mp_div_2.c in Sources */, + F96D48F608F272C3004A47F5 /* bn_mp_div_2d.c in Sources */, + F96D48F708F272C3004A47F5 /* bn_mp_div_3.c in Sources */, + F96D48F808F272C3004A47F5 /* bn_mp_div_d.c in Sources */, + F96D48FC08F272C3004A47F5 /* bn_mp_exch.c in Sources */, + F9E61D2C090A48AC002B3151 /* bn_mp_expt_d.c in Sources */, + F96D490508F272C3004A47F5 /* bn_mp_grow.c in Sources */, + F96D490608F272C3004A47F5 /* bn_mp_init.c in Sources */, + F96D490708F272C3004A47F5 /* bn_mp_init_copy.c in Sources */, + F96D490808F272C3004A47F5 /* bn_mp_init_multi.c in Sources */, + F96D490908F272C3004A47F5 /* bn_mp_init_set.c in Sources */, + F96D490B08F272C3004A47F5 /* bn_mp_init_size.c in Sources */, + F96D491008F272C3004A47F5 /* bn_mp_karatsuba_mul.c in Sources */, + F96D491108F272C3004A47F5 /* bn_mp_karatsuba_sqr.c in Sources */, + F96D491308F272C3004A47F5 /* bn_mp_lshd.c in Sources */, + F96D491408F272C3004A47F5 /* bn_mp_mod.c in Sources */, + F96D491508F272C3004A47F5 /* bn_mp_mod_2d.c in Sources */, + F96D491A08F272C3004A47F5 /* bn_mp_mul.c in Sources */, + F96D491B08F272C3004A47F5 /* bn_mp_mul_2.c in Sources */, + F96D491C08F272C3004A47F5 /* bn_mp_mul_2d.c in Sources */, + F96D491D08F272C3004A47F5 /* bn_mp_mul_d.c in Sources */, + F9E61D29090A486C002B3151 /* bn_mp_neg.c in Sources */, + F9E61D2E090A48BF002B3151 /* bn_mp_or.c in Sources */, + F96D492908F272C3004A47F5 /* bn_mp_radix_size.c in Sources */, + F96D492A08F272C3004A47F5 /* bn_mp_radix_smap.c in Sources */, + F96D492C08F272C3004A47F5 /* bn_mp_read_radix.c in Sources */, + F96D493708F272C3004A47F5 /* bn_mp_rshd.c in Sources */, + F96D493808F272C3004A47F5 /* bn_mp_set.c in Sources */, + F9E61D2F090A48C7002B3151 /* bn_mp_shrink.c in Sources */, + F96D493C08F272C3004A47F5 /* bn_mp_sqr.c in Sources */, + F9E61D2A090A4891002B3151 /* bn_mp_sqrt.c in Sources */, + F96D493F08F272C3004A47F5 /* bn_mp_sub.c in Sources */, + F96D494008F272C3004A47F5 /* bn_mp_sub_d.c in Sources */, + F9E61D30090A48E2002B3151 /* bn_mp_to_unsigned_bin_n.c in Sources */, + F9E61D31090A48F9002B3151 /* bn_mp_to_unsigned_bin.c in Sources */, + F96D494608F272C3004A47F5 /* bn_mp_toom_mul.c in Sources */, + F96D494708F272C3004A47F5 /* bn_mp_toom_sqr.c in Sources */, + F96D494908F272C3004A47F5 /* bn_mp_toradix_n.c in Sources */, + F9E61D32090A48FA002B3151 /* bn_mp_unsigned_bin_size.c in Sources */, + F9E61D2D090A48BB002B3151 /* bn_mp_xor.c in Sources */, + F96D494C08F272C3004A47F5 /* bn_mp_zero.c in Sources */, + F96D494E08F272C3004A47F5 /* bn_reverse.c in Sources */, + F96D494F08F272C3004A47F5 /* bn_s_mp_add.c in Sources */, + F96D495108F272C3004A47F5 /* bn_s_mp_mul_digs.c in Sources */, + F96D495308F272C3004A47F5 /* bn_s_mp_sqr.c in Sources */, + F96D495408F272C3004A47F5 /* bn_s_mp_sub.c in Sources */, + F96D495508F272C3004A47F5 /* bncore.c in Sources */, + F96D49A908F272C4004A47F5 /* tclMacOSXBundle.c in Sources */, + F96D49AD08F272C4004A47F5 /* tclMacOSXFCmd.c in Sources */, + F96D49AE08F272C4004A47F5 /* tclMacOSXNotify.c in Sources */, + F96D4AC608F272C9004A47F5 /* tclLoadDyld.c in Sources */, + F96D4ACA08F272C9004A47F5 /* tclUnixChan.c in Sources */, + F9FC77B80AB29E9100B7077D /* tclUnixCompat.c in Sources */, + F96D4ACB08F272C9004A47F5 /* tclUnixEvent.c in Sources */, + F96D4ACC08F272C9004A47F5 /* tclUnixFCmd.c in Sources */, + F96D4ACD08F272C9004A47F5 /* tclUnixFile.c in Sources */, + F96D4ACE08F272C9004A47F5 /* tclUnixInit.c in Sources */, + F96D4ACF08F272C9004A47F5 /* tclUnixNotfy.c in Sources */, + F96D4AD008F272C9004A47F5 /* tclUnixPipe.c in Sources */, + F96D4AD208F272CA004A47F5 /* tclUnixSock.c in Sources */, + F96D4AD408F272CA004A47F5 /* tclUnixThrd.c in Sources */, + F96D4AD608F272CA004A47F5 /* tclUnixTime.c in Sources */, + F9F4415E0C8BAE6F00BCCD67 /* tclDTrace.d in Sources */, + F966BDCF08F27A3F005CB29B /* tk3d.c in Sources */, + F966BDD108F27A3F005CB29B /* tkArgv.c in Sources */, + F966BDD208F27A3F005CB29B /* tkAtom.c in Sources */, + F966BDD308F27A3F005CB29B /* tkBind.c in Sources */, + F966BDD408F27A3F005CB29B /* tkBitmap.c in Sources */, + F966BDD508F27A3F005CB29B /* tkButton.c in Sources */, + F966BDD708F27A3F005CB29B /* tkCanvArc.c in Sources */, + F966BDD808F27A3F005CB29B /* tkCanvas.c in Sources */, + F966BDDA08F27A3F005CB29B /* tkCanvBmap.c in Sources */, + F966BDDB08F27A3F005CB29B /* tkCanvImg.c in Sources */, + F966BDDC08F27A3F005CB29B /* tkCanvLine.c in Sources */, + F966BDDD08F27A3F005CB29B /* tkCanvPoly.c in Sources */, + F966BDDE08F27A3F005CB29B /* tkCanvPs.c in Sources */, + F966BDE008F27A3F005CB29B /* tkCanvText.c in Sources */, + F966BDE108F27A3F005CB29B /* tkCanvUtil.c in Sources */, + F966BDE208F27A3F005CB29B /* tkCanvWind.c in Sources */, + F966BDE308F27A3F005CB29B /* tkClipboard.c in Sources */, + F966BDE408F27A3F005CB29B /* tkCmds.c in Sources */, + F966BDE508F27A3F005CB29B /* tkColor.c in Sources */, + F966BDE708F27A3F005CB29B /* tkConfig.c in Sources */, + F966BDE808F27A3F005CB29B /* tkConsole.c in Sources */, + F966BDE908F27A3F005CB29B /* tkCursor.c in Sources */, + F966BDEB08F27A3F005CB29B /* tkEntry.c in Sources */, + F966BDED08F27A3F005CB29B /* tkError.c in Sources */, + F966BDEE08F27A3F005CB29B /* tkEvent.c in Sources */, + F966BDEF08F27A3F005CB29B /* tkFileFilter.c in Sources */, + F966BDF108F27A3F005CB29B /* tkFocus.c in Sources */, + F966BDF208F27A3F005CB29B /* tkFont.c in Sources */, + F966BDF408F27A3F005CB29B /* tkFrame.c in Sources */, + F966BDF508F27A3F005CB29B /* tkGC.c in Sources */, + F966BDF608F27A3F005CB29B /* tkGeometry.c in Sources */, + F966BDF708F27A3F005CB29B /* tkGet.c in Sources */, + F966BDF808F27A3F005CB29B /* tkGrab.c in Sources */, + F966BDF908F27A3F005CB29B /* tkGrid.c in Sources */, + F966BDFA08F27A3F005CB29B /* tkImage.c in Sources */, + F966BDFB08F27A3F005CB29B /* tkImgBmap.c in Sources */, + F966BDFC08F27A3F005CB29B /* tkImgGIF.c in Sources */, + F966BDFD08F27A3F005CB29B /* tkImgPhoto.c in Sources */, + F966BDFE08F27A3F005CB29B /* tkImgPPM.c in Sources */, + F966BE0708F27A3F005CB29B /* tkListbox.c in Sources */, + F966BE0808F27A3F005CB29B /* tkMacWinMenu.c in Sources */, + F966BE0908F27A3F005CB29B /* tkMain.c in Sources */, + F966BE0A08F27A3F005CB29B /* tkMenu.c in Sources */, + F966BE0C08F27A3F005CB29B /* tkMenubutton.c in Sources */, + F966BE0E08F27A3F005CB29B /* tkMenuDraw.c in Sources */, + F966BE0F08F27A3F005CB29B /* tkMessage.c in Sources */, + F966BE1008F27A3F005CB29B /* tkObj.c in Sources */, + F966BE1108F27A3F005CB29B /* tkOldConfig.c in Sources */, + F9067BCD0BFBA2900074F726 /* tkOldTest.c in Sources */, + F966BE1208F27A3F005CB29B /* tkOption.c in Sources */, + F966BE1308F27A3F005CB29B /* tkPack.c in Sources */, + F966BE1408F27A3F005CB29B /* tkPanedWindow.c in Sources */, + F966BE1508F27A3F005CB29B /* tkPlace.c in Sources */, + F966BE1708F27A3F005CB29B /* tkPointer.c in Sources */, + F966BE1908F27A3F005CB29B /* tkRectOval.c in Sources */, + F966BE1A08F27A3F005CB29B /* tkScale.c in Sources */, + F966BE1C08F27A40005CB29B /* tkScrollbar.c in Sources */, + F966BE1E08F27A40005CB29B /* tkSelect.c in Sources */, + F966BE2008F27A40005CB29B /* tkSquare.c in Sources */, + F966BE2208F27A40005CB29B /* tkStubInit.c in Sources */, + F966BE2308F27A40005CB29B /* tkStubLib.c in Sources */, + F966BE2408F27A40005CB29B /* tkStyle.c in Sources */, + F966BE2508F27A40005CB29B /* tkTest.c in Sources */, + F966BE2608F27A40005CB29B /* tkText.c in Sources */, + F966BE2808F27A40005CB29B /* tkTextBTree.c in Sources */, + F966BE2908F27A40005CB29B /* tkTextDisp.c in Sources */, + F966BE2B08F27A40005CB29B /* tkTextImage.c in Sources */, + F966BE2C08F27A40005CB29B /* tkTextIndex.c in Sources */, + F966BE2D08F27A40005CB29B /* tkTextMark.c in Sources */, + F966BE2E08F27A40005CB29B /* tkTextTag.c in Sources */, + F966BE2F08F27A40005CB29B /* tkTextWind.c in Sources */, + F966BE3008F27A40005CB29B /* tkTrig.c in Sources */, + F966BE3108F27A40005CB29B /* tkUndo.c in Sources */, + F966BE3308F27A40005CB29B /* tkUtil.c in Sources */, + F966BE3408F27A40005CB29B /* tkVisual.c in Sources */, + F966BE3508F27A40005CB29B /* tkWindow.c in Sources */, + F96888050AF786D5000797B5 /* ttkBlink.c in Sources */, + F96888060AF786D5000797B5 /* ttkButton.c in Sources */, + F96888070AF786D5000797B5 /* ttkCache.c in Sources */, + F96888080AF786D5000797B5 /* ttkClamTheme.c in Sources */, + F96888090AF786D5000797B5 /* ttkClassicTheme.c in Sources */, + F968880A0AF786D5000797B5 /* ttkDefaultTheme.c in Sources */, + F968880B0AF786D5000797B5 /* ttkElements.c in Sources */, + F968880C0AF786D5000797B5 /* ttkEntry.c in Sources */, + F968880D0AF786D5000797B5 /* ttkFrame.c in Sources */, + F968880E0AF786D5000797B5 /* ttkImage.c in Sources */, + F968880F0AF786D5000797B5 /* ttkInit.c in Sources */, + F96888100AF786D5000797B5 /* ttkLabel.c in Sources */, + F96888110AF786D5000797B5 /* ttkLayout.c in Sources */, + F96888120AF786D5000797B5 /* ttkManager.c in Sources */, + F96888130AF786D5000797B5 /* ttkNotebook.c in Sources */, + F96888140AF786D5000797B5 /* ttkPanedwindow.c in Sources */, + F96888150AF786D5000797B5 /* ttkProgress.c in Sources */, + F96888160AF786D5000797B5 /* ttkScale.c in Sources */, + F96888170AF786D5000797B5 /* ttkScroll.c in Sources */, + F96888180AF786D5000797B5 /* ttkScrollbar.c in Sources */, + F96888190AF786D5000797B5 /* ttkSeparator.c in Sources */, + F968881A0AF786D5000797B5 /* ttkSquare.c in Sources */, + F968881B0AF786D5000797B5 /* ttkState.c in Sources */, + F968881C0AF786D5000797B5 /* ttkStubInit.c in Sources */, + F968881D0AF786D5000797B5 /* ttkStubLib.c in Sources */, + F968881E0AF786D5000797B5 /* ttkTagSet.c in Sources */, + F968881F0AF786D5000797B5 /* ttkTheme.c in Sources */, + F96888200AF786D5000797B5 /* ttkTrace.c in Sources */, + F96888210AF786D5000797B5 /* ttkTrack.c in Sources */, + F96888220AF786D5000797B5 /* ttkTreeview.c in Sources */, + F96888230AF786D5000797B5 /* ttkWidget.c in Sources */, + F966BEDB08F27A40005CB29B /* tkMacOSXBitmap.c in Sources */, + F966BEDC08F27A40005CB29B /* tkMacOSXButton.c in Sources */, + F966BEDE08F27A40005CB29B /* tkMacOSXClipboard.c in Sources */, + F966BEDF08F27A40005CB29B /* tkMacOSXColor.c in Sources */, + F966BEE008F27A40005CB29B /* tkMacOSXConfig.c in Sources */, + F966BEE108F27A40005CB29B /* tkMacOSXCursor.c in Sources */, + F966BEE308F27A40005CB29B /* tkMacOSXDebug.c in Sources */, + F966BEE608F27A40005CB29B /* tkMacOSXDialog.c in Sources */, + F966BEE708F27A40005CB29B /* tkMacOSXDraw.c in Sources */, + F966BEE808F27A40005CB29B /* tkMacOSXEmbed.c in Sources */, + F966BEE908F27A40005CB29B /* tkMacOSXEntry.c in Sources */, + F966BEEA08F27A40005CB29B /* tkMacOSXEvent.c in Sources */, + F966BEEC08F27A40005CB29B /* tkMacOSXFont.c in Sources */, + F966BEED08F27A40005CB29B /* tkMacOSXHLEvents.c in Sources */, + F966BEEE08F27A40005CB29B /* tkMacOSXInit.c in Sources */, + F966BEF108F27A40005CB29B /* tkMacOSXKeyboard.c in Sources */, + F966BEF208F27A40005CB29B /* tkMacOSXKeyEvent.c in Sources */, + F966BEF308F27A40005CB29B /* tkMacOSXMenu.c in Sources */, + F966BEF608F27A40005CB29B /* tkMacOSXMenubutton.c in Sources */, + F966BEF708F27A40005CB29B /* tkMacOSXMenus.c in Sources */, + F966BEF808F27A40005CB29B /* tkMacOSXMouseEvent.c in Sources */, + F966BEF908F27A40005CB29B /* tkMacOSXNotify.c in Sources */, + F966BF0108F27A40005CB29B /* tkMacOSXRegion.c in Sources */, + F966BF0308F27A40005CB29B /* tkMacOSXScrlbr.c in Sources */, + F966BF0408F27A40005CB29B /* tkMacOSXSend.c in Sources */, + F966BF0508F27A40005CB29B /* tkMacOSXSubwindows.c in Sources */, + F966BF0608F27A40005CB29B /* tkMacOSXTest.c in Sources */, + F966BF0708F27A40005CB29B /* tkMacOSXWindowEvent.c in Sources */, + F966BF0808F27A40005CB29B /* tkMacOSXWm.c in Sources */, + F966BF0B08F27A40005CB29B /* tkMacOSXXStubs.c in Sources */, + F96888850AF78938000797B5 /* ttkMacOSXTheme.c in Sources */, + F966BF7F08F27A41005CB29B /* tkAppInit.c in Sources */, + F966BF8308F27A41005CB29B /* tkUnix3d.c in Sources */, + F966BF9608F27A41005CB29B /* tkUnixScale.c in Sources */, + F966C02A08F27A42005CB29B /* xcolors.c in Sources */, + F966C02B08F27A42005CB29B /* xdraw.c in Sources */, + F966C02C08F27A42005CB29B /* xgc.c in Sources */, + F966C02D08F27A42005CB29B /* ximage.c in Sources */, + F966C02E08F27A42005CB29B /* xutil.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F9FD30BB0CC1AD070073837D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F9FD30BC0CC1AD070073837D /* regcomp.c in Sources */, + F9FD30BD0CC1AD070073837D /* regerror.c in Sources */, + F9FD30BE0CC1AD070073837D /* regexec.c in Sources */, + F9FD30BF0CC1AD070073837D /* regfree.c in Sources */, + F9FD30C00CC1AD070073837D /* tclAlloc.c in Sources */, + F9FD30C10CC1AD070073837D /* tclAsync.c in Sources */, + F9FD30C20CC1AD070073837D /* tclBasic.c in Sources */, + F9FD30C30CC1AD070073837D /* tclBinary.c in Sources */, + F9FD30C40CC1AD070073837D /* tclCkalloc.c in Sources */, + F9FD30C50CC1AD070073837D /* tclClock.c in Sources */, + F9FD30C60CC1AD070073837D /* tclCmdAH.c in Sources */, + F9FD30C70CC1AD070073837D /* tclCmdIL.c in Sources */, + F9FD30C80CC1AD070073837D /* tclCmdMZ.c in Sources */, + F9FD30C90CC1AD070073837D /* tclCompCmds.c in Sources */, + F9FD30CA0CC1AD070073837D /* tclCompExpr.c in Sources */, + F9FD30CB0CC1AD070073837D /* tclCompile.c in Sources */, + F9FD30CC0CC1AD070073837D /* tclConfig.c in Sources */, + F9FD30CD0CC1AD070073837D /* tclDate.c in Sources */, + F9FD30CE0CC1AD070073837D /* tclDictObj.c in Sources */, + F9FD30CF0CC1AD070073837D /* tclEncoding.c in Sources */, + F9FD30D00CC1AD070073837D /* tclEnv.c in Sources */, + F9FD30D10CC1AD070073837D /* tclEvent.c in Sources */, + F9FD30D20CC1AD070073837D /* tclExecute.c in Sources */, + F9FD30D30CC1AD070073837D /* tclFCmd.c in Sources */, + F9FD30D40CC1AD070073837D /* tclFileName.c in Sources */, + F9FD30D50CC1AD070073837D /* tclGet.c in Sources */, + F9FD30D60CC1AD070073837D /* tclHash.c in Sources */, + F9FD30D70CC1AD070073837D /* tclHistory.c in Sources */, + F9FD30D80CC1AD070073837D /* tclIndexObj.c in Sources */, + F9FD30D90CC1AD070073837D /* tclInterp.c in Sources */, + F9FD30DA0CC1AD070073837D /* tclIO.c in Sources */, + F9FD30DB0CC1AD070073837D /* tclIOCmd.c in Sources */, + F9FD30DC0CC1AD070073837D /* tclIOGT.c in Sources */, + F9FD30DD0CC1AD070073837D /* tclIORChan.c in Sources */, + F9FD30DE0CC1AD070073837D /* tclIOSock.c in Sources */, + F9FD30DF0CC1AD070073837D /* tclIOUtil.c in Sources */, + F9FD30E00CC1AD070073837D /* tclLink.c in Sources */, + F9FD30E10CC1AD070073837D /* tclListObj.c in Sources */, + F9FD30E20CC1AD070073837D /* tclLiteral.c in Sources */, + F9FD30E30CC1AD070073837D /* tclLoad.c in Sources */, + F9FD30E40CC1AD070073837D /* tclMain.c in Sources */, + F9FD30E50CC1AD070073837D /* tclNamesp.c in Sources */, + F9FD30E60CC1AD070073837D /* tclNotify.c in Sources */, + F9FD30E70CC1AD070073837D /* tclObj.c in Sources */, + F9FD30E80CC1AD070073837D /* tclPanic.c in Sources */, + F9FD30E90CC1AD070073837D /* tclParse.c in Sources */, + F9FD30EA0CC1AD070073837D /* tclPathObj.c in Sources */, + F9FD30EB0CC1AD070073837D /* tclPipe.c in Sources */, + F9FD30EC0CC1AD070073837D /* tclPkg.c in Sources */, + F9FD30ED0CC1AD070073837D /* tclPkgConfig.c in Sources */, + F9FD30EE0CC1AD070073837D /* tclPosixStr.c in Sources */, + F9FD30EF0CC1AD070073837D /* tclPreserve.c in Sources */, + F9FD30F00CC1AD070073837D /* tclProc.c in Sources */, + F9FD30F10CC1AD070073837D /* tclRegexp.c in Sources */, + F9FD30F20CC1AD070073837D /* tclResolve.c in Sources */, + F9FD30F30CC1AD070073837D /* tclResult.c in Sources */, + F9FD30F40CC1AD070073837D /* tclScan.c in Sources */, + F9FD30F50CC1AD070073837D /* tclStringObj.c in Sources */, + F9FD30F60CC1AD070073837D /* tclStrToD.c in Sources */, + F9FD30F70CC1AD070073837D /* tclStubInit.c in Sources */, + F9FD30F80CC1AD070073837D /* tclStubLib.c in Sources */, + F9FD30F90CC1AD070073837D /* tclThread.c in Sources */, + F9FD30FA0CC1AD070073837D /* tclThreadAlloc.c in Sources */, + F9FD30FB0CC1AD070073837D /* tclThreadJoin.c in Sources */, + F9FD30FC0CC1AD070073837D /* tclThreadStorage.c in Sources */, + F9FD30FD0CC1AD070073837D /* tclTimer.c in Sources */, + F9FD30FE0CC1AD070073837D /* tclTomMathInterface.c in Sources */, + F9FD30FF0CC1AD070073837D /* tclTrace.c in Sources */, + F9FD31000CC1AD070073837D /* tclUtf.c in Sources */, + F9FD31010CC1AD070073837D /* tclUtil.c in Sources */, + F9FD31020CC1AD070073837D /* tclVar.c in Sources */, + F9FD31030CC1AD070073837D /* bn_fast_s_mp_mul_digs.c in Sources */, + F9FD31040CC1AD070073837D /* bn_fast_s_mp_sqr.c in Sources */, + F9FD31050CC1AD070073837D /* bn_mp_add.c in Sources */, + F9FD31060CC1AD070073837D /* bn_mp_add_d.c in Sources */, + F9FD31070CC1AD070073837D /* bn_mp_and.c in Sources */, + F9FD31080CC1AD070073837D /* bn_mp_clamp.c in Sources */, + F9FD31090CC1AD070073837D /* bn_mp_clear.c in Sources */, + F9FD310A0CC1AD070073837D /* bn_mp_clear_multi.c in Sources */, + F9FD310B0CC1AD070073837D /* bn_mp_cmp.c in Sources */, + F9FD310C0CC1AD070073837D /* bn_mp_cmp_d.c in Sources */, + F9FD310D0CC1AD070073837D /* bn_mp_cmp_mag.c in Sources */, + F9FD310E0CC1AD070073837D /* bn_mp_copy.c in Sources */, + F9FD310F0CC1AD070073837D /* bn_mp_count_bits.c in Sources */, + F9FD31100CC1AD070073837D /* bn_mp_div.c in Sources */, + F9FD31110CC1AD070073837D /* bn_mp_div_2.c in Sources */, + F9FD31120CC1AD070073837D /* bn_mp_div_2d.c in Sources */, + F9FD31130CC1AD070073837D /* bn_mp_div_3.c in Sources */, + F9FD31140CC1AD070073837D /* bn_mp_div_d.c in Sources */, + F9FD31150CC1AD070073837D /* bn_mp_exch.c in Sources */, + F9FD31160CC1AD070073837D /* bn_mp_expt_d.c in Sources */, + F9FD31170CC1AD070073837D /* bn_mp_grow.c in Sources */, + F9FD31180CC1AD070073837D /* bn_mp_init.c in Sources */, + F9FD31190CC1AD070073837D /* bn_mp_init_copy.c in Sources */, + F9FD311A0CC1AD070073837D /* bn_mp_init_multi.c in Sources */, + F9FD311B0CC1AD070073837D /* bn_mp_init_set.c in Sources */, + F9FD311C0CC1AD070073837D /* bn_mp_init_size.c in Sources */, + F9FD311D0CC1AD070073837D /* bn_mp_karatsuba_mul.c in Sources */, + F9FD311E0CC1AD070073837D /* bn_mp_karatsuba_sqr.c in Sources */, + F9FD311F0CC1AD070073837D /* bn_mp_lshd.c in Sources */, + F9FD31200CC1AD070073837D /* bn_mp_mod.c in Sources */, + F9FD31210CC1AD070073837D /* bn_mp_mod_2d.c in Sources */, + F9FD31220CC1AD070073837D /* bn_mp_mul.c in Sources */, + F9FD31230CC1AD070073837D /* bn_mp_mul_2.c in Sources */, + F9FD31240CC1AD070073837D /* bn_mp_mul_2d.c in Sources */, + F9FD31250CC1AD070073837D /* bn_mp_mul_d.c in Sources */, + F9FD31260CC1AD070073837D /* bn_mp_neg.c in Sources */, + F9FD31270CC1AD070073837D /* bn_mp_or.c in Sources */, + F9FD31280CC1AD070073837D /* bn_mp_radix_size.c in Sources */, + F9FD31290CC1AD070073837D /* bn_mp_radix_smap.c in Sources */, + F9FD312A0CC1AD070073837D /* bn_mp_read_radix.c in Sources */, + F9FD312B0CC1AD070073837D /* bn_mp_rshd.c in Sources */, + F9FD312C0CC1AD070073837D /* bn_mp_set.c in Sources */, + F9FD312D0CC1AD070073837D /* bn_mp_shrink.c in Sources */, + F9FD312E0CC1AD070073837D /* bn_mp_sqr.c in Sources */, + F9FD312F0CC1AD070073837D /* bn_mp_sqrt.c in Sources */, + F9FD31300CC1AD070073837D /* bn_mp_sub.c in Sources */, + F9FD31310CC1AD070073837D /* bn_mp_sub_d.c in Sources */, + F9FD31320CC1AD070073837D /* bn_mp_to_unsigned_bin_n.c in Sources */, + F9FD31330CC1AD070073837D /* bn_mp_to_unsigned_bin.c in Sources */, + F9FD31340CC1AD070073837D /* bn_mp_toom_mul.c in Sources */, + F9FD31350CC1AD070073837D /* bn_mp_toom_sqr.c in Sources */, + F9FD31360CC1AD070073837D /* bn_mp_toradix_n.c in Sources */, + F9FD31370CC1AD070073837D /* bn_mp_unsigned_bin_size.c in Sources */, + F9FD31380CC1AD070073837D /* bn_mp_xor.c in Sources */, + F9FD31390CC1AD070073837D /* bn_mp_zero.c in Sources */, + F9FD313A0CC1AD070073837D /* bn_reverse.c in Sources */, + F9FD313B0CC1AD070073837D /* bn_s_mp_add.c in Sources */, + F9FD313C0CC1AD070073837D /* bn_s_mp_mul_digs.c in Sources */, + F9FD313D0CC1AD070073837D /* bn_s_mp_sqr.c in Sources */, + F9FD313E0CC1AD070073837D /* bn_s_mp_sub.c in Sources */, + F9FD313F0CC1AD070073837D /* bncore.c in Sources */, + F9FD31400CC1AD070073837D /* tclMacOSXBundle.c in Sources */, + F9FD31410CC1AD070073837D /* tclMacOSXFCmd.c in Sources */, + F9FD31420CC1AD070073837D /* tclMacOSXNotify.c in Sources */, + F9FD31430CC1AD070073837D /* tclLoadDyld.c in Sources */, + F9FD31440CC1AD070073837D /* tclUnixChan.c in Sources */, + F9FD31450CC1AD070073837D /* tclUnixCompat.c in Sources */, + F9FD31460CC1AD070073837D /* tclUnixEvent.c in Sources */, + F9FD31470CC1AD070073837D /* tclUnixFCmd.c in Sources */, + F9FD31480CC1AD070073837D /* tclUnixFile.c in Sources */, + F9FD31490CC1AD070073837D /* tclUnixInit.c in Sources */, + F9FD314A0CC1AD070073837D /* tclUnixNotfy.c in Sources */, + F9FD314B0CC1AD070073837D /* tclUnixPipe.c in Sources */, + F9FD314C0CC1AD070073837D /* tclUnixSock.c in Sources */, + F9FD314D0CC1AD070073837D /* tclUnixThrd.c in Sources */, + F9FD314E0CC1AD070073837D /* tclUnixTime.c in Sources */, + F9FD31E20CC1AD070073837D /* tclDTrace.d in Sources */, + F9FD314F0CC1AD070073837D /* tk3d.c in Sources */, + F9FD31500CC1AD070073837D /* tkArgv.c in Sources */, + F9FD31510CC1AD070073837D /* tkAtom.c in Sources */, + F9FD31520CC1AD070073837D /* tkBind.c in Sources */, + F9FD31530CC1AD070073837D /* tkBitmap.c in Sources */, + F9FD31540CC1AD070073837D /* tkButton.c in Sources */, + F9FD31550CC1AD070073837D /* tkCanvArc.c in Sources */, + F9FD31560CC1AD070073837D /* tkCanvas.c in Sources */, + F9FD31570CC1AD070073837D /* tkCanvBmap.c in Sources */, + F9FD31580CC1AD070073837D /* tkCanvImg.c in Sources */, + F9FD31590CC1AD070073837D /* tkCanvLine.c in Sources */, + F9FD315A0CC1AD070073837D /* tkCanvPoly.c in Sources */, + F9FD315B0CC1AD070073837D /* tkCanvPs.c in Sources */, + F9FD315C0CC1AD070073837D /* tkCanvText.c in Sources */, + F9FD315D0CC1AD070073837D /* tkCanvUtil.c in Sources */, + F9FD315E0CC1AD070073837D /* tkCanvWind.c in Sources */, + F9FD315F0CC1AD070073837D /* tkClipboard.c in Sources */, + F9FD31600CC1AD070073837D /* tkCmds.c in Sources */, + F9FD31610CC1AD070073837D /* tkColor.c in Sources */, + F9FD31620CC1AD070073837D /* tkConfig.c in Sources */, + F9FD31630CC1AD070073837D /* tkConsole.c in Sources */, + F9FD31640CC1AD070073837D /* tkCursor.c in Sources */, + F9FD31650CC1AD070073837D /* tkEntry.c in Sources */, + F9FD31660CC1AD070073837D /* tkError.c in Sources */, + F9FD31670CC1AD070073837D /* tkEvent.c in Sources */, + F9FD31680CC1AD070073837D /* tkFileFilter.c in Sources */, + F9FD31690CC1AD070073837D /* tkFocus.c in Sources */, + F9FD316A0CC1AD070073837D /* tkFont.c in Sources */, + F9FD316B0CC1AD070073837D /* tkFrame.c in Sources */, + F9FD316C0CC1AD070073837D /* tkGC.c in Sources */, + F9FD316D0CC1AD070073837D /* tkGeometry.c in Sources */, + F9FD316E0CC1AD070073837D /* tkGet.c in Sources */, + F9FD316F0CC1AD070073837D /* tkGrab.c in Sources */, + F9FD31700CC1AD070073837D /* tkGrid.c in Sources */, + F9FD31710CC1AD070073837D /* tkImage.c in Sources */, + F9FD31720CC1AD070073837D /* tkImgBmap.c in Sources */, + F9FD31730CC1AD070073837D /* tkImgGIF.c in Sources */, + F9FD31740CC1AD070073837D /* tkImgPhoto.c in Sources */, + F9FD31750CC1AD070073837D /* tkImgPPM.c in Sources */, + F9FD31760CC1AD070073837D /* tkListbox.c in Sources */, + F9FD31770CC1AD070073837D /* tkMacWinMenu.c in Sources */, + F9FD31780CC1AD070073837D /* tkMain.c in Sources */, + F9FD31790CC1AD070073837D /* tkMenu.c in Sources */, + F9FD317A0CC1AD070073837D /* tkMenubutton.c in Sources */, + F9FD317B0CC1AD070073837D /* tkMenuDraw.c in Sources */, + F9FD317C0CC1AD070073837D /* tkMessage.c in Sources */, + F9FD317D0CC1AD070073837D /* tkObj.c in Sources */, + F9FD317E0CC1AD070073837D /* tkOldConfig.c in Sources */, + F9FD317F0CC1AD070073837D /* tkOldTest.c in Sources */, + F9FD31800CC1AD070073837D /* tkOption.c in Sources */, + F9FD31810CC1AD070073837D /* tkPack.c in Sources */, + F9FD31820CC1AD070073837D /* tkPanedWindow.c in Sources */, + F9FD31830CC1AD070073837D /* tkPlace.c in Sources */, + F9FD31850CC1AD070073837D /* tkRectOval.c in Sources */, + F9FD31860CC1AD070073837D /* tkScale.c in Sources */, + F9FD31870CC1AD070073837D /* tkScrollbar.c in Sources */, + F9FD31880CC1AD070073837D /* tkSelect.c in Sources */, + F9FD31890CC1AD070073837D /* tkSquare.c in Sources */, + F9FD318A0CC1AD070073837D /* tkStubInit.c in Sources */, + F9FD318B0CC1AD070073837D /* tkStubLib.c in Sources */, + F9FD318C0CC1AD070073837D /* tkStyle.c in Sources */, + F9FD318D0CC1AD070073837D /* tkTest.c in Sources */, + F9FD318E0CC1AD070073837D /* tkText.c in Sources */, + F9FD318F0CC1AD070073837D /* tkTextBTree.c in Sources */, + F9FD31900CC1AD070073837D /* tkTextDisp.c in Sources */, + F9FD31910CC1AD070073837D /* tkTextImage.c in Sources */, + F9FD31920CC1AD070073837D /* tkTextIndex.c in Sources */, + F9FD31930CC1AD070073837D /* tkTextMark.c in Sources */, + F9FD31940CC1AD070073837D /* tkTextTag.c in Sources */, + F9FD31950CC1AD070073837D /* tkTextWind.c in Sources */, + F9FD31960CC1AD070073837D /* tkTrig.c in Sources */, + F9FD31970CC1AD070073837D /* tkUndo.c in Sources */, + F9FD31980CC1AD070073837D /* tkUtil.c in Sources */, + F9FD31990CC1AD070073837D /* tkVisual.c in Sources */, + F9FD319A0CC1AD070073837D /* tkWindow.c in Sources */, + F9FD319B0CC1AD070073837D /* ttkBlink.c in Sources */, + F9FD319C0CC1AD070073837D /* ttkButton.c in Sources */, + F9FD319D0CC1AD070073837D /* ttkCache.c in Sources */, + F9FD319E0CC1AD070073837D /* ttkClamTheme.c in Sources */, + F9FD319F0CC1AD070073837D /* ttkClassicTheme.c in Sources */, + F9FD31A00CC1AD070073837D /* ttkDefaultTheme.c in Sources */, + F9FD31A10CC1AD070073837D /* ttkElements.c in Sources */, + F9FD31A20CC1AD070073837D /* ttkEntry.c in Sources */, + F9FD31A30CC1AD070073837D /* ttkFrame.c in Sources */, + F9FD31A40CC1AD070073837D /* ttkImage.c in Sources */, + F9FD31A50CC1AD070073837D /* ttkInit.c in Sources */, + F9FD31A60CC1AD070073837D /* ttkLabel.c in Sources */, + F9FD31A70CC1AD070073837D /* ttkLayout.c in Sources */, + F9FD31A80CC1AD070073837D /* ttkManager.c in Sources */, + F9FD31A90CC1AD070073837D /* ttkNotebook.c in Sources */, + F9FD31AA0CC1AD070073837D /* ttkPanedwindow.c in Sources */, + F9FD31AB0CC1AD070073837D /* ttkProgress.c in Sources */, + F9FD31AC0CC1AD070073837D /* ttkScale.c in Sources */, + F9FD31AD0CC1AD070073837D /* ttkScroll.c in Sources */, + F9FD31AE0CC1AD070073837D /* ttkScrollbar.c in Sources */, + F9FD31AF0CC1AD070073837D /* ttkSeparator.c in Sources */, + F9FD31B00CC1AD070073837D /* ttkSquare.c in Sources */, + F9FD31B10CC1AD070073837D /* ttkState.c in Sources */, + F9FD31B20CC1AD070073837D /* ttkStubInit.c in Sources */, + F9FD31B30CC1AD070073837D /* ttkStubLib.c in Sources */, + F9FD31B40CC1AD070073837D /* ttkTagSet.c in Sources */, + F9FD31B50CC1AD070073837D /* ttkTheme.c in Sources */, + F9FD31B60CC1AD070073837D /* ttkTrace.c in Sources */, + F9FD31B70CC1AD070073837D /* ttkTrack.c in Sources */, + F9FD31B80CC1AD070073837D /* ttkTreeview.c in Sources */, + F9FD31B90CC1AD070073837D /* ttkWidget.c in Sources */, + F9FD31DA0CC1AD070073837D /* tkAppInit.c in Sources */, + F9FD32020CC1ADB70073837D /* tkUnix.c in Sources */, + F9FD31DB0CC1AD070073837D /* tkUnix3d.c in Sources */, + F9FD320A0CC1ADB70073837D /* tkUnixButton.c in Sources */, + F9FD32090CC1ADB70073837D /* tkUnixColor.c in Sources */, + F9FD32040CC1ADB70073837D /* tkUnixConfig.c in Sources */, + F9FD31F80CC1ADB70073837D /* tkUnixCursor.c in Sources */, + F9FD32060CC1ADB70073837D /* tkUnixDialog.c in Sources */, + F9FD32050CC1ADB70073837D /* tkUnixDraw.c in Sources */, + F9FD31FD0CC1ADB70073837D /* tkUnixEmbed.c in Sources */, + F9FD32080CC1ADB70073837D /* tkUnixEvent.c in Sources */, + F9FD31FF0CC1ADB70073837D /* tkUnixFocus.c in Sources */, + F9FD31FC0CC1ADB70073837D /* tkUnixInit.c in Sources */, + F9FD31FA0CC1ADB70073837D /* tkUnixKey.c in Sources */, + F9FD32030CC1ADB70073837D /* tkUnixMenu.c in Sources */, + F9FD320B0CC1ADB70073837D /* tkUnixMenubu.c in Sources */, + F9FD32010CC1ADB70073837D /* tkUnixRFont.c in Sources */, + F9FD31DC0CC1AD070073837D /* tkUnixScale.c in Sources */, + F9FD320C0CC1ADB70073837D /* tkUnixScrlbr.c in Sources */, + F9FD32070CC1ADB70073837D /* tkUnixSelect.c in Sources */, + F9FD31FE0CC1ADB70073837D /* tkUnixSend.c in Sources */, + F9FD32000CC1ADB70073837D /* tkUnixWm.c in Sources */, + F9FD31FB0CC1ADB70073837D /* tkUnixXId.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + F90E36D50F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = unsupported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = 4.2; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = "Debug gcc42 nogc"; + }; + F90E36D60F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "Debug gcc42 nogc"; + }; + F90E36D70F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "Debug gcc42 nogc"; + }; + F90E36D80F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "Debug gcc42 nogc"; + }; + F91BCC4F093152310042A6BF /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = ReleaseUniversal; + }; + F91BCC50093152310042A6BF /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = ReleaseUniversal; + }; + F91BCC51093152310042A6BF /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PREBINDING = NO; + }; + name = ReleaseUniversal; + }; + F93084370BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugMemCompile; + }; + F93084380BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugMemCompile; + }; + F93084390BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugMemCompile; + }; + F930843A0BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-symbols=all"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugMemCompile; + }; + F9359B250DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS)", + "-lgcov", + ); + PREBINDING = NO; + }; + name = DebugGCov; + }; + F9359B260DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugGCov; + }; + F9359B270DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugGCov; + }; + F9359B280DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugGCov; + }; + F95CC8AC09158F3100EA5ACE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = Debug; + }; + F95CC8AD09158F3100EA5ACE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = Release; + }; + F95CC8AE09158F3100EA5ACE /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugNoFixZL; + }; + F95CC8B109158F3100EA5ACE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = Debug; + }; + F95CC8B209158F3100EA5ACE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = Release; + }; + F95CC8B309158F3100EA5ACE /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugNoFixZL; + }; + F95CC8B609158F3100EA5ACE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = Debug; + }; + F95CC8B709158F3100EA5ACE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH_32_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PREBINDING = NO; + }; + name = Release; + }; + F95CC8B809158F3100EA5ACE /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugNoFixZL; + }; + F97258A90A86873D00096C78 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = Debug; + }; + F97258AA0A86873D00096C78 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = Release; + }; + F97258AB0A86873D00096C78 /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugNoFixZL; + }; + F97258AC0A86873D00096C78 /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = ReleaseUniversal; + }; + F97AED1B0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = Debug64bit; + }; + F97AED1C0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = Debug64bit; + }; + F97AED1D0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = Debug64bit; + }; + F97AED1E0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH_64_BIT)"; + CONFIGURE_ARGS = "--enable-64bit $(CONFIGURE_ARGS)"; + CPPFLAGS = "-arch $(NATIVE_ARCH_64_BIT) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PREBINDING = NO; + }; + name = Debug64bit; + }; + F987512F0DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --disable-corefoundation"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugNoCF; + }; + F98751300DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugNoCF; + }; + F98751310DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugNoCF; + }; + F98751320DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugNoCF; + }; + F98751330DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --disable-threads --disable-corefoundation"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugNoCFUnthreaded; + }; + F98751340DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugNoCFUnthreaded; + }; + F98751350DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugNoCFUnthreaded; + }; + F98751360DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugNoCFUnthreaded; + }; + F9988AB10D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = 4.2; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = "Debug gcc42"; + }; + F9988AB20D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "Debug gcc42"; + }; + F9988AB30D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "Debug gcc42"; + }; + F9988AB40D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "Debug gcc42"; + }; + F9988AB50D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CC = "$(DEVELOPER_DIR)/usr/bin/llvm-gcc-4.2"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = com.apple.compilers.llvmgcc42; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = "Debug llvmgcc42"; + }; + F9988AB60D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "Debug llvmgcc42"; + }; + F9988AB70D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "Debug llvmgcc42"; + }; + F9988AB80D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "Debug llvmgcc42"; + }; + F9988BB10D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = 4.2; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PREBINDING = NO; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB20D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB30D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB40D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB50D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CC = "$(DEVELOPER_DIR)/usr/bin/llvm-gcc-4.2"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_OPTIMIZATION_LEVEL = 4; + GCC_VERSION = com.apple.compilers.llvmgcc42; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PREBINDING = NO; + TCL_CONFIGURE_ARGS = "$(TCL_CONFIGURE_ARGS) --disable-dtrace"; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F9988BB60D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F9988BB70D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F9988BB80D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F99EE73B0BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugUnthreaded; + }; + F99EE73C0BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugLeaks; + }; + F99EE73D0BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugUnthreaded; + }; + F99EE73E0BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugLeaks; + }; + F99EE73F0BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugUnthreaded; + }; + F99EE7400BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugLeaks; + }; + F99EE7410BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --disable-threads"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugUnthreaded; + }; + F99EE7420BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = unsupported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_PREPROCESSOR_DEFINITIONS = ( + PURIFY, + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + MACOSX_DEPLOYMENT_TARGET = 10.5; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugLeaks; + }; + F9EEED960C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = ReleaseUniversal10.5SDK; + }; + F9EEED970C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = ReleaseUniversal10.5SDK; + }; + F9EEED980C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = ReleaseUniversal10.5SDK; + }; + F9EEED990C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + CPPFLAGS = "-isysroot $(SDKROOT) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PREBINDING = NO; + SDKROOT = macosx10.5; + }; + name = ReleaseUniversal10.5SDK; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F95CC8AB09158F3100EA5ACE /* Build configuration list for PBXNativeTarget "Tk" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F95CC8AC09158F3100EA5ACE /* Debug */, + F9988AB20D814C6500B6B03B /* Debug gcc42 */, + F90E36D60F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB60D814C7500B6B03B /* Debug llvmgcc42 */, + F95CC8AE09158F3100EA5ACE /* DebugNoFixZL */, + F99EE73B0BE835310060D4AF /* DebugUnthreaded */, + F98751300DE7B57E00B1C9EC /* DebugNoCF */, + F98751340DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F93084370BB93D2800CD0B9E /* DebugMemCompile */, + F99EE73C0BE835310060D4AF /* DebugLeaks */, + F9359B260DF212DA00E04F67 /* DebugGCov */, + F97AED1B0B660B2100310EA2 /* Debug64bit */, + F95CC8AD09158F3100EA5ACE /* Release */, + F91BCC4F093152310042A6BF /* ReleaseUniversal */, + F9988BB20D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB60D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED960C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F95CC8B009158F3100EA5ACE /* Build configuration list for PBXNativeTarget "tktest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F95CC8B109158F3100EA5ACE /* Debug */, + F9988AB30D814C6500B6B03B /* Debug gcc42 */, + F90E36D70F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB70D814C7500B6B03B /* Debug llvmgcc42 */, + F95CC8B309158F3100EA5ACE /* DebugNoFixZL */, + F99EE73D0BE835310060D4AF /* DebugUnthreaded */, + F98751310DE7B57E00B1C9EC /* DebugNoCF */, + F98751350DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F93084380BB93D2800CD0B9E /* DebugMemCompile */, + F99EE73E0BE835310060D4AF /* DebugLeaks */, + F9359B270DF212DA00E04F67 /* DebugGCov */, + F97AED1C0B660B2100310EA2 /* Debug64bit */, + F95CC8B209158F3100EA5ACE /* Release */, + F91BCC50093152310042A6BF /* ReleaseUniversal */, + F9988BB30D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB70D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED970C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F95CC8B509158F3100EA5ACE /* Build configuration list for PBXProject "Wish" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F95CC8B609158F3100EA5ACE /* Debug */, + F9988AB10D814C6500B6B03B /* Debug gcc42 */, + F90E36D50F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB50D814C7500B6B03B /* Debug llvmgcc42 */, + F95CC8B809158F3100EA5ACE /* DebugNoFixZL */, + F99EE7410BE835310060D4AF /* DebugUnthreaded */, + F987512F0DE7B57E00B1C9EC /* DebugNoCF */, + F98751330DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F930843A0BB93D2800CD0B9E /* DebugMemCompile */, + F99EE7420BE835310060D4AF /* DebugLeaks */, + F9359B250DF212DA00E04F67 /* DebugGCov */, + F97AED1E0B660B2100310EA2 /* Debug64bit */, + F95CC8B709158F3100EA5ACE /* Release */, + F91BCC51093152310042A6BF /* ReleaseUniversal */, + F9988BB10D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB50D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED990C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F97258A80A86873D00096C78 /* Build configuration list for PBXNativeTarget "tktest-X11" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F97258A90A86873D00096C78 /* Debug */, + F9988AB40D814C6500B6B03B /* Debug gcc42 */, + F90E36D80F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB80D814C7500B6B03B /* Debug llvmgcc42 */, + F97258AB0A86873D00096C78 /* DebugNoFixZL */, + F99EE73F0BE835310060D4AF /* DebugUnthreaded */, + F98751320DE7B57E00B1C9EC /* DebugNoCF */, + F98751360DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F93084390BB93D2800CD0B9E /* DebugMemCompile */, + F99EE7400BE835310060D4AF /* DebugLeaks */, + F9359B280DF212DA00E04F67 /* DebugGCov */, + F97AED1D0B660B2100310EA2 /* Debug64bit */, + F97258AA0A86873D00096C78 /* Release */, + F97258AC0A86873D00096C78 /* ReleaseUniversal */, + F9988BB40D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB80D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED980C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/macosx/Wish.xcodeproj/default.pbxuser b/macosx/Wish.xcodeproj/default.pbxuser new file mode 100644 index 0000000..188bbeb --- /dev/null +++ b/macosx/Wish.xcodeproj/default.pbxuser @@ -0,0 +1,342 @@ +// !$*UTF8*$! +{ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + activeBuildConfigurationName = Debug; + activeExecutable = F9E61D1C090A4282002B3151 /* Wish */; + activeTarget = F9E61D16090A3E94002B3151 /* Tk */; + codeSenseManager = F944EB9D08F798180049FDD4 /* Code sense */; + executables = ( + F9E61D1C090A4282002B3151 /* Wish */, + F944EB8F08F798100049FDD4 /* tktest */, + F9FD31F50CC1AD070073837D /* tktest-X11 */, + ); + perUserDictionary = { + com.apple.ide.smrt.PBXUserSmartGroupsKey.Rev10 = <040b73747265616d747970656481e8038401408484840e4e534d757461626c654172726179008484074e534172726179008484084e534f626a65637400858401690192848484134e534d757461626c6544696374696f6e6172790084840c4e5344696374696f6e6172790095960792848484084e53537472696e67019584012b046e616d658692849a9a14496d706c656d656e746174696f6e2046696c65738692849a9a146162736f6c75746550617468546f42756e646c658692849a9a008692849a9a195042585472616e7369656e744c6f636174696f6e4174546f708692849a9a06626f74746f6d8692849a9a03636c7a8692849a9a1550425846696c656e616d65536d61727447726f75708692849a9a0b6465736372697074696f6e8692849a9a103c6e6f206465736372697074696f6e3e8692849a9a0b707265666572656e63657386928497960892849a9a07666e6d617463688692849a9a008692849a9a05696d6167658692849a9a0b536d617274466f6c6465728692849a9a04726f6f748692849a9a093c50524f4a4543543e8692849a9a0572656765788692849a9a065c2e286329248692849a9a097265637572736976658692848484084e534e756d626572008484074e5356616c7565009584012a849696018692849a9a0669734c656166869284b09db296008692849a9a0763616e536176658692af92849a9a1250425850726f6a65637453636f70654b65798692849a9a03594553868692849a9a08676c6f62616c49448692849a9a18314343304541343030343335304546393030343434313042868686>; + }; + sourceControlManager = F944EB9C08F798180049FDD4 /* Source Control */; + userBuildSettings = { + CODE_SIGN_IDENTITY = ""; + SYMROOT = "${SRCROOT}/../../build/tk"; + TCL_SRCROOT = "${SRCROOT}/../../tcl"; + TK_SRCROOT = "${SRCROOT}/../../tk"; + }; + }; + 8DD76FA90486AB0100D96B5E /* tktest */ = { + activeExec = 0; + executables = ( + F944EB8F08F798100049FDD4 /* tktest */, + ); + }; + F944EB8F08F798100049FDD4 /* tktest */ = { + isa = PBXExecutable; + activeArgIndices = ( + YES, + NO, + NO, + NO, + NO, + NO, + NO, + ); + argumentStrings = ( + "${TK_SRCROOT}/library/demos/widget", + "${TK_SRCROOT}/tests/all.tcl", + "${TK_SRCROOT}/tests/ttk/all.tcl", + "-geometry +0+0", + "-singleproc 1", + "-verbose \"bet\"", + "-skip window-2.9", + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 0; + environmentEntries = ( + { + active = YES; + name = TCL_LIBRARY; + value = "${TCL_SRCROOT}/library"; + }, + { + active = YES; + name = TK_LIBRARY; + value = "${TK_SRCROOT}/library"; + }, + { + active = YES; + name = TCLLIBPATH; + value = /Library/Tcl; + }, + { + active = YES; + name = TK_SRCROOT; + value = "${TK_SRCROOT}"; + }, + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + { + active = NO; + name = EventDebug; + value = 1; + }, + { + active = NO; + name = MallocBadFreeAbort; + value = 1; + }, + { + active = NO; + name = MallocLogFile; + value = /tmp/malloc.log; + }, + { + active = NO; + name = MallocStackLogging; + value = 1; + }, + { + active = NO; + name = MallocStackLoggingNoCompact; + value = 1; + }, + { + active = NO; + name = MallocPreScribble; + value = 1; + }, + { + active = NO; + name = MallocScribble; + value = 1; + }, + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = tktest; + sourceDirectories = ( + ); + }; + F944EB9C08F798180049FDD4 /* Source Control */ = { + isa = PBXSourceControlManager; + fallbackIsa = XCSourceControlManager; + isSCMEnabled = 0; + scmConfiguration = { + CVSToolPath = /usr/bin/cvs; + CVSUseSSH = NO; + SubversionToolPath = /usr/bin/svn; + }; + scmType = scm.cvs; + }; + F944EB9D08F798180049FDD4 /* Code sense */ = { + isa = PBXCodeSenseManager; + indexTemplatePath = ""; + }; + F9E61D16090A3E94002B3151 /* Tk */ = { + activeExec = 0; + executables = ( + F9E61D1C090A4282002B3151 /* Wish */, + ); + }; + F9E61D1C090A4282002B3151 /* Wish */ = { + isa = PBXExecutable; + activeArgIndices = ( + YES, + ); + argumentStrings = ( + "${TK_SRCROOT}/library/demos/widget", + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 0; + environmentEntries = ( + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = Wish; + sourceDirectories = ( + ); + }; + F97258A50A86873C00096C78 /* tktest-X11 */ = { + activeExec = 0; + executables = ( + F9FD31F50CC1AD070073837D /* tktest-X11 */, + ); + }; + F9FD31F50CC1AD070073837D /* tktest-X11 */ = { + isa = PBXExecutable; + activeArgIndices = ( + YES, + NO, + NO, + NO, + NO, + NO, + NO, + ); + argumentStrings = ( + "${TK_SRCROOT}/library/demos/widget", + "${TK_SRCROOT}/tests/all.tcl", + "${TK_SRCROOT}/tests/ttk/all.tcl", + "-geometry +0+0", + "-singleproc 1", + "-verbose \"bet\"", + "-skip window-2.9", + ); + autoAttachOnCrash = 1; + breakpointsEnabled = 1; + configStateDict = { + "PBXLSLaunchAction-0" = { + PBXLSLaunchAction = 0; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXLSRunLaunchConfig; + displayName = "Executable Runner"; + identifier = com.apple.Xcode.launch.runConfig; + remoteHostInfo = ""; + startActionInfo = ""; + }; + "PBXLSLaunchAction-1" = { + PBXLSLaunchAction = 1; + PBXLSLaunchStartAction = 1; + PBXLSLaunchStdioStyle = 2; + PBXLSLaunchStyle = 0; + class = PBXGDB_LaunchConfig; + displayName = GDB; + identifier = com.apple.Xcode.launch.GDBMI_Config; + remoteHostInfo = ""; + startActionInfo = ""; + }; + }; + customDataFormattersEnabled = 1; + debuggerPlugin = GDBDebugging; + disassemblyDisplayState = 0; + dylibVariantSuffix = ""; + enableDebugStr = 0; + environmentEntries = ( + { + active = YES; + name = TCL_LIBRARY; + value = "${TCL_SRCROOT}/library"; + }, + { + active = YES; + name = TK_LIBRARY; + value = "${TK_SRCROOT}/library"; + }, + { + active = YES; + name = TCLLIBPATH; + value = /Library/Tcl; + }, + { + active = YES; + name = DISPLAY; + value = ":0"; + }, + { + active = NO; + name = DYLD_PRINT_LIBRARIES; + }, + { + active = NO; + name = MallocBadFreeAbort; + value = 1; + }, + { + active = NO; + name = MallocLogFile; + value = /tmp/malloc.log; + }, + { + active = NO; + name = MallocStackLogging; + value = 1; + }, + { + active = NO; + name = MallocStackLoggingNoCompact; + value = 1; + }, + { + active = NO; + name = MallocPreScribble; + value = 1; + }, + { + active = NO; + name = MallocScribble; + value = 1; + }, + ); + executableSystemSymbolLevel = 0; + executableUserSymbolLevel = 0; + libgmallocEnabled = 0; + name = "tktest-X11"; + sourceDirectories = ( + ); + }; +} diff --git a/macosx/Wish.xcodeproj/project.pbxproj b/macosx/Wish.xcodeproj/project.pbxproj new file mode 100644 index 0000000..5c7f667 --- /dev/null +++ b/macosx/Wish.xcodeproj/project.pbxproj @@ -0,0 +1,5733 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + F9067BCD0BFBA2900074F726 /* tkOldTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFE08F27A39005CB29B /* tkOldTest.c */; }; + F94523A20E6FC2AC00C1D987 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F94523A10E6FC2AC00C1D987 /* Cocoa.framework */; }; + F966BDCF08F27A3F005CB29B /* tk3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAC08F27A39005CB29B /* tk3d.c */; }; + F966BDD108F27A3F005CB29B /* tkArgv.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAE08F27A39005CB29B /* tkArgv.c */; }; + F966BDD208F27A3F005CB29B /* tkAtom.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAF08F27A39005CB29B /* tkAtom.c */; }; + F966BDD308F27A3F005CB29B /* tkBind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB008F27A39005CB29B /* tkBind.c */; }; + F966BDD408F27A3F005CB29B /* tkBitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB108F27A39005CB29B /* tkBitmap.c */; }; + F966BDD508F27A3F005CB29B /* tkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB208F27A39005CB29B /* tkButton.c */; }; + F966BDD708F27A3F005CB29B /* tkCanvArc.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB408F27A39005CB29B /* tkCanvArc.c */; }; + F966BDD808F27A3F005CB29B /* tkCanvas.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB508F27A39005CB29B /* tkCanvas.c */; }; + F966BDDA08F27A3F005CB29B /* tkCanvBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB708F27A39005CB29B /* tkCanvBmap.c */; }; + F966BDDB08F27A3F005CB29B /* tkCanvImg.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB808F27A39005CB29B /* tkCanvImg.c */; }; + F966BDDC08F27A3F005CB29B /* tkCanvLine.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB908F27A39005CB29B /* tkCanvLine.c */; }; + F966BDDD08F27A3F005CB29B /* tkCanvPoly.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABA08F27A39005CB29B /* tkCanvPoly.c */; }; + F966BDDE08F27A3F005CB29B /* tkCanvPs.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABB08F27A39005CB29B /* tkCanvPs.c */; }; + F966BDE008F27A3F005CB29B /* tkCanvText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABD08F27A39005CB29B /* tkCanvText.c */; }; + F966BDE108F27A3F005CB29B /* tkCanvUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABE08F27A39005CB29B /* tkCanvUtil.c */; }; + F966BDE208F27A3F005CB29B /* tkCanvWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABF08F27A39005CB29B /* tkCanvWind.c */; }; + F966BDE308F27A3F005CB29B /* tkClipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC008F27A39005CB29B /* tkClipboard.c */; }; + F966BDE408F27A3F005CB29B /* tkCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC108F27A39005CB29B /* tkCmds.c */; }; + F966BDE508F27A3F005CB29B /* tkColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC208F27A39005CB29B /* tkColor.c */; }; + F966BDE708F27A3F005CB29B /* tkConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC408F27A39005CB29B /* tkConfig.c */; }; + F966BDE808F27A3F005CB29B /* tkConsole.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC508F27A39005CB29B /* tkConsole.c */; }; + F966BDE908F27A3F005CB29B /* tkCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC608F27A39005CB29B /* tkCursor.c */; }; + F966BDEB08F27A3F005CB29B /* tkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC808F27A39005CB29B /* tkEntry.c */; }; + F966BDED08F27A3F005CB29B /* tkError.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACA08F27A39005CB29B /* tkError.c */; }; + F966BDEE08F27A3F005CB29B /* tkEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACB08F27A39005CB29B /* tkEvent.c */; }; + F966BDEF08F27A3F005CB29B /* tkFileFilter.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACC08F27A39005CB29B /* tkFileFilter.c */; }; + F966BDF108F27A3F005CB29B /* tkFocus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACE08F27A39005CB29B /* tkFocus.c */; }; + F966BDF208F27A3F005CB29B /* tkFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACF08F27A39005CB29B /* tkFont.c */; }; + F966BDF408F27A3F005CB29B /* tkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD108F27A39005CB29B /* tkFrame.c */; }; + F966BDF508F27A3F005CB29B /* tkGC.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD208F27A39005CB29B /* tkGC.c */; }; + F966BDF608F27A3F005CB29B /* tkGeometry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD308F27A39005CB29B /* tkGeometry.c */; }; + F966BDF708F27A3F005CB29B /* tkGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD408F27A39005CB29B /* tkGet.c */; }; + F966BDF808F27A3F005CB29B /* tkGrab.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD508F27A39005CB29B /* tkGrab.c */; }; + F966BDF908F27A3F005CB29B /* tkGrid.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD608F27A39005CB29B /* tkGrid.c */; }; + F966BDFA08F27A3F005CB29B /* tkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD708F27A39005CB29B /* tkImage.c */; }; + F966BDFB08F27A3F005CB29B /* tkImgBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD808F27A39005CB29B /* tkImgBmap.c */; }; + F966BDFC08F27A3F005CB29B /* tkImgGIF.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD908F27A39005CB29B /* tkImgGIF.c */; }; + F966BDFD08F27A3F005CB29B /* tkImgPhoto.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADA08F27A39005CB29B /* tkImgPhoto.c */; }; + F966BDFE08F27A3F005CB29B /* tkImgPPM.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADB08F27A39005CB29B /* tkImgPPM.c */; }; + F966BE0708F27A3F005CB29B /* tkListbox.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE408F27A39005CB29B /* tkListbox.c */; }; + F966BE0808F27A3F005CB29B /* tkMacWinMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE508F27A39005CB29B /* tkMacWinMenu.c */; }; + F966BE0908F27A3F005CB29B /* tkMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE608F27A39005CB29B /* tkMain.c */; }; + F966BE0A08F27A3F005CB29B /* tkMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE708F27A39005CB29B /* tkMenu.c */; }; + F966BE0C08F27A3F005CB29B /* tkMenubutton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE908F27A39005CB29B /* tkMenubutton.c */; }; + F966BE0E08F27A3F005CB29B /* tkMenuDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEB08F27A39005CB29B /* tkMenuDraw.c */; }; + F966BE0F08F27A3F005CB29B /* tkMessage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEC08F27A39005CB29B /* tkMessage.c */; }; + F966BE1008F27A3F005CB29B /* tkObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAED08F27A39005CB29B /* tkObj.c */; }; + F966BE1108F27A3F005CB29B /* tkOldConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEE08F27A39005CB29B /* tkOldConfig.c */; }; + F966BE1208F27A3F005CB29B /* tkOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEF08F27A39005CB29B /* tkOption.c */; }; + F966BE1308F27A3F005CB29B /* tkPack.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF008F27A39005CB29B /* tkPack.c */; }; + F966BE1408F27A3F005CB29B /* tkPanedWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF108F27A39005CB29B /* tkPanedWindow.c */; }; + F966BE1508F27A3F005CB29B /* tkPlace.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF208F27A39005CB29B /* tkPlace.c */; }; + F966BE1708F27A3F005CB29B /* tkPointer.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF408F27A39005CB29B /* tkPointer.c */; }; + F966BE1908F27A3F005CB29B /* tkRectOval.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF608F27A39005CB29B /* tkRectOval.c */; }; + F966BE1A08F27A3F005CB29B /* tkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF708F27A39005CB29B /* tkScale.c */; }; + F966BE1C08F27A40005CB29B /* tkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF908F27A39005CB29B /* tkScrollbar.c */; }; + F966BE1E08F27A40005CB29B /* tkSelect.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFB08F27A39005CB29B /* tkSelect.c */; }; + F966BE2008F27A40005CB29B /* tkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFD08F27A39005CB29B /* tkSquare.c */; }; + F966BE2208F27A40005CB29B /* tkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFF08F27A39005CB29B /* tkStubInit.c */; }; + F966BE2308F27A40005CB29B /* tkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0008F27A39005CB29B /* tkStubLib.c */; }; + F966BE2408F27A40005CB29B /* tkStyle.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0108F27A39005CB29B /* tkStyle.c */; }; + F966BE2508F27A40005CB29B /* tkTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0208F27A39005CB29B /* tkTest.c */; }; + F966BE2608F27A40005CB29B /* tkText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0308F27A39005CB29B /* tkText.c */; }; + F966BE2808F27A40005CB29B /* tkTextBTree.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0508F27A39005CB29B /* tkTextBTree.c */; }; + F966BE2908F27A40005CB29B /* tkTextDisp.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0608F27A39005CB29B /* tkTextDisp.c */; }; + F966BE2B08F27A40005CB29B /* tkTextImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0808F27A39005CB29B /* tkTextImage.c */; }; + F966BE2C08F27A40005CB29B /* tkTextIndex.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0908F27A39005CB29B /* tkTextIndex.c */; }; + F966BE2D08F27A40005CB29B /* tkTextMark.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0A08F27A39005CB29B /* tkTextMark.c */; }; + F966BE2E08F27A40005CB29B /* tkTextTag.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0B08F27A39005CB29B /* tkTextTag.c */; }; + F966BE2F08F27A40005CB29B /* tkTextWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0C08F27A39005CB29B /* tkTextWind.c */; }; + F966BE3008F27A40005CB29B /* tkTrig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0D08F27A39005CB29B /* tkTrig.c */; }; + F966BE3108F27A40005CB29B /* tkUndo.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0E08F27A39005CB29B /* tkUndo.c */; }; + F966BE3308F27A40005CB29B /* tkUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1008F27A39005CB29B /* tkUtil.c */; }; + F966BE3408F27A40005CB29B /* tkVisual.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1108F27A39005CB29B /* tkVisual.c */; }; + F966BE3508F27A40005CB29B /* tkWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1208F27A39005CB29B /* tkWindow.c */; }; + F966BEDB08F27A40005CB29B /* tkMacOSXBitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC508F27A3B005CB29B /* tkMacOSXBitmap.c */; }; + F966BEDC08F27A40005CB29B /* tkMacOSXButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC608F27A3B005CB29B /* tkMacOSXButton.c */; }; + F966BEDE08F27A40005CB29B /* tkMacOSXClipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC808F27A3B005CB29B /* tkMacOSXClipboard.c */; }; + F966BEDF08F27A40005CB29B /* tkMacOSXColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBC908F27A3B005CB29B /* tkMacOSXColor.c */; }; + F966BEE008F27A40005CB29B /* tkMacOSXConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBCA08F27A3B005CB29B /* tkMacOSXConfig.c */; }; + F966BEE108F27A40005CB29B /* tkMacOSXCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBCB08F27A3B005CB29B /* tkMacOSXCursor.c */; }; + F966BEE308F27A40005CB29B /* tkMacOSXDebug.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBCD08F27A3B005CB29B /* tkMacOSXDebug.c */; }; + F966BEE608F27A40005CB29B /* tkMacOSXDialog.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD008F27A3B005CB29B /* tkMacOSXDialog.c */; }; + F966BEE708F27A40005CB29B /* tkMacOSXDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD108F27A3B005CB29B /* tkMacOSXDraw.c */; }; + F966BEE808F27A40005CB29B /* tkMacOSXEmbed.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD208F27A3B005CB29B /* tkMacOSXEmbed.c */; }; + F966BEE908F27A40005CB29B /* tkMacOSXEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD308F27A3B005CB29B /* tkMacOSXEntry.c */; }; + F966BEEA08F27A40005CB29B /* tkMacOSXEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD408F27A3B005CB29B /* tkMacOSXEvent.c */; }; + F966BEEC08F27A40005CB29B /* tkMacOSXFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD608F27A3B005CB29B /* tkMacOSXFont.c */; }; + F966BEED08F27A40005CB29B /* tkMacOSXHLEvents.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD708F27A3B005CB29B /* tkMacOSXHLEvents.c */; }; + F966BEEE08F27A40005CB29B /* tkMacOSXInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBD808F27A3B005CB29B /* tkMacOSXInit.c */; settings = {COMPILER_FLAGS = "-DTK_LIBRARY=\\\"$(TK_LIBRARY)\\\""; }; }; + F966BEF108F27A40005CB29B /* tkMacOSXKeyboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBDB08F27A3B005CB29B /* tkMacOSXKeyboard.c */; }; + F966BEF208F27A40005CB29B /* tkMacOSXKeyEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBDC08F27A3B005CB29B /* tkMacOSXKeyEvent.c */; }; + F966BEF308F27A40005CB29B /* tkMacOSXMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBDD08F27A3B005CB29B /* tkMacOSXMenu.c */; }; + F966BEF608F27A40005CB29B /* tkMacOSXMenubutton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE008F27A3B005CB29B /* tkMacOSXMenubutton.c */; }; + F966BEF708F27A40005CB29B /* tkMacOSXMenus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE108F27A3B005CB29B /* tkMacOSXMenus.c */; }; + F966BEF808F27A40005CB29B /* tkMacOSXMouseEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE208F27A3B005CB29B /* tkMacOSXMouseEvent.c */; }; + F966BEF908F27A40005CB29B /* tkMacOSXNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBE308F27A3B005CB29B /* tkMacOSXNotify.c */; }; + F966BF0108F27A40005CB29B /* tkMacOSXRegion.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBEB08F27A3C005CB29B /* tkMacOSXRegion.c */; }; + F966BF0308F27A40005CB29B /* tkMacOSXScrlbr.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBED08F27A3C005CB29B /* tkMacOSXScrlbr.c */; }; + F966BF0408F27A40005CB29B /* tkMacOSXSend.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBEE08F27A3C005CB29B /* tkMacOSXSend.c */; }; + F966BF0508F27A40005CB29B /* tkMacOSXSubwindows.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBEF08F27A3C005CB29B /* tkMacOSXSubwindows.c */; }; + F966BF0608F27A40005CB29B /* tkMacOSXTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF008F27A3C005CB29B /* tkMacOSXTest.c */; }; + F966BF0708F27A40005CB29B /* tkMacOSXWindowEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF108F27A3C005CB29B /* tkMacOSXWindowEvent.c */; }; + F966BF0808F27A40005CB29B /* tkMacOSXWm.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF208F27A3C005CB29B /* tkMacOSXWm.c */; }; + F966BF0B08F27A40005CB29B /* tkMacOSXXStubs.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BBF508F27A3C005CB29B /* tkMacOSXXStubs.c */; }; + F966BF7F08F27A41005CB29B /* tkAppInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7508F27A3D005CB29B /* tkAppInit.c */; settings = {COMPILER_FLAGS = "-DTK_TEST"; }; }; + F966BF8308F27A41005CB29B /* tkUnix3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7908F27A3D005CB29B /* tkUnix3d.c */; }; + F966BF9608F27A41005CB29B /* tkUnixScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8C08F27A3D005CB29B /* tkUnixScale.c */; }; + F966C02A08F27A42005CB29B /* xcolors.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2408F27A3F005CB29B /* xcolors.c */; }; + F966C02B08F27A42005CB29B /* xdraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2508F27A3F005CB29B /* xdraw.c */; }; + F966C02C08F27A42005CB29B /* xgc.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2608F27A3F005CB29B /* xgc.c */; }; + F966C02D08F27A42005CB29B /* ximage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2708F27A3F005CB29B /* ximage.c */; }; + F966C02E08F27A42005CB29B /* xutil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BD2808F27A3F005CB29B /* xutil.c */; }; + F966C07508F2820D005CB29B /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07408F2820D005CB29B /* CoreFoundation.framework */; }; + F966C07708F2821B005CB29B /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07608F2821B005CB29B /* Carbon.framework */; }; + F966C07908F28233005CB29B /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07808F28233005CB29B /* IOKit.framework */; }; + F96888050AF786D5000797B5 /* ttkBlink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E10AF786D5000797B5 /* ttkBlink.c */; }; + F96888060AF786D5000797B5 /* ttkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E20AF786D5000797B5 /* ttkButton.c */; }; + F96888070AF786D5000797B5 /* ttkCache.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E30AF786D5000797B5 /* ttkCache.c */; }; + F96888080AF786D5000797B5 /* ttkClamTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E40AF786D5000797B5 /* ttkClamTheme.c */; }; + F96888090AF786D5000797B5 /* ttkClassicTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E50AF786D5000797B5 /* ttkClassicTheme.c */; }; + F968880A0AF786D5000797B5 /* ttkDefaultTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */; }; + F968880B0AF786D5000797B5 /* ttkElements.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E80AF786D5000797B5 /* ttkElements.c */; }; + F968880C0AF786D5000797B5 /* ttkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E90AF786D5000797B5 /* ttkEntry.c */; }; + F968880D0AF786D5000797B5 /* ttkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EA0AF786D5000797B5 /* ttkFrame.c */; }; + F968880E0AF786D5000797B5 /* ttkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EB0AF786D5000797B5 /* ttkImage.c */; }; + F968880F0AF786D5000797B5 /* ttkInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EC0AF786D5000797B5 /* ttkInit.c */; }; + F96888100AF786D5000797B5 /* ttkLabel.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887ED0AF786D5000797B5 /* ttkLabel.c */; }; + F96888110AF786D5000797B5 /* ttkLayout.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EE0AF786D5000797B5 /* ttkLayout.c */; }; + F96888120AF786D5000797B5 /* ttkManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EF0AF786D5000797B5 /* ttkManager.c */; }; + F96888130AF786D5000797B5 /* ttkNotebook.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F10AF786D5000797B5 /* ttkNotebook.c */; }; + F96888140AF786D5000797B5 /* ttkPanedwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F20AF786D5000797B5 /* ttkPanedwindow.c */; }; + F96888150AF786D5000797B5 /* ttkProgress.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F30AF786D5000797B5 /* ttkProgress.c */; }; + F96888160AF786D5000797B5 /* ttkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F40AF786D5000797B5 /* ttkScale.c */; }; + F96888170AF786D5000797B5 /* ttkScroll.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F50AF786D5000797B5 /* ttkScroll.c */; }; + F96888180AF786D5000797B5 /* ttkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F60AF786D5000797B5 /* ttkScrollbar.c */; }; + F96888190AF786D5000797B5 /* ttkSeparator.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F70AF786D5000797B5 /* ttkSeparator.c */; }; + F968881A0AF786D5000797B5 /* ttkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F80AF786D5000797B5 /* ttkSquare.c */; }; + F968881B0AF786D5000797B5 /* ttkState.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F90AF786D5000797B5 /* ttkState.c */; }; + F968881C0AF786D5000797B5 /* ttkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FA0AF786D5000797B5 /* ttkStubInit.c */; }; + F968881D0AF786D5000797B5 /* ttkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FB0AF786D5000797B5 /* ttkStubLib.c */; }; + F968881E0AF786D5000797B5 /* ttkTagSet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FC0AF786D5000797B5 /* ttkTagSet.c */; }; + F968881F0AF786D5000797B5 /* ttkTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FD0AF786D5000797B5 /* ttkTheme.c */; }; + F96888200AF786D5000797B5 /* ttkTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888000AF786D5000797B5 /* ttkTrace.c */; }; + F96888210AF786D5000797B5 /* ttkTrack.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888010AF786D5000797B5 /* ttkTrack.c */; }; + F96888220AF786D5000797B5 /* ttkTreeview.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888020AF786D5000797B5 /* ttkTreeview.c */; }; + F96888230AF786D5000797B5 /* ttkWidget.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888030AF786D5000797B5 /* ttkWidget.c */; }; + F96888850AF78938000797B5 /* ttkMacOSXTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888840AF78938000797B5 /* ttkMacOSXTheme.c */; }; + F96D456F08F272BB004A47F5 /* regcomp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED008F272A7004A47F5 /* regcomp.c */; }; + F96D457208F272BB004A47F5 /* regerror.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED308F272A7004A47F5 /* regerror.c */; }; + F96D457508F272BB004A47F5 /* regexec.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED608F272A7004A47F5 /* regexec.c */; }; + F96D457608F272BB004A47F5 /* regfree.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED708F272A7004A47F5 /* regfree.c */; }; + F96D457B08F272BB004A47F5 /* tclAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDC08F272A7004A47F5 /* tclAlloc.c */; settings = {COMPILER_FLAGS = "-DUSE_TCLALLOC=0"; }; }; + F96D457C08F272BB004A47F5 /* tclAsync.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDD08F272A7004A47F5 /* tclAsync.c */; }; + F96D457D08F272BB004A47F5 /* tclBasic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDE08F272A7004A47F5 /* tclBasic.c */; }; + F96D457E08F272BC004A47F5 /* tclBinary.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDF08F272A7004A47F5 /* tclBinary.c */; }; + F96D457F08F272BC004A47F5 /* tclCkalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE008F272A7004A47F5 /* tclCkalloc.c */; }; + F96D458008F272BC004A47F5 /* tclClock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE108F272A7004A47F5 /* tclClock.c */; }; + F96D458108F272BC004A47F5 /* tclCmdAH.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE208F272A7004A47F5 /* tclCmdAH.c */; }; + F96D458208F272BC004A47F5 /* tclCmdIL.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE308F272A7004A47F5 /* tclCmdIL.c */; }; + F96D458308F272BC004A47F5 /* tclCmdMZ.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */; }; + F96D458408F272BC004A47F5 /* tclCompCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE508F272A7004A47F5 /* tclCompCmds.c */; }; + F96D458508F272BC004A47F5 /* tclCompExpr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE608F272A7004A47F5 /* tclCompExpr.c */; }; + F96D458608F272BC004A47F5 /* tclCompile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE708F272A7004A47F5 /* tclCompile.c */; }; + F96D458808F272BC004A47F5 /* tclConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE908F272A7004A47F5 /* tclConfig.c */; }; + F96D458908F272BC004A47F5 /* tclDate.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEA08F272A7004A47F5 /* tclDate.c */; }; + F96D458B08F272BC004A47F5 /* tclDictObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEC08F272A7004A47F5 /* tclDictObj.c */; }; + F96D458C08F272BC004A47F5 /* tclEncoding.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EED08F272A7004A47F5 /* tclEncoding.c */; }; + F96D458D08F272BC004A47F5 /* tclEnv.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEE08F272A7004A47F5 /* tclEnv.c */; }; + F96D458E08F272BC004A47F5 /* tclEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEF08F272A7004A47F5 /* tclEvent.c */; }; + F96D458F08F272BC004A47F5 /* tclExecute.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF008F272A7004A47F5 /* tclExecute.c */; }; + F96D459008F272BC004A47F5 /* tclFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF108F272A7004A47F5 /* tclFCmd.c */; }; + F96D459108F272BC004A47F5 /* tclFileName.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF208F272A7004A47F5 /* tclFileName.c */; }; + F96D459308F272BC004A47F5 /* tclGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF408F272A7004A47F5 /* tclGet.c */; }; + F96D459508F272BC004A47F5 /* tclHash.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF608F272A7004A47F5 /* tclHash.c */; }; + F96D459608F272BC004A47F5 /* tclHistory.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF708F272A7004A47F5 /* tclHistory.c */; }; + F96D459708F272BC004A47F5 /* tclIndexObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF808F272A7004A47F5 /* tclIndexObj.c */; }; + F96D459B08F272BC004A47F5 /* tclInterp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFC08F272A7004A47F5 /* tclInterp.c */; }; + F96D459D08F272BC004A47F5 /* tclIO.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFE08F272A7004A47F5 /* tclIO.c */; }; + F96D459F08F272BC004A47F5 /* tclIOCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0008F272A7004A47F5 /* tclIOCmd.c */; }; + F96D45A008F272BC004A47F5 /* tclIOGT.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0108F272A7004A47F5 /* tclIOGT.c */; }; + F96D45A108F272BC004A47F5 /* tclIORChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0208F272A7004A47F5 /* tclIORChan.c */; }; + F96D45A208F272BC004A47F5 /* tclIOSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0308F272A7004A47F5 /* tclIOSock.c */; }; + F96D45A308F272BC004A47F5 /* tclIOUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0408F272A7004A47F5 /* tclIOUtil.c */; }; + F96D45A408F272BC004A47F5 /* tclLink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0508F272A7004A47F5 /* tclLink.c */; }; + F96D45A508F272BC004A47F5 /* tclListObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0608F272A7004A47F5 /* tclListObj.c */; }; + F96D45A608F272BC004A47F5 /* tclLiteral.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0708F272A7004A47F5 /* tclLiteral.c */; }; + F96D45A708F272BC004A47F5 /* tclLoad.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0808F272A7004A47F5 /* tclLoad.c */; }; + F96D45A908F272BC004A47F5 /* tclMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0A08F272A7004A47F5 /* tclMain.c */; }; + F96D45AA08F272BC004A47F5 /* tclNamesp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0B08F272A7004A47F5 /* tclNamesp.c */; }; + F96D45AB08F272BC004A47F5 /* tclNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0C08F272A7004A47F5 /* tclNotify.c */; }; + F96D45AC08F272BC004A47F5 /* tclObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0D08F272A7004A47F5 /* tclObj.c */; }; + F96D45AD08F272BC004A47F5 /* tclPanic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0E08F272A7004A47F5 /* tclPanic.c */; }; + F96D45AE08F272BC004A47F5 /* tclParse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0F08F272A7004A47F5 /* tclParse.c */; }; + F96D45B008F272BC004A47F5 /* tclPathObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1108F272A7004A47F5 /* tclPathObj.c */; }; + F96D45B108F272BC004A47F5 /* tclPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1208F272A7004A47F5 /* tclPipe.c */; }; + F96D45B208F272BC004A47F5 /* tclPkg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1308F272A7004A47F5 /* tclPkg.c */; }; + F96D45B308F272BC004A47F5 /* tclPkgConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */; settings = {COMPILER_FLAGS = "-DCFG_INSTALL_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_INSTALL_BINDIR=\\\"$(BINDIR)\\\" -DCFG_INSTALL_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_INSTALL_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_INSTALL_DOCDIR=\\\"$(MANDIR)\\\" -DCFG_RUNTIME_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_RUNTIME_BINDIR=\\\"$(BINDIR)\\\" -DCFG_RUNTIME_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_RUNTIME_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_RUNTIME_DOCDIR=\\\"$(MANDIR)\\\""; }; }; + F96D45B608F272BC004A47F5 /* tclPosixStr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1708F272A7004A47F5 /* tclPosixStr.c */; }; + F96D45B708F272BC004A47F5 /* tclPreserve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1808F272A7004A47F5 /* tclPreserve.c */; }; + F96D45B808F272BC004A47F5 /* tclProc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1908F272A7004A47F5 /* tclProc.c */; }; + F96D45B908F272BC004A47F5 /* tclRegexp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1A08F272A7004A47F5 /* tclRegexp.c */; }; + F96D45BB08F272BC004A47F5 /* tclResolve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1C08F272A7004A47F5 /* tclResolve.c */; }; + F96D45BC08F272BC004A47F5 /* tclResult.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1D08F272A7004A47F5 /* tclResult.c */; }; + F96D45BD08F272BC004A47F5 /* tclScan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1E08F272A7004A47F5 /* tclScan.c */; }; + F96D45BE08F272BC004A47F5 /* tclStringObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1F08F272A7004A47F5 /* tclStringObj.c */; }; + F96D45C308F272BC004A47F5 /* tclStrToD.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2408F272A7004A47F5 /* tclStrToD.c */; }; + F96D45C408F272BC004A47F5 /* tclStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2508F272A7004A47F5 /* tclStubInit.c */; }; + F96D45C508F272BC004A47F5 /* tclStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2608F272A7004A47F5 /* tclStubLib.c */; }; + F96D45C908F272BC004A47F5 /* tclThread.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2A08F272A7004A47F5 /* tclThread.c */; }; + F96D45CA08F272BC004A47F5 /* tclThreadAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */; }; + F96D45CB08F272BC004A47F5 /* tclThreadJoin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */; }; + F96D45CC08F272BC004A47F5 /* tclThreadStorage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */; }; + F96D45CE08F272BC004A47F5 /* tclTimer.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2F08F272A7004A47F5 /* tclTimer.c */; }; + F96D45D008F272BC004A47F5 /* tclTomMathInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */; }; + F96D45D108F272BC004A47F5 /* tclTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3208F272A7004A47F5 /* tclTrace.c */; }; + F96D45D308F272BC004A47F5 /* tclUtf.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3408F272A7004A47F5 /* tclUtf.c */; }; + F96D45D408F272BC004A47F5 /* tclUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3508F272A7004A47F5 /* tclUtil.c */; }; + F96D45D508F272BC004A47F5 /* tclVar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3608F272A7004A47F5 /* tclVar.c */; }; + F96D48E208F272C3004A47F5 /* bn_fast_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */; }; + F96D48E408F272C3004A47F5 /* bn_fast_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */; }; + F96D48E708F272C3004A47F5 /* bn_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426908F272B3004A47F5 /* bn_mp_add.c */; }; + F96D48E808F272C3004A47F5 /* bn_mp_add_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */; }; + F96D48EB08F272C3004A47F5 /* bn_mp_clamp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */; }; + F96D48EC08F272C3004A47F5 /* bn_mp_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426E08F272B3004A47F5 /* bn_mp_clear.c */; }; + F96D48ED08F272C3004A47F5 /* bn_mp_clear_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */; }; + F96D48EE08F272C3004A47F5 /* bn_mp_cmp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427008F272B3004A47F5 /* bn_mp_cmp.c */; }; + F96D48F008F272C3004A47F5 /* bn_mp_cmp_mag.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */; }; + F96D48F208F272C3004A47F5 /* bn_mp_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427408F272B3004A47F5 /* bn_mp_copy.c */; }; + F96D48F308F272C3004A47F5 /* bn_mp_count_bits.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */; }; + F96D48F408F272C3004A47F5 /* bn_mp_div.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427608F272B3004A47F5 /* bn_mp_div.c */; }; + F96D48F508F272C3004A47F5 /* bn_mp_div_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427708F272B3004A47F5 /* bn_mp_div_2.c */; }; + F96D48F608F272C3004A47F5 /* bn_mp_div_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */; }; + F96D48F708F272C3004A47F5 /* bn_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427908F272B3004A47F5 /* bn_mp_div_3.c */; }; + F96D48F808F272C3004A47F5 /* bn_mp_div_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */; }; + F96D48FC08F272C3004A47F5 /* bn_mp_exch.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427E08F272B3004A47F5 /* bn_mp_exch.c */; }; + F96D490508F272C3004A47F5 /* bn_mp_grow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428708F272B3004A47F5 /* bn_mp_grow.c */; }; + F96D490608F272C3004A47F5 /* bn_mp_init.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428808F272B3004A47F5 /* bn_mp_init.c */; }; + F96D490708F272C3004A47F5 /* bn_mp_init_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */; }; + F96D490808F272C3004A47F5 /* bn_mp_init_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */; }; + F96D490908F272C3004A47F5 /* bn_mp_init_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */; }; + F96D490B08F272C3004A47F5 /* bn_mp_init_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */; }; + F96D491008F272C3004A47F5 /* bn_mp_karatsuba_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */; }; + F96D491108F272C3004A47F5 /* bn_mp_karatsuba_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */; }; + F96D491308F272C3004A47F5 /* bn_mp_lshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429508F272B3004A47F5 /* bn_mp_lshd.c */; }; + F96D491408F272C3004A47F5 /* bn_mp_mod.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429608F272B3004A47F5 /* bn_mp_mod.c */; }; + F96D491508F272C3004A47F5 /* bn_mp_mod_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */; }; + F96D491A08F272C3004A47F5 /* bn_mp_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429C08F272B3004A47F5 /* bn_mp_mul.c */; }; + F96D491B08F272C3004A47F5 /* bn_mp_mul_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */; }; + F96D491C08F272C3004A47F5 /* bn_mp_mul_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */; }; + F96D491D08F272C3004A47F5 /* bn_mp_mul_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */; }; + F96D492908F272C3004A47F5 /* bn_mp_radix_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */; }; + F96D492A08F272C3004A47F5 /* bn_mp_radix_smap.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */; }; + F96D492C08F272C3004A47F5 /* bn_mp_read_radix.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */; }; + F96D493708F272C3004A47F5 /* bn_mp_rshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */; }; + F96D493808F272C3004A47F5 /* bn_mp_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BA08F272B3004A47F5 /* bn_mp_set.c */; }; + F96D493C08F272C3004A47F5 /* bn_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */; }; + F96D493F08F272C3004A47F5 /* bn_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C108F272B3004A47F5 /* bn_mp_sub.c */; }; + F96D494008F272C3004A47F5 /* bn_mp_sub_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */; }; + F96D494608F272C3004A47F5 /* bn_mp_toom_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */; }; + F96D494708F272C3004A47F5 /* bn_mp_toom_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */; }; + F96D494908F272C3004A47F5 /* bn_mp_toradix_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */; }; + F96D494C08F272C3004A47F5 /* bn_mp_zero.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */; }; + F96D494E08F272C3004A47F5 /* bn_reverse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D008F272B3004A47F5 /* bn_reverse.c */; }; + F96D494F08F272C3004A47F5 /* bn_s_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */; }; + F96D495108F272C3004A47F5 /* bn_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */; }; + F96D495308F272C3004A47F5 /* bn_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */; }; + F96D495408F272C3004A47F5 /* bn_s_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */; }; + F96D495508F272C3004A47F5 /* bncore.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D708F272B3004A47F5 /* bncore.c */; }; + F96D49A908F272C4004A47F5 /* tclMacOSXBundle.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */; }; + F96D49AD08F272C4004A47F5 /* tclMacOSXFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */; }; + F96D49AE08F272C4004A47F5 /* tclMacOSXNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */; }; + F96D4AC608F272C9004A47F5 /* tclLoadDyld.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445B08F272B9004A47F5 /* tclLoadDyld.c */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; }; + F96D4ACA08F272C9004A47F5 /* tclUnixChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445F08F272B9004A47F5 /* tclUnixChan.c */; }; + F96D4ACB08F272C9004A47F5 /* tclUnixEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446008F272B9004A47F5 /* tclUnixEvent.c */; }; + F96D4ACC08F272C9004A47F5 /* tclUnixFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446108F272B9004A47F5 /* tclUnixFCmd.c */; }; + F96D4ACD08F272C9004A47F5 /* tclUnixFile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446208F272B9004A47F5 /* tclUnixFile.c */; }; + F96D4ACE08F272C9004A47F5 /* tclUnixInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446308F272B9004A47F5 /* tclUnixInit.c */; settings = {COMPILER_FLAGS = "-DTCL_LIBRARY=\\\"$(TCL_LIBRARY)\\\" -DTCL_PACKAGE_PATH=\\\"$(TCL_PACKAGE_PATH)\\\""; }; }; + F96D4ACF08F272C9004A47F5 /* tclUnixNotfy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446408F272B9004A47F5 /* tclUnixNotfy.c */; }; + F96D4AD008F272C9004A47F5 /* tclUnixPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446508F272B9004A47F5 /* tclUnixPipe.c */; }; + F96D4AD208F272CA004A47F5 /* tclUnixSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446708F272B9004A47F5 /* tclUnixSock.c */; }; + F96D4AD408F272CA004A47F5 /* tclUnixThrd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446908F272B9004A47F5 /* tclUnixThrd.c */; }; + F96D4AD608F272CA004A47F5 /* tclUnixTime.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446B08F272B9004A47F5 /* tclUnixTime.c */; }; + F9C9CC000E84059800E00935 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C9CBFF0E84059800E00935 /* ApplicationServices.framework */; }; + F9E61D28090A481F002B3151 /* bn_mp_cmp_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */; }; + F9E61D29090A486C002B3151 /* bn_mp_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A208F272B3004A47F5 /* bn_mp_neg.c */; }; + F9E61D2A090A4891002B3151 /* bn_mp_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */; }; + F9E61D2B090A48A4002B3151 /* bn_mp_and.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426C08F272B3004A47F5 /* bn_mp_and.c */; }; + F9E61D2C090A48AC002B3151 /* bn_mp_expt_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */; }; + F9E61D2D090A48BB002B3151 /* bn_mp_xor.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */; }; + F9E61D2E090A48BF002B3151 /* bn_mp_or.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A308F272B3004A47F5 /* bn_mp_or.c */; }; + F9E61D2F090A48C7002B3151 /* bn_mp_shrink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */; }; + F9E61D30090A48E2002B3151 /* bn_mp_to_unsigned_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */; }; + F9E61D31090A48F9002B3151 /* bn_mp_to_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */; }; + F9E61D32090A48FA002B3151 /* bn_mp_unsigned_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */; }; + F9F4415E0C8BAE6F00BCCD67 /* tclDTrace.d in Sources */ = {isa = PBXBuildFile; fileRef = F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */; }; + F9FC77B80AB29E9100B7077D /* tclUnixCompat.c in Sources */ = {isa = PBXBuildFile; fileRef = F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */; }; + F9FD30BC0CC1AD070073837D /* regcomp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED008F272A7004A47F5 /* regcomp.c */; }; + F9FD30BD0CC1AD070073837D /* regerror.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED308F272A7004A47F5 /* regerror.c */; }; + F9FD30BE0CC1AD070073837D /* regexec.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED608F272A7004A47F5 /* regexec.c */; }; + F9FD30BF0CC1AD070073837D /* regfree.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3ED708F272A7004A47F5 /* regfree.c */; }; + F9FD30C00CC1AD070073837D /* tclAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDC08F272A7004A47F5 /* tclAlloc.c */; settings = {COMPILER_FLAGS = "-DUSE_TCLALLOC=0"; }; }; + F9FD30C10CC1AD070073837D /* tclAsync.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDD08F272A7004A47F5 /* tclAsync.c */; }; + F9FD30C20CC1AD070073837D /* tclBasic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDE08F272A7004A47F5 /* tclBasic.c */; }; + F9FD30C30CC1AD070073837D /* tclBinary.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EDF08F272A7004A47F5 /* tclBinary.c */; }; + F9FD30C40CC1AD070073837D /* tclCkalloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE008F272A7004A47F5 /* tclCkalloc.c */; }; + F9FD30C50CC1AD070073837D /* tclClock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE108F272A7004A47F5 /* tclClock.c */; }; + F9FD30C60CC1AD070073837D /* tclCmdAH.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE208F272A7004A47F5 /* tclCmdAH.c */; }; + F9FD30C70CC1AD070073837D /* tclCmdIL.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE308F272A7004A47F5 /* tclCmdIL.c */; }; + F9FD30C80CC1AD070073837D /* tclCmdMZ.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */; }; + F9FD30C90CC1AD070073837D /* tclCompCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE508F272A7004A47F5 /* tclCompCmds.c */; }; + F9FD30CA0CC1AD070073837D /* tclCompExpr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE608F272A7004A47F5 /* tclCompExpr.c */; }; + F9FD30CB0CC1AD070073837D /* tclCompile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE708F272A7004A47F5 /* tclCompile.c */; }; + F9FD30CC0CC1AD070073837D /* tclConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EE908F272A7004A47F5 /* tclConfig.c */; }; + F9FD30CD0CC1AD070073837D /* tclDate.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEA08F272A7004A47F5 /* tclDate.c */; }; + F9FD30CE0CC1AD070073837D /* tclDictObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEC08F272A7004A47F5 /* tclDictObj.c */; }; + F9FD30CF0CC1AD070073837D /* tclEncoding.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EED08F272A7004A47F5 /* tclEncoding.c */; }; + F9FD30D00CC1AD070073837D /* tclEnv.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEE08F272A7004A47F5 /* tclEnv.c */; }; + F9FD30D10CC1AD070073837D /* tclEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EEF08F272A7004A47F5 /* tclEvent.c */; }; + F9FD30D20CC1AD070073837D /* tclExecute.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF008F272A7004A47F5 /* tclExecute.c */; }; + F9FD30D30CC1AD070073837D /* tclFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF108F272A7004A47F5 /* tclFCmd.c */; }; + F9FD30D40CC1AD070073837D /* tclFileName.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF208F272A7004A47F5 /* tclFileName.c */; }; + F9FD30D50CC1AD070073837D /* tclGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF408F272A7004A47F5 /* tclGet.c */; }; + F9FD30D60CC1AD070073837D /* tclHash.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF608F272A7004A47F5 /* tclHash.c */; }; + F9FD30D70CC1AD070073837D /* tclHistory.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF708F272A7004A47F5 /* tclHistory.c */; }; + F9FD30D80CC1AD070073837D /* tclIndexObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EF808F272A7004A47F5 /* tclIndexObj.c */; }; + F9FD30D90CC1AD070073837D /* tclInterp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFC08F272A7004A47F5 /* tclInterp.c */; }; + F9FD30DA0CC1AD070073837D /* tclIO.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3EFE08F272A7004A47F5 /* tclIO.c */; }; + F9FD30DB0CC1AD070073837D /* tclIOCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0008F272A7004A47F5 /* tclIOCmd.c */; }; + F9FD30DC0CC1AD070073837D /* tclIOGT.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0108F272A7004A47F5 /* tclIOGT.c */; }; + F9FD30DD0CC1AD070073837D /* tclIORChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0208F272A7004A47F5 /* tclIORChan.c */; }; + F9FD30DE0CC1AD070073837D /* tclIOSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0308F272A7004A47F5 /* tclIOSock.c */; }; + F9FD30DF0CC1AD070073837D /* tclIOUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0408F272A7004A47F5 /* tclIOUtil.c */; }; + F9FD30E00CC1AD070073837D /* tclLink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0508F272A7004A47F5 /* tclLink.c */; }; + F9FD30E10CC1AD070073837D /* tclListObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0608F272A7004A47F5 /* tclListObj.c */; }; + F9FD30E20CC1AD070073837D /* tclLiteral.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0708F272A7004A47F5 /* tclLiteral.c */; }; + F9FD30E30CC1AD070073837D /* tclLoad.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0808F272A7004A47F5 /* tclLoad.c */; }; + F9FD30E40CC1AD070073837D /* tclMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0A08F272A7004A47F5 /* tclMain.c */; }; + F9FD30E50CC1AD070073837D /* tclNamesp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0B08F272A7004A47F5 /* tclNamesp.c */; }; + F9FD30E60CC1AD070073837D /* tclNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0C08F272A7004A47F5 /* tclNotify.c */; }; + F9FD30E70CC1AD070073837D /* tclObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0D08F272A7004A47F5 /* tclObj.c */; }; + F9FD30E80CC1AD070073837D /* tclPanic.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0E08F272A7004A47F5 /* tclPanic.c */; }; + F9FD30E90CC1AD070073837D /* tclParse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F0F08F272A7004A47F5 /* tclParse.c */; }; + F9FD30EA0CC1AD070073837D /* tclPathObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1108F272A7004A47F5 /* tclPathObj.c */; }; + F9FD30EB0CC1AD070073837D /* tclPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1208F272A7004A47F5 /* tclPipe.c */; }; + F9FD30EC0CC1AD070073837D /* tclPkg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1308F272A7004A47F5 /* tclPkg.c */; }; + F9FD30ED0CC1AD070073837D /* tclPkgConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */; settings = {COMPILER_FLAGS = "-DCFG_INSTALL_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_INSTALL_BINDIR=\\\"$(BINDIR)\\\" -DCFG_INSTALL_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_INSTALL_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_INSTALL_DOCDIR=\\\"$(MANDIR)\\\" -DCFG_RUNTIME_LIBDIR=\\\"$(LIBDIR)\\\" -DCFG_RUNTIME_BINDIR=\\\"$(BINDIR)\\\" -DCFG_RUNTIME_SCRDIR=\\\"$(TCL_LIBRARY)\\\" -DCFG_RUNTIME_INCDIR=\\\"$(INCLUDEDIR)\\\" -DCFG_RUNTIME_DOCDIR=\\\"$(MANDIR)\\\""; }; }; + F9FD30EE0CC1AD070073837D /* tclPosixStr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1708F272A7004A47F5 /* tclPosixStr.c */; }; + F9FD30EF0CC1AD070073837D /* tclPreserve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1808F272A7004A47F5 /* tclPreserve.c */; }; + F9FD30F00CC1AD070073837D /* tclProc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1908F272A7004A47F5 /* tclProc.c */; }; + F9FD30F10CC1AD070073837D /* tclRegexp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1A08F272A7004A47F5 /* tclRegexp.c */; }; + F9FD30F20CC1AD070073837D /* tclResolve.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1C08F272A7004A47F5 /* tclResolve.c */; }; + F9FD30F30CC1AD070073837D /* tclResult.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1D08F272A7004A47F5 /* tclResult.c */; }; + F9FD30F40CC1AD070073837D /* tclScan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1E08F272A7004A47F5 /* tclScan.c */; }; + F9FD30F50CC1AD070073837D /* tclStringObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F1F08F272A7004A47F5 /* tclStringObj.c */; }; + F9FD30F60CC1AD070073837D /* tclStrToD.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2408F272A7004A47F5 /* tclStrToD.c */; }; + F9FD30F70CC1AD070073837D /* tclStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2508F272A7004A47F5 /* tclStubInit.c */; }; + F9FD30F80CC1AD070073837D /* tclStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2608F272A7004A47F5 /* tclStubLib.c */; }; + F9FD30F90CC1AD070073837D /* tclThread.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2A08F272A7004A47F5 /* tclThread.c */; }; + F9FD30FA0CC1AD070073837D /* tclThreadAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */; }; + F9FD30FB0CC1AD070073837D /* tclThreadJoin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */; }; + F9FD30FC0CC1AD070073837D /* tclThreadStorage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */; }; + F9FD30FD0CC1AD070073837D /* tclTimer.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F2F08F272A7004A47F5 /* tclTimer.c */; }; + F9FD30FE0CC1AD070073837D /* tclTomMathInterface.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */; }; + F9FD30FF0CC1AD070073837D /* tclTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3208F272A7004A47F5 /* tclTrace.c */; }; + F9FD31000CC1AD070073837D /* tclUtf.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3408F272A7004A47F5 /* tclUtf.c */; }; + F9FD31010CC1AD070073837D /* tclUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3508F272A7004A47F5 /* tclUtil.c */; }; + F9FD31020CC1AD070073837D /* tclVar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D3F3608F272A7004A47F5 /* tclVar.c */; }; + F9FD31030CC1AD070073837D /* bn_fast_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */; }; + F9FD31040CC1AD070073837D /* bn_fast_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */; }; + F9FD31050CC1AD070073837D /* bn_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426908F272B3004A47F5 /* bn_mp_add.c */; }; + F9FD31060CC1AD070073837D /* bn_mp_add_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */; }; + F9FD31070CC1AD070073837D /* bn_mp_and.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426C08F272B3004A47F5 /* bn_mp_and.c */; }; + F9FD31080CC1AD070073837D /* bn_mp_clamp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */; }; + F9FD31090CC1AD070073837D /* bn_mp_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426E08F272B3004A47F5 /* bn_mp_clear.c */; }; + F9FD310A0CC1AD070073837D /* bn_mp_clear_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */; }; + F9FD310B0CC1AD070073837D /* bn_mp_cmp.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427008F272B3004A47F5 /* bn_mp_cmp.c */; }; + F9FD310C0CC1AD070073837D /* bn_mp_cmp_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */; }; + F9FD310D0CC1AD070073837D /* bn_mp_cmp_mag.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */; }; + F9FD310E0CC1AD070073837D /* bn_mp_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427408F272B3004A47F5 /* bn_mp_copy.c */; }; + F9FD310F0CC1AD070073837D /* bn_mp_count_bits.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */; }; + F9FD31100CC1AD070073837D /* bn_mp_div.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427608F272B3004A47F5 /* bn_mp_div.c */; }; + F9FD31110CC1AD070073837D /* bn_mp_div_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427708F272B3004A47F5 /* bn_mp_div_2.c */; }; + F9FD31120CC1AD070073837D /* bn_mp_div_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */; }; + F9FD31130CC1AD070073837D /* bn_mp_div_3.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427908F272B3004A47F5 /* bn_mp_div_3.c */; }; + F9FD31140CC1AD070073837D /* bn_mp_div_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */; }; + F9FD31150CC1AD070073837D /* bn_mp_exch.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427E08F272B3004A47F5 /* bn_mp_exch.c */; }; + F9FD31160CC1AD070073837D /* bn_mp_expt_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */; }; + F9FD31170CC1AD070073837D /* bn_mp_grow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428708F272B3004A47F5 /* bn_mp_grow.c */; }; + F9FD31180CC1AD070073837D /* bn_mp_init.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428808F272B3004A47F5 /* bn_mp_init.c */; }; + F9FD31190CC1AD070073837D /* bn_mp_init_copy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */; }; + F9FD311A0CC1AD070073837D /* bn_mp_init_multi.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */; }; + F9FD311B0CC1AD070073837D /* bn_mp_init_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */; }; + F9FD311C0CC1AD070073837D /* bn_mp_init_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */; }; + F9FD311D0CC1AD070073837D /* bn_mp_karatsuba_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */; }; + F9FD311E0CC1AD070073837D /* bn_mp_karatsuba_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */; }; + F9FD311F0CC1AD070073837D /* bn_mp_lshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429508F272B3004A47F5 /* bn_mp_lshd.c */; }; + F9FD31200CC1AD070073837D /* bn_mp_mod.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429608F272B3004A47F5 /* bn_mp_mod.c */; }; + F9FD31210CC1AD070073837D /* bn_mp_mod_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */; }; + F9FD31220CC1AD070073837D /* bn_mp_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429C08F272B3004A47F5 /* bn_mp_mul.c */; }; + F9FD31230CC1AD070073837D /* bn_mp_mul_2.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */; }; + F9FD31240CC1AD070073837D /* bn_mp_mul_2d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */; }; + F9FD31250CC1AD070073837D /* bn_mp_mul_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */; }; + F9FD31260CC1AD070073837D /* bn_mp_neg.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A208F272B3004A47F5 /* bn_mp_neg.c */; }; + F9FD31270CC1AD070073837D /* bn_mp_or.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42A308F272B3004A47F5 /* bn_mp_or.c */; }; + F9FD31280CC1AD070073837D /* bn_mp_radix_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */; }; + F9FD31290CC1AD070073837D /* bn_mp_radix_smap.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */; }; + F9FD312A0CC1AD070073837D /* bn_mp_read_radix.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */; }; + F9FD312B0CC1AD070073837D /* bn_mp_rshd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */; }; + F9FD312C0CC1AD070073837D /* bn_mp_set.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BA08F272B3004A47F5 /* bn_mp_set.c */; }; + F9FD312D0CC1AD070073837D /* bn_mp_shrink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */; }; + F9FD312E0CC1AD070073837D /* bn_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */; }; + F9FD312F0CC1AD070073837D /* bn_mp_sqrt.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */; }; + F9FD31300CC1AD070073837D /* bn_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C108F272B3004A47F5 /* bn_mp_sub.c */; }; + F9FD31310CC1AD070073837D /* bn_mp_sub_d.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */; }; + F9FD31320CC1AD070073837D /* bn_mp_to_unsigned_bin_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */; }; + F9FD31330CC1AD070073837D /* bn_mp_to_unsigned_bin.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */; }; + F9FD31340CC1AD070073837D /* bn_mp_toom_mul.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */; }; + F9FD31350CC1AD070073837D /* bn_mp_toom_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */; }; + F9FD31360CC1AD070073837D /* bn_mp_toradix_n.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */; }; + F9FD31370CC1AD070073837D /* bn_mp_unsigned_bin_size.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */; }; + F9FD31380CC1AD070073837D /* bn_mp_xor.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */; }; + F9FD31390CC1AD070073837D /* bn_mp_zero.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */; }; + F9FD313A0CC1AD070073837D /* bn_reverse.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D008F272B3004A47F5 /* bn_reverse.c */; }; + F9FD313B0CC1AD070073837D /* bn_s_mp_add.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */; }; + F9FD313C0CC1AD070073837D /* bn_s_mp_mul_digs.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */; }; + F9FD313D0CC1AD070073837D /* bn_s_mp_sqr.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */; }; + F9FD313E0CC1AD070073837D /* bn_s_mp_sub.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */; }; + F9FD313F0CC1AD070073837D /* bncore.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D42D708F272B3004A47F5 /* bncore.c */; }; + F9FD31400CC1AD070073837D /* tclMacOSXBundle.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */; }; + F9FD31410CC1AD070073837D /* tclMacOSXFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */; }; + F9FD31420CC1AD070073837D /* tclMacOSXNotify.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */; }; + F9FD31430CC1AD070073837D /* tclLoadDyld.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445B08F272B9004A47F5 /* tclLoadDyld.c */; settings = {COMPILER_FLAGS = "-Wno-deprecated-declarations"; }; }; + F9FD31440CC1AD070073837D /* tclUnixChan.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D445F08F272B9004A47F5 /* tclUnixChan.c */; }; + F9FD31450CC1AD070073837D /* tclUnixCompat.c in Sources */ = {isa = PBXBuildFile; fileRef = F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */; }; + F9FD31460CC1AD070073837D /* tclUnixEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446008F272B9004A47F5 /* tclUnixEvent.c */; }; + F9FD31470CC1AD070073837D /* tclUnixFCmd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446108F272B9004A47F5 /* tclUnixFCmd.c */; }; + F9FD31480CC1AD070073837D /* tclUnixFile.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446208F272B9004A47F5 /* tclUnixFile.c */; }; + F9FD31490CC1AD070073837D /* tclUnixInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446308F272B9004A47F5 /* tclUnixInit.c */; settings = {COMPILER_FLAGS = "-DTCL_LIBRARY=\\\"$(TCL_LIBRARY)\\\" -DTCL_PACKAGE_PATH=\\\"$(TCL_PACKAGE_PATH)\\\""; }; }; + F9FD314A0CC1AD070073837D /* tclUnixNotfy.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446408F272B9004A47F5 /* tclUnixNotfy.c */; }; + F9FD314B0CC1AD070073837D /* tclUnixPipe.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446508F272B9004A47F5 /* tclUnixPipe.c */; }; + F9FD314C0CC1AD070073837D /* tclUnixSock.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446708F272B9004A47F5 /* tclUnixSock.c */; }; + F9FD314D0CC1AD070073837D /* tclUnixThrd.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446908F272B9004A47F5 /* tclUnixThrd.c */; }; + F9FD314E0CC1AD070073837D /* tclUnixTime.c in Sources */ = {isa = PBXBuildFile; fileRef = F96D446B08F272B9004A47F5 /* tclUnixTime.c */; }; + F9FD314F0CC1AD070073837D /* tk3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAC08F27A39005CB29B /* tk3d.c */; }; + F9FD31500CC1AD070073837D /* tkArgv.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAE08F27A39005CB29B /* tkArgv.c */; }; + F9FD31510CC1AD070073837D /* tkAtom.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAAF08F27A39005CB29B /* tkAtom.c */; }; + F9FD31520CC1AD070073837D /* tkBind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB008F27A39005CB29B /* tkBind.c */; }; + F9FD31530CC1AD070073837D /* tkBitmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB108F27A39005CB29B /* tkBitmap.c */; }; + F9FD31540CC1AD070073837D /* tkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB208F27A39005CB29B /* tkButton.c */; }; + F9FD31550CC1AD070073837D /* tkCanvArc.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB408F27A39005CB29B /* tkCanvArc.c */; }; + F9FD31560CC1AD070073837D /* tkCanvas.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB508F27A39005CB29B /* tkCanvas.c */; }; + F9FD31570CC1AD070073837D /* tkCanvBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB708F27A39005CB29B /* tkCanvBmap.c */; }; + F9FD31580CC1AD070073837D /* tkCanvImg.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB808F27A39005CB29B /* tkCanvImg.c */; }; + F9FD31590CC1AD070073837D /* tkCanvLine.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAB908F27A39005CB29B /* tkCanvLine.c */; }; + F9FD315A0CC1AD070073837D /* tkCanvPoly.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABA08F27A39005CB29B /* tkCanvPoly.c */; }; + F9FD315B0CC1AD070073837D /* tkCanvPs.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABB08F27A39005CB29B /* tkCanvPs.c */; }; + F9FD315C0CC1AD070073837D /* tkCanvText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABD08F27A39005CB29B /* tkCanvText.c */; }; + F9FD315D0CC1AD070073837D /* tkCanvUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABE08F27A39005CB29B /* tkCanvUtil.c */; }; + F9FD315E0CC1AD070073837D /* tkCanvWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BABF08F27A39005CB29B /* tkCanvWind.c */; }; + F9FD315F0CC1AD070073837D /* tkClipboard.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC008F27A39005CB29B /* tkClipboard.c */; }; + F9FD31600CC1AD070073837D /* tkCmds.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC108F27A39005CB29B /* tkCmds.c */; }; + F9FD31610CC1AD070073837D /* tkColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC208F27A39005CB29B /* tkColor.c */; }; + F9FD31620CC1AD070073837D /* tkConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC408F27A39005CB29B /* tkConfig.c */; }; + F9FD31630CC1AD070073837D /* tkConsole.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC508F27A39005CB29B /* tkConsole.c */; }; + F9FD31640CC1AD070073837D /* tkCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC608F27A39005CB29B /* tkCursor.c */; }; + F9FD31650CC1AD070073837D /* tkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAC808F27A39005CB29B /* tkEntry.c */; }; + F9FD31660CC1AD070073837D /* tkError.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACA08F27A39005CB29B /* tkError.c */; }; + F9FD31670CC1AD070073837D /* tkEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACB08F27A39005CB29B /* tkEvent.c */; }; + F9FD31680CC1AD070073837D /* tkFileFilter.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACC08F27A39005CB29B /* tkFileFilter.c */; }; + F9FD31690CC1AD070073837D /* tkFocus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACE08F27A39005CB29B /* tkFocus.c */; }; + F9FD316A0CC1AD070073837D /* tkFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BACF08F27A39005CB29B /* tkFont.c */; }; + F9FD316B0CC1AD070073837D /* tkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD108F27A39005CB29B /* tkFrame.c */; }; + F9FD316C0CC1AD070073837D /* tkGC.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD208F27A39005CB29B /* tkGC.c */; }; + F9FD316D0CC1AD070073837D /* tkGeometry.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD308F27A39005CB29B /* tkGeometry.c */; }; + F9FD316E0CC1AD070073837D /* tkGet.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD408F27A39005CB29B /* tkGet.c */; }; + F9FD316F0CC1AD070073837D /* tkGrab.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD508F27A39005CB29B /* tkGrab.c */; }; + F9FD31700CC1AD070073837D /* tkGrid.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD608F27A39005CB29B /* tkGrid.c */; }; + F9FD31710CC1AD070073837D /* tkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD708F27A39005CB29B /* tkImage.c */; }; + F9FD31720CC1AD070073837D /* tkImgBmap.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD808F27A39005CB29B /* tkImgBmap.c */; }; + F9FD31730CC1AD070073837D /* tkImgGIF.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAD908F27A39005CB29B /* tkImgGIF.c */; }; + F9FD31740CC1AD070073837D /* tkImgPhoto.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADA08F27A39005CB29B /* tkImgPhoto.c */; }; + F9FD31750CC1AD070073837D /* tkImgPPM.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BADB08F27A39005CB29B /* tkImgPPM.c */; }; + F9FD31760CC1AD070073837D /* tkListbox.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE408F27A39005CB29B /* tkListbox.c */; }; + F9FD31770CC1AD070073837D /* tkMacWinMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE508F27A39005CB29B /* tkMacWinMenu.c */; }; + F9FD31780CC1AD070073837D /* tkMain.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE608F27A39005CB29B /* tkMain.c */; }; + F9FD31790CC1AD070073837D /* tkMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE708F27A39005CB29B /* tkMenu.c */; }; + F9FD317A0CC1AD070073837D /* tkMenubutton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAE908F27A39005CB29B /* tkMenubutton.c */; }; + F9FD317B0CC1AD070073837D /* tkMenuDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEB08F27A39005CB29B /* tkMenuDraw.c */; }; + F9FD317C0CC1AD070073837D /* tkMessage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEC08F27A39005CB29B /* tkMessage.c */; }; + F9FD317D0CC1AD070073837D /* tkObj.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAED08F27A39005CB29B /* tkObj.c */; }; + F9FD317E0CC1AD070073837D /* tkOldConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEE08F27A39005CB29B /* tkOldConfig.c */; }; + F9FD317F0CC1AD070073837D /* tkOldTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFE08F27A39005CB29B /* tkOldTest.c */; }; + F9FD31800CC1AD070073837D /* tkOption.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAEF08F27A39005CB29B /* tkOption.c */; }; + F9FD31810CC1AD070073837D /* tkPack.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF008F27A39005CB29B /* tkPack.c */; }; + F9FD31820CC1AD070073837D /* tkPanedWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF108F27A39005CB29B /* tkPanedWindow.c */; }; + F9FD31830CC1AD070073837D /* tkPlace.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF208F27A39005CB29B /* tkPlace.c */; }; + F9FD31850CC1AD070073837D /* tkRectOval.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF608F27A39005CB29B /* tkRectOval.c */; }; + F9FD31860CC1AD070073837D /* tkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF708F27A39005CB29B /* tkScale.c */; }; + F9FD31870CC1AD070073837D /* tkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAF908F27A39005CB29B /* tkScrollbar.c */; }; + F9FD31880CC1AD070073837D /* tkSelect.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFB08F27A39005CB29B /* tkSelect.c */; }; + F9FD31890CC1AD070073837D /* tkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFD08F27A39005CB29B /* tkSquare.c */; }; + F9FD318A0CC1AD070073837D /* tkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BAFF08F27A39005CB29B /* tkStubInit.c */; }; + F9FD318B0CC1AD070073837D /* tkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0008F27A39005CB29B /* tkStubLib.c */; }; + F9FD318C0CC1AD070073837D /* tkStyle.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0108F27A39005CB29B /* tkStyle.c */; }; + F9FD318D0CC1AD070073837D /* tkTest.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0208F27A39005CB29B /* tkTest.c */; }; + F9FD318E0CC1AD070073837D /* tkText.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0308F27A39005CB29B /* tkText.c */; }; + F9FD318F0CC1AD070073837D /* tkTextBTree.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0508F27A39005CB29B /* tkTextBTree.c */; }; + F9FD31900CC1AD070073837D /* tkTextDisp.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0608F27A39005CB29B /* tkTextDisp.c */; }; + F9FD31910CC1AD070073837D /* tkTextImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0808F27A39005CB29B /* tkTextImage.c */; }; + F9FD31920CC1AD070073837D /* tkTextIndex.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0908F27A39005CB29B /* tkTextIndex.c */; }; + F9FD31930CC1AD070073837D /* tkTextMark.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0A08F27A39005CB29B /* tkTextMark.c */; }; + F9FD31940CC1AD070073837D /* tkTextTag.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0B08F27A39005CB29B /* tkTextTag.c */; }; + F9FD31950CC1AD070073837D /* tkTextWind.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0C08F27A39005CB29B /* tkTextWind.c */; }; + F9FD31960CC1AD070073837D /* tkTrig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0D08F27A39005CB29B /* tkTrig.c */; }; + F9FD31970CC1AD070073837D /* tkUndo.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB0E08F27A39005CB29B /* tkUndo.c */; }; + F9FD31980CC1AD070073837D /* tkUtil.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1008F27A39005CB29B /* tkUtil.c */; }; + F9FD31990CC1AD070073837D /* tkVisual.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1108F27A39005CB29B /* tkVisual.c */; }; + F9FD319A0CC1AD070073837D /* tkWindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BB1208F27A39005CB29B /* tkWindow.c */; }; + F9FD319B0CC1AD070073837D /* ttkBlink.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E10AF786D5000797B5 /* ttkBlink.c */; }; + F9FD319C0CC1AD070073837D /* ttkButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E20AF786D5000797B5 /* ttkButton.c */; }; + F9FD319D0CC1AD070073837D /* ttkCache.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E30AF786D5000797B5 /* ttkCache.c */; }; + F9FD319E0CC1AD070073837D /* ttkClamTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E40AF786D5000797B5 /* ttkClamTheme.c */; }; + F9FD319F0CC1AD070073837D /* ttkClassicTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E50AF786D5000797B5 /* ttkClassicTheme.c */; }; + F9FD31A00CC1AD070073837D /* ttkDefaultTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */; }; + F9FD31A10CC1AD070073837D /* ttkElements.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E80AF786D5000797B5 /* ttkElements.c */; }; + F9FD31A20CC1AD070073837D /* ttkEntry.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887E90AF786D5000797B5 /* ttkEntry.c */; }; + F9FD31A30CC1AD070073837D /* ttkFrame.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EA0AF786D5000797B5 /* ttkFrame.c */; }; + F9FD31A40CC1AD070073837D /* ttkImage.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EB0AF786D5000797B5 /* ttkImage.c */; }; + F9FD31A50CC1AD070073837D /* ttkInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EC0AF786D5000797B5 /* ttkInit.c */; }; + F9FD31A60CC1AD070073837D /* ttkLabel.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887ED0AF786D5000797B5 /* ttkLabel.c */; }; + F9FD31A70CC1AD070073837D /* ttkLayout.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EE0AF786D5000797B5 /* ttkLayout.c */; }; + F9FD31A80CC1AD070073837D /* ttkManager.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887EF0AF786D5000797B5 /* ttkManager.c */; }; + F9FD31A90CC1AD070073837D /* ttkNotebook.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F10AF786D5000797B5 /* ttkNotebook.c */; }; + F9FD31AA0CC1AD070073837D /* ttkPanedwindow.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F20AF786D5000797B5 /* ttkPanedwindow.c */; }; + F9FD31AB0CC1AD070073837D /* ttkProgress.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F30AF786D5000797B5 /* ttkProgress.c */; }; + F9FD31AC0CC1AD070073837D /* ttkScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F40AF786D5000797B5 /* ttkScale.c */; }; + F9FD31AD0CC1AD070073837D /* ttkScroll.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F50AF786D5000797B5 /* ttkScroll.c */; }; + F9FD31AE0CC1AD070073837D /* ttkScrollbar.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F60AF786D5000797B5 /* ttkScrollbar.c */; }; + F9FD31AF0CC1AD070073837D /* ttkSeparator.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F70AF786D5000797B5 /* ttkSeparator.c */; }; + F9FD31B00CC1AD070073837D /* ttkSquare.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F80AF786D5000797B5 /* ttkSquare.c */; }; + F9FD31B10CC1AD070073837D /* ttkState.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887F90AF786D5000797B5 /* ttkState.c */; }; + F9FD31B20CC1AD070073837D /* ttkStubInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FA0AF786D5000797B5 /* ttkStubInit.c */; }; + F9FD31B30CC1AD070073837D /* ttkStubLib.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FB0AF786D5000797B5 /* ttkStubLib.c */; }; + F9FD31B40CC1AD070073837D /* ttkTagSet.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FC0AF786D5000797B5 /* ttkTagSet.c */; }; + F9FD31B50CC1AD070073837D /* ttkTheme.c in Sources */ = {isa = PBXBuildFile; fileRef = F96887FD0AF786D5000797B5 /* ttkTheme.c */; }; + F9FD31B60CC1AD070073837D /* ttkTrace.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888000AF786D5000797B5 /* ttkTrace.c */; }; + F9FD31B70CC1AD070073837D /* ttkTrack.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888010AF786D5000797B5 /* ttkTrack.c */; }; + F9FD31B80CC1AD070073837D /* ttkTreeview.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888020AF786D5000797B5 /* ttkTreeview.c */; }; + F9FD31B90CC1AD070073837D /* ttkWidget.c in Sources */ = {isa = PBXBuildFile; fileRef = F96888030AF786D5000797B5 /* ttkWidget.c */; }; + F9FD31DA0CC1AD070073837D /* tkAppInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7508F27A3D005CB29B /* tkAppInit.c */; settings = {COMPILER_FLAGS = "-DTK_TEST"; }; }; + F9FD31DB0CC1AD070073837D /* tkUnix3d.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7908F27A3D005CB29B /* tkUnix3d.c */; }; + F9FD31DC0CC1AD070073837D /* tkUnixScale.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8C08F27A3D005CB29B /* tkUnixScale.c */; }; + F9FD31E20CC1AD070073837D /* tclDTrace.d in Sources */ = {isa = PBXBuildFile; fileRef = F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */; }; + F9FD31E40CC1AD070073837D /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F966C07408F2820D005CB29B /* CoreFoundation.framework */; }; + F9FD31F80CC1ADB70073837D /* tkUnixCursor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7D08F27A3D005CB29B /* tkUnixCursor.c */; }; + F9FD31FA0CC1ADB70073837D /* tkUnixKey.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8708F27A3D005CB29B /* tkUnixKey.c */; }; + F9FD31FB0CC1ADB70073837D /* tkUnixXId.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC9108F27A3D005CB29B /* tkUnixXId.c */; }; + F9FD31FC0CC1ADB70073837D /* tkUnixInit.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8508F27A3D005CB29B /* tkUnixInit.c */; }; + F9FD31FD0CC1ADB70073837D /* tkUnixEmbed.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8108F27A3D005CB29B /* tkUnixEmbed.c */; }; + F9FD31FE0CC1ADB70073837D /* tkUnixSend.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8F08F27A3D005CB29B /* tkUnixSend.c */; }; + F9FD31FF0CC1ADB70073837D /* tkUnixFocus.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8308F27A3D005CB29B /* tkUnixFocus.c */; }; + F9FD32000CC1ADB70073837D /* tkUnixWm.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC9008F27A3D005CB29B /* tkUnixWm.c */; }; + F9FD32010CC1ADB70073837D /* tkUnixRFont.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8B08F27A3D005CB29B /* tkUnixRFont.c */; }; + F9FD32020CC1ADB70073837D /* tkUnix.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7808F27A3D005CB29B /* tkUnix.c */; }; + F9FD32030CC1ADB70073837D /* tkUnixMenu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8808F27A3D005CB29B /* tkUnixMenu.c */; }; + F9FD32040CC1ADB70073837D /* tkUnixConfig.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7C08F27A3D005CB29B /* tkUnixConfig.c */; }; + F9FD32050CC1ADB70073837D /* tkUnixDraw.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8008F27A3D005CB29B /* tkUnixDraw.c */; }; + F9FD32060CC1ADB70073837D /* tkUnixDialog.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7F08F27A3D005CB29B /* tkUnixDialog.c */; }; + F9FD32070CC1ADB70073837D /* tkUnixSelect.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8E08F27A3D005CB29B /* tkUnixSelect.c */; }; + F9FD32080CC1ADB70073837D /* tkUnixEvent.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8208F27A3D005CB29B /* tkUnixEvent.c */; }; + F9FD32090CC1ADB70073837D /* tkUnixColor.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7B08F27A3D005CB29B /* tkUnixColor.c */; }; + F9FD320A0CC1ADB70073837D /* tkUnixButton.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC7A08F27A3D005CB29B /* tkUnixButton.c */; }; + F9FD320B0CC1ADB70073837D /* tkUnixMenubu.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8908F27A3D005CB29B /* tkUnixMenubu.c */; }; + F9FD320C0CC1ADB70073837D /* tkUnixScrlbr.c in Sources */ = {isa = PBXBuildFile; fileRef = F966BC8D08F27A3D005CB29B /* tkUnixScrlbr.c */; }; + F9FD32170CC1AF170073837D /* libX11.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD32140CC1AF170073837D /* libX11.dylib */; }; + F9FD32180CC1AF170073837D /* libXext.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD32150CC1AF170073837D /* libXext.dylib */; }; + F9FD32190CC1AF170073837D /* libXss.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD32160CC1AF170073837D /* libXss.dylib */; }; + F9FD349B0CC1BB0D0073837D /* libfreetype.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD34990CC1BB0D0073837D /* libfreetype.dylib */; }; + F9FD349C0CC1BB0D0073837D /* libXft.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD349A0CC1BB0D0073837D /* libXft.dylib */; }; + F9FD34C40CC1BBD70073837D /* libfontconfig.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F9FD34C30CC1BBD70073837D /* libfontconfig.dylib */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 8DD76FB20486AB0100D96B5E /* tktest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = tktest; sourceTree = BUILT_PRODUCTS_DIR; }; + F9099B8A0CC67D30005A9580 /* textpeer.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textpeer.tcl; sourceTree = "<group>"; }; + F9099B8B0CC67D3E005A9580 /* ttkbut.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttkbut.tcl; sourceTree = "<group>"; }; + F91E62260C1AE686006C9D96 /* Tclsh-Info.plist.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Tclsh-Info.plist.in"; sourceTree = "<group>"; }; + F92240290D7C620F005EC715 /* knightstour.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = knightstour.tcl; sourceTree = "<group>"; }; + F936FCD70CCD984500716967 /* ttkprogress.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttkprogress.tcl; sourceTree = "<group>"; }; + F936FCD80CCD984600716967 /* tree.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tree.tcl; sourceTree = "<group>"; }; + F936FCD90CCD984600716967 /* toolbar.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = toolbar.tcl; sourceTree = "<group>"; }; + F936FCDA0CCD984600716967 /* ttknote.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttknote.tcl; sourceTree = "<group>"; }; + F936FCDB0CCD984600716967 /* combo.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = combo.tcl; sourceTree = "<group>"; }; + F93E5EFD09CF8711008FA367 /* tkMacOSXFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXFont.h; sourceTree = "<group>"; }; + F94523A10E6FC2AC00C1D987 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; + F95D8D4B0F1715610006B020 /* Tk.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Tk.icns; sourceTree = "<group>"; }; + F95D8D4C0F1715610006B020 /* Tk.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = Tk.tiff; sourceTree = "<group>"; }; + F95FAFF90B34F1130072E431 /* macOSXLoad.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = macOSXLoad.test; sourceTree = "<group>"; }; + F962F7C60DADC26200648DB8 /* vsapi.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = vsapi.test; sourceTree = "<group>"; }; + F966BA0408F27A37005CB29B /* error.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = error.xbm; sourceTree = "<group>"; }; + F966BA0508F27A37005CB29B /* gray12.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray12.xbm; sourceTree = "<group>"; }; + F966BA0608F27A37005CB29B /* gray25.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray25.xbm; sourceTree = "<group>"; }; + F966BA0708F27A37005CB29B /* gray50.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray50.xbm; sourceTree = "<group>"; }; + F966BA0808F27A37005CB29B /* gray75.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = gray75.xbm; sourceTree = "<group>"; }; + F966BA0908F27A37005CB29B /* hourglass.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = hourglass.xbm; sourceTree = "<group>"; }; + F966BA0A08F27A37005CB29B /* info.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = info.xbm; sourceTree = "<group>"; }; + F966BA0B08F27A37005CB29B /* questhead.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = questhead.xbm; sourceTree = "<group>"; }; + F966BA0C08F27A37005CB29B /* question.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = question.xbm; sourceTree = "<group>"; }; + F966BA0D08F27A37005CB29B /* warning.xbm */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = warning.xbm; sourceTree = "<group>"; }; + F966BA0E08F27A37005CB29B /* ChangeLog */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = ChangeLog; sourceTree = "<group>"; }; + F966BA0F08F27A37005CB29B /* changes */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = changes; sourceTree = "<group>"; }; + F966BA1108F27A37005CB29B /* 3DBorder.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = 3DBorder.3; sourceTree = "<group>"; }; + F966BA1208F27A37005CB29B /* AddOption.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AddOption.3; sourceTree = "<group>"; }; + F966BA1308F27A37005CB29B /* bell.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bell.n; sourceTree = "<group>"; }; + F966BA1408F27A37005CB29B /* bind.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bind.n; sourceTree = "<group>"; }; + F966BA1508F27A37005CB29B /* BindTable.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = BindTable.3; sourceTree = "<group>"; }; + F966BA1608F27A37005CB29B /* bindtags.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bindtags.n; sourceTree = "<group>"; }; + F966BA1708F27A37005CB29B /* bitmap.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bitmap.n; sourceTree = "<group>"; }; + F966BA1808F27A37005CB29B /* button.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = button.n; sourceTree = "<group>"; }; + F966BA1908F27A37005CB29B /* canvas.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = canvas.n; sourceTree = "<group>"; }; + F966BA1A08F27A37005CB29B /* CanvPsY.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CanvPsY.3; sourceTree = "<group>"; }; + F966BA1B08F27A37005CB29B /* CanvTkwin.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CanvTkwin.3; sourceTree = "<group>"; }; + F966BA1C08F27A37005CB29B /* CanvTxtInfo.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CanvTxtInfo.3; sourceTree = "<group>"; }; + F966BA1D08F27A37005CB29B /* checkbutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = checkbutton.n; sourceTree = "<group>"; }; + F966BA1E08F27A37005CB29B /* chooseColor.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = chooseColor.n; sourceTree = "<group>"; }; + F966BA1F08F27A37005CB29B /* chooseDirectory.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = chooseDirectory.n; sourceTree = "<group>"; }; + F966BA2008F27A37005CB29B /* Clipboard.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Clipboard.3; sourceTree = "<group>"; }; + F966BA2108F27A37005CB29B /* clipboard.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = clipboard.n; sourceTree = "<group>"; }; + F966BA2208F27A37005CB29B /* ClrSelect.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ClrSelect.3; sourceTree = "<group>"; }; + F966BA2308F27A37005CB29B /* colors.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = colors.n; sourceTree = "<group>"; }; + F966BA2408F27A37005CB29B /* ConfigWidg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ConfigWidg.3; sourceTree = "<group>"; }; + F966BA2508F27A37005CB29B /* ConfigWind.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ConfigWind.3; sourceTree = "<group>"; }; + F966BA2608F27A37005CB29B /* console.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = console.n; sourceTree = "<group>"; }; + F966BA2708F27A37005CB29B /* CoordToWin.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CoordToWin.3; sourceTree = "<group>"; }; + F966BA2808F27A37005CB29B /* CrtCmHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtCmHdlr.3; sourceTree = "<group>"; }; + F966BA2908F27A37005CB29B /* CrtErrHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtErrHdlr.3; sourceTree = "<group>"; }; + F966BA2A08F27A37005CB29B /* CrtGenHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtGenHdlr.3; sourceTree = "<group>"; }; + F966BA2B08F27A37005CB29B /* CrtImgType.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtImgType.3; sourceTree = "<group>"; }; + F966BA2C08F27A37005CB29B /* CrtItemType.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtItemType.3; sourceTree = "<group>"; }; + F966BA2D08F27A37005CB29B /* CrtPhImgFmt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtPhImgFmt.3; sourceTree = "<group>"; }; + F966BA2E08F27A37005CB29B /* CrtSelHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtSelHdlr.3; sourceTree = "<group>"; }; + F966BA2F08F27A37005CB29B /* CrtWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtWindow.3; sourceTree = "<group>"; }; + F966BA3008F27A37005CB29B /* cursors.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = cursors.n; sourceTree = "<group>"; }; + F966BA3108F27A37005CB29B /* DeleteImg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DeleteImg.3; sourceTree = "<group>"; }; + F966BA3208F27A37005CB29B /* destroy.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = destroy.n; sourceTree = "<group>"; }; + F966BA3308F27A37005CB29B /* dialog.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = dialog.n; sourceTree = "<group>"; }; + F966BA3408F27A37005CB29B /* DrawFocHlt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DrawFocHlt.3; sourceTree = "<group>"; }; + F966BA3508F27A37005CB29B /* entry.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = entry.n; sourceTree = "<group>"; }; + F966BA3608F27A37005CB29B /* event.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = event.n; sourceTree = "<group>"; }; + F966BA3708F27A37005CB29B /* EventHndlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = EventHndlr.3; sourceTree = "<group>"; }; + F966BA3808F27A37005CB29B /* FindPhoto.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FindPhoto.3; sourceTree = "<group>"; }; + F966BA3908F27A37005CB29B /* focus.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = focus.n; sourceTree = "<group>"; }; + F966BA3A08F27A37005CB29B /* focusNext.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = focusNext.n; sourceTree = "<group>"; }; + F966BA3B08F27A37005CB29B /* font.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = font.n; sourceTree = "<group>"; }; + F966BA3C08F27A37005CB29B /* FontId.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FontId.3; sourceTree = "<group>"; }; + F966BA3D08F27A37005CB29B /* frame.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = frame.n; sourceTree = "<group>"; }; + F966BA3E08F27A37005CB29B /* FreeXId.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FreeXId.3; sourceTree = "<group>"; }; + F966BA3F08F27A37005CB29B /* GeomReq.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GeomReq.3; sourceTree = "<group>"; }; + F966BA4008F27A37005CB29B /* GetAnchor.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetAnchor.3; sourceTree = "<group>"; }; + F966BA4108F27A37005CB29B /* GetBitmap.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetBitmap.3; sourceTree = "<group>"; }; + F966BA4208F27A37005CB29B /* GetCapStyl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetCapStyl.3; sourceTree = "<group>"; }; + F966BA4308F27A37005CB29B /* GetClrmap.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetClrmap.3; sourceTree = "<group>"; }; + F966BA4408F27A37005CB29B /* GetColor.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetColor.3; sourceTree = "<group>"; }; + F966BA4508F27A37005CB29B /* GetCursor.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetCursor.3; sourceTree = "<group>"; }; + F966BA4608F27A37005CB29B /* GetDash.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetDash.3; sourceTree = "<group>"; }; + F966BA4708F27A37005CB29B /* GetFont.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetFont.3; sourceTree = "<group>"; }; + F966BA4808F27A37005CB29B /* GetGC.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetGC.3; sourceTree = "<group>"; }; + F966BA4908F27A37005CB29B /* GetHINSTANCE.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetHINSTANCE.3; sourceTree = "<group>"; }; + F966BA4A08F27A37005CB29B /* GetHWND.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetHWND.3; sourceTree = "<group>"; }; + F966BA4B08F27A37005CB29B /* GetImage.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetImage.3; sourceTree = "<group>"; }; + F966BA4C08F27A37005CB29B /* GetJoinStl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetJoinStl.3; sourceTree = "<group>"; }; + F966BA4D08F27A37005CB29B /* GetJustify.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetJustify.3; sourceTree = "<group>"; }; + F966BA4E08F27A37005CB29B /* getOpenFile.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = getOpenFile.n; sourceTree = "<group>"; }; + F966BA4F08F27A37005CB29B /* GetOption.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetOption.3; sourceTree = "<group>"; }; + F966BA5008F27A38005CB29B /* GetPixels.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetPixels.3; sourceTree = "<group>"; }; + F966BA5108F27A38005CB29B /* GetPixmap.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetPixmap.3; sourceTree = "<group>"; }; + F966BA5208F27A38005CB29B /* GetRelief.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetRelief.3; sourceTree = "<group>"; }; + F966BA5308F27A38005CB29B /* GetRootCrd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetRootCrd.3; sourceTree = "<group>"; }; + F966BA5408F27A38005CB29B /* GetScroll.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetScroll.3; sourceTree = "<group>"; }; + F966BA5508F27A38005CB29B /* GetSelect.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetSelect.3; sourceTree = "<group>"; }; + F966BA5608F27A38005CB29B /* GetUid.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetUid.3; sourceTree = "<group>"; }; + F966BA5708F27A38005CB29B /* GetVisual.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetVisual.3; sourceTree = "<group>"; }; + F966BA5808F27A38005CB29B /* GetVRoot.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetVRoot.3; sourceTree = "<group>"; }; + F966BA5908F27A38005CB29B /* Grab.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Grab.3; sourceTree = "<group>"; }; + F966BA5A08F27A38005CB29B /* grab.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = grab.n; sourceTree = "<group>"; }; + F966BA5B08F27A38005CB29B /* grid.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = grid.n; sourceTree = "<group>"; }; + F966BA5C08F27A38005CB29B /* HandleEvent.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = HandleEvent.3; sourceTree = "<group>"; }; + F966BA5D08F27A38005CB29B /* HWNDToWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = HWNDToWindow.3; sourceTree = "<group>"; }; + F966BA5E08F27A38005CB29B /* IdToWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = IdToWindow.3; sourceTree = "<group>"; }; + F966BA5F08F27A38005CB29B /* image.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = image.n; sourceTree = "<group>"; }; + F966BA6008F27A38005CB29B /* ImgChanged.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ImgChanged.3; sourceTree = "<group>"; }; + F966BA6108F27A38005CB29B /* Inactive.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Inactive.3; sourceTree = "<group>"; }; + F966BA6208F27A38005CB29B /* InternAtom.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = InternAtom.3; sourceTree = "<group>"; }; + F966BA6308F27A38005CB29B /* keysyms.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = keysyms.n; sourceTree = "<group>"; }; + F966BA6408F27A38005CB29B /* label.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = label.n; sourceTree = "<group>"; }; + F966BA6508F27A38005CB29B /* labelframe.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = labelframe.n; sourceTree = "<group>"; }; + F966BA6608F27A38005CB29B /* listbox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = listbox.n; sourceTree = "<group>"; }; + F966BA6708F27A38005CB29B /* loadTk.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = loadTk.n; sourceTree = "<group>"; }; + F966BA6808F27A38005CB29B /* lower.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lower.n; sourceTree = "<group>"; }; + F966BA6908F27A38005CB29B /* MainLoop.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MainLoop.3; sourceTree = "<group>"; }; + F966BA6A08F27A38005CB29B /* MaintGeom.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MaintGeom.3; sourceTree = "<group>"; }; + F966BA6B08F27A38005CB29B /* MainWin.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MainWin.3; sourceTree = "<group>"; }; + F966BA6D08F27A38005CB29B /* ManageGeom.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ManageGeom.3; sourceTree = "<group>"; }; + F966BA6E08F27A38005CB29B /* MapWindow.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MapWindow.3; sourceTree = "<group>"; }; + F966BA6F08F27A38005CB29B /* MeasureChar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MeasureChar.3; sourceTree = "<group>"; }; + F966BA7008F27A38005CB29B /* menu.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = menu.n; sourceTree = "<group>"; }; + F966BA7108F27A38005CB29B /* menubar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = menubar.n; sourceTree = "<group>"; }; + F966BA7208F27A38005CB29B /* menubutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = menubutton.n; sourceTree = "<group>"; }; + F966BA7308F27A38005CB29B /* message.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = message.n; sourceTree = "<group>"; }; + F966BA7408F27A38005CB29B /* messageBox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = messageBox.n; sourceTree = "<group>"; }; + F966BA7508F27A38005CB29B /* MoveToplev.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = MoveToplev.3; sourceTree = "<group>"; }; + F966BA7608F27A38005CB29B /* Name.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Name.3; sourceTree = "<group>"; }; + F966BA7708F27A38005CB29B /* NameOfImg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = NameOfImg.3; sourceTree = "<group>"; }; + F966BA7808F27A38005CB29B /* option.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = option.n; sourceTree = "<group>"; }; + F966BA7908F27A38005CB29B /* optionMenu.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = optionMenu.n; sourceTree = "<group>"; }; + F966BA7A08F27A38005CB29B /* options.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = options.n; sourceTree = "<group>"; }; + F966BA7B08F27A38005CB29B /* OwnSelect.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = OwnSelect.3; sourceTree = "<group>"; }; + F966BA7C08F27A38005CB29B /* pack-old.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = "pack-old.n"; sourceTree = "<group>"; }; + F966BA7D08F27A38005CB29B /* pack.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pack.n; sourceTree = "<group>"; }; + F966BA7E08F27A38005CB29B /* palette.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = palette.n; sourceTree = "<group>"; }; + F966BA7F08F27A38005CB29B /* panedwindow.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = panedwindow.n; sourceTree = "<group>"; }; + F966BA8008F27A38005CB29B /* ParseArgv.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ParseArgv.3; sourceTree = "<group>"; }; + F966BA8108F27A38005CB29B /* photo.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = photo.n; sourceTree = "<group>"; }; + F966BA8208F27A38005CB29B /* place.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = place.n; sourceTree = "<group>"; }; + F966BA8308F27A38005CB29B /* popup.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = popup.n; sourceTree = "<group>"; }; + F966BA8408F27A38005CB29B /* QWinEvent.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = QWinEvent.3; sourceTree = "<group>"; }; + F966BA8508F27A38005CB29B /* radiobutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = radiobutton.n; sourceTree = "<group>"; }; + F966BA8608F27A38005CB29B /* raise.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = raise.n; sourceTree = "<group>"; }; + F966BA8708F27A38005CB29B /* Restack.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Restack.3; sourceTree = "<group>"; }; + F966BA8808F27A38005CB29B /* RestrictEv.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RestrictEv.3; sourceTree = "<group>"; }; + F966BA8908F27A38005CB29B /* scale.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = scale.n; sourceTree = "<group>"; }; + F966BA8A08F27A38005CB29B /* scrollbar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = scrollbar.n; sourceTree = "<group>"; }; + F966BA8B08F27A38005CB29B /* selection.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = selection.n; sourceTree = "<group>"; }; + F966BA8C08F27A38005CB29B /* send.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = send.n; sourceTree = "<group>"; }; + F966BA8D08F27A38005CB29B /* SetAppName.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetAppName.3; sourceTree = "<group>"; }; + F966BA8E08F27A38005CB29B /* SetCaret.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetCaret.3; sourceTree = "<group>"; }; + F966BA8F08F27A38005CB29B /* SetClass.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetClass.3; sourceTree = "<group>"; }; + F966BA9008F27A38005CB29B /* SetClassProcs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetClassProcs.3; sourceTree = "<group>"; }; + F966BA9108F27A38005CB29B /* SetGrid.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetGrid.3; sourceTree = "<group>"; }; + F966BA9208F27A38005CB29B /* SetOptions.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetOptions.3; sourceTree = "<group>"; }; + F966BA9308F27A38005CB29B /* SetVisual.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetVisual.3; sourceTree = "<group>"; }; + F966BA9408F27A38005CB29B /* spinbox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = spinbox.n; sourceTree = "<group>"; }; + F966BA9508F27A38005CB29B /* StrictMotif.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StrictMotif.3; sourceTree = "<group>"; }; + F966BA9608F27A38005CB29B /* text.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = text.n; sourceTree = "<group>"; }; + F966BA9708F27A38005CB29B /* TextLayout.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TextLayout.3; sourceTree = "<group>"; }; + F966BA9808F27A38005CB29B /* tk.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tk.n; sourceTree = "<group>"; }; + F966BA9908F27A38005CB29B /* tk4.0.ps */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = tk4.0.ps; sourceTree = "<group>"; }; + F966BA9A08F27A38005CB29B /* Tk_Init.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tk_Init.3; sourceTree = "<group>"; }; + F966BA9B08F27A38005CB29B /* Tk_Main.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tk_Main.3; sourceTree = "<group>"; }; + F966BA9C08F27A38005CB29B /* tkerror.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tkerror.n; sourceTree = "<group>"; }; + F966BA9D08F27A38005CB29B /* TkInitStubs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TkInitStubs.3; sourceTree = "<group>"; }; + F966BA9E08F27A38005CB29B /* tkvars.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tkvars.n; sourceTree = "<group>"; }; + F966BA9F08F27A38005CB29B /* tkwait.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tkwait.n; sourceTree = "<group>"; }; + F966BAA008F27A38005CB29B /* toplevel.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = toplevel.n; sourceTree = "<group>"; }; + F966BAA108F27A38005CB29B /* WindowId.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = WindowId.3; sourceTree = "<group>"; }; + F966BAA208F27A38005CB29B /* winfo.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = winfo.n; sourceTree = "<group>"; }; + F966BAA308F27A38005CB29B /* wish.1 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = wish.1; sourceTree = "<group>"; }; + F966BAA408F27A38005CB29B /* wm.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = wm.n; sourceTree = "<group>"; }; + F966BAA608F27A38005CB29B /* default.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = default.h; sourceTree = "<group>"; }; + F966BAA708F27A38005CB29B /* ks_names.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ks_names.h; sourceTree = "<group>"; }; + F966BAA808F27A38005CB29B /* prolog.ps */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = prolog.ps; sourceTree = "<group>"; }; + F966BAA908F27A39005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BAAA08F27A39005CB29B /* tk.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tk.decls; sourceTree = "<group>"; }; + F966BAAB08F27A39005CB29B /* tk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tk.h; sourceTree = "<group>"; }; + F966BAAC08F27A39005CB29B /* tk3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tk3d.c; sourceTree = "<group>"; }; + F966BAAD08F27A39005CB29B /* tk3d.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tk3d.h; sourceTree = "<group>"; }; + F966BAAE08F27A39005CB29B /* tkArgv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkArgv.c; sourceTree = "<group>"; }; + F966BAAF08F27A39005CB29B /* tkAtom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkAtom.c; sourceTree = "<group>"; }; + F966BAB008F27A39005CB29B /* tkBind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkBind.c; sourceTree = "<group>"; }; + F966BAB108F27A39005CB29B /* tkBitmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkBitmap.c; sourceTree = "<group>"; }; + F966BAB208F27A39005CB29B /* tkButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkButton.c; sourceTree = "<group>"; }; + F966BAB308F27A39005CB29B /* tkButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkButton.h; sourceTree = "<group>"; }; + F966BAB408F27A39005CB29B /* tkCanvArc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvArc.c; sourceTree = "<group>"; }; + F966BAB508F27A39005CB29B /* tkCanvas.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvas.c; sourceTree = "<group>"; }; + F966BAB608F27A39005CB29B /* tkCanvas.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkCanvas.h; sourceTree = "<group>"; }; + F966BAB708F27A39005CB29B /* tkCanvBmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvBmap.c; sourceTree = "<group>"; }; + F966BAB808F27A39005CB29B /* tkCanvImg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvImg.c; sourceTree = "<group>"; }; + F966BAB908F27A39005CB29B /* tkCanvLine.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvLine.c; sourceTree = "<group>"; }; + F966BABA08F27A39005CB29B /* tkCanvPoly.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvPoly.c; sourceTree = "<group>"; }; + F966BABB08F27A39005CB29B /* tkCanvPs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvPs.c; sourceTree = "<group>"; }; + F966BABD08F27A39005CB29B /* tkCanvText.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvText.c; sourceTree = "<group>"; }; + F966BABE08F27A39005CB29B /* tkCanvUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvUtil.c; sourceTree = "<group>"; }; + F966BABF08F27A39005CB29B /* tkCanvWind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCanvWind.c; sourceTree = "<group>"; }; + F966BAC008F27A39005CB29B /* tkClipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkClipboard.c; sourceTree = "<group>"; }; + F966BAC108F27A39005CB29B /* tkCmds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCmds.c; sourceTree = "<group>"; }; + F966BAC208F27A39005CB29B /* tkColor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkColor.c; sourceTree = "<group>"; }; + F966BAC308F27A39005CB29B /* tkColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkColor.h; sourceTree = "<group>"; }; + F966BAC408F27A39005CB29B /* tkConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkConfig.c; sourceTree = "<group>"; }; + F966BAC508F27A39005CB29B /* tkConsole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkConsole.c; sourceTree = "<group>"; }; + F966BAC608F27A39005CB29B /* tkCursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkCursor.c; sourceTree = "<group>"; }; + F966BAC708F27A39005CB29B /* tkDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkDecls.h; sourceTree = "<group>"; }; + F966BAC808F27A39005CB29B /* tkEntry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkEntry.c; sourceTree = "<group>"; }; + F966BAC908F27A39005CB29B /* tkEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkEntry.h; sourceTree = "<group>"; }; + F966BACA08F27A39005CB29B /* tkError.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkError.c; sourceTree = "<group>"; }; + F966BACB08F27A39005CB29B /* tkEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkEvent.c; sourceTree = "<group>"; }; + F966BACC08F27A39005CB29B /* tkFileFilter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFileFilter.c; sourceTree = "<group>"; }; + F966BACD08F27A39005CB29B /* tkFileFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkFileFilter.h; sourceTree = "<group>"; }; + F966BACE08F27A39005CB29B /* tkFocus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFocus.c; sourceTree = "<group>"; }; + F966BACF08F27A39005CB29B /* tkFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFont.c; sourceTree = "<group>"; }; + F966BAD008F27A39005CB29B /* tkFont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkFont.h; sourceTree = "<group>"; }; + F966BAD108F27A39005CB29B /* tkFrame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkFrame.c; sourceTree = "<group>"; }; + F966BAD208F27A39005CB29B /* tkGC.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGC.c; sourceTree = "<group>"; }; + F966BAD308F27A39005CB29B /* tkGeometry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGeometry.c; sourceTree = "<group>"; }; + F966BAD408F27A39005CB29B /* tkGet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGet.c; sourceTree = "<group>"; }; + F966BAD508F27A39005CB29B /* tkGrab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGrab.c; sourceTree = "<group>"; }; + F966BAD608F27A39005CB29B /* tkGrid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkGrid.c; sourceTree = "<group>"; }; + F966BAD708F27A39005CB29B /* tkImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImage.c; sourceTree = "<group>"; }; + F966BAD808F27A39005CB29B /* tkImgBmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgBmap.c; sourceTree = "<group>"; }; + F966BAD908F27A39005CB29B /* tkImgGIF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgGIF.c; sourceTree = "<group>"; }; + F966BADA08F27A39005CB29B /* tkImgPhoto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgPhoto.c; sourceTree = "<group>"; }; + F966BADB08F27A39005CB29B /* tkImgPPM.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgPPM.c; sourceTree = "<group>"; }; + F966BADC08F27A39005CB29B /* tkImgUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkImgUtil.c; sourceTree = "<group>"; }; + F966BADE08F27A39005CB29B /* tkInt.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tkInt.decls; sourceTree = "<group>"; }; + F966BADF08F27A39005CB29B /* tkInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkInt.h; sourceTree = "<group>"; }; + F966BAE108F27A39005CB29B /* tkIntDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkIntDecls.h; sourceTree = "<group>"; }; + F966BAE208F27A39005CB29B /* tkIntPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkIntPlatDecls.h; sourceTree = "<group>"; }; + F966BAE308F27A39005CB29B /* tkIntXlibDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkIntXlibDecls.h; sourceTree = "<group>"; }; + F966BAE408F27A39005CB29B /* tkListbox.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkListbox.c; sourceTree = "<group>"; }; + F966BAE508F27A39005CB29B /* tkMacWinMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMacWinMenu.c; sourceTree = "<group>"; }; + F966BAE608F27A39005CB29B /* tkMain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMain.c; sourceTree = "<group>"; }; + F966BAE708F27A39005CB29B /* tkMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMenu.c; sourceTree = "<group>"; }; + F966BAE808F27A39005CB29B /* tkMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMenu.h; sourceTree = "<group>"; }; + F966BAE908F27A39005CB29B /* tkMenubutton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMenubutton.c; sourceTree = "<group>"; }; + F966BAEA08F27A39005CB29B /* tkMenubutton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMenubutton.h; sourceTree = "<group>"; }; + F966BAEB08F27A39005CB29B /* tkMenuDraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMenuDraw.c; sourceTree = "<group>"; }; + F966BAEC08F27A39005CB29B /* tkMessage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkMessage.c; sourceTree = "<group>"; }; + F966BAED08F27A39005CB29B /* tkObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkObj.c; sourceTree = "<group>"; }; + F966BAEE08F27A39005CB29B /* tkOldConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkOldConfig.c; sourceTree = "<group>"; }; + F966BAEF08F27A39005CB29B /* tkOption.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkOption.c; sourceTree = "<group>"; }; + F966BAF008F27A39005CB29B /* tkPack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPack.c; sourceTree = "<group>"; }; + F966BAF108F27A39005CB29B /* tkPanedWindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPanedWindow.c; sourceTree = "<group>"; }; + F966BAF208F27A39005CB29B /* tkPlace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPlace.c; sourceTree = "<group>"; }; + F966BAF308F27A39005CB29B /* tkPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkPlatDecls.h; sourceTree = "<group>"; }; + F966BAF408F27A39005CB29B /* tkPointer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkPointer.c; sourceTree = "<group>"; }; + F966BAF508F27A39005CB29B /* tkPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkPort.h; sourceTree = "<group>"; }; + F966BAF608F27A39005CB29B /* tkRectOval.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkRectOval.c; sourceTree = "<group>"; }; + F966BAF708F27A39005CB29B /* tkScale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkScale.c; sourceTree = "<group>"; }; + F966BAF808F27A39005CB29B /* tkScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkScale.h; sourceTree = "<group>"; }; + F966BAF908F27A39005CB29B /* tkScrollbar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkScrollbar.c; sourceTree = "<group>"; }; + F966BAFA08F27A39005CB29B /* tkScrollbar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkScrollbar.h; sourceTree = "<group>"; }; + F966BAFB08F27A39005CB29B /* tkSelect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkSelect.c; sourceTree = "<group>"; }; + F966BAFC08F27A39005CB29B /* tkSelect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkSelect.h; sourceTree = "<group>"; }; + F966BAFD08F27A39005CB29B /* tkSquare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkSquare.c; sourceTree = "<group>"; }; + F966BAFE08F27A39005CB29B /* tkOldTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkOldTest.c; sourceTree = "<group>"; }; + F966BAFF08F27A39005CB29B /* tkStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkStubInit.c; sourceTree = "<group>"; }; + F966BB0008F27A39005CB29B /* tkStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkStubLib.c; sourceTree = "<group>"; }; + F966BB0108F27A39005CB29B /* tkStyle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkStyle.c; sourceTree = "<group>"; }; + F966BB0208F27A39005CB29B /* tkTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTest.c; sourceTree = "<group>"; }; + F966BB0308F27A39005CB29B /* tkText.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkText.c; sourceTree = "<group>"; }; + F966BB0408F27A39005CB29B /* tkText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkText.h; sourceTree = "<group>"; }; + F966BB0508F27A39005CB29B /* tkTextBTree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextBTree.c; sourceTree = "<group>"; }; + F966BB0608F27A39005CB29B /* tkTextDisp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextDisp.c; sourceTree = "<group>"; }; + F966BB0808F27A39005CB29B /* tkTextImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextImage.c; sourceTree = "<group>"; }; + F966BB0908F27A39005CB29B /* tkTextIndex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextIndex.c; sourceTree = "<group>"; }; + F966BB0A08F27A39005CB29B /* tkTextMark.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextMark.c; sourceTree = "<group>"; }; + F966BB0B08F27A39005CB29B /* tkTextTag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextTag.c; sourceTree = "<group>"; }; + F966BB0C08F27A39005CB29B /* tkTextWind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTextWind.c; sourceTree = "<group>"; }; + F966BB0D08F27A39005CB29B /* tkTrig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkTrig.c; sourceTree = "<group>"; }; + F966BB0E08F27A39005CB29B /* tkUndo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUndo.c; sourceTree = "<group>"; }; + F966BB0F08F27A39005CB29B /* tkUndo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUndo.h; sourceTree = "<group>"; }; + F966BB1008F27A39005CB29B /* tkUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUtil.c; sourceTree = "<group>"; }; + F966BB1108F27A39005CB29B /* tkVisual.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkVisual.c; sourceTree = "<group>"; }; + F966BB1208F27A39005CB29B /* tkWindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWindow.c; sourceTree = "<group>"; }; + F966BB1408F27A39005CB29B /* bgerror.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bgerror.tcl; sourceTree = "<group>"; }; + F966BB1508F27A39005CB29B /* button.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.tcl; sourceTree = "<group>"; }; + F966BB1608F27A39005CB29B /* choosedir.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = choosedir.tcl; sourceTree = "<group>"; }; + F966BB1708F27A39005CB29B /* clrpick.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clrpick.tcl; sourceTree = "<group>"; }; + F966BB1808F27A39005CB29B /* comdlg.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = comdlg.tcl; sourceTree = "<group>"; }; + F966BB1908F27A39005CB29B /* console.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = console.tcl; sourceTree = "<group>"; }; + F966BB1B08F27A39005CB29B /* anilabel.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = anilabel.tcl; sourceTree = "<group>"; }; + F966BB1C08F27A39005CB29B /* aniwave.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = aniwave.tcl; sourceTree = "<group>"; }; + F966BB1D08F27A39005CB29B /* arrow.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = arrow.tcl; sourceTree = "<group>"; }; + F966BB1E08F27A39005CB29B /* bind.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bind.tcl; sourceTree = "<group>"; }; + F966BB1F08F27A39005CB29B /* bitmap.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bitmap.tcl; sourceTree = "<group>"; }; + F966BB2008F27A39005CB29B /* browse */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = browse; sourceTree = "<group>"; }; + F966BB2108F27A39005CB29B /* button.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.tcl; sourceTree = "<group>"; }; + F966BB2208F27A39005CB29B /* check.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = check.tcl; sourceTree = "<group>"; }; + F966BB2308F27A39005CB29B /* clrpick.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clrpick.tcl; sourceTree = "<group>"; }; + F966BB2408F27A39005CB29B /* colors.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = colors.tcl; sourceTree = "<group>"; }; + F966BB2508F27A39005CB29B /* cscroll.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cscroll.tcl; sourceTree = "<group>"; }; + F966BB2608F27A39005CB29B /* ctext.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ctext.tcl; sourceTree = "<group>"; }; + F966BB2708F27A39005CB29B /* dialog1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog1.tcl; sourceTree = "<group>"; }; + F966BB2808F27A39005CB29B /* dialog2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog2.tcl; sourceTree = "<group>"; }; + F966BB2A08F27A39005CB29B /* entry1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry1.tcl; sourceTree = "<group>"; }; + F966BB2B08F27A39005CB29B /* entry2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry2.tcl; sourceTree = "<group>"; }; + F966BB2C08F27A39005CB29B /* entry3.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry3.tcl; sourceTree = "<group>"; }; + F966BB2D08F27A39005CB29B /* filebox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = filebox.tcl; sourceTree = "<group>"; }; + F966BB2E08F27A39005CB29B /* floor.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = floor.tcl; sourceTree = "<group>"; }; + F966BB2F08F27A39005CB29B /* form.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = form.tcl; sourceTree = "<group>"; }; + F966BB3008F27A39005CB29B /* goldberg.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = goldberg.tcl; sourceTree = "<group>"; }; + F966BB3108F27A39005CB29B /* hello */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = hello; sourceTree = "<group>"; }; + F966BB3208F27A39005CB29B /* hscale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = hscale.tcl; sourceTree = "<group>"; }; + F966BB3308F27A39005CB29B /* icon.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = icon.tcl; sourceTree = "<group>"; }; + F966BB3408F27A39005CB29B /* image1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image1.tcl; sourceTree = "<group>"; }; + F966BB3508F27A39005CB29B /* image2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image2.tcl; sourceTree = "<group>"; }; + F966BB4208F27A3A005CB29B /* items.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = items.tcl; sourceTree = "<group>"; }; + F966BB4308F27A3A005CB29B /* ixset */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ixset; sourceTree = "<group>"; }; + F966BB4408F27A3A005CB29B /* label.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = label.tcl; sourceTree = "<group>"; }; + F966BB4508F27A3A005CB29B /* labelframe.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = labelframe.tcl; sourceTree = "<group>"; }; + F966BB4608F27A3A005CB29B /* menu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menu.tcl; sourceTree = "<group>"; }; + F966BB4708F27A3A005CB29B /* menubu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menubu.tcl; sourceTree = "<group>"; }; + F966BB4808F27A3A005CB29B /* msgbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgbox.tcl; sourceTree = "<group>"; }; + F966BB4A08F27A3A005CB29B /* paned1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = paned1.tcl; sourceTree = "<group>"; }; + F966BB4B08F27A3A005CB29B /* paned2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = paned2.tcl; sourceTree = "<group>"; }; + F966BB4C08F27A3A005CB29B /* pendulum.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pendulum.tcl; sourceTree = "<group>"; }; + F966BB4D08F27A3A005CB29B /* plot.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = plot.tcl; sourceTree = "<group>"; }; + F966BB4E08F27A3A005CB29B /* puzzle.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = puzzle.tcl; sourceTree = "<group>"; }; + F966BB4F08F27A3A005CB29B /* radio.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = radio.tcl; sourceTree = "<group>"; }; + F966BB5008F27A3A005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BB5108F27A3A005CB29B /* rmt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = rmt; sourceTree = "<group>"; }; + F966BB5208F27A3A005CB29B /* rolodex */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = rolodex; sourceTree = "<group>"; }; + F966BB5308F27A3A005CB29B /* ruler.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ruler.tcl; sourceTree = "<group>"; }; + F966BB5408F27A3A005CB29B /* sayings.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = sayings.tcl; sourceTree = "<group>"; }; + F966BB5508F27A3A005CB29B /* search.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = search.tcl; sourceTree = "<group>"; }; + F966BB5608F27A3A005CB29B /* spin.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = spin.tcl; sourceTree = "<group>"; }; + F966BB5708F27A3A005CB29B /* square */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = square; sourceTree = "<group>"; }; + F966BB5808F27A3A005CB29B /* states.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = states.tcl; sourceTree = "<group>"; }; + F966BB5908F27A3A005CB29B /* style.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = style.tcl; sourceTree = "<group>"; }; + F966BB5A08F27A3A005CB29B /* tclIndex */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclIndex; sourceTree = "<group>"; }; + F966BB5B08F27A3A005CB29B /* tcolor */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = tcolor; sourceTree = "<group>"; }; + F966BB5C08F27A3A005CB29B /* text.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = text.tcl; sourceTree = "<group>"; }; + F966BB5D08F27A3A005CB29B /* timer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = timer; sourceTree = "<group>"; }; + F966BB5E08F27A3A005CB29B /* twind.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = twind.tcl; sourceTree = "<group>"; }; + F966BB5F08F27A3A005CB29B /* unicodeout.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unicodeout.tcl; sourceTree = "<group>"; }; + F966BB6008F27A3A005CB29B /* vscale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = vscale.tcl; sourceTree = "<group>"; }; + F966BB6108F27A3A005CB29B /* widget */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = widget; sourceTree = "<group>"; }; + F966BB6208F27A3A005CB29B /* dialog.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog.tcl; sourceTree = "<group>"; }; + F966BB6308F27A3A005CB29B /* entry.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.tcl; sourceTree = "<group>"; }; + F966BB6408F27A3A005CB29B /* focus.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = focus.tcl; sourceTree = "<group>"; }; + F966BB7308F27A3A005CB29B /* listbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = listbox.tcl; sourceTree = "<group>"; }; + F966BB7408F27A3A005CB29B /* menu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menu.tcl; sourceTree = "<group>"; }; + F966BB7508F27A3A005CB29B /* mkpsenc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = mkpsenc.tcl; sourceTree = "<group>"; }; + F966BB7608F27A3A005CB29B /* msgbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgbox.tcl; sourceTree = "<group>"; }; + F966BB8608F27A3A005CB29B /* obsolete.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = obsolete.tcl; sourceTree = "<group>"; }; + F966BB8708F27A3A005CB29B /* optMenu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = optMenu.tcl; sourceTree = "<group>"; }; + F966BB8808F27A3A005CB29B /* palette.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = palette.tcl; sourceTree = "<group>"; }; + F966BB8908F27A3B005CB29B /* panedwindow.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.tcl; sourceTree = "<group>"; }; + F966BB8A08F27A3B005CB29B /* prolog.ps */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = prolog.ps; sourceTree = "<group>"; }; + F966BB8B08F27A3B005CB29B /* safetk.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safetk.tcl; sourceTree = "<group>"; }; + F966BB8C08F27A3B005CB29B /* scale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scale.tcl; sourceTree = "<group>"; }; + F966BB8D08F27A3B005CB29B /* scrlbar.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrlbar.tcl; sourceTree = "<group>"; }; + F966BB8E08F27A3B005CB29B /* spinbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = spinbox.tcl; sourceTree = "<group>"; }; + F966BB8F08F27A3B005CB29B /* tclIndex */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclIndex; sourceTree = "<group>"; }; + F966BB9008F27A3B005CB29B /* tearoff.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tearoff.tcl; sourceTree = "<group>"; }; + F966BB9108F27A3B005CB29B /* text.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = text.tcl; sourceTree = "<group>"; }; + F966BB9208F27A3B005CB29B /* tk.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tk.tcl; sourceTree = "<group>"; }; + F966BB9308F27A3B005CB29B /* tkfbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tkfbox.tcl; sourceTree = "<group>"; }; + F966BB9408F27A3B005CB29B /* unsupported.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unsupported.tcl; sourceTree = "<group>"; }; + F966BB9508F27A3B005CB29B /* xmfbox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = xmfbox.tcl; sourceTree = "<group>"; }; + F966BB9608F27A3B005CB29B /* license.terms */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = license.terms; sourceTree = "<group>"; }; + F966BBBA08F27A3B005CB29B /* configure.ac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure.ac; sourceTree = "<group>"; }; + F966BBBB08F27A3B005CB29B /* GNUmakefile */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = GNUmakefile; sourceTree = "<group>"; }; + F966BBBE08F27A3B005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BBC008F27A3B005CB29B /* Tk-Info.plist.in */ = {isa = PBXFileReference; explicitFileType = text.plist; fileEncoding = 4; path = "Tk-Info.plist.in"; sourceTree = "<group>"; }; + F966BBC208F27A3B005CB29B /* tkMacOSX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSX.h; sourceTree = "<group>"; }; + F966BBC508F27A3B005CB29B /* tkMacOSXBitmap.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXBitmap.c; sourceTree = "<group>"; }; + F966BBC608F27A3B005CB29B /* tkMacOSXButton.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXButton.c; sourceTree = "<group>"; }; + F966BBC808F27A3B005CB29B /* tkMacOSXClipboard.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXClipboard.c; sourceTree = "<group>"; }; + F966BBC908F27A3B005CB29B /* tkMacOSXColor.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXColor.c; sourceTree = "<group>"; }; + F966BBCA08F27A3B005CB29B /* tkMacOSXConfig.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXConfig.c; sourceTree = "<group>"; }; + F966BBCB08F27A3B005CB29B /* tkMacOSXCursor.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXCursor.c; sourceTree = "<group>"; }; + F966BBCC08F27A3B005CB29B /* tkMacOSXCursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXCursors.h; sourceTree = "<group>"; }; + F966BBCD08F27A3B005CB29B /* tkMacOSXDebug.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXDebug.c; sourceTree = "<group>"; }; + F966BBCE08F27A3B005CB29B /* tkMacOSXDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXDebug.h; sourceTree = "<group>"; }; + F966BBCF08F27A3B005CB29B /* tkMacOSXDefault.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXDefault.h; sourceTree = "<group>"; }; + F966BBD008F27A3B005CB29B /* tkMacOSXDialog.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXDialog.c; sourceTree = "<group>"; }; + F966BBD108F27A3B005CB29B /* tkMacOSXDraw.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXDraw.c; sourceTree = "<group>"; }; + F966BBD208F27A3B005CB29B /* tkMacOSXEmbed.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXEmbed.c; sourceTree = "<group>"; }; + F966BBD308F27A3B005CB29B /* tkMacOSXEntry.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXEntry.c; sourceTree = "<group>"; }; + F966BBD408F27A3B005CB29B /* tkMacOSXEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXEvent.c; sourceTree = "<group>"; }; + F966BBD508F27A3B005CB29B /* tkMacOSXEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXEvent.h; sourceTree = "<group>"; }; + F966BBD608F27A3B005CB29B /* tkMacOSXFont.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXFont.c; sourceTree = "<group>"; }; + F966BBD708F27A3B005CB29B /* tkMacOSXHLEvents.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXHLEvents.c; sourceTree = "<group>"; }; + F966BBD808F27A3B005CB29B /* tkMacOSXInit.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXInit.c; sourceTree = "<group>"; }; + F966BBDA08F27A3B005CB29B /* tkMacOSXInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXInt.h; sourceTree = "<group>"; }; + F966BBDB08F27A3B005CB29B /* tkMacOSXKeyboard.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXKeyboard.c; sourceTree = "<group>"; }; + F966BBDC08F27A3B005CB29B /* tkMacOSXKeyEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXKeyEvent.c; sourceTree = "<group>"; }; + F966BBDD08F27A3B005CB29B /* tkMacOSXMenu.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMenu.c; sourceTree = "<group>"; }; + F966BBE008F27A3B005CB29B /* tkMacOSXMenubutton.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMenubutton.c; sourceTree = "<group>"; }; + F966BBE108F27A3B005CB29B /* tkMacOSXMenus.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMenus.c; sourceTree = "<group>"; }; + F966BBE208F27A3B005CB29B /* tkMacOSXMouseEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXMouseEvent.c; sourceTree = "<group>"; }; + F966BBE308F27A3B005CB29B /* tkMacOSXNotify.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXNotify.c; sourceTree = "<group>"; }; + F966BBEA08F27A3C005CB29B /* tkMacOSXPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXPort.h; sourceTree = "<group>"; }; + F966BBEB08F27A3C005CB29B /* tkMacOSXRegion.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXRegion.c; sourceTree = "<group>"; }; + F966BBEC08F27A3C005CB29B /* tkMacOSXScale.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXScale.c; sourceTree = "<group>"; }; + F966BBED08F27A3C005CB29B /* tkMacOSXScrlbr.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXScrlbr.c; sourceTree = "<group>"; }; + F966BBEE08F27A3C005CB29B /* tkMacOSXSend.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXSend.c; sourceTree = "<group>"; }; + F966BBEF08F27A3C005CB29B /* tkMacOSXSubwindows.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXSubwindows.c; sourceTree = "<group>"; }; + F966BBF008F27A3C005CB29B /* tkMacOSXTest.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXTest.c; sourceTree = "<group>"; }; + F966BBF108F27A3C005CB29B /* tkMacOSXWindowEvent.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXWindowEvent.c; sourceTree = "<group>"; }; + F966BBF208F27A3C005CB29B /* tkMacOSXWm.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXWm.c; sourceTree = "<group>"; }; + F966BBF308F27A3C005CB29B /* tkMacOSXWm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXWm.h; sourceTree = "<group>"; }; + F966BBF408F27A3C005CB29B /* tkMacOSXXCursors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXXCursors.h; sourceTree = "<group>"; }; + F966BBF508F27A3C005CB29B /* tkMacOSXXStubs.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = tkMacOSXXStubs.c; sourceTree = "<group>"; }; + F966BBF708F27A3C005CB29B /* Wish-Info.plist.in */ = {isa = PBXFileReference; explicitFileType = text.plist; fileEncoding = 4; path = "Wish-Info.plist.in"; sourceTree = "<group>"; }; + F966BC0308F27A3C005CB29B /* README */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = README; sourceTree = "<group>"; }; + F966BC0508F27A3C005CB29B /* all.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = all.tcl; sourceTree = "<group>"; }; + F966BC0608F27A3C005CB29B /* arc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = arc.tcl; sourceTree = "<group>"; }; + F966BC0708F27A3C005CB29B /* bell.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bell.test; sourceTree = "<group>"; }; + F966BC0808F27A3C005CB29B /* bevel.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bevel.tcl; sourceTree = "<group>"; }; + F966BC0908F27A3C005CB29B /* bgerror.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bgerror.test; sourceTree = "<group>"; }; + F966BC0A08F27A3C005CB29B /* bind.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bind.test; sourceTree = "<group>"; }; + F966BC0B08F27A3C005CB29B /* bitmap.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bitmap.test; sourceTree = "<group>"; }; + F966BC0C08F27A3C005CB29B /* border.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = border.test; sourceTree = "<group>"; }; + F966BC0D08F27A3C005CB29B /* bugs.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = bugs.tcl; sourceTree = "<group>"; }; + F966BC0E08F27A3C005CB29B /* butGeom.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = butGeom.tcl; sourceTree = "<group>"; }; + F966BC0F08F27A3C005CB29B /* butGeom2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = butGeom2.tcl; sourceTree = "<group>"; }; + F966BC1008F27A3C005CB29B /* button.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.test; sourceTree = "<group>"; }; + F966BC1108F27A3C005CB29B /* canvas.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvas.test; sourceTree = "<group>"; }; + F966BC1208F27A3C005CB29B /* canvImg.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvImg.test; sourceTree = "<group>"; }; + F966BC1308F27A3C005CB29B /* canvPs.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPs.test; sourceTree = "<group>"; }; + F966BC1408F27A3C005CB29B /* canvPsArc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsArc.tcl; sourceTree = "<group>"; }; + F966BC1508F27A3C005CB29B /* canvPsBmap.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsBmap.tcl; sourceTree = "<group>"; }; + F966BC1608F27A3C005CB29B /* canvPsGrph.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsGrph.tcl; sourceTree = "<group>"; }; + F966BC1708F27A3C005CB29B /* canvPsImg.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsImg.tcl; sourceTree = "<group>"; }; + F966BC1808F27A3C005CB29B /* canvPsText.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvPsText.tcl; sourceTree = "<group>"; }; + F966BC1908F27A3C005CB29B /* canvRect.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvRect.test; sourceTree = "<group>"; }; + F966BC1A08F27A3C005CB29B /* canvText.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvText.test; sourceTree = "<group>"; }; + F966BC1B08F27A3C005CB29B /* canvWind.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = canvWind.test; sourceTree = "<group>"; }; + F966BC1C08F27A3C005CB29B /* choosedir.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = choosedir.test; sourceTree = "<group>"; }; + F966BC1D08F27A3C005CB29B /* clipboard.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clipboard.test; sourceTree = "<group>"; }; + F966BC1E08F27A3C005CB29B /* clrpick.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clrpick.test; sourceTree = "<group>"; }; + F966BC1F08F27A3C005CB29B /* cmap.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmap.tcl; sourceTree = "<group>"; }; + F966BC2008F27A3C005CB29B /* cmds.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmds.test; sourceTree = "<group>"; }; + F966BC2108F27A3C005CB29B /* color.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = color.test; sourceTree = "<group>"; }; + F966BC2208F27A3C005CB29B /* config.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = config.test; sourceTree = "<group>"; }; + F966BC2308F27A3C005CB29B /* constraints.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = constraints.tcl; sourceTree = "<group>"; }; + F966BC2408F27A3C005CB29B /* cursor.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cursor.test; sourceTree = "<group>"; }; + F966BC2508F27A3C005CB29B /* dialog.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dialog.test; sourceTree = "<group>"; }; + F966BC2608F27A3C005CB29B /* embed.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = embed.test; sourceTree = "<group>"; }; + F966BC2708F27A3C005CB29B /* entry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.test; sourceTree = "<group>"; }; + F966BC2808F27A3C005CB29B /* event.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = event.test; sourceTree = "<group>"; }; + F966BC2908F27A3C005CB29B /* filebox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = filebox.test; sourceTree = "<group>"; }; + F966BC2A08F27A3C005CB29B /* focus.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = focus.test; sourceTree = "<group>"; }; + F966BC2B08F27A3C005CB29B /* focusTcl.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = focusTcl.test; sourceTree = "<group>"; }; + F966BC2C08F27A3C005CB29B /* font.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = font.test; sourceTree = "<group>"; }; + F966BC2D08F27A3C005CB29B /* frame.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = frame.test; sourceTree = "<group>"; }; + F966BC2E08F27A3C005CB29B /* geometry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = geometry.test; sourceTree = "<group>"; }; + F966BC2F08F27A3C005CB29B /* get.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = get.test; sourceTree = "<group>"; }; + F966BC3008F27A3C005CB29B /* grab.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = grab.test; sourceTree = "<group>"; }; + F966BC3108F27A3C005CB29B /* grid.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = grid.test; sourceTree = "<group>"; }; + F966BC3208F27A3C005CB29B /* id.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = id.test; sourceTree = "<group>"; }; + F966BC3308F27A3C005CB29B /* image.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image.test; sourceTree = "<group>"; }; + F966BC3408F27A3C005CB29B /* imgBmap.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = imgBmap.test; sourceTree = "<group>"; }; + F966BC3508F27A3C005CB29B /* imgPhoto.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = imgPhoto.test; sourceTree = "<group>"; }; + F966BC3608F27A3C005CB29B /* imgPPM.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = imgPPM.test; sourceTree = "<group>"; }; + F966BC3708F27A3C005CB29B /* listbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = listbox.test; sourceTree = "<group>"; }; + F966BC3808F27A3C005CB29B /* main.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = main.test; sourceTree = "<group>"; }; + F966BC3908F27A3C005CB29B /* menu.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menu.test; sourceTree = "<group>"; }; + F966BC3A08F27A3C005CB29B /* menubut.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menubut.test; sourceTree = "<group>"; }; + F966BC3B08F27A3C005CB29B /* menuDraw.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menuDraw.test; sourceTree = "<group>"; }; + F966BC3C08F27A3C005CB29B /* message.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = message.test; sourceTree = "<group>"; }; + F966BC3D08F27A3C005CB29B /* msgbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgbox.test; sourceTree = "<group>"; }; + F966BC3E08F27A3C005CB29B /* obj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = obj.test; sourceTree = "<group>"; }; + F966BC3F08F27A3C005CB29B /* oldpack.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = oldpack.test; sourceTree = "<group>"; }; + F966BC4008F27A3C005CB29B /* option.file1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = option.file1; sourceTree = "<group>"; }; + F966BC4108F27A3C005CB29B /* option.file2 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = option.file2; sourceTree = "<group>"; }; + F966BC4208F27A3C005CB29B /* option.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = option.test; sourceTree = "<group>"; }; + F966BC4308F27A3C005CB29B /* pack.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pack.test; sourceTree = "<group>"; }; + F966BC4408F27A3C005CB29B /* panedwindow.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.test; sourceTree = "<group>"; }; + F966BC4508F27A3D005CB29B /* place.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = place.test; sourceTree = "<group>"; }; + F966BC4608F27A3D005CB29B /* raise.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = raise.test; sourceTree = "<group>"; }; + F966BC4708F27A3D005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BC4808F27A3D005CB29B /* safe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safe.test; sourceTree = "<group>"; }; + F966BC4908F27A3D005CB29B /* scale.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scale.test; sourceTree = "<group>"; }; + F966BC4A08F27A3D005CB29B /* scrollbar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrollbar.test; sourceTree = "<group>"; }; + F966BC4B08F27A3D005CB29B /* select.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = select.test; sourceTree = "<group>"; }; + F966BC4C08F27A3D005CB29B /* send.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = send.test; sourceTree = "<group>"; }; + F966BC4D08F27A3D005CB29B /* spinbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = spinbox.test; sourceTree = "<group>"; }; + F966BC4E08F27A3D005CB29B /* text.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = text.test; sourceTree = "<group>"; }; + F966BC4F08F27A3D005CB29B /* textBTree.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textBTree.test; sourceTree = "<group>"; }; + F966BC5008F27A3D005CB29B /* textDisp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textDisp.test; sourceTree = "<group>"; }; + F966BC5108F27A3D005CB29B /* textImage.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textImage.test; sourceTree = "<group>"; }; + F966BC5208F27A3D005CB29B /* textIndex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textIndex.test; sourceTree = "<group>"; }; + F966BC5308F27A3D005CB29B /* textMark.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textMark.test; sourceTree = "<group>"; }; + F966BC5408F27A3D005CB29B /* textTag.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textTag.test; sourceTree = "<group>"; }; + F966BC5508F27A3D005CB29B /* textWind.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = textWind.test; sourceTree = "<group>"; }; + F966BC5608F27A3D005CB29B /* tk.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tk.test; sourceTree = "<group>"; }; + F966BC5708F27A3D005CB29B /* unixButton.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixButton.test; sourceTree = "<group>"; }; + F966BC5808F27A3D005CB29B /* unixEmbed.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixEmbed.test; sourceTree = "<group>"; }; + F966BC5908F27A3D005CB29B /* unixFont.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixFont.test; sourceTree = "<group>"; }; + F966BC5A08F27A3D005CB29B /* unixMenu.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixMenu.test; sourceTree = "<group>"; }; + F966BC5B08F27A3D005CB29B /* unixSelect.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixSelect.test; sourceTree = "<group>"; }; + F966BC5C08F27A3D005CB29B /* unixWm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixWm.test; sourceTree = "<group>"; }; + F966BC5D08F27A3D005CB29B /* util.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = util.test; sourceTree = "<group>"; }; + F966BC5E08F27A3D005CB29B /* visual.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = visual.test; sourceTree = "<group>"; }; + F966BC5F08F27A3D005CB29B /* visual_bb.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = visual_bb.test; sourceTree = "<group>"; }; + F966BC6008F27A3D005CB29B /* winButton.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winButton.test; sourceTree = "<group>"; }; + F966BC6108F27A3D005CB29B /* winClipboard.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winClipboard.test; sourceTree = "<group>"; }; + F966BC6208F27A3D005CB29B /* winDialog.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winDialog.test; sourceTree = "<group>"; }; + F966BC6308F27A3D005CB29B /* window.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = window.test; sourceTree = "<group>"; }; + F966BC6408F27A3D005CB29B /* winfo.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winfo.test; sourceTree = "<group>"; }; + F966BC6508F27A3D005CB29B /* winFont.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winFont.test; sourceTree = "<group>"; }; + F966BC6608F27A3D005CB29B /* winMenu.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winMenu.test; sourceTree = "<group>"; }; + F966BC6708F27A3D005CB29B /* winSend.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winSend.test; sourceTree = "<group>"; }; + F966BC6808F27A3D005CB29B /* winWm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winWm.test; sourceTree = "<group>"; }; + F966BC6908F27A3D005CB29B /* wm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = wm.test; sourceTree = "<group>"; }; + F966BC6A08F27A3D005CB29B /* xmfbox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = xmfbox.test; sourceTree = "<group>"; }; + F966BC6C08F27A3D005CB29B /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F966BC6D08F27A3D005CB29B /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F966BC6E08F27A3D005CB29B /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F966BC6F08F27A3D005CB29B /* install-sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "install-sh"; sourceTree = "<group>"; }; + F966BC7008F27A3D005CB29B /* installManPage */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = installManPage; sourceTree = "<group>"; }; + F966BC7108F27A3D005CB29B /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F966BC7208F27A3D005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BC7308F27A3D005CB29B /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F966BC7408F27A3D005CB29B /* tk.spec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tk.spec; sourceTree = "<group>"; }; + F966BC7508F27A3D005CB29B /* tkAppInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkAppInit.c; sourceTree = "<group>"; }; + F966BC7608F27A3D005CB29B /* tkConfig.h.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = tkConfig.h.in; sourceTree = "<group>"; }; + F966BC7708F27A3D005CB29B /* tkConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tkConfig.sh.in; sourceTree = "<group>"; }; + F966BC7808F27A3D005CB29B /* tkUnix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnix.c; sourceTree = "<group>"; }; + F966BC7908F27A3D005CB29B /* tkUnix3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnix3d.c; sourceTree = "<group>"; }; + F966BC7A08F27A3D005CB29B /* tkUnixButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixButton.c; sourceTree = "<group>"; }; + F966BC7B08F27A3D005CB29B /* tkUnixColor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixColor.c; sourceTree = "<group>"; }; + F966BC7C08F27A3D005CB29B /* tkUnixConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixConfig.c; sourceTree = "<group>"; }; + F966BC7D08F27A3D005CB29B /* tkUnixCursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixCursor.c; sourceTree = "<group>"; }; + F966BC7E08F27A3D005CB29B /* tkUnixDefault.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUnixDefault.h; sourceTree = "<group>"; }; + F966BC7F08F27A3D005CB29B /* tkUnixDialog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixDialog.c; sourceTree = "<group>"; }; + F966BC8008F27A3D005CB29B /* tkUnixDraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixDraw.c; sourceTree = "<group>"; }; + F966BC8108F27A3D005CB29B /* tkUnixEmbed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixEmbed.c; sourceTree = "<group>"; }; + F966BC8208F27A3D005CB29B /* tkUnixEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixEvent.c; sourceTree = "<group>"; }; + F966BC8308F27A3D005CB29B /* tkUnixFocus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixFocus.c; sourceTree = "<group>"; }; + F966BC8408F27A3D005CB29B /* tkUnixFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixFont.c; sourceTree = "<group>"; }; + F966BC8508F27A3D005CB29B /* tkUnixInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixInit.c; sourceTree = "<group>"; }; + F966BC8608F27A3D005CB29B /* tkUnixInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUnixInt.h; sourceTree = "<group>"; }; + F966BC8708F27A3D005CB29B /* tkUnixKey.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixKey.c; sourceTree = "<group>"; }; + F966BC8808F27A3D005CB29B /* tkUnixMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixMenu.c; sourceTree = "<group>"; }; + F966BC8908F27A3D005CB29B /* tkUnixMenubu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixMenubu.c; sourceTree = "<group>"; }; + F966BC8A08F27A3D005CB29B /* tkUnixPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkUnixPort.h; sourceTree = "<group>"; }; + F966BC8B08F27A3D005CB29B /* tkUnixRFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixRFont.c; sourceTree = "<group>"; }; + F966BC8C08F27A3D005CB29B /* tkUnixScale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixScale.c; sourceTree = "<group>"; }; + F966BC8D08F27A3D005CB29B /* tkUnixScrlbr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixScrlbr.c; sourceTree = "<group>"; }; + F966BC8E08F27A3D005CB29B /* tkUnixSelect.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixSelect.c; sourceTree = "<group>"; }; + F966BC8F08F27A3D005CB29B /* tkUnixSend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixSend.c; sourceTree = "<group>"; }; + F966BC9008F27A3D005CB29B /* tkUnixWm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixWm.c; sourceTree = "<group>"; }; + F966BC9108F27A3D005CB29B /* tkUnixXId.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkUnixXId.c; sourceTree = "<group>"; }; + F966BC9408F27A3D005CB29B /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F966BC9508F27A3D005CB29B /* buildall.vc.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buildall.vc.bat; sourceTree = "<group>"; }; + F966BC9608F27A3E005CB29B /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F966BC9708F27A3E005CB29B /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F966BC9808F27A3E005CB29B /* makefile.bc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.bc; sourceTree = "<group>"; }; + F966BC9908F27A3E005CB29B /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F966BC9A08F27A3E005CB29B /* makefile.vc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.vc; sourceTree = "<group>"; }; + F966BC9B08F27A3E005CB29B /* mkd.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = mkd.bat; sourceTree = "<group>"; }; + F966BC9C08F27A3E005CB29B /* nmakehlp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nmakehlp.c; sourceTree = "<group>"; }; + F966BCEE08F27A3E005CB29B /* tk.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tk.rc; sourceTree = "<group>"; }; + F966BCEF08F27A3E005CB29B /* tk_base.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tk_base.rc; sourceTree = "<group>"; }; + F966BCF208F27A3E005CB29B /* wish.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = wish.rc; sourceTree = "<group>"; }; + F966BCF308F27A3E005CB29B /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F966BCF408F27A3E005CB29B /* rmd.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rmd.bat; sourceTree = "<group>"; }; + F966BCF508F27A3F005CB29B /* rules.vc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rules.vc; sourceTree = "<group>"; }; + F966BCF608F27A3F005CB29B /* stubs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stubs.c; sourceTree = "<group>"; }; + F966BCF708F27A3F005CB29B /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F966BCF808F27A3F005CB29B /* tkConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tkConfig.sh.in; sourceTree = "<group>"; }; + F966BCF908F27A3F005CB29B /* tkWin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWin.h; sourceTree = "<group>"; }; + F966BCFA08F27A3F005CB29B /* tkWin32Dll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWin32Dll.c; sourceTree = "<group>"; }; + F966BCFB08F27A3F005CB29B /* tkWin3d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWin3d.c; sourceTree = "<group>"; }; + F966BCFC08F27A3F005CB29B /* tkWinButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinButton.c; sourceTree = "<group>"; }; + F966BCFD08F27A3F005CB29B /* tkWinClipboard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinClipboard.c; sourceTree = "<group>"; }; + F966BCFE08F27A3F005CB29B /* tkWinColor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinColor.c; sourceTree = "<group>"; }; + F966BCFF08F27A3F005CB29B /* tkWinConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinConfig.c; sourceTree = "<group>"; }; + F966BD0008F27A3F005CB29B /* tkWinCursor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinCursor.c; sourceTree = "<group>"; }; + F966BD0108F27A3F005CB29B /* tkWinDefault.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinDefault.h; sourceTree = "<group>"; }; + F966BD0208F27A3F005CB29B /* tkWinDialog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinDialog.c; sourceTree = "<group>"; }; + F966BD0308F27A3F005CB29B /* tkWinDraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinDraw.c; sourceTree = "<group>"; }; + F966BD0408F27A3F005CB29B /* tkWinEmbed.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinEmbed.c; sourceTree = "<group>"; }; + F966BD0508F27A3F005CB29B /* tkWinFont.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinFont.c; sourceTree = "<group>"; }; + F966BD0708F27A3F005CB29B /* tkWinImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinImage.c; sourceTree = "<group>"; }; + F966BD0808F27A3F005CB29B /* tkWinInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinInit.c; sourceTree = "<group>"; }; + F966BD0908F27A3F005CB29B /* tkWinInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinInt.h; sourceTree = "<group>"; }; + F966BD0A08F27A3F005CB29B /* tkWinKey.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinKey.c; sourceTree = "<group>"; }; + F966BD0B08F27A3F005CB29B /* tkWinMenu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinMenu.c; sourceTree = "<group>"; }; + F966BD0C08F27A3F005CB29B /* tkWinPixmap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinPixmap.c; sourceTree = "<group>"; }; + F966BD0D08F27A3F005CB29B /* tkWinPointer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinPointer.c; sourceTree = "<group>"; }; + F966BD0E08F27A3F005CB29B /* tkWinPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinPort.h; sourceTree = "<group>"; }; + F966BD0F08F27A3F005CB29B /* tkWinRegion.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinRegion.c; sourceTree = "<group>"; }; + F966BD1008F27A3F005CB29B /* tkWinScrlbr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinScrlbr.c; sourceTree = "<group>"; }; + F966BD1108F27A3F005CB29B /* tkWinSend.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinSend.c; sourceTree = "<group>"; }; + F966BD1208F27A3F005CB29B /* tkWinSendCom.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinSendCom.c; sourceTree = "<group>"; }; + F966BD1308F27A3F005CB29B /* tkWinSendCom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkWinSendCom.h; sourceTree = "<group>"; }; + F966BD1408F27A3F005CB29B /* tkWinTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinTest.c; sourceTree = "<group>"; }; + F966BD1508F27A3F005CB29B /* tkWinWindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinWindow.c; sourceTree = "<group>"; }; + F966BD1608F27A3F005CB29B /* tkWinWm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinWm.c; sourceTree = "<group>"; }; + F966BD1708F27A3F005CB29B /* tkWinX.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tkWinX.c; sourceTree = "<group>"; }; + F966BD1808F27A3F005CB29B /* winMain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = winMain.c; sourceTree = "<group>"; }; + F966BD1B08F27A3F005CB29B /* cursorfont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cursorfont.h; sourceTree = "<group>"; }; + F966BD1C08F27A3F005CB29B /* keysym.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keysym.h; sourceTree = "<group>"; }; + F966BD1D08F27A3F005CB29B /* keysymdef.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = keysymdef.h; sourceTree = "<group>"; }; + F966BD1E08F27A3F005CB29B /* X.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = X.h; sourceTree = "<group>"; }; + F966BD1F08F27A3F005CB29B /* Xatom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xatom.h; sourceTree = "<group>"; }; + F966BD2008F27A3F005CB29B /* Xfuncproto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xfuncproto.h; sourceTree = "<group>"; }; + F966BD2108F27A3F005CB29B /* Xlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xlib.h; sourceTree = "<group>"; }; + F966BD2208F27A3F005CB29B /* Xutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xutil.h; sourceTree = "<group>"; }; + F966BD2308F27A3F005CB29B /* xbytes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xbytes.h; sourceTree = "<group>"; }; + F966BD2408F27A3F005CB29B /* xcolors.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xcolors.c; sourceTree = "<group>"; }; + F966BD2508F27A3F005CB29B /* xdraw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xdraw.c; sourceTree = "<group>"; }; + F966BD2608F27A3F005CB29B /* xgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xgc.c; sourceTree = "<group>"; }; + F966BD2708F27A3F005CB29B /* ximage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ximage.c; sourceTree = "<group>"; }; + F966BD2808F27A3F005CB29B /* xutil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xutil.c; sourceTree = "<group>"; }; + F966C07408F2820D005CB29B /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = "<absolute>"; }; + F966C07608F2821B005CB29B /* Carbon.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Carbon.framework; path = /System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; }; + F966C07808F28233005CB29B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = "<absolute>"; }; + F96887E00AF786D5000797B5 /* ttk.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttk.decls; sourceTree = "<group>"; }; + F96887E10AF786D5000797B5 /* ttkBlink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkBlink.c; sourceTree = "<group>"; }; + F96887E20AF786D5000797B5 /* ttkButton.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkButton.c; sourceTree = "<group>"; }; + F96887E30AF786D5000797B5 /* ttkCache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkCache.c; sourceTree = "<group>"; }; + F96887E40AF786D5000797B5 /* ttkClamTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkClamTheme.c; sourceTree = "<group>"; }; + F96887E50AF786D5000797B5 /* ttkClassicTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkClassicTheme.c; sourceTree = "<group>"; }; + F96887E60AF786D5000797B5 /* ttkDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkDecls.h; sourceTree = "<group>"; }; + F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkDefaultTheme.c; sourceTree = "<group>"; }; + F96887E80AF786D5000797B5 /* ttkElements.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkElements.c; sourceTree = "<group>"; }; + F96887E90AF786D5000797B5 /* ttkEntry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkEntry.c; sourceTree = "<group>"; }; + F96887EA0AF786D5000797B5 /* ttkFrame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkFrame.c; sourceTree = "<group>"; }; + F96887EB0AF786D5000797B5 /* ttkImage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkImage.c; sourceTree = "<group>"; }; + F96887EC0AF786D5000797B5 /* ttkInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkInit.c; sourceTree = "<group>"; }; + F96887ED0AF786D5000797B5 /* ttkLabel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkLabel.c; sourceTree = "<group>"; }; + F96887EE0AF786D5000797B5 /* ttkLayout.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkLayout.c; sourceTree = "<group>"; }; + F96887EF0AF786D5000797B5 /* ttkManager.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkManager.c; sourceTree = "<group>"; }; + F96887F00AF786D5000797B5 /* ttkManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkManager.h; sourceTree = "<group>"; }; + F96887F10AF786D5000797B5 /* ttkNotebook.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkNotebook.c; sourceTree = "<group>"; }; + F96887F20AF786D5000797B5 /* ttkPanedwindow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkPanedwindow.c; sourceTree = "<group>"; }; + F96887F30AF786D5000797B5 /* ttkProgress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkProgress.c; sourceTree = "<group>"; }; + F96887F40AF786D5000797B5 /* ttkScale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkScale.c; sourceTree = "<group>"; }; + F96887F50AF786D5000797B5 /* ttkScroll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkScroll.c; sourceTree = "<group>"; }; + F96887F60AF786D5000797B5 /* ttkScrollbar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkScrollbar.c; sourceTree = "<group>"; }; + F96887F70AF786D5000797B5 /* ttkSeparator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkSeparator.c; sourceTree = "<group>"; }; + F96887F80AF786D5000797B5 /* ttkSquare.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkSquare.c; sourceTree = "<group>"; }; + F96887F90AF786D5000797B5 /* ttkState.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkState.c; sourceTree = "<group>"; }; + F96887FA0AF786D5000797B5 /* ttkStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkStubInit.c; sourceTree = "<group>"; }; + F96887FB0AF786D5000797B5 /* ttkStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkStubLib.c; sourceTree = "<group>"; }; + F96887FC0AF786D5000797B5 /* ttkTagSet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTagSet.c; sourceTree = "<group>"; }; + F96887FD0AF786D5000797B5 /* ttkTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTheme.c; sourceTree = "<group>"; }; + F96887FE0AF786D5000797B5 /* ttkTheme.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkTheme.h; sourceTree = "<group>"; }; + F96887FF0AF786D5000797B5 /* ttkThemeInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkThemeInt.h; sourceTree = "<group>"; }; + F96888000AF786D5000797B5 /* ttkTrace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTrace.c; sourceTree = "<group>"; }; + F96888010AF786D5000797B5 /* ttkTrack.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTrack.c; sourceTree = "<group>"; }; + F96888020AF786D5000797B5 /* ttkTreeview.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkTreeview.c; sourceTree = "<group>"; }; + F96888030AF786D5000797B5 /* ttkWidget.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWidget.c; sourceTree = "<group>"; }; + F96888040AF786D5000797B5 /* ttkWidget.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttkWidget.h; sourceTree = "<group>"; }; + F96888370AF787B3000797B5 /* altTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = altTheme.tcl; sourceTree = "<group>"; }; + F96888380AF787B3000797B5 /* aquaTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = aquaTheme.tcl; sourceTree = "<group>"; }; + F96888390AF787B3000797B5 /* button.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = button.tcl; sourceTree = "<group>"; }; + F968883A0AF787B3000797B5 /* clamTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clamTheme.tcl; sourceTree = "<group>"; }; + F968883B0AF787B3000797B5 /* classicTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = classicTheme.tcl; sourceTree = "<group>"; }; + F968883C0AF787B3000797B5 /* combobox.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = combobox.tcl; sourceTree = "<group>"; }; + F968883D0AF787B3000797B5 /* cursors.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cursors.tcl; sourceTree = "<group>"; }; + F968883E0AF787B3000797B5 /* defaults.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = defaults.tcl; sourceTree = "<group>"; }; + F96888400AF787B3000797B5 /* entry.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.tcl; sourceTree = "<group>"; }; + F96888410AF787B3000797B5 /* fonts.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fonts.tcl; sourceTree = "<group>"; }; + F96888440AF787B3000797B5 /* menubutton.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = menubutton.tcl; sourceTree = "<group>"; }; + F96888450AF787B3000797B5 /* notebook.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = notebook.tcl; sourceTree = "<group>"; }; + F96888460AF787B3000797B5 /* panedwindow.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.tcl; sourceTree = "<group>"; }; + F96888470AF787B3000797B5 /* progress.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = progress.tcl; sourceTree = "<group>"; }; + F96888480AF787B3000797B5 /* scale.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scale.tcl; sourceTree = "<group>"; }; + F96888490AF787B3000797B5 /* scrollbar.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrollbar.tcl; sourceTree = "<group>"; }; + F968884A0AF787B3000797B5 /* sizegrip.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = sizegrip.tcl; sourceTree = "<group>"; }; + F968884B0AF787B3000797B5 /* treeview.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = treeview.tcl; sourceTree = "<group>"; }; + F968884C0AF787B3000797B5 /* ttk.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttk.tcl; sourceTree = "<group>"; }; + F968884D0AF787B3000797B5 /* utils.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = utils.tcl; sourceTree = "<group>"; }; + F968884E0AF787B3000797B5 /* winTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winTheme.tcl; sourceTree = "<group>"; }; + F968884F0AF787B3000797B5 /* xpTheme.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = xpTheme.tcl; sourceTree = "<group>"; }; + F96888540AF7880C000797B5 /* all.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = all.tcl; sourceTree = "<group>"; }; + F96888560AF7880C000797B5 /* combobox.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = combobox.test; sourceTree = "<group>"; }; + F96888570AF7880C000797B5 /* entry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = entry.test; sourceTree = "<group>"; }; + F96888580AF7880C000797B5 /* image.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = image.test; sourceTree = "<group>"; }; + F96888590AF7880C000797B5 /* labelframe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = labelframe.test; sourceTree = "<group>"; }; + F968885A0AF7880C000797B5 /* layout.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = layout.test; sourceTree = "<group>"; }; + F968885C0AF7880C000797B5 /* notebook.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = notebook.test; sourceTree = "<group>"; }; + F968885D0AF7880C000797B5 /* panedwindow.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = panedwindow.test; sourceTree = "<group>"; }; + F968885E0AF7880C000797B5 /* progressbar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = progressbar.test; sourceTree = "<group>"; }; + F968885F0AF7880C000797B5 /* scrollbar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scrollbar.test; sourceTree = "<group>"; }; + F96888600AF7880C000797B5 /* treetags.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = treetags.test; sourceTree = "<group>"; }; + F96888610AF7880C000797B5 /* treeview.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = treeview.test; sourceTree = "<group>"; }; + F96888620AF7880C000797B5 /* ttk.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ttk.test; sourceTree = "<group>"; }; + F96888630AF7880C000797B5 /* validate.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = validate.test; sourceTree = "<group>"; }; + F968886B0AF788F6000797B5 /* ttk_button.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_button.n; sourceTree = "<group>"; }; + F968886C0AF788F6000797B5 /* ttk_checkbutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_checkbutton.n; sourceTree = "<group>"; }; + F968886D0AF788F6000797B5 /* ttk_combobox.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_combobox.n; sourceTree = "<group>"; }; + F968886F0AF788F6000797B5 /* ttk_entry.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_entry.n; sourceTree = "<group>"; }; + F96888700AF788F6000797B5 /* ttk_frame.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_frame.n; sourceTree = "<group>"; }; + F96888710AF788F6000797B5 /* ttk_Geometry.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_Geometry.3; sourceTree = "<group>"; }; + F96888720AF788F6000797B5 /* ttk_image.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_image.n; sourceTree = "<group>"; }; + F96888730AF788F6000797B5 /* ttk_intro.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_intro.n; sourceTree = "<group>"; }; + F96888740AF788F6000797B5 /* ttk_label.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_label.n; sourceTree = "<group>"; }; + F96888750AF788F6000797B5 /* ttk_labelframe.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_labelframe.n; sourceTree = "<group>"; }; + F96888760AF788F6000797B5 /* ttk_menubutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_menubutton.n; sourceTree = "<group>"; }; + F96888770AF788F6000797B5 /* ttk_notebook.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_notebook.n; sourceTree = "<group>"; }; + F96888780AF788F6000797B5 /* ttk_panedwindow.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_panedwindow.n; sourceTree = "<group>"; }; + F96888790AF788F6000797B5 /* ttk_progressbar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_progressbar.n; sourceTree = "<group>"; }; + F968887A0AF788F6000797B5 /* ttk_radiobutton.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_radiobutton.n; sourceTree = "<group>"; }; + F968887B0AF788F6000797B5 /* ttk_scrollbar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_scrollbar.n; sourceTree = "<group>"; }; + F968887C0AF788F6000797B5 /* ttk_separator.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_separator.n; sourceTree = "<group>"; }; + F968887D0AF788F6000797B5 /* ttk_sizegrip.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_sizegrip.n; sourceTree = "<group>"; }; + F968887E0AF788F6000797B5 /* ttk_style.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_style.n; sourceTree = "<group>"; }; + F968887F0AF788F6000797B5 /* ttk_Theme.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_Theme.3; sourceTree = "<group>"; }; + F96888800AF788F6000797B5 /* ttk_treeview.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_treeview.n; sourceTree = "<group>"; }; + F96888810AF788F6000797B5 /* ttk_widget.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ttk_widget.n; sourceTree = "<group>"; }; + F96888840AF78938000797B5 /* ttkMacOSXTheme.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.objc; fileEncoding = 4; path = ttkMacOSXTheme.c; sourceTree = "<group>"; }; + F96888860AF78953000797B5 /* ttkWinMonitor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWinMonitor.c; sourceTree = "<group>"; }; + F96888870AF78953000797B5 /* ttkWinTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWinTheme.c; sourceTree = "<group>"; }; + F96888880AF78953000797B5 /* ttkWinXPTheme.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttkWinXPTheme.c; sourceTree = "<group>"; }; + F96D3DFA08F272A4004A47F5 /* ChangeLog */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = ChangeLog; sourceTree = "<group>"; }; + F96D3DFB08F272A4004A47F5 /* changes */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = changes; sourceTree = "<group>"; }; + F96D3DFD08F272A4004A47F5 /* Access.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Access.3; sourceTree = "<group>"; }; + F96D3DFE08F272A4004A47F5 /* AddErrInfo.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AddErrInfo.3; sourceTree = "<group>"; }; + F96D3DFF08F272A4004A47F5 /* after.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = after.n; sourceTree = "<group>"; }; + F96D3E0008F272A4004A47F5 /* Alloc.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Alloc.3; sourceTree = "<group>"; }; + F96D3E0108F272A4004A47F5 /* AllowExc.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AllowExc.3; sourceTree = "<group>"; }; + F96D3E0208F272A4004A47F5 /* append.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = append.n; sourceTree = "<group>"; }; + F96D3E0308F272A4004A47F5 /* AppInit.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AppInit.3; sourceTree = "<group>"; }; + F96D3E0408F272A5004A47F5 /* array.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = array.n; sourceTree = "<group>"; }; + F96D3E0508F272A5004A47F5 /* AssocData.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = AssocData.3; sourceTree = "<group>"; }; + F96D3E0608F272A5004A47F5 /* Async.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Async.3; sourceTree = "<group>"; }; + F96D3E0708F272A5004A47F5 /* BackgdErr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = BackgdErr.3; sourceTree = "<group>"; }; + F96D3E0808F272A5004A47F5 /* Backslash.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Backslash.3; sourceTree = "<group>"; }; + F96D3E0908F272A5004A47F5 /* bgerror.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = bgerror.n; sourceTree = "<group>"; }; + F96D3E0A08F272A5004A47F5 /* binary.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = binary.n; sourceTree = "<group>"; }; + F96D3E0B08F272A5004A47F5 /* BoolObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = BoolObj.3; sourceTree = "<group>"; }; + F96D3E0C08F272A5004A47F5 /* break.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = break.n; sourceTree = "<group>"; }; + F96D3E0D08F272A5004A47F5 /* ByteArrObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ByteArrObj.3; sourceTree = "<group>"; }; + F96D3E0E08F272A5004A47F5 /* CallDel.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CallDel.3; sourceTree = "<group>"; }; + F96D3E0F08F272A5004A47F5 /* case.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = case.n; sourceTree = "<group>"; }; + F96D3E1008F272A5004A47F5 /* catch.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = catch.n; sourceTree = "<group>"; }; + F96D3E1108F272A5004A47F5 /* cd.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = cd.n; sourceTree = "<group>"; }; + F96D3E1208F272A5004A47F5 /* chan.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = chan.n; sourceTree = "<group>"; }; + F96D3E1308F272A5004A47F5 /* ChnlStack.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ChnlStack.3; sourceTree = "<group>"; }; + F96D3E1408F272A5004A47F5 /* clock.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = clock.n; sourceTree = "<group>"; }; + F96D3E1508F272A5004A47F5 /* close.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = close.n; sourceTree = "<group>"; }; + F96D3E1608F272A5004A47F5 /* CmdCmplt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CmdCmplt.3; sourceTree = "<group>"; }; + F96D3E1708F272A5004A47F5 /* Concat.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Concat.3; sourceTree = "<group>"; }; + F96D3E1808F272A5004A47F5 /* concat.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = concat.n; sourceTree = "<group>"; }; + F96D3E1908F272A5004A47F5 /* continue.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = continue.n; sourceTree = "<group>"; }; + F96D3E1A08F272A5004A47F5 /* CrtChannel.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtChannel.3; sourceTree = "<group>"; }; + F96D3E1B08F272A5004A47F5 /* CrtChnlHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtChnlHdlr.3; sourceTree = "<group>"; }; + F96D3E1C08F272A5004A47F5 /* CrtCloseHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtCloseHdlr.3; sourceTree = "<group>"; }; + F96D3E1D08F272A5004A47F5 /* CrtCommand.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtCommand.3; sourceTree = "<group>"; }; + F96D3E1E08F272A5004A47F5 /* CrtFileHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtFileHdlr.3; sourceTree = "<group>"; }; + F96D3E1F08F272A5004A47F5 /* CrtInterp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtInterp.3; sourceTree = "<group>"; }; + F96D3E2008F272A5004A47F5 /* CrtMathFnc.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtMathFnc.3; sourceTree = "<group>"; }; + F96D3E2108F272A5004A47F5 /* CrtObjCmd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtObjCmd.3; sourceTree = "<group>"; }; + F96D3E2208F272A5004A47F5 /* CrtSlave.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtSlave.3; sourceTree = "<group>"; }; + F96D3E2308F272A5004A47F5 /* CrtTimerHdlr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtTimerHdlr.3; sourceTree = "<group>"; }; + F96D3E2408F272A5004A47F5 /* CrtTrace.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = CrtTrace.3; sourceTree = "<group>"; }; + F96D3E2508F272A5004A47F5 /* dde.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = dde.n; sourceTree = "<group>"; }; + F96D3E2608F272A5004A47F5 /* DetachPids.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DetachPids.3; sourceTree = "<group>"; }; + F96D3E2708F272A5004A47F5 /* dict.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = dict.n; sourceTree = "<group>"; }; + F96D3E2808F272A5004A47F5 /* DictObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DictObj.3; sourceTree = "<group>"; }; + F96D3E2908F272A5004A47F5 /* DoOneEvent.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DoOneEvent.3; sourceTree = "<group>"; }; + F96D3E2A08F272A5004A47F5 /* DoubleObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DoubleObj.3; sourceTree = "<group>"; }; + F96D3E2B08F272A5004A47F5 /* DoWhenIdle.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DoWhenIdle.3; sourceTree = "<group>"; }; + F96D3E2C08F272A5004A47F5 /* DString.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DString.3; sourceTree = "<group>"; }; + F96D3E2D08F272A5004A47F5 /* DumpActiveMemory.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = DumpActiveMemory.3; sourceTree = "<group>"; }; + F96D3E2E08F272A5004A47F5 /* Encoding.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Encoding.3; sourceTree = "<group>"; }; + F96D3E2F08F272A5004A47F5 /* encoding.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = encoding.n; sourceTree = "<group>"; }; + F96D3E3008F272A5004A47F5 /* Ensemble.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Ensemble.3; sourceTree = "<group>"; }; + F96D3E3108F272A5004A47F5 /* Environment.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Environment.3; sourceTree = "<group>"; }; + F96D3E3208F272A5004A47F5 /* eof.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = eof.n; sourceTree = "<group>"; }; + F96D3E3308F272A5004A47F5 /* error.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = error.n; sourceTree = "<group>"; }; + F96D3E3408F272A5004A47F5 /* Eval.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Eval.3; sourceTree = "<group>"; }; + F96D3E3508F272A5004A47F5 /* eval.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = eval.n; sourceTree = "<group>"; }; + F96D3E3608F272A5004A47F5 /* exec.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = exec.n; sourceTree = "<group>"; }; + F96D3E3708F272A5004A47F5 /* Exit.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Exit.3; sourceTree = "<group>"; }; + F96D3E3808F272A5004A47F5 /* exit.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = exit.n; sourceTree = "<group>"; }; + F96D3E3908F272A5004A47F5 /* expr.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = expr.n; sourceTree = "<group>"; }; + F96D3E3A08F272A5004A47F5 /* ExprLong.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ExprLong.3; sourceTree = "<group>"; }; + F96D3E3B08F272A5004A47F5 /* ExprLongObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ExprLongObj.3; sourceTree = "<group>"; }; + F96D3E3C08F272A5004A47F5 /* fblocked.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fblocked.n; sourceTree = "<group>"; }; + F96D3E3D08F272A5004A47F5 /* fconfigure.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fconfigure.n; sourceTree = "<group>"; }; + F96D3E3E08F272A5004A47F5 /* fcopy.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fcopy.n; sourceTree = "<group>"; }; + F96D3E3F08F272A5004A47F5 /* file.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = file.n; sourceTree = "<group>"; }; + F96D3E4008F272A5004A47F5 /* fileevent.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = fileevent.n; sourceTree = "<group>"; }; + F96D3E4108F272A5004A47F5 /* filename.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = filename.n; sourceTree = "<group>"; }; + F96D3E4208F272A5004A47F5 /* FileSystem.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FileSystem.3; sourceTree = "<group>"; }; + F96D3E4308F272A5004A47F5 /* FindExec.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = FindExec.3; sourceTree = "<group>"; }; + F96D3E4408F272A5004A47F5 /* flush.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = flush.n; sourceTree = "<group>"; }; + F96D3E4508F272A5004A47F5 /* for.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = for.n; sourceTree = "<group>"; }; + F96D3E4608F272A5004A47F5 /* foreach.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = foreach.n; sourceTree = "<group>"; }; + F96D3E4708F272A5004A47F5 /* format.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = format.n; sourceTree = "<group>"; }; + F96D3E4808F272A5004A47F5 /* GetCwd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetCwd.3; sourceTree = "<group>"; }; + F96D3E4908F272A5004A47F5 /* GetHostName.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetHostName.3; sourceTree = "<group>"; }; + F96D3E4A08F272A5004A47F5 /* GetIndex.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetIndex.3; sourceTree = "<group>"; }; + F96D3E4B08F272A5004A47F5 /* GetInt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetInt.3; sourceTree = "<group>"; }; + F96D3E4C08F272A5004A47F5 /* GetOpnFl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetOpnFl.3; sourceTree = "<group>"; }; + F96D3E4D08F272A5004A47F5 /* gets.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = gets.n; sourceTree = "<group>"; }; + F96D3E4E08F272A5004A47F5 /* GetStdChan.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetStdChan.3; sourceTree = "<group>"; }; + F96D3E4F08F272A5004A47F5 /* GetTime.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetTime.3; sourceTree = "<group>"; }; + F96D3E5008F272A5004A47F5 /* GetVersion.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = GetVersion.3; sourceTree = "<group>"; }; + F96D3E5108F272A5004A47F5 /* glob.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = glob.n; sourceTree = "<group>"; }; + F96D3E5208F272A6004A47F5 /* global.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = global.n; sourceTree = "<group>"; }; + F96D3E5308F272A6004A47F5 /* Hash.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Hash.3; sourceTree = "<group>"; }; + F96D3E5408F272A6004A47F5 /* history.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = history.n; sourceTree = "<group>"; }; + F96D3E5508F272A6004A47F5 /* http.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = http.n; sourceTree = "<group>"; }; + F96D3E5608F272A6004A47F5 /* if.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = if.n; sourceTree = "<group>"; }; + F96D3E5708F272A6004A47F5 /* incr.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = incr.n; sourceTree = "<group>"; }; + F96D3E5808F272A6004A47F5 /* info.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = info.n; sourceTree = "<group>"; }; + F96D3E5908F272A6004A47F5 /* Init.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Init.3; sourceTree = "<group>"; }; + F96D3E5A08F272A6004A47F5 /* InitStubs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = InitStubs.3; sourceTree = "<group>"; }; + F96D3E5B08F272A6004A47F5 /* Interp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Interp.3; sourceTree = "<group>"; }; + F96D3E5C08F272A6004A47F5 /* interp.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = interp.n; sourceTree = "<group>"; }; + F96D3E5D08F272A6004A47F5 /* IntObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = IntObj.3; sourceTree = "<group>"; }; + F96D3E5E08F272A6004A47F5 /* join.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = join.n; sourceTree = "<group>"; }; + F96D3E5F08F272A6004A47F5 /* lappend.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lappend.n; sourceTree = "<group>"; }; + F96D3E6008F272A6004A47F5 /* lassign.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lassign.n; sourceTree = "<group>"; }; + F96D3E6108F272A6004A47F5 /* library.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = library.n; sourceTree = "<group>"; }; + F96D3E6208F272A6004A47F5 /* Limit.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Limit.3; sourceTree = "<group>"; }; + F96D3E6308F272A6004A47F5 /* lindex.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lindex.n; sourceTree = "<group>"; }; + F96D3E6408F272A6004A47F5 /* LinkVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = LinkVar.3; sourceTree = "<group>"; }; + F96D3E6508F272A6004A47F5 /* linsert.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = linsert.n; sourceTree = "<group>"; }; + F96D3E6608F272A6004A47F5 /* list.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = list.n; sourceTree = "<group>"; }; + F96D3E6708F272A6004A47F5 /* ListObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ListObj.3; sourceTree = "<group>"; }; + F96D3E6808F272A6004A47F5 /* llength.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = llength.n; sourceTree = "<group>"; }; + F96D3E6908F272A6004A47F5 /* load.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = load.n; sourceTree = "<group>"; }; + F96D3E6A08F272A6004A47F5 /* lrange.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lrange.n; sourceTree = "<group>"; }; + F96D3E6B08F272A6004A47F5 /* lrepeat.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lrepeat.n; sourceTree = "<group>"; }; + F96D3E6C08F272A6004A47F5 /* lreplace.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lreplace.n; sourceTree = "<group>"; }; + F96D3E6D08F272A6004A47F5 /* lsearch.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lsearch.n; sourceTree = "<group>"; }; + F96D3E6E08F272A6004A47F5 /* lset.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lset.n; sourceTree = "<group>"; }; + F96D3E6F08F272A6004A47F5 /* lsort.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = lsort.n; sourceTree = "<group>"; }; + F96D3E7008F272A6004A47F5 /* man.macros */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = man.macros; sourceTree = "<group>"; }; + F96D3E7108F272A6004A47F5 /* mathfunc.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = mathfunc.n; sourceTree = "<group>"; }; + F96D3E7208F272A6004A47F5 /* memory.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = memory.n; sourceTree = "<group>"; }; + F96D3E7308F272A6004A47F5 /* msgcat.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = msgcat.n; sourceTree = "<group>"; }; + F96D3E7408F272A6004A47F5 /* Namespace.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Namespace.3; sourceTree = "<group>"; }; + F96D3E7508F272A6004A47F5 /* namespace.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = namespace.n; sourceTree = "<group>"; }; + F96D3E7608F272A6004A47F5 /* Notifier.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Notifier.3; sourceTree = "<group>"; }; + F96D3E7708F272A6004A47F5 /* Object.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Object.3; sourceTree = "<group>"; }; + F96D3E7808F272A6004A47F5 /* ObjectType.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ObjectType.3; sourceTree = "<group>"; }; + F96D3E7908F272A6004A47F5 /* open.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = open.n; sourceTree = "<group>"; }; + F96D3E7A08F272A6004A47F5 /* OpenFileChnl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = OpenFileChnl.3; sourceTree = "<group>"; }; + F96D3E7B08F272A6004A47F5 /* OpenTcp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = OpenTcp.3; sourceTree = "<group>"; }; + F96D3E7C08F272A6004A47F5 /* package.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = package.n; sourceTree = "<group>"; }; + F96D3E7D08F272A6004A47F5 /* packagens.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = packagens.n; sourceTree = "<group>"; }; + F96D3E7E08F272A6004A47F5 /* Panic.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Panic.3; sourceTree = "<group>"; }; + F96D3E7F08F272A6004A47F5 /* ParseCmd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ParseCmd.3; sourceTree = "<group>"; }; + F96D3E8008F272A6004A47F5 /* pid.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pid.n; sourceTree = "<group>"; }; + F96D3E8108F272A6004A47F5 /* pkgMkIndex.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pkgMkIndex.n; sourceTree = "<group>"; }; + F96D3E8208F272A6004A47F5 /* PkgRequire.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = PkgRequire.3; sourceTree = "<group>"; }; + F96D3E8308F272A6004A47F5 /* Preserve.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Preserve.3; sourceTree = "<group>"; }; + F96D3E8408F272A6004A47F5 /* PrintDbl.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = PrintDbl.3; sourceTree = "<group>"; }; + F96D3E8508F272A6004A47F5 /* proc.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = proc.n; sourceTree = "<group>"; }; + F96D3E8608F272A6004A47F5 /* puts.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = puts.n; sourceTree = "<group>"; }; + F96D3E8708F272A6004A47F5 /* pwd.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = pwd.n; sourceTree = "<group>"; }; + F96D3E8808F272A6004A47F5 /* re_syntax.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = re_syntax.n; sourceTree = "<group>"; }; + F96D3E8908F272A6004A47F5 /* read.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = read.n; sourceTree = "<group>"; }; + F96D3E8A08F272A6004A47F5 /* RecEvalObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RecEvalObj.3; sourceTree = "<group>"; }; + F96D3E8B08F272A6004A47F5 /* RecordEval.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RecordEval.3; sourceTree = "<group>"; }; + F96D3E8C08F272A6004A47F5 /* RegConfig.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RegConfig.3; sourceTree = "<group>"; }; + F96D3E8D08F272A6004A47F5 /* RegExp.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = RegExp.3; sourceTree = "<group>"; }; + F96D3E8E08F272A6004A47F5 /* regexp.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = regexp.n; sourceTree = "<group>"; }; + F96D3E8F08F272A6004A47F5 /* registry.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = registry.n; sourceTree = "<group>"; }; + F96D3E9008F272A6004A47F5 /* regsub.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = regsub.n; sourceTree = "<group>"; }; + F96D3E9108F272A6004A47F5 /* rename.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = rename.n; sourceTree = "<group>"; }; + F96D3E9208F272A6004A47F5 /* return.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = return.n; sourceTree = "<group>"; }; + F96D3E9308F272A6004A47F5 /* safe.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = safe.n; sourceTree = "<group>"; }; + F96D3E9408F272A6004A47F5 /* SaveResult.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SaveResult.3; sourceTree = "<group>"; }; + F96D3E9508F272A6004A47F5 /* scan.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = scan.n; sourceTree = "<group>"; }; + F96D3E9608F272A6004A47F5 /* seek.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = seek.n; sourceTree = "<group>"; }; + F96D3E9708F272A6004A47F5 /* set.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = set.n; sourceTree = "<group>"; }; + F96D3E9808F272A6004A47F5 /* SetChanErr.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetChanErr.3; sourceTree = "<group>"; }; + F96D3E9908F272A6004A47F5 /* SetErrno.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetErrno.3; sourceTree = "<group>"; }; + F96D3E9A08F272A6004A47F5 /* SetRecLmt.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetRecLmt.3; sourceTree = "<group>"; }; + F96D3E9B08F272A7004A47F5 /* SetResult.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetResult.3; sourceTree = "<group>"; }; + F96D3E9C08F272A7004A47F5 /* SetVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SetVar.3; sourceTree = "<group>"; }; + F96D3E9D08F272A7004A47F5 /* Signal.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Signal.3; sourceTree = "<group>"; }; + F96D3E9E08F272A7004A47F5 /* Sleep.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Sleep.3; sourceTree = "<group>"; }; + F96D3E9F08F272A7004A47F5 /* socket.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = socket.n; sourceTree = "<group>"; }; + F96D3EA008F272A7004A47F5 /* source.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = source.n; sourceTree = "<group>"; }; + F96D3EA108F272A7004A47F5 /* SourceRCFile.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SourceRCFile.3; sourceTree = "<group>"; }; + F96D3EA208F272A7004A47F5 /* split.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = split.n; sourceTree = "<group>"; }; + F96D3EA308F272A7004A47F5 /* SplitList.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SplitList.3; sourceTree = "<group>"; }; + F96D3EA408F272A7004A47F5 /* SplitPath.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SplitPath.3; sourceTree = "<group>"; }; + F96D3EA508F272A7004A47F5 /* StaticPkg.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StaticPkg.3; sourceTree = "<group>"; }; + F96D3EA608F272A7004A47F5 /* StdChannels.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StdChannels.3; sourceTree = "<group>"; }; + F96D3EA708F272A7004A47F5 /* string.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = string.n; sourceTree = "<group>"; }; + F96D3EA808F272A7004A47F5 /* StringObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StringObj.3; sourceTree = "<group>"; }; + F96D3EA908F272A7004A47F5 /* StrMatch.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = StrMatch.3; sourceTree = "<group>"; }; + F96D3EAA08F272A7004A47F5 /* subst.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = subst.n; sourceTree = "<group>"; }; + F96D3EAB08F272A7004A47F5 /* SubstObj.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = SubstObj.3; sourceTree = "<group>"; }; + F96D3EAC08F272A7004A47F5 /* switch.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = switch.n; sourceTree = "<group>"; }; + F96D3EAD08F272A7004A47F5 /* Tcl.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tcl.n; sourceTree = "<group>"; }; + F96D3EAE08F272A7004A47F5 /* Tcl_Main.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Tcl_Main.3; sourceTree = "<group>"; }; + F96D3EAF08F272A7004A47F5 /* TCL_MEM_DEBUG.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TCL_MEM_DEBUG.3; sourceTree = "<group>"; }; + F96D3EB008F272A7004A47F5 /* tclsh.1 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tclsh.1; sourceTree = "<group>"; }; + F96D3EB108F272A7004A47F5 /* tcltest.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tcltest.n; sourceTree = "<group>"; }; + F96D3EB208F272A7004A47F5 /* tclvars.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tclvars.n; sourceTree = "<group>"; }; + F96D3EB308F272A7004A47F5 /* tell.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tell.n; sourceTree = "<group>"; }; + F96D3EB408F272A7004A47F5 /* Thread.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Thread.3; sourceTree = "<group>"; }; + F96D3EB508F272A7004A47F5 /* time.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = time.n; sourceTree = "<group>"; }; + F96D3EB608F272A7004A47F5 /* tm.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = tm.n; sourceTree = "<group>"; }; + F96D3EB708F272A7004A47F5 /* ToUpper.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = ToUpper.3; sourceTree = "<group>"; }; + F96D3EB808F272A7004A47F5 /* trace.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = trace.n; sourceTree = "<group>"; }; + F96D3EB908F272A7004A47F5 /* TraceCmd.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TraceCmd.3; sourceTree = "<group>"; }; + F96D3EBA08F272A7004A47F5 /* TraceVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = TraceVar.3; sourceTree = "<group>"; }; + F96D3EBB08F272A7004A47F5 /* Translate.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Translate.3; sourceTree = "<group>"; }; + F96D3EBC08F272A7004A47F5 /* UniCharIsAlpha.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = UniCharIsAlpha.3; sourceTree = "<group>"; }; + F96D3EBD08F272A7004A47F5 /* unknown.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = unknown.n; sourceTree = "<group>"; }; + F96D3EBE08F272A7004A47F5 /* unload.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = unload.n; sourceTree = "<group>"; }; + F96D3EBF08F272A7004A47F5 /* unset.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = unset.n; sourceTree = "<group>"; }; + F96D3EC008F272A7004A47F5 /* update.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = update.n; sourceTree = "<group>"; }; + F96D3EC108F272A7004A47F5 /* uplevel.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = uplevel.n; sourceTree = "<group>"; }; + F96D3EC208F272A7004A47F5 /* UpVar.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = UpVar.3; sourceTree = "<group>"; }; + F96D3EC308F272A7004A47F5 /* upvar.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = upvar.n; sourceTree = "<group>"; }; + F96D3EC408F272A7004A47F5 /* Utf.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = Utf.3; sourceTree = "<group>"; }; + F96D3EC508F272A7004A47F5 /* variable.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = variable.n; sourceTree = "<group>"; }; + F96D3EC608F272A7004A47F5 /* vwait.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = vwait.n; sourceTree = "<group>"; }; + F96D3EC708F272A7004A47F5 /* while.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = while.n; sourceTree = "<group>"; }; + F96D3EC808F272A7004A47F5 /* WrongNumArgs.3 */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = WrongNumArgs.3; sourceTree = "<group>"; }; + F96D3ECA08F272A7004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D3ECB08F272A7004A47F5 /* regc_color.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_color.c; sourceTree = "<group>"; }; + F96D3ECC08F272A7004A47F5 /* regc_cvec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_cvec.c; sourceTree = "<group>"; }; + F96D3ECD08F272A7004A47F5 /* regc_lex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_lex.c; sourceTree = "<group>"; }; + F96D3ECE08F272A7004A47F5 /* regc_locale.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_locale.c; sourceTree = "<group>"; }; + F96D3ECF08F272A7004A47F5 /* regc_nfa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regc_nfa.c; sourceTree = "<group>"; }; + F96D3ED008F272A7004A47F5 /* regcomp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regcomp.c; sourceTree = "<group>"; }; + F96D3ED108F272A7004A47F5 /* regcustom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regcustom.h; sourceTree = "<group>"; }; + F96D3ED208F272A7004A47F5 /* rege_dfa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rege_dfa.c; sourceTree = "<group>"; }; + F96D3ED308F272A7004A47F5 /* regerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regerror.c; sourceTree = "<group>"; }; + F96D3ED408F272A7004A47F5 /* regerrs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regerrs.h; sourceTree = "<group>"; }; + F96D3ED508F272A7004A47F5 /* regex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regex.h; sourceTree = "<group>"; }; + F96D3ED608F272A7004A47F5 /* regexec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regexec.c; sourceTree = "<group>"; }; + F96D3ED708F272A7004A47F5 /* regfree.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regfree.c; sourceTree = "<group>"; }; + F96D3ED808F272A7004A47F5 /* regfronts.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = regfronts.c; sourceTree = "<group>"; }; + F96D3ED908F272A7004A47F5 /* regguts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regguts.h; sourceTree = "<group>"; }; + F96D3EDA08F272A7004A47F5 /* tcl.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tcl.decls; sourceTree = "<group>"; }; + F96D3EDB08F272A7004A47F5 /* tcl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tcl.h; sourceTree = "<group>"; }; + F96D3EDC08F272A7004A47F5 /* tclAlloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAlloc.c; sourceTree = "<group>"; }; + F96D3EDD08F272A7004A47F5 /* tclAsync.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAsync.c; sourceTree = "<group>"; }; + F96D3EDE08F272A7004A47F5 /* tclBasic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclBasic.c; sourceTree = "<group>"; }; + F96D3EDF08F272A7004A47F5 /* tclBinary.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclBinary.c; sourceTree = "<group>"; }; + F96D3EE008F272A7004A47F5 /* tclCkalloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCkalloc.c; sourceTree = "<group>"; }; + F96D3EE108F272A7004A47F5 /* tclClock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclClock.c; sourceTree = "<group>"; }; + F96D3EE208F272A7004A47F5 /* tclCmdAH.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCmdAH.c; sourceTree = "<group>"; }; + F96D3EE308F272A7004A47F5 /* tclCmdIL.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCmdIL.c; sourceTree = "<group>"; }; + F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCmdMZ.c; sourceTree = "<group>"; }; + F96D3EE508F272A7004A47F5 /* tclCompCmds.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCompCmds.c; sourceTree = "<group>"; }; + F96D3EE608F272A7004A47F5 /* tclCompExpr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCompExpr.c; sourceTree = "<group>"; }; + F96D3EE708F272A7004A47F5 /* tclCompile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclCompile.c; sourceTree = "<group>"; }; + F96D3EE808F272A7004A47F5 /* tclCompile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclCompile.h; sourceTree = "<group>"; }; + F96D3EE908F272A7004A47F5 /* tclConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclConfig.c; sourceTree = "<group>"; }; + F96D3EEA08F272A7004A47F5 /* tclDate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclDate.c; sourceTree = "<group>"; }; + F96D3EEB08F272A7004A47F5 /* tclDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclDecls.h; sourceTree = "<group>"; }; + F96D3EEC08F272A7004A47F5 /* tclDictObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclDictObj.c; sourceTree = "<group>"; }; + F96D3EED08F272A7004A47F5 /* tclEncoding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclEncoding.c; sourceTree = "<group>"; }; + F96D3EEE08F272A7004A47F5 /* tclEnv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclEnv.c; sourceTree = "<group>"; }; + F96D3EEF08F272A7004A47F5 /* tclEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclEvent.c; sourceTree = "<group>"; }; + F96D3EF008F272A7004A47F5 /* tclExecute.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclExecute.c; sourceTree = "<group>"; }; + F96D3EF108F272A7004A47F5 /* tclFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclFCmd.c; sourceTree = "<group>"; }; + F96D3EF208F272A7004A47F5 /* tclFileName.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclFileName.c; sourceTree = "<group>"; }; + F96D3EF308F272A7004A47F5 /* tclFileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclFileSystem.h; sourceTree = "<group>"; }; + F96D3EF408F272A7004A47F5 /* tclGet.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclGet.c; sourceTree = "<group>"; }; + F96D3EF508F272A7004A47F5 /* tclGetDate.y */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.yacc; path = tclGetDate.y; sourceTree = "<group>"; }; + F96D3EF608F272A7004A47F5 /* tclHash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclHash.c; sourceTree = "<group>"; }; + F96D3EF708F272A7004A47F5 /* tclHistory.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclHistory.c; sourceTree = "<group>"; }; + F96D3EF808F272A7004A47F5 /* tclIndexObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIndexObj.c; sourceTree = "<group>"; }; + F96D3EF908F272A7004A47F5 /* tclInt.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclInt.decls; sourceTree = "<group>"; }; + F96D3EFA08F272A7004A47F5 /* tclInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclInt.h; sourceTree = "<group>"; }; + F96D3EFB08F272A7004A47F5 /* tclIntDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclIntDecls.h; sourceTree = "<group>"; }; + F96D3EFC08F272A7004A47F5 /* tclInterp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclInterp.c; sourceTree = "<group>"; }; + F96D3EFD08F272A7004A47F5 /* tclIntPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclIntPlatDecls.h; sourceTree = "<group>"; }; + F96D3EFE08F272A7004A47F5 /* tclIO.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIO.c; sourceTree = "<group>"; }; + F96D3EFF08F272A7004A47F5 /* tclIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclIO.h; sourceTree = "<group>"; }; + F96D3F0008F272A7004A47F5 /* tclIOCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOCmd.c; sourceTree = "<group>"; }; + F96D3F0108F272A7004A47F5 /* tclIOGT.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOGT.c; sourceTree = "<group>"; }; + F96D3F0208F272A7004A47F5 /* tclIORChan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIORChan.c; sourceTree = "<group>"; }; + F96D3F0308F272A7004A47F5 /* tclIOSock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOSock.c; sourceTree = "<group>"; }; + F96D3F0408F272A7004A47F5 /* tclIOUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclIOUtil.c; sourceTree = "<group>"; }; + F96D3F0508F272A7004A47F5 /* tclLink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLink.c; sourceTree = "<group>"; }; + F96D3F0608F272A7004A47F5 /* tclListObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclListObj.c; sourceTree = "<group>"; }; + F96D3F0708F272A7004A47F5 /* tclLiteral.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLiteral.c; sourceTree = "<group>"; }; + F96D3F0808F272A7004A47F5 /* tclLoad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoad.c; sourceTree = "<group>"; }; + F96D3F0908F272A7004A47F5 /* tclLoadNone.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadNone.c; sourceTree = "<group>"; }; + F96D3F0A08F272A7004A47F5 /* tclMain.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMain.c; sourceTree = "<group>"; }; + F96D3F0B08F272A7004A47F5 /* tclNamesp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclNamesp.c; sourceTree = "<group>"; }; + F96D3F0C08F272A7004A47F5 /* tclNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclNotify.c; sourceTree = "<group>"; }; + F96D3F0D08F272A7004A47F5 /* tclObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclObj.c; sourceTree = "<group>"; }; + F96D3F0E08F272A7004A47F5 /* tclPanic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPanic.c; sourceTree = "<group>"; }; + F96D3F0F08F272A7004A47F5 /* tclParse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclParse.c; sourceTree = "<group>"; }; + F96D3F1108F272A7004A47F5 /* tclPathObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPathObj.c; sourceTree = "<group>"; }; + F96D3F1208F272A7004A47F5 /* tclPipe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPipe.c; sourceTree = "<group>"; }; + F96D3F1308F272A7004A47F5 /* tclPkg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPkg.c; sourceTree = "<group>"; }; + F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPkgConfig.c; sourceTree = "<group>"; }; + F96D3F1508F272A7004A47F5 /* tclPlatDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclPlatDecls.h; sourceTree = "<group>"; }; + F96D3F1608F272A7004A47F5 /* tclPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclPort.h; sourceTree = "<group>"; }; + F96D3F1708F272A7004A47F5 /* tclPosixStr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPosixStr.c; sourceTree = "<group>"; }; + F96D3F1808F272A7004A47F5 /* tclPreserve.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclPreserve.c; sourceTree = "<group>"; }; + F96D3F1908F272A7004A47F5 /* tclProc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclProc.c; sourceTree = "<group>"; }; + F96D3F1A08F272A7004A47F5 /* tclRegexp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclRegexp.c; sourceTree = "<group>"; }; + F96D3F1B08F272A7004A47F5 /* tclRegexp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclRegexp.h; sourceTree = "<group>"; }; + F96D3F1C08F272A7004A47F5 /* tclResolve.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclResolve.c; sourceTree = "<group>"; }; + F96D3F1D08F272A7004A47F5 /* tclResult.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclResult.c; sourceTree = "<group>"; }; + F96D3F1E08F272A7004A47F5 /* tclScan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclScan.c; sourceTree = "<group>"; }; + F96D3F1F08F272A7004A47F5 /* tclStringObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStringObj.c; sourceTree = "<group>"; }; + F96D3F2408F272A7004A47F5 /* tclStrToD.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStrToD.c; sourceTree = "<group>"; }; + F96D3F2508F272A7004A47F5 /* tclStubInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStubInit.c; sourceTree = "<group>"; }; + F96D3F2608F272A7004A47F5 /* tclStubLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclStubLib.c; sourceTree = "<group>"; }; + F96D3F2708F272A7004A47F5 /* tclTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTest.c; sourceTree = "<group>"; }; + F96D3F2808F272A7004A47F5 /* tclTestObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTestObj.c; sourceTree = "<group>"; }; + F96D3F2908F272A7004A47F5 /* tclTestProcBodyObj.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTestProcBodyObj.c; sourceTree = "<group>"; }; + F96D3F2A08F272A7004A47F5 /* tclThread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThread.c; sourceTree = "<group>"; }; + F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadAlloc.c; sourceTree = "<group>"; }; + F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadJoin.c; sourceTree = "<group>"; }; + F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadStorage.c; sourceTree = "<group>"; }; + F96D3F2E08F272A7004A47F5 /* tclThreadTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclThreadTest.c; sourceTree = "<group>"; }; + F96D3F2F08F272A7004A47F5 /* tclTimer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTimer.c; sourceTree = "<group>"; }; + F96D3F3008F272A7004A47F5 /* tclTomMath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclTomMath.h; sourceTree = "<group>"; }; + F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTomMathInterface.c; sourceTree = "<group>"; }; + F96D3F3208F272A7004A47F5 /* tclTrace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclTrace.c; sourceTree = "<group>"; }; + F96D3F3308F272A7004A47F5 /* tclUniData.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUniData.c; sourceTree = "<group>"; }; + F96D3F3408F272A7004A47F5 /* tclUtf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUtf.c; sourceTree = "<group>"; }; + F96D3F3508F272A7004A47F5 /* tclUtil.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUtil.c; sourceTree = "<group>"; }; + F96D3F3608F272A7004A47F5 /* tclVar.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclVar.c; sourceTree = "<group>"; }; + F96D3F3708F272A7004A47F5 /* tommath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath.h; sourceTree = "<group>"; }; + F96D3F3908F272A8004A47F5 /* auto.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = auto.tcl; sourceTree = "<group>"; }; + F96D3F3A08F272A8004A47F5 /* clock.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clock.tcl; sourceTree = "<group>"; }; + F96D3F3C08F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D3F8C08F272A8004A47F5 /* history.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = history.tcl; sourceTree = "<group>"; }; + F96D3F8E08F272A8004A47F5 /* http.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = http.tcl; sourceTree = "<group>"; }; + F96D3F8F08F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D3F9108F272A8004A47F5 /* http.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = http.tcl; sourceTree = "<group>"; }; + F96D3F9208F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D3F9308F272A8004A47F5 /* init.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = init.tcl; sourceTree = "<group>"; }; + F96D3F9508F272A8004A47F5 /* msgcat.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgcat.tcl; sourceTree = "<group>"; }; + F96D3F9608F272A8004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D401808F272AA004A47F5 /* optparse.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = optparse.tcl; sourceTree = "<group>"; }; + F96D401908F272AA004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D401A08F272AA004A47F5 /* package.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = package.tcl; sourceTree = "<group>"; }; + F96D401B08F272AA004A47F5 /* parray.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parray.tcl; sourceTree = "<group>"; }; + F96D401D08F272AA004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D401E08F272AA004A47F5 /* safe.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safe.tcl; sourceTree = "<group>"; }; + F96D401F08F272AA004A47F5 /* tclIndex */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclIndex; sourceTree = "<group>"; }; + F96D402108F272AA004A47F5 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F96D402208F272AA004A47F5 /* tcltest.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tcltest.tcl; sourceTree = "<group>"; }; + F96D402308F272AA004A47F5 /* tm.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tm.tcl; sourceTree = "<group>"; }; + F96D425B08F272B2004A47F5 /* word.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = word.tcl; sourceTree = "<group>"; }; + F96D425F08F272B3004A47F5 /* bn.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = bn.pdf; sourceTree = "<group>"; }; + F96D426108F272B3004A47F5 /* bn_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_error.c; sourceTree = "<group>"; }; + F96D426208F272B3004A47F5 /* bn_fast_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_invmod.c; sourceTree = "<group>"; }; + F96D426308F272B3004A47F5 /* bn_fast_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_mp_montgomery_reduce.c; sourceTree = "<group>"; }; + F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_digs.c; sourceTree = "<group>"; }; + F96D426508F272B3004A47F5 /* bn_fast_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_mul_high_digs.c; sourceTree = "<group>"; }; + F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_fast_s_mp_sqr.c; sourceTree = "<group>"; }; + F96D426708F272B3004A47F5 /* bn_mp_2expt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_2expt.c; sourceTree = "<group>"; }; + F96D426808F272B3004A47F5 /* bn_mp_abs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_abs.c; sourceTree = "<group>"; }; + F96D426908F272B3004A47F5 /* bn_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add.c; sourceTree = "<group>"; }; + F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_add_d.c; sourceTree = "<group>"; }; + F96D426B08F272B3004A47F5 /* bn_mp_addmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_addmod.c; sourceTree = "<group>"; }; + F96D426C08F272B3004A47F5 /* bn_mp_and.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_and.c; sourceTree = "<group>"; }; + F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clamp.c; sourceTree = "<group>"; }; + F96D426E08F272B3004A47F5 /* bn_mp_clear.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear.c; sourceTree = "<group>"; }; + F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_clear_multi.c; sourceTree = "<group>"; }; + F96D427008F272B3004A47F5 /* bn_mp_cmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp.c; sourceTree = "<group>"; }; + F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_d.c; sourceTree = "<group>"; }; + F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cmp_mag.c; sourceTree = "<group>"; }; + F96D427308F272B3004A47F5 /* bn_mp_cnt_lsb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_cnt_lsb.c; sourceTree = "<group>"; }; + F96D427408F272B3004A47F5 /* bn_mp_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_copy.c; sourceTree = "<group>"; }; + F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_count_bits.c; sourceTree = "<group>"; }; + F96D427608F272B3004A47F5 /* bn_mp_div.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div.c; sourceTree = "<group>"; }; + F96D427708F272B3004A47F5 /* bn_mp_div_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2.c; sourceTree = "<group>"; }; + F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_2d.c; sourceTree = "<group>"; }; + F96D427908F272B3004A47F5 /* bn_mp_div_3.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_3.c; sourceTree = "<group>"; }; + F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_div_d.c; sourceTree = "<group>"; }; + F96D427B08F272B3004A47F5 /* bn_mp_dr_is_modulus.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_is_modulus.c; sourceTree = "<group>"; }; + F96D427C08F272B3004A47F5 /* bn_mp_dr_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_reduce.c; sourceTree = "<group>"; }; + F96D427D08F272B3004A47F5 /* bn_mp_dr_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_dr_setup.c; sourceTree = "<group>"; }; + F96D427E08F272B3004A47F5 /* bn_mp_exch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exch.c; sourceTree = "<group>"; }; + F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_expt_d.c; sourceTree = "<group>"; }; + F96D428008F272B3004A47F5 /* bn_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod.c; sourceTree = "<group>"; }; + F96D428108F272B3004A47F5 /* bn_mp_exptmod_fast.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exptmod_fast.c; sourceTree = "<group>"; }; + F96D428208F272B3004A47F5 /* bn_mp_exteuclid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_exteuclid.c; sourceTree = "<group>"; }; + F96D428308F272B3004A47F5 /* bn_mp_fread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fread.c; sourceTree = "<group>"; }; + F96D428408F272B3004A47F5 /* bn_mp_fwrite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_fwrite.c; sourceTree = "<group>"; }; + F96D428508F272B3004A47F5 /* bn_mp_gcd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_gcd.c; sourceTree = "<group>"; }; + F96D428608F272B3004A47F5 /* bn_mp_get_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_get_int.c; sourceTree = "<group>"; }; + F96D428708F272B3004A47F5 /* bn_mp_grow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_grow.c; sourceTree = "<group>"; }; + F96D428808F272B3004A47F5 /* bn_mp_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init.c; sourceTree = "<group>"; }; + F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_copy.c; sourceTree = "<group>"; }; + F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_multi.c; sourceTree = "<group>"; }; + F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set.c; sourceTree = "<group>"; }; + F96D428C08F272B3004A47F5 /* bn_mp_init_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_set_int.c; sourceTree = "<group>"; }; + F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_init_size.c; sourceTree = "<group>"; }; + F96D428E08F272B3004A47F5 /* bn_mp_invmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod.c; sourceTree = "<group>"; }; + F96D428F08F272B3004A47F5 /* bn_mp_invmod_slow.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_invmod_slow.c; sourceTree = "<group>"; }; + F96D429008F272B3004A47F5 /* bn_mp_is_square.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_is_square.c; sourceTree = "<group>"; }; + F96D429108F272B3004A47F5 /* bn_mp_jacobi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_jacobi.c; sourceTree = "<group>"; }; + F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_mul.c; sourceTree = "<group>"; }; + F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_karatsuba_sqr.c; sourceTree = "<group>"; }; + F96D429408F272B3004A47F5 /* bn_mp_lcm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lcm.c; sourceTree = "<group>"; }; + F96D429508F272B3004A47F5 /* bn_mp_lshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_lshd.c; sourceTree = "<group>"; }; + F96D429608F272B3004A47F5 /* bn_mp_mod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod.c; sourceTree = "<group>"; }; + F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_2d.c; sourceTree = "<group>"; }; + F96D429808F272B3004A47F5 /* bn_mp_mod_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mod_d.c; sourceTree = "<group>"; }; + F96D429908F272B3004A47F5 /* bn_mp_montgomery_calc_normalization.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_calc_normalization.c; sourceTree = "<group>"; }; + F96D429A08F272B3004A47F5 /* bn_mp_montgomery_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_reduce.c; sourceTree = "<group>"; }; + F96D429B08F272B3004A47F5 /* bn_mp_montgomery_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_montgomery_setup.c; sourceTree = "<group>"; }; + F96D429C08F272B3004A47F5 /* bn_mp_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul.c; sourceTree = "<group>"; }; + F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2.c; sourceTree = "<group>"; }; + F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_2d.c; sourceTree = "<group>"; }; + F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mul_d.c; sourceTree = "<group>"; }; + F96D42A008F272B3004A47F5 /* bn_mp_mulmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_mulmod.c; sourceTree = "<group>"; }; + F96D42A108F272B3004A47F5 /* bn_mp_n_root.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_n_root.c; sourceTree = "<group>"; }; + F96D42A208F272B3004A47F5 /* bn_mp_neg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_neg.c; sourceTree = "<group>"; }; + F96D42A308F272B3004A47F5 /* bn_mp_or.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_or.c; sourceTree = "<group>"; }; + F96D42A408F272B3004A47F5 /* bn_mp_prime_fermat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_fermat.c; sourceTree = "<group>"; }; + F96D42A508F272B3004A47F5 /* bn_mp_prime_is_divisible.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_divisible.c; sourceTree = "<group>"; }; + F96D42A608F272B3004A47F5 /* bn_mp_prime_is_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_is_prime.c; sourceTree = "<group>"; }; + F96D42A708F272B3004A47F5 /* bn_mp_prime_miller_rabin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_miller_rabin.c; sourceTree = "<group>"; }; + F96D42A808F272B3004A47F5 /* bn_mp_prime_next_prime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_next_prime.c; sourceTree = "<group>"; }; + F96D42A908F272B3004A47F5 /* bn_mp_prime_rabin_miller_trials.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_rabin_miller_trials.c; sourceTree = "<group>"; }; + F96D42AA08F272B3004A47F5 /* bn_mp_prime_random_ex.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_prime_random_ex.c; sourceTree = "<group>"; }; + F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_size.c; sourceTree = "<group>"; }; + F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_radix_smap.c; sourceTree = "<group>"; }; + F96D42AD08F272B3004A47F5 /* bn_mp_rand.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rand.c; sourceTree = "<group>"; }; + F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_radix.c; sourceTree = "<group>"; }; + F96D42AF08F272B3004A47F5 /* bn_mp_read_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_signed_bin.c; sourceTree = "<group>"; }; + F96D42B008F272B3004A47F5 /* bn_mp_read_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_read_unsigned_bin.c; sourceTree = "<group>"; }; + F96D42B108F272B3004A47F5 /* bn_mp_reduce.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce.c; sourceTree = "<group>"; }; + F96D42B208F272B3004A47F5 /* bn_mp_reduce_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k.c; sourceTree = "<group>"; }; + F96D42B308F272B3004A47F5 /* bn_mp_reduce_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_l.c; sourceTree = "<group>"; }; + F96D42B408F272B3004A47F5 /* bn_mp_reduce_2k_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup.c; sourceTree = "<group>"; }; + F96D42B508F272B3004A47F5 /* bn_mp_reduce_2k_setup_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_2k_setup_l.c; sourceTree = "<group>"; }; + F96D42B608F272B3004A47F5 /* bn_mp_reduce_is_2k.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k.c; sourceTree = "<group>"; }; + F96D42B708F272B3004A47F5 /* bn_mp_reduce_is_2k_l.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_is_2k_l.c; sourceTree = "<group>"; }; + F96D42B808F272B3004A47F5 /* bn_mp_reduce_setup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_reduce_setup.c; sourceTree = "<group>"; }; + F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_rshd.c; sourceTree = "<group>"; }; + F96D42BA08F272B3004A47F5 /* bn_mp_set.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set.c; sourceTree = "<group>"; }; + F96D42BB08F272B3004A47F5 /* bn_mp_set_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_set_int.c; sourceTree = "<group>"; }; + F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_shrink.c; sourceTree = "<group>"; }; + F96D42BD08F272B3004A47F5 /* bn_mp_signed_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_signed_bin_size.c; sourceTree = "<group>"; }; + F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqr.c; sourceTree = "<group>"; }; + F96D42BF08F272B3004A47F5 /* bn_mp_sqrmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrmod.c; sourceTree = "<group>"; }; + F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sqrt.c; sourceTree = "<group>"; }; + F96D42C108F272B3004A47F5 /* bn_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub.c; sourceTree = "<group>"; }; + F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_sub_d.c; sourceTree = "<group>"; }; + F96D42C308F272B3004A47F5 /* bn_mp_submod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_submod.c; sourceTree = "<group>"; }; + F96D42C408F272B3004A47F5 /* bn_mp_to_signed_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin.c; sourceTree = "<group>"; }; + F96D42C508F272B3004A47F5 /* bn_mp_to_signed_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_signed_bin_n.c; sourceTree = "<group>"; }; + F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin.c; sourceTree = "<group>"; }; + F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_to_unsigned_bin_n.c; sourceTree = "<group>"; }; + F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_mul.c; sourceTree = "<group>"; }; + F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toom_sqr.c; sourceTree = "<group>"; }; + F96D42CA08F272B3004A47F5 /* bn_mp_toradix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix.c; sourceTree = "<group>"; }; + F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_toradix_n.c; sourceTree = "<group>"; }; + F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_unsigned_bin_size.c; sourceTree = "<group>"; }; + F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_xor.c; sourceTree = "<group>"; }; + F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_mp_zero.c; sourceTree = "<group>"; }; + F96D42CF08F272B3004A47F5 /* bn_prime_tab.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_prime_tab.c; sourceTree = "<group>"; }; + F96D42D008F272B3004A47F5 /* bn_reverse.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_reverse.c; sourceTree = "<group>"; }; + F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_add.c; sourceTree = "<group>"; }; + F96D42D208F272B3004A47F5 /* bn_s_mp_exptmod.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_exptmod.c; sourceTree = "<group>"; }; + F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_digs.c; sourceTree = "<group>"; }; + F96D42D408F272B3004A47F5 /* bn_s_mp_mul_high_digs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_mul_high_digs.c; sourceTree = "<group>"; }; + F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sqr.c; sourceTree = "<group>"; }; + F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bn_s_mp_sub.c; sourceTree = "<group>"; }; + F96D42D708F272B3004A47F5 /* bncore.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bncore.c; sourceTree = "<group>"; }; + F96D42D908F272B3004A47F5 /* callgraph.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = callgraph.txt; sourceTree = "<group>"; }; + F96D42DA08F272B3004A47F5 /* changes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = changes.txt; sourceTree = "<group>"; }; + F96D42F008F272B3004A47F5 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; + F96D431D08F272B4004A47F5 /* poster.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = poster.pdf; sourceTree = "<group>"; }; + F96D432608F272B4004A47F5 /* tommath.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = tommath.pdf; sourceTree = "<group>"; }; + F96D432908F272B4004A47F5 /* tommath_class.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_class.h; sourceTree = "<group>"; }; + F96D432A08F272B4004A47F5 /* tommath_superclass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tommath_superclass.h; sourceTree = "<group>"; }; + F96D432B08F272B4004A47F5 /* license.terms */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = license.terms; sourceTree = "<group>"; }; + F96D432E08F272B5004A47F5 /* configure.ac */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure.ac; sourceTree = "<group>"; }; + F96D432F08F272B5004A47F5 /* GNUmakefile */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = GNUmakefile; sourceTree = "<group>"; }; + F96D433108F272B5004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D433208F272B5004A47F5 /* Tcl-Info.plist.in */ = {isa = PBXFileReference; explicitFileType = text.plist; fileEncoding = 4; path = "Tcl-Info.plist.in"; sourceTree = "<group>"; }; + F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMacOSXBundle.c; sourceTree = "<group>"; }; + F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMacOSXFCmd.c; sourceTree = "<group>"; }; + F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclMacOSXNotify.c; sourceTree = "<group>"; }; + F96D434308F272B5004A47F5 /* README */ = {isa = PBXFileReference; explicitFileType = text; fileEncoding = 4; path = README; sourceTree = "<group>"; }; + F96D434508F272B5004A47F5 /* all.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = all.tcl; sourceTree = "<group>"; }; + F96D434608F272B5004A47F5 /* append.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = append.test; sourceTree = "<group>"; }; + F96D434708F272B5004A47F5 /* appendComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = appendComp.test; sourceTree = "<group>"; }; + F96D434808F272B5004A47F5 /* assocd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = assocd.test; sourceTree = "<group>"; }; + F96D434908F272B5004A47F5 /* async.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = async.test; sourceTree = "<group>"; }; + F96D434A08F272B5004A47F5 /* autoMkindex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = autoMkindex.test; sourceTree = "<group>"; }; + F96D434B08F272B5004A47F5 /* basic.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = basic.test; sourceTree = "<group>"; }; + F96D434C08F272B5004A47F5 /* binary.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = binary.test; sourceTree = "<group>"; }; + F96D434D08F272B5004A47F5 /* case.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = case.test; sourceTree = "<group>"; }; + F96D434E08F272B5004A47F5 /* chan.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = chan.test; sourceTree = "<group>"; }; + F96D434F08F272B5004A47F5 /* clock.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = clock.test; sourceTree = "<group>"; }; + F96D435008F272B5004A47F5 /* cmdAH.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdAH.test; sourceTree = "<group>"; }; + F96D435108F272B5004A47F5 /* cmdIL.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdIL.test; sourceTree = "<group>"; }; + F96D435208F272B5004A47F5 /* cmdInfo.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdInfo.test; sourceTree = "<group>"; }; + F96D435308F272B5004A47F5 /* cmdMZ.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = cmdMZ.test; sourceTree = "<group>"; }; + F96D435408F272B5004A47F5 /* compExpr-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "compExpr-old.test"; sourceTree = "<group>"; }; + F96D435508F272B5004A47F5 /* compExpr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = compExpr.test; sourceTree = "<group>"; }; + F96D435608F272B5004A47F5 /* compile.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = compile.test; sourceTree = "<group>"; }; + F96D435708F272B5004A47F5 /* concat.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = concat.test; sourceTree = "<group>"; }; + F96D435808F272B5004A47F5 /* config.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = config.test; sourceTree = "<group>"; }; + F96D435908F272B5004A47F5 /* dcall.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dcall.test; sourceTree = "<group>"; }; + F96D435A08F272B5004A47F5 /* dict.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dict.test; sourceTree = "<group>"; }; + F96D435C08F272B5004A47F5 /* dstring.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = dstring.test; sourceTree = "<group>"; }; + F96D435E08F272B5004A47F5 /* encoding.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = encoding.test; sourceTree = "<group>"; }; + F96D435F08F272B5004A47F5 /* env.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = env.test; sourceTree = "<group>"; }; + F96D436008F272B5004A47F5 /* error.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = error.test; sourceTree = "<group>"; }; + F96D436108F272B5004A47F5 /* eval.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = eval.test; sourceTree = "<group>"; }; + F96D436208F272B5004A47F5 /* event.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = event.test; sourceTree = "<group>"; }; + F96D436308F272B5004A47F5 /* exec.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = exec.test; sourceTree = "<group>"; }; + F96D436408F272B5004A47F5 /* execute.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = execute.test; sourceTree = "<group>"; }; + F96D436508F272B5004A47F5 /* expr-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "expr-old.test"; sourceTree = "<group>"; }; + F96D436608F272B5004A47F5 /* expr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = expr.test; sourceTree = "<group>"; }; + F96D436708F272B6004A47F5 /* fCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fCmd.test; sourceTree = "<group>"; }; + F96D436808F272B6004A47F5 /* fileName.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fileName.test; sourceTree = "<group>"; }; + F96D436908F272B6004A47F5 /* fileSystem.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fileSystem.test; sourceTree = "<group>"; }; + F96D436A08F272B6004A47F5 /* for-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "for-old.test"; sourceTree = "<group>"; }; + F96D436B08F272B6004A47F5 /* for.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = for.test; sourceTree = "<group>"; }; + F96D436C08F272B6004A47F5 /* foreach.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = foreach.test; sourceTree = "<group>"; }; + F96D436D08F272B6004A47F5 /* format.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = format.test; sourceTree = "<group>"; }; + F96D436E08F272B6004A47F5 /* get.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = get.test; sourceTree = "<group>"; }; + F96D436F08F272B6004A47F5 /* history.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = history.test; sourceTree = "<group>"; }; + F96D437008F272B6004A47F5 /* http.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = http.test; sourceTree = "<group>"; }; + F96D437108F272B6004A47F5 /* httpd */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = httpd; sourceTree = "<group>"; }; + F96D437208F272B6004A47F5 /* httpold.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = httpold.test; sourceTree = "<group>"; }; + F96D437308F272B6004A47F5 /* if-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "if-old.test"; sourceTree = "<group>"; }; + F96D437408F272B6004A47F5 /* if.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = if.test; sourceTree = "<group>"; }; + F96D437508F272B6004A47F5 /* incr-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "incr-old.test"; sourceTree = "<group>"; }; + F96D437608F272B6004A47F5 /* incr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = incr.test; sourceTree = "<group>"; }; + F96D437708F272B6004A47F5 /* indexObj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = indexObj.test; sourceTree = "<group>"; }; + F96D437808F272B6004A47F5 /* info.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = info.test; sourceTree = "<group>"; }; + F96D437908F272B6004A47F5 /* init.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = init.test; sourceTree = "<group>"; }; + F96D437A08F272B6004A47F5 /* interp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = interp.test; sourceTree = "<group>"; }; + F96D437B08F272B6004A47F5 /* io.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = io.test; sourceTree = "<group>"; }; + F96D437C08F272B6004A47F5 /* ioCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ioCmd.test; sourceTree = "<group>"; }; + F96D437D08F272B6004A47F5 /* iogt.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = iogt.test; sourceTree = "<group>"; }; + F96D437E08F272B6004A47F5 /* ioUtil.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = ioUtil.test; sourceTree = "<group>"; }; + F96D437F08F272B6004A47F5 /* join.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = join.test; sourceTree = "<group>"; }; + F96D438008F272B6004A47F5 /* lindex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lindex.test; sourceTree = "<group>"; }; + F96D438108F272B6004A47F5 /* link.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = link.test; sourceTree = "<group>"; }; + F96D438208F272B6004A47F5 /* linsert.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = linsert.test; sourceTree = "<group>"; }; + F96D438308F272B6004A47F5 /* list.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = list.test; sourceTree = "<group>"; }; + F96D438408F272B6004A47F5 /* listObj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = listObj.test; sourceTree = "<group>"; }; + F96D438508F272B6004A47F5 /* llength.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = llength.test; sourceTree = "<group>"; }; + F96D438608F272B6004A47F5 /* load.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = load.test; sourceTree = "<group>"; }; + F96D438708F272B6004A47F5 /* lrange.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lrange.test; sourceTree = "<group>"; }; + F96D438808F272B6004A47F5 /* lrepeat.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lrepeat.test; sourceTree = "<group>"; }; + F96D438908F272B6004A47F5 /* lreplace.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lreplace.test; sourceTree = "<group>"; }; + F96D438A08F272B6004A47F5 /* lsearch.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lsearch.test; sourceTree = "<group>"; }; + F96D438B08F272B6004A47F5 /* lset.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lset.test; sourceTree = "<group>"; }; + F96D438C08F272B6004A47F5 /* lsetComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = lsetComp.test; sourceTree = "<group>"; }; + F96D438D08F272B6004A47F5 /* macOSXFCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = macOSXFCmd.test; sourceTree = "<group>"; }; + F96D438E08F272B6004A47F5 /* main.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = main.test; sourceTree = "<group>"; }; + F96D438F08F272B6004A47F5 /* misc.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = misc.test; sourceTree = "<group>"; }; + F96D439008F272B6004A47F5 /* msgcat.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = msgcat.test; sourceTree = "<group>"; }; + F96D439108F272B6004A47F5 /* namespace-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "namespace-old.test"; sourceTree = "<group>"; }; + F96D439208F272B7004A47F5 /* namespace.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = namespace.test; sourceTree = "<group>"; }; + F96D439308F272B7004A47F5 /* notify.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = notify.test; sourceTree = "<group>"; }; + F96D439408F272B7004A47F5 /* obj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = obj.test; sourceTree = "<group>"; }; + F96D439508F272B7004A47F5 /* opt.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = opt.test; sourceTree = "<group>"; }; + F96D439608F272B7004A47F5 /* package.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = package.test; sourceTree = "<group>"; }; + F96D439708F272B7004A47F5 /* parse.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parse.test; sourceTree = "<group>"; }; + F96D439808F272B7004A47F5 /* parseExpr.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parseExpr.test; sourceTree = "<group>"; }; + F96D439908F272B7004A47F5 /* parseOld.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = parseOld.test; sourceTree = "<group>"; }; + F96D439A08F272B7004A47F5 /* pid.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pid.test; sourceTree = "<group>"; }; + F96D439B08F272B7004A47F5 /* pkg.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkg.test; sourceTree = "<group>"; }; + F96D439C08F272B7004A47F5 /* pkgMkIndex.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgMkIndex.test; sourceTree = "<group>"; }; + F96D439D08F272B7004A47F5 /* platform.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = platform.test; sourceTree = "<group>"; }; + F96D439E08F272B7004A47F5 /* proc-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "proc-old.test"; sourceTree = "<group>"; }; + F96D439F08F272B7004A47F5 /* proc.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = proc.test; sourceTree = "<group>"; }; + F96D43A008F272B7004A47F5 /* pwd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pwd.test; sourceTree = "<group>"; }; + F96D43A108F272B7004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D43A208F272B7004A47F5 /* reg.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = reg.test; sourceTree = "<group>"; }; + F96D43A308F272B7004A47F5 /* regexp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = regexp.test; sourceTree = "<group>"; }; + F96D43A408F272B7004A47F5 /* regexpComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = regexpComp.test; sourceTree = "<group>"; }; + F96D43A508F272B7004A47F5 /* registry.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = registry.test; sourceTree = "<group>"; }; + F96D43A608F272B7004A47F5 /* remote.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = remote.tcl; sourceTree = "<group>"; }; + F96D43A708F272B7004A47F5 /* rename.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = rename.test; sourceTree = "<group>"; }; + F96D43A808F272B7004A47F5 /* result.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = result.test; sourceTree = "<group>"; }; + F96D43A908F272B7004A47F5 /* safe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = safe.test; sourceTree = "<group>"; }; + F96D43AA08F272B7004A47F5 /* scan.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = scan.test; sourceTree = "<group>"; }; + F96D43AB08F272B7004A47F5 /* security.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = security.test; sourceTree = "<group>"; }; + F96D43AC08F272B7004A47F5 /* set-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "set-old.test"; sourceTree = "<group>"; }; + F96D43AD08F272B7004A47F5 /* set.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = set.test; sourceTree = "<group>"; }; + F96D43AE08F272B7004A47F5 /* socket.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = socket.test; sourceTree = "<group>"; }; + F96D43AF08F272B7004A47F5 /* source.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = source.test; sourceTree = "<group>"; }; + F96D43B008F272B7004A47F5 /* split.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = split.test; sourceTree = "<group>"; }; + F96D43B108F272B7004A47F5 /* stack.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = stack.test; sourceTree = "<group>"; }; + F96D43B208F272B7004A47F5 /* string.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = string.test; sourceTree = "<group>"; }; + F96D43B308F272B7004A47F5 /* stringComp.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = stringComp.test; sourceTree = "<group>"; }; + F96D43B408F272B7004A47F5 /* stringObj.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = stringObj.test; sourceTree = "<group>"; }; + F96D43B508F272B7004A47F5 /* subst.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = subst.test; sourceTree = "<group>"; }; + F96D43B608F272B7004A47F5 /* switch.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = switch.test; sourceTree = "<group>"; }; + F96D43B708F272B7004A47F5 /* tcltest.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tcltest.test; sourceTree = "<group>"; }; + F96D43B808F272B7004A47F5 /* thread.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = thread.test; sourceTree = "<group>"; }; + F96D43B908F272B7004A47F5 /* timer.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = timer.test; sourceTree = "<group>"; }; + F96D43BA08F272B7004A47F5 /* tm.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tm.test; sourceTree = "<group>"; }; + F96D43BB08F272B7004A47F5 /* trace.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = trace.test; sourceTree = "<group>"; }; + F96D43BC08F272B7004A47F5 /* unixFCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixFCmd.test; sourceTree = "<group>"; }; + F96D43BD08F272B7004A47F5 /* unixFile.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixFile.test; sourceTree = "<group>"; }; + F96D43BE08F272B7004A47F5 /* unixInit.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixInit.test; sourceTree = "<group>"; }; + F96D43BF08F272B7004A47F5 /* unixNotfy.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unixNotfy.test; sourceTree = "<group>"; }; + F96D43C008F272B7004A47F5 /* unknown.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unknown.test; sourceTree = "<group>"; }; + F96D43C108F272B7004A47F5 /* unload.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = unload.test; sourceTree = "<group>"; }; + F96D43C208F272B7004A47F5 /* uplevel.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = uplevel.test; sourceTree = "<group>"; }; + F96D43C308F272B7004A47F5 /* upvar.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = upvar.test; sourceTree = "<group>"; }; + F96D43C408F272B7004A47F5 /* utf.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = utf.test; sourceTree = "<group>"; }; + F96D43C508F272B7004A47F5 /* util.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = util.test; sourceTree = "<group>"; }; + F96D43C608F272B7004A47F5 /* var.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = var.test; sourceTree = "<group>"; }; + F96D43C708F272B7004A47F5 /* while-old.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "while-old.test"; sourceTree = "<group>"; }; + F96D43C808F272B7004A47F5 /* while.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = while.test; sourceTree = "<group>"; }; + F96D43C908F272B7004A47F5 /* winConsole.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winConsole.test; sourceTree = "<group>"; }; + F96D43CA08F272B7004A47F5 /* winDde.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winDde.test; sourceTree = "<group>"; }; + F96D43CB08F272B7004A47F5 /* winFCmd.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winFCmd.test; sourceTree = "<group>"; }; + F96D43CC08F272B7004A47F5 /* winFile.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winFile.test; sourceTree = "<group>"; }; + F96D43CD08F272B7004A47F5 /* winNotify.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winNotify.test; sourceTree = "<group>"; }; + F96D43CE08F272B7004A47F5 /* winPipe.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winPipe.test; sourceTree = "<group>"; }; + F96D43CF08F272B7004A47F5 /* winTime.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = winTime.test; sourceTree = "<group>"; }; + F96D43D108F272B8004A47F5 /* checkLibraryDoc.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = checkLibraryDoc.tcl; sourceTree = "<group>"; }; + F96D43D208F272B8004A47F5 /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F96D43D308F272B8004A47F5 /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F96D442208F272B8004A47F5 /* eolFix.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = eolFix.tcl; sourceTree = "<group>"; }; + F96D442408F272B8004A47F5 /* fix_tommath_h.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = fix_tommath_h.tcl; sourceTree = "<group>"; }; + F96D442508F272B8004A47F5 /* genStubs.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = genStubs.tcl; sourceTree = "<group>"; }; + F96D442708F272B8004A47F5 /* index.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = index.tcl; sourceTree = "<group>"; }; + F96D442808F272B8004A47F5 /* installData.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = installData.tcl; sourceTree = "<group>"; }; + F96D442908F272B8004A47F5 /* loadICU.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = loadICU.tcl; sourceTree = "<group>"; }; + F96D442A08F272B8004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D442B08F272B8004A47F5 /* makeTestCases.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = makeTestCases.tcl; sourceTree = "<group>"; }; + F96D442C08F272B8004A47F5 /* man2help.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2help.tcl; sourceTree = "<group>"; }; + F96D442D08F272B8004A47F5 /* man2help2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2help2.tcl; sourceTree = "<group>"; }; + F96D442E08F272B8004A47F5 /* man2html.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2html.tcl; sourceTree = "<group>"; }; + F96D442F08F272B8004A47F5 /* man2html1.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2html1.tcl; sourceTree = "<group>"; }; + F96D443008F272B8004A47F5 /* man2html2.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = man2html2.tcl; sourceTree = "<group>"; }; + F96D443108F272B8004A47F5 /* man2tcl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = man2tcl.c; sourceTree = "<group>"; }; + F96D443208F272B8004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D443308F272B8004A47F5 /* regexpTestLib.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = regexpTestLib.tcl; sourceTree = "<group>"; }; + F96D443408F272B8004A47F5 /* str2c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = str2c; sourceTree = "<group>"; }; + F96D443508F272B8004A47F5 /* tcl.hpj.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.hpj.in; sourceTree = "<group>"; }; + F96D443608F272B8004A47F5 /* tcl.wse.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.wse.in; sourceTree = "<group>"; }; + F96D443708F272B9004A47F5 /* tclmin.wse */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tclmin.wse; sourceTree = "<group>"; }; + F96D443908F272B9004A47F5 /* tcltk-man2html.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = "tcltk-man2html.tcl"; sourceTree = "<group>"; }; + F96D443A08F272B9004A47F5 /* tclZIC.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclZIC.tcl; sourceTree = "<group>"; }; + F96D443B08F272B9004A47F5 /* uniClass.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = uniClass.tcl; sourceTree = "<group>"; }; + F96D443C08F272B9004A47F5 /* uniParse.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = uniParse.tcl; sourceTree = "<group>"; }; + F96D444008F272B9004A47F5 /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F96D444108F272B9004A47F5 /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F96D444208F272B9004A47F5 /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F96D444408F272B9004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D444508F272B9004A47F5 /* pkga.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkga.c; sourceTree = "<group>"; }; + F96D444608F272B9004A47F5 /* pkgb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgb.c; sourceTree = "<group>"; }; + F96D444708F272B9004A47F5 /* pkgc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgc.c; sourceTree = "<group>"; }; + F96D444808F272B9004A47F5 /* pkgd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgd.c; sourceTree = "<group>"; }; + F96D444908F272B9004A47F5 /* pkge.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkge.c; sourceTree = "<group>"; }; + F96D444B08F272B9004A47F5 /* pkgua.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = pkgua.c; sourceTree = "<group>"; }; + F96D444C08F272B9004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D444D08F272B9004A47F5 /* install-sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "install-sh"; sourceTree = "<group>"; }; + F96D444E08F272B9004A47F5 /* installManPage */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = installManPage; sourceTree = "<group>"; }; + F96D444F08F272B9004A47F5 /* ldAix */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = ldAix; sourceTree = "<group>"; }; + F96D445008F272B9004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D445208F272B9004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D445308F272B9004A47F5 /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F96D445408F272B9004A47F5 /* tcl.spec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.spec; sourceTree = "<group>"; }; + F96D445508F272B9004A47F5 /* tclAppInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAppInit.c; sourceTree = "<group>"; }; + F96D445608F272B9004A47F5 /* tclConfig.h.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 4; path = tclConfig.h.in; sourceTree = "<group>"; }; + F96D445708F272B9004A47F5 /* tclConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tclConfig.sh.in; sourceTree = "<group>"; }; + F96D445808F272B9004A47F5 /* tclLoadAix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadAix.c; sourceTree = "<group>"; }; + F96D445908F272B9004A47F5 /* tclLoadDl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadDl.c; sourceTree = "<group>"; }; + F96D445B08F272B9004A47F5 /* tclLoadDyld.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadDyld.c; sourceTree = "<group>"; }; + F96D445C08F272B9004A47F5 /* tclLoadNext.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadNext.c; sourceTree = "<group>"; }; + F96D445D08F272B9004A47F5 /* tclLoadOSF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadOSF.c; sourceTree = "<group>"; }; + F96D445E08F272B9004A47F5 /* tclLoadShl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclLoadShl.c; sourceTree = "<group>"; }; + F96D445F08F272B9004A47F5 /* tclUnixChan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixChan.c; sourceTree = "<group>"; }; + F96D446008F272B9004A47F5 /* tclUnixEvent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixEvent.c; sourceTree = "<group>"; }; + F96D446108F272B9004A47F5 /* tclUnixFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixFCmd.c; sourceTree = "<group>"; }; + F96D446208F272B9004A47F5 /* tclUnixFile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixFile.c; sourceTree = "<group>"; }; + F96D446308F272B9004A47F5 /* tclUnixInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixInit.c; sourceTree = "<group>"; }; + F96D446408F272B9004A47F5 /* tclUnixNotfy.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixNotfy.c; sourceTree = "<group>"; }; + F96D446508F272B9004A47F5 /* tclUnixPipe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixPipe.c; sourceTree = "<group>"; }; + F96D446608F272B9004A47F5 /* tclUnixPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclUnixPort.h; sourceTree = "<group>"; }; + F96D446708F272B9004A47F5 /* tclUnixSock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixSock.c; sourceTree = "<group>"; }; + F96D446808F272B9004A47F5 /* tclUnixTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixTest.c; sourceTree = "<group>"; }; + F96D446908F272B9004A47F5 /* tclUnixThrd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixThrd.c; sourceTree = "<group>"; }; + F96D446A08F272B9004A47F5 /* tclUnixThrd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclUnixThrd.h; sourceTree = "<group>"; }; + F96D446B08F272B9004A47F5 /* tclUnixTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixTime.c; sourceTree = "<group>"; }; + F96D446C08F272B9004A47F5 /* tclXtNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclXtNotify.c; sourceTree = "<group>"; }; + F96D446D08F272B9004A47F5 /* tclXtTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclXtTest.c; sourceTree = "<group>"; }; + F96D447008F272BA004A47F5 /* aclocal.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = aclocal.m4; sourceTree = "<group>"; }; + F96D447108F272BA004A47F5 /* buildall.vc.bat */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = buildall.vc.bat; sourceTree = "<group>"; }; + F96D447208F272BA004A47F5 /* cat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cat.c; sourceTree = "<group>"; }; + F96D447308F272BA004A47F5 /* coffbase.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = coffbase.txt; sourceTree = "<group>"; }; + F96D447408F272BA004A47F5 /* configure */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = configure; sourceTree = "<group>"; }; + F96D447508F272BA004A47F5 /* configure.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = configure.in; sourceTree = "<group>"; }; + F96D447608F272BA004A47F5 /* makefile.bc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.bc; sourceTree = "<group>"; }; + F96D447708F272BA004A47F5 /* Makefile.in */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = Makefile.in; sourceTree = "<group>"; }; + F96D447808F272BA004A47F5 /* makefile.vc */ = {isa = PBXFileReference; explicitFileType = sourcecode.make; fileEncoding = 4; path = makefile.vc; sourceTree = "<group>"; }; + F96D447908F272BA004A47F5 /* nmakehlp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nmakehlp.c; sourceTree = "<group>"; }; + F96D447A08F272BA004A47F5 /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = "<group>"; }; + F96D447C08F272BA004A47F5 /* rules.vc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = rules.vc; sourceTree = "<group>"; }; + F96D447D08F272BA004A47F5 /* stub16.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = stub16.c; sourceTree = "<group>"; }; + F96D447E08F272BA004A47F5 /* tcl.dsp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.dsp; sourceTree = "<group>"; }; + F96D447F08F272BA004A47F5 /* tcl.dsw */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.dsw; sourceTree = "<group>"; }; + F96D448008F272BA004A47F5 /* tcl.hpj.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.hpj.in; sourceTree = "<group>"; }; + F96D448108F272BA004A47F5 /* tcl.m4 */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tcl.m4; sourceTree = "<group>"; }; + F96D448208F272BA004A47F5 /* tcl.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tcl.rc; sourceTree = "<group>"; }; + F96D448308F272BA004A47F5 /* tclAppInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclAppInit.c; sourceTree = "<group>"; }; + F96D448408F272BA004A47F5 /* tclConfig.sh.in */ = {isa = PBXFileReference; explicitFileType = text.script.sh; fileEncoding = 4; path = tclConfig.sh.in; sourceTree = "<group>"; }; + F96D448608F272BA004A47F5 /* tclsh.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = tclsh.rc; sourceTree = "<group>"; }; + F96D448708F272BA004A47F5 /* tclWin32Dll.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWin32Dll.c; sourceTree = "<group>"; }; + F96D448808F272BA004A47F5 /* tclWinChan.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinChan.c; sourceTree = "<group>"; }; + F96D448908F272BA004A47F5 /* tclWinConsole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinConsole.c; sourceTree = "<group>"; }; + F96D448A08F272BA004A47F5 /* tclWinDde.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinDde.c; sourceTree = "<group>"; }; + F96D448B08F272BA004A47F5 /* tclWinError.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinError.c; sourceTree = "<group>"; }; + F96D448C08F272BA004A47F5 /* tclWinFCmd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinFCmd.c; sourceTree = "<group>"; }; + F96D448D08F272BA004A47F5 /* tclWinFile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinFile.c; sourceTree = "<group>"; }; + F96D448E08F272BA004A47F5 /* tclWinInit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinInit.c; sourceTree = "<group>"; }; + F96D448F08F272BA004A47F5 /* tclWinInt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclWinInt.h; sourceTree = "<group>"; }; + F96D449008F272BA004A47F5 /* tclWinLoad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinLoad.c; sourceTree = "<group>"; }; + F96D449108F272BA004A47F5 /* tclWinNotify.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinNotify.c; sourceTree = "<group>"; }; + F96D449208F272BA004A47F5 /* tclWinPipe.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinPipe.c; sourceTree = "<group>"; }; + F96D449308F272BA004A47F5 /* tclWinPort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclWinPort.h; sourceTree = "<group>"; }; + F96D449408F272BA004A47F5 /* tclWinReg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinReg.c; sourceTree = "<group>"; }; + F96D449508F272BA004A47F5 /* tclWinSerial.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinSerial.c; sourceTree = "<group>"; }; + F96D449608F272BA004A47F5 /* tclWinSock.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinSock.c; sourceTree = "<group>"; }; + F96D449708F272BA004A47F5 /* tclWinTest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinTest.c; sourceTree = "<group>"; }; + F96D449808F272BA004A47F5 /* tclWinThrd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinThrd.c; sourceTree = "<group>"; }; + F96D449908F272BA004A47F5 /* tclWinThrd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclWinThrd.h; sourceTree = "<group>"; }; + F96D449A08F272BA004A47F5 /* tclWinTime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclWinTime.c; sourceTree = "<group>"; }; + F976F6A70C325FB6005066D9 /* tkMacOSXPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tkMacOSXPrivate.h; sourceTree = "<group>"; }; + F97AE7F10B65C1E900310EA2 /* Wish-Common.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Wish-Common.xcconfig"; sourceTree = "<group>"; }; + F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Wish-Release.xcconfig"; sourceTree = "<group>"; }; + F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = "Wish-Debug.xcconfig"; sourceTree = "<group>"; }; + F9903CAF094FAADA004613E9 /* tclTomMath.decls */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = tclTomMath.decls; sourceTree = "<group>"; }; + F9903CB0094FAADA004613E9 /* tclTomMathDecls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tclTomMathDecls.h; sourceTree = "<group>"; }; + F9A3082D08F2D4AB00BAE1AB /* Tk.framework */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Tk.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F9A3084B08F2D4CE00BAE1AB /* Wish.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Wish.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F9A3084E08F2D4F400BAE1AB /* Tcl.framework */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.framework; path = Tcl.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F9A493240CEBF38300B78AE2 /* chanio.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = chanio.test; sourceTree = "<group>"; }; + F9C9CBFF0E84059800E00935 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; + F9D1360A0CDC252C00DBE0B5 /* mclist.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = mclist.tcl; sourceTree = "<group>"; }; + F9ECB1120B26521500A28025 /* pkgIndex.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = pkgIndex.tcl; sourceTree = "<group>"; }; + F9ECB1130B26521500A28025 /* platform.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = platform.tcl; sourceTree = "<group>"; }; + F9ECB1140B26521500A28025 /* shell.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = shell.tcl; sourceTree = "<group>"; }; + F9ECB1CA0B2652D300A28025 /* apply.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = apply.test; sourceTree = "<group>"; }; + F9ECB1CB0B26534C00A28025 /* mathop.test */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; path = mathop.test; sourceTree = "<group>"; }; + F9ECB1E10B26543C00A28025 /* platform_shell.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = platform_shell.n; sourceTree = "<group>"; }; + F9ECB1E20B26543C00A28025 /* platform.n */ = {isa = PBXFileReference; explicitFileType = text.man; fileEncoding = 4; path = platform.n; sourceTree = "<group>"; }; + F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.dtrace; path = tclDTrace.d; sourceTree = "<group>"; }; + F9F4EFDC0CC7B3CA00378A27 /* ttkpane.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; languageSpecificationIdentifier = shell; path = ttkpane.tcl; sourceTree = "<group>"; }; + F9F4EFDD0CC7B3CB00378A27 /* ttkmenu.tcl */ = {isa = PBXFileReference; explicitFileType = text.script; fileEncoding = 4; languageSpecificationIdentifier = shell; path = ttkmenu.tcl; sourceTree = "<group>"; }; + F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tclUnixCompat.c; sourceTree = "<group>"; }; + F9FD31F40CC1AD070073837D /* tktest-X11 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "tktest-X11"; sourceTree = BUILT_PRODUCTS_DIR; }; + F9FD32140CC1AF170073837D /* libX11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libX11.dylib; path = /usr/X11R6/lib/libX11.dylib; sourceTree = "<absolute>"; }; + F9FD32150CC1AF170073837D /* libXext.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libXext.dylib; path = /usr/X11R6/lib/libXext.dylib; sourceTree = "<absolute>"; }; + F9FD32160CC1AF170073837D /* libXss.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libXss.dylib; path = /usr/X11R6/lib/libXss.dylib; sourceTree = "<absolute>"; }; + F9FD34990CC1BB0D0073837D /* libfreetype.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfreetype.dylib; path = /usr/X11R6/lib/libfreetype.dylib; sourceTree = "<absolute>"; }; + F9FD349A0CC1BB0D0073837D /* libXft.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libXft.dylib; path = /usr/X11R6/lib/libXft.dylib; sourceTree = "<absolute>"; }; + F9FD34C30CC1BBD70073837D /* libfontconfig.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libfontconfig.dylib; path = /usr/X11R6/lib/libfontconfig.dylib; sourceTree = "<absolute>"; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 8DD76FAD0486AB0100D96B5E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F966C07508F2820D005CB29B /* CoreFoundation.framework in Frameworks */, + F966C07708F2821B005CB29B /* Carbon.framework in Frameworks */, + F966C07908F28233005CB29B /* IOKit.framework in Frameworks */, + F94523A20E6FC2AC00C1D987 /* Cocoa.framework in Frameworks */, + F9C9CC000E84059800E00935 /* ApplicationServices.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F9FD31E30CC1AD070073837D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F9FD31E40CC1AD070073837D /* CoreFoundation.framework in Frameworks */, + F9FD32170CC1AF170073837D /* libX11.dylib in Frameworks */, + F9FD32180CC1AF170073837D /* libXext.dylib in Frameworks */, + F9FD32190CC1AF170073837D /* libXss.dylib in Frameworks */, + F9FD349C0CC1BB0D0073837D /* libXft.dylib in Frameworks */, + F9FD349B0CC1BB0D0073837D /* libfreetype.dylib in Frameworks */, + F9FD34C40CC1BBD70073837D /* libfontconfig.dylib in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 08FB7794FE84155DC02AAC07 /* Wish */ = { + isa = PBXGroup; + children = ( + F96D3DF708F271BE004A47F5 /* Tk Sources */, + F96D3DF608F27169004A47F5 /* Tcl Sources */, + F966C06F08F281DC005CB29B /* Frameworks */, + 1AB674ADFE9D54B511CA2CBB /* Products */, + ); + comments = "Copyright (c) 2004-2009 Daniel A. Steffen <das@users.sourceforge.net>\nCopyright 2008-2009, Apple Inc.\n\nSee the file \"license.terms\" for information on usage and redistribution of\nthis file, and for a DISCLAIMER OF ALL WARRANTIES.\n"; + name = Wish; + path = .; + sourceTree = SOURCE_ROOT; + }; + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + F9A3084B08F2D4CE00BAE1AB /* Wish.app */, + F9A3082D08F2D4AB00BAE1AB /* Tk.framework */, + F9A3084E08F2D4F400BAE1AB /* Tcl.framework */, + 8DD76FB20486AB0100D96B5E /* tktest */, + F9FD31F40CC1AD070073837D /* tktest-X11 */, + ); + includeInIndex = 0; + name = Products; + sourceTree = "<group>"; + }; + F966BA0308F27A37005CB29B /* bitmaps */ = { + isa = PBXGroup; + children = ( + F966BA0408F27A37005CB29B /* error.xbm */, + F966BA0508F27A37005CB29B /* gray12.xbm */, + F966BA0608F27A37005CB29B /* gray25.xbm */, + F966BA0708F27A37005CB29B /* gray50.xbm */, + F966BA0808F27A37005CB29B /* gray75.xbm */, + F966BA0908F27A37005CB29B /* hourglass.xbm */, + F966BA0A08F27A37005CB29B /* info.xbm */, + F966BA0B08F27A37005CB29B /* questhead.xbm */, + F966BA0C08F27A37005CB29B /* question.xbm */, + F966BA0D08F27A37005CB29B /* warning.xbm */, + ); + path = bitmaps; + sourceTree = "<group>"; + }; + F966BA1008F27A37005CB29B /* doc */ = { + isa = PBXGroup; + children = ( + F966BA1108F27A37005CB29B /* 3DBorder.3 */, + F966BA1208F27A37005CB29B /* AddOption.3 */, + F966BA1308F27A37005CB29B /* bell.n */, + F966BA1408F27A37005CB29B /* bind.n */, + F966BA1508F27A37005CB29B /* BindTable.3 */, + F966BA1608F27A37005CB29B /* bindtags.n */, + F966BA1708F27A37005CB29B /* bitmap.n */, + F966BA1808F27A37005CB29B /* button.n */, + F966BA1908F27A37005CB29B /* canvas.n */, + F966BA1A08F27A37005CB29B /* CanvPsY.3 */, + F966BA1B08F27A37005CB29B /* CanvTkwin.3 */, + F966BA1C08F27A37005CB29B /* CanvTxtInfo.3 */, + F966BA1D08F27A37005CB29B /* checkbutton.n */, + F966BA1E08F27A37005CB29B /* chooseColor.n */, + F966BA1F08F27A37005CB29B /* chooseDirectory.n */, + F966BA2008F27A37005CB29B /* Clipboard.3 */, + F966BA2108F27A37005CB29B /* clipboard.n */, + F966BA2208F27A37005CB29B /* ClrSelect.3 */, + F966BA2308F27A37005CB29B /* colors.n */, + F966BA2408F27A37005CB29B /* ConfigWidg.3 */, + F966BA2508F27A37005CB29B /* ConfigWind.3 */, + F966BA2608F27A37005CB29B /* console.n */, + F966BA2708F27A37005CB29B /* CoordToWin.3 */, + F966BA2808F27A37005CB29B /* CrtCmHdlr.3 */, + F966BA2908F27A37005CB29B /* CrtErrHdlr.3 */, + F966BA2A08F27A37005CB29B /* CrtGenHdlr.3 */, + F966BA2B08F27A37005CB29B /* CrtImgType.3 */, + F966BA2C08F27A37005CB29B /* CrtItemType.3 */, + F966BA2D08F27A37005CB29B /* CrtPhImgFmt.3 */, + F966BA2E08F27A37005CB29B /* CrtSelHdlr.3 */, + F966BA2F08F27A37005CB29B /* CrtWindow.3 */, + F966BA3008F27A37005CB29B /* cursors.n */, + F966BA3108F27A37005CB29B /* DeleteImg.3 */, + F966BA3208F27A37005CB29B /* destroy.n */, + F966BA3308F27A37005CB29B /* dialog.n */, + F966BA3408F27A37005CB29B /* DrawFocHlt.3 */, + F966BA3508F27A37005CB29B /* entry.n */, + F966BA3608F27A37005CB29B /* event.n */, + F966BA3708F27A37005CB29B /* EventHndlr.3 */, + F966BA3808F27A37005CB29B /* FindPhoto.3 */, + F966BA3908F27A37005CB29B /* focus.n */, + F966BA3A08F27A37005CB29B /* focusNext.n */, + F966BA3B08F27A37005CB29B /* font.n */, + F966BA3C08F27A37005CB29B /* FontId.3 */, + F966BA3D08F27A37005CB29B /* frame.n */, + F966BA3E08F27A37005CB29B /* FreeXId.3 */, + F966BA3F08F27A37005CB29B /* GeomReq.3 */, + F966BA4008F27A37005CB29B /* GetAnchor.3 */, + F966BA4108F27A37005CB29B /* GetBitmap.3 */, + F966BA4208F27A37005CB29B /* GetCapStyl.3 */, + F966BA4308F27A37005CB29B /* GetClrmap.3 */, + F966BA4408F27A37005CB29B /* GetColor.3 */, + F966BA4508F27A37005CB29B /* GetCursor.3 */, + F966BA4608F27A37005CB29B /* GetDash.3 */, + F966BA4708F27A37005CB29B /* GetFont.3 */, + F966BA4808F27A37005CB29B /* GetGC.3 */, + F966BA4908F27A37005CB29B /* GetHINSTANCE.3 */, + F966BA4A08F27A37005CB29B /* GetHWND.3 */, + F966BA4B08F27A37005CB29B /* GetImage.3 */, + F966BA4C08F27A37005CB29B /* GetJoinStl.3 */, + F966BA4D08F27A37005CB29B /* GetJustify.3 */, + F966BA4E08F27A37005CB29B /* getOpenFile.n */, + F966BA4F08F27A37005CB29B /* GetOption.3 */, + F966BA5008F27A38005CB29B /* GetPixels.3 */, + F966BA5108F27A38005CB29B /* GetPixmap.3 */, + F966BA5208F27A38005CB29B /* GetRelief.3 */, + F966BA5308F27A38005CB29B /* GetRootCrd.3 */, + F966BA5408F27A38005CB29B /* GetScroll.3 */, + F966BA5508F27A38005CB29B /* GetSelect.3 */, + F966BA5608F27A38005CB29B /* GetUid.3 */, + F966BA5708F27A38005CB29B /* GetVisual.3 */, + F966BA5808F27A38005CB29B /* GetVRoot.3 */, + F966BA5908F27A38005CB29B /* Grab.3 */, + F966BA5A08F27A38005CB29B /* grab.n */, + F966BA5B08F27A38005CB29B /* grid.n */, + F966BA5C08F27A38005CB29B /* HandleEvent.3 */, + F966BA5D08F27A38005CB29B /* HWNDToWindow.3 */, + F966BA5E08F27A38005CB29B /* IdToWindow.3 */, + F966BA5F08F27A38005CB29B /* image.n */, + F966BA6008F27A38005CB29B /* ImgChanged.3 */, + F966BA6108F27A38005CB29B /* Inactive.3 */, + F966BA6208F27A38005CB29B /* InternAtom.3 */, + F966BA6308F27A38005CB29B /* keysyms.n */, + F966BA6408F27A38005CB29B /* label.n */, + F966BA6508F27A38005CB29B /* labelframe.n */, + F966BA6608F27A38005CB29B /* listbox.n */, + F966BA6708F27A38005CB29B /* loadTk.n */, + F966BA6808F27A38005CB29B /* lower.n */, + F966BA6908F27A38005CB29B /* MainLoop.3 */, + F966BA6A08F27A38005CB29B /* MaintGeom.3 */, + F966BA6B08F27A38005CB29B /* MainWin.3 */, + F966BA6D08F27A38005CB29B /* ManageGeom.3 */, + F966BA6E08F27A38005CB29B /* MapWindow.3 */, + F966BA6F08F27A38005CB29B /* MeasureChar.3 */, + F966BA7008F27A38005CB29B /* menu.n */, + F966BA7108F27A38005CB29B /* menubar.n */, + F966BA7208F27A38005CB29B /* menubutton.n */, + F966BA7308F27A38005CB29B /* message.n */, + F966BA7408F27A38005CB29B /* messageBox.n */, + F966BA7508F27A38005CB29B /* MoveToplev.3 */, + F966BA7608F27A38005CB29B /* Name.3 */, + F966BA7708F27A38005CB29B /* NameOfImg.3 */, + F966BA7808F27A38005CB29B /* option.n */, + F966BA7908F27A38005CB29B /* optionMenu.n */, + F966BA7A08F27A38005CB29B /* options.n */, + F966BA7B08F27A38005CB29B /* OwnSelect.3 */, + F966BA7C08F27A38005CB29B /* pack-old.n */, + F966BA7D08F27A38005CB29B /* pack.n */, + F966BA7E08F27A38005CB29B /* palette.n */, + F966BA7F08F27A38005CB29B /* panedwindow.n */, + F966BA8008F27A38005CB29B /* ParseArgv.3 */, + F966BA8108F27A38005CB29B /* photo.n */, + F966BA8208F27A38005CB29B /* place.n */, + F966BA8308F27A38005CB29B /* popup.n */, + F966BA8408F27A38005CB29B /* QWinEvent.3 */, + F966BA8508F27A38005CB29B /* radiobutton.n */, + F966BA8608F27A38005CB29B /* raise.n */, + F966BA8708F27A38005CB29B /* Restack.3 */, + F966BA8808F27A38005CB29B /* RestrictEv.3 */, + F966BA8908F27A38005CB29B /* scale.n */, + F966BA8A08F27A38005CB29B /* scrollbar.n */, + F966BA8B08F27A38005CB29B /* selection.n */, + F966BA8C08F27A38005CB29B /* send.n */, + F966BA8D08F27A38005CB29B /* SetAppName.3 */, + F966BA8E08F27A38005CB29B /* SetCaret.3 */, + F966BA8F08F27A38005CB29B /* SetClass.3 */, + F966BA9008F27A38005CB29B /* SetClassProcs.3 */, + F966BA9108F27A38005CB29B /* SetGrid.3 */, + F966BA9208F27A38005CB29B /* SetOptions.3 */, + F966BA9308F27A38005CB29B /* SetVisual.3 */, + F966BA9408F27A38005CB29B /* spinbox.n */, + F966BA9508F27A38005CB29B /* StrictMotif.3 */, + F966BA9608F27A38005CB29B /* text.n */, + F966BA9708F27A38005CB29B /* TextLayout.3 */, + F966BA9808F27A38005CB29B /* tk.n */, + F966BA9908F27A38005CB29B /* tk4.0.ps */, + F966BA9A08F27A38005CB29B /* Tk_Init.3 */, + F966BA9B08F27A38005CB29B /* Tk_Main.3 */, + F966BA9C08F27A38005CB29B /* tkerror.n */, + F966BA9D08F27A38005CB29B /* TkInitStubs.3 */, + F966BA9E08F27A38005CB29B /* tkvars.n */, + F966BA9F08F27A38005CB29B /* tkwait.n */, + F966BAA008F27A38005CB29B /* toplevel.n */, + F968886B0AF788F6000797B5 /* ttk_button.n */, + F968886C0AF788F6000797B5 /* ttk_checkbutton.n */, + F968886D0AF788F6000797B5 /* ttk_combobox.n */, + F968886F0AF788F6000797B5 /* ttk_entry.n */, + F96888700AF788F6000797B5 /* ttk_frame.n */, + F96888710AF788F6000797B5 /* ttk_Geometry.3 */, + F96888720AF788F6000797B5 /* ttk_image.n */, + F96888730AF788F6000797B5 /* ttk_intro.n */, + F96888740AF788F6000797B5 /* ttk_label.n */, + F96888750AF788F6000797B5 /* ttk_labelframe.n */, + F96888760AF788F6000797B5 /* ttk_menubutton.n */, + F96888770AF788F6000797B5 /* ttk_notebook.n */, + F96888780AF788F6000797B5 /* ttk_panedwindow.n */, + F96888790AF788F6000797B5 /* ttk_progressbar.n */, + F968887A0AF788F6000797B5 /* ttk_radiobutton.n */, + F968887B0AF788F6000797B5 /* ttk_scrollbar.n */, + F968887C0AF788F6000797B5 /* ttk_separator.n */, + F968887D0AF788F6000797B5 /* ttk_sizegrip.n */, + F968887E0AF788F6000797B5 /* ttk_style.n */, + F968887F0AF788F6000797B5 /* ttk_Theme.3 */, + F96888800AF788F6000797B5 /* ttk_treeview.n */, + F96888810AF788F6000797B5 /* ttk_widget.n */, + F966BAA108F27A38005CB29B /* WindowId.3 */, + F966BAA208F27A38005CB29B /* winfo.n */, + F966BAA308F27A38005CB29B /* wish.1 */, + F966BAA408F27A38005CB29B /* wm.n */, + ); + path = doc; + sourceTree = "<group>"; + }; + F966BAA508F27A38005CB29B /* generic */ = { + isa = PBXGroup; + children = ( + F966BAA608F27A38005CB29B /* default.h */, + F966BAA708F27A38005CB29B /* ks_names.h */, + F966BAA808F27A38005CB29B /* prolog.ps */, + F966BAA908F27A39005CB29B /* README */, + F966BAAA08F27A39005CB29B /* tk.decls */, + F966BAAB08F27A39005CB29B /* tk.h */, + F966BAAC08F27A39005CB29B /* tk3d.c */, + F966BAAD08F27A39005CB29B /* tk3d.h */, + F966BAAE08F27A39005CB29B /* tkArgv.c */, + F966BAAF08F27A39005CB29B /* tkAtom.c */, + F966BAB008F27A39005CB29B /* tkBind.c */, + F966BAB108F27A39005CB29B /* tkBitmap.c */, + F966BAB208F27A39005CB29B /* tkButton.c */, + F966BAB308F27A39005CB29B /* tkButton.h */, + F966BAB408F27A39005CB29B /* tkCanvArc.c */, + F966BAB508F27A39005CB29B /* tkCanvas.c */, + F966BAB608F27A39005CB29B /* tkCanvas.h */, + F966BAB708F27A39005CB29B /* tkCanvBmap.c */, + F966BAB808F27A39005CB29B /* tkCanvImg.c */, + F966BAB908F27A39005CB29B /* tkCanvLine.c */, + F966BABA08F27A39005CB29B /* tkCanvPoly.c */, + F966BABB08F27A39005CB29B /* tkCanvPs.c */, + F966BABD08F27A39005CB29B /* tkCanvText.c */, + F966BABE08F27A39005CB29B /* tkCanvUtil.c */, + F966BABF08F27A39005CB29B /* tkCanvWind.c */, + F966BAC008F27A39005CB29B /* tkClipboard.c */, + F966BAC108F27A39005CB29B /* tkCmds.c */, + F966BAC208F27A39005CB29B /* tkColor.c */, + F966BAC308F27A39005CB29B /* tkColor.h */, + F966BAC408F27A39005CB29B /* tkConfig.c */, + F966BAC508F27A39005CB29B /* tkConsole.c */, + F966BAC608F27A39005CB29B /* tkCursor.c */, + F966BAC708F27A39005CB29B /* tkDecls.h */, + F966BAC808F27A39005CB29B /* tkEntry.c */, + F966BAC908F27A39005CB29B /* tkEntry.h */, + F966BACA08F27A39005CB29B /* tkError.c */, + F966BACB08F27A39005CB29B /* tkEvent.c */, + F966BACC08F27A39005CB29B /* tkFileFilter.c */, + F966BACD08F27A39005CB29B /* tkFileFilter.h */, + F966BACE08F27A39005CB29B /* tkFocus.c */, + F966BACF08F27A39005CB29B /* tkFont.c */, + F966BAD008F27A39005CB29B /* tkFont.h */, + F966BAD108F27A39005CB29B /* tkFrame.c */, + F966BAD208F27A39005CB29B /* tkGC.c */, + F966BAD308F27A39005CB29B /* tkGeometry.c */, + F966BAD408F27A39005CB29B /* tkGet.c */, + F966BAD508F27A39005CB29B /* tkGrab.c */, + F966BAD608F27A39005CB29B /* tkGrid.c */, + F966BAD708F27A39005CB29B /* tkImage.c */, + F966BAD808F27A39005CB29B /* tkImgBmap.c */, + F966BAD908F27A39005CB29B /* tkImgGIF.c */, + F966BADA08F27A39005CB29B /* tkImgPhoto.c */, + F966BADB08F27A39005CB29B /* tkImgPPM.c */, + F966BADC08F27A39005CB29B /* tkImgUtil.c */, + F966BADE08F27A39005CB29B /* tkInt.decls */, + F966BADF08F27A39005CB29B /* tkInt.h */, + F966BAE108F27A39005CB29B /* tkIntDecls.h */, + F966BAE208F27A39005CB29B /* tkIntPlatDecls.h */, + F966BAE308F27A39005CB29B /* tkIntXlibDecls.h */, + F966BAE408F27A39005CB29B /* tkListbox.c */, + F966BAE508F27A39005CB29B /* tkMacWinMenu.c */, + F966BAE608F27A39005CB29B /* tkMain.c */, + F966BAE708F27A39005CB29B /* tkMenu.c */, + F966BAE808F27A39005CB29B /* tkMenu.h */, + F966BAE908F27A39005CB29B /* tkMenubutton.c */, + F966BAEA08F27A39005CB29B /* tkMenubutton.h */, + F966BAEB08F27A39005CB29B /* tkMenuDraw.c */, + F966BAEC08F27A39005CB29B /* tkMessage.c */, + F966BAED08F27A39005CB29B /* tkObj.c */, + F966BAEE08F27A39005CB29B /* tkOldConfig.c */, + F966BAEF08F27A39005CB29B /* tkOption.c */, + F966BAF008F27A39005CB29B /* tkPack.c */, + F966BAF108F27A39005CB29B /* tkPanedWindow.c */, + F966BAF208F27A39005CB29B /* tkPlace.c */, + F966BAF308F27A39005CB29B /* tkPlatDecls.h */, + F966BAF408F27A39005CB29B /* tkPointer.c */, + F966BAF508F27A39005CB29B /* tkPort.h */, + F966BAF608F27A39005CB29B /* tkRectOval.c */, + F966BAF708F27A39005CB29B /* tkScale.c */, + F966BAF808F27A39005CB29B /* tkScale.h */, + F966BAF908F27A39005CB29B /* tkScrollbar.c */, + F966BAFA08F27A39005CB29B /* tkScrollbar.h */, + F966BAFB08F27A39005CB29B /* tkSelect.c */, + F966BAFC08F27A39005CB29B /* tkSelect.h */, + F966BAFD08F27A39005CB29B /* tkSquare.c */, + F966BAFE08F27A39005CB29B /* tkOldTest.c */, + F966BAFF08F27A39005CB29B /* tkStubInit.c */, + F966BB0008F27A39005CB29B /* tkStubLib.c */, + F966BB0108F27A39005CB29B /* tkStyle.c */, + F966BB0208F27A39005CB29B /* tkTest.c */, + F966BB0308F27A39005CB29B /* tkText.c */, + F966BB0408F27A39005CB29B /* tkText.h */, + F966BB0508F27A39005CB29B /* tkTextBTree.c */, + F966BB0608F27A39005CB29B /* tkTextDisp.c */, + F966BB0808F27A39005CB29B /* tkTextImage.c */, + F966BB0908F27A39005CB29B /* tkTextIndex.c */, + F966BB0A08F27A39005CB29B /* tkTextMark.c */, + F966BB0B08F27A39005CB29B /* tkTextTag.c */, + F966BB0C08F27A39005CB29B /* tkTextWind.c */, + F966BB0D08F27A39005CB29B /* tkTrig.c */, + F966BB0E08F27A39005CB29B /* tkUndo.c */, + F966BB0F08F27A39005CB29B /* tkUndo.h */, + F966BB1008F27A39005CB29B /* tkUtil.c */, + F966BB1108F27A39005CB29B /* tkVisual.c */, + F966BB1208F27A39005CB29B /* tkWindow.c */, + F96887DF0AF786D5000797B5 /* ttk */, + ); + path = generic; + sourceTree = "<group>"; + }; + F966BB1308F27A39005CB29B /* library */ = { + isa = PBXGroup; + children = ( + F966BB1408F27A39005CB29B /* bgerror.tcl */, + F966BB1508F27A39005CB29B /* button.tcl */, + F966BB1608F27A39005CB29B /* choosedir.tcl */, + F966BB1708F27A39005CB29B /* clrpick.tcl */, + F966BB1808F27A39005CB29B /* comdlg.tcl */, + F966BB1908F27A39005CB29B /* console.tcl */, + F966BB1A08F27A39005CB29B /* demos */, + F966BB6208F27A3A005CB29B /* dialog.tcl */, + F966BB6308F27A3A005CB29B /* entry.tcl */, + F966BB6408F27A3A005CB29B /* focus.tcl */, + F966BB7308F27A3A005CB29B /* listbox.tcl */, + F966BB7408F27A3A005CB29B /* menu.tcl */, + F966BB7508F27A3A005CB29B /* mkpsenc.tcl */, + F966BB7608F27A3A005CB29B /* msgbox.tcl */, + F966BB8608F27A3A005CB29B /* obsolete.tcl */, + F966BB8708F27A3A005CB29B /* optMenu.tcl */, + F966BB8808F27A3A005CB29B /* palette.tcl */, + F966BB8908F27A3B005CB29B /* panedwindow.tcl */, + F966BB8A08F27A3B005CB29B /* prolog.ps */, + F966BB8B08F27A3B005CB29B /* safetk.tcl */, + F966BB8C08F27A3B005CB29B /* scale.tcl */, + F966BB8D08F27A3B005CB29B /* scrlbar.tcl */, + F966BB8E08F27A3B005CB29B /* spinbox.tcl */, + F966BB8F08F27A3B005CB29B /* tclIndex */, + F966BB9008F27A3B005CB29B /* tearoff.tcl */, + F966BB9108F27A3B005CB29B /* text.tcl */, + F966BB9208F27A3B005CB29B /* tk.tcl */, + F966BB9308F27A3B005CB29B /* tkfbox.tcl */, + F96888360AF787B3000797B5 /* ttk */, + F966BB9408F27A3B005CB29B /* unsupported.tcl */, + F966BB9508F27A3B005CB29B /* xmfbox.tcl */, + ); + path = library; + sourceTree = "<group>"; + }; + F966BB1A08F27A39005CB29B /* demos */ = { + isa = PBXGroup; + children = ( + F966BB1B08F27A39005CB29B /* anilabel.tcl */, + F966BB1C08F27A39005CB29B /* aniwave.tcl */, + F966BB1D08F27A39005CB29B /* arrow.tcl */, + F966BB1E08F27A39005CB29B /* bind.tcl */, + F966BB1F08F27A39005CB29B /* bitmap.tcl */, + F966BB2008F27A39005CB29B /* browse */, + F966BB2108F27A39005CB29B /* button.tcl */, + F966BB2208F27A39005CB29B /* check.tcl */, + F966BB2308F27A39005CB29B /* clrpick.tcl */, + F966BB2408F27A39005CB29B /* colors.tcl */, + F936FCDB0CCD984600716967 /* combo.tcl */, + F966BB2508F27A39005CB29B /* cscroll.tcl */, + F966BB2608F27A39005CB29B /* ctext.tcl */, + F966BB2708F27A39005CB29B /* dialog1.tcl */, + F966BB2808F27A39005CB29B /* dialog2.tcl */, + F966BB2A08F27A39005CB29B /* entry1.tcl */, + F966BB2B08F27A39005CB29B /* entry2.tcl */, + F966BB2C08F27A39005CB29B /* entry3.tcl */, + F966BB2D08F27A39005CB29B /* filebox.tcl */, + F966BB2E08F27A39005CB29B /* floor.tcl */, + F966BB2F08F27A39005CB29B /* form.tcl */, + F966BB3008F27A39005CB29B /* goldberg.tcl */, + F966BB3108F27A39005CB29B /* hello */, + F966BB3208F27A39005CB29B /* hscale.tcl */, + F966BB3308F27A39005CB29B /* icon.tcl */, + F966BB3408F27A39005CB29B /* image1.tcl */, + F966BB3508F27A39005CB29B /* image2.tcl */, + F966BB4208F27A3A005CB29B /* items.tcl */, + F966BB4308F27A3A005CB29B /* ixset */, + F92240290D7C620F005EC715 /* knightstour.tcl */, + F966BB4408F27A3A005CB29B /* label.tcl */, + F966BB4508F27A3A005CB29B /* labelframe.tcl */, + F9D1360A0CDC252C00DBE0B5 /* mclist.tcl */, + F966BB4608F27A3A005CB29B /* menu.tcl */, + F966BB4708F27A3A005CB29B /* menubu.tcl */, + F966BB4808F27A3A005CB29B /* msgbox.tcl */, + F966BB4A08F27A3A005CB29B /* paned1.tcl */, + F966BB4B08F27A3A005CB29B /* paned2.tcl */, + F966BB4C08F27A3A005CB29B /* pendulum.tcl */, + F966BB4D08F27A3A005CB29B /* plot.tcl */, + F966BB4E08F27A3A005CB29B /* puzzle.tcl */, + F966BB4F08F27A3A005CB29B /* radio.tcl */, + F966BB5008F27A3A005CB29B /* README */, + F966BB5108F27A3A005CB29B /* rmt */, + F966BB5208F27A3A005CB29B /* rolodex */, + F966BB5308F27A3A005CB29B /* ruler.tcl */, + F966BB5408F27A3A005CB29B /* sayings.tcl */, + F966BB5508F27A3A005CB29B /* search.tcl */, + F966BB5608F27A3A005CB29B /* spin.tcl */, + F966BB5708F27A3A005CB29B /* square */, + F966BB5808F27A3A005CB29B /* states.tcl */, + F966BB5908F27A3A005CB29B /* style.tcl */, + F966BB5A08F27A3A005CB29B /* tclIndex */, + F966BB5B08F27A3A005CB29B /* tcolor */, + F966BB5C08F27A3A005CB29B /* text.tcl */, + F9099B8A0CC67D30005A9580 /* textpeer.tcl */, + F966BB5D08F27A3A005CB29B /* timer */, + F936FCD90CCD984600716967 /* toolbar.tcl */, + F936FCD80CCD984600716967 /* tree.tcl */, + F9099B8B0CC67D3E005A9580 /* ttkbut.tcl */, + F9F4EFDD0CC7B3CB00378A27 /* ttkmenu.tcl */, + F936FCDA0CCD984600716967 /* ttknote.tcl */, + F9F4EFDC0CC7B3CA00378A27 /* ttkpane.tcl */, + F936FCD70CCD984500716967 /* ttkprogress.tcl */, + F966BB5E08F27A3A005CB29B /* twind.tcl */, + F966BB5F08F27A3A005CB29B /* unicodeout.tcl */, + F966BB6008F27A3A005CB29B /* vscale.tcl */, + F966BB6108F27A3A005CB29B /* widget */, + ); + path = demos; + sourceTree = "<group>"; + }; + F966BB9708F27A3B005CB29B /* macosx */ = { + isa = PBXGroup; + children = ( + F966BBBA08F27A3B005CB29B /* configure.ac */, + F966BBBB08F27A3B005CB29B /* GNUmakefile */, + F966BBBE08F27A3B005CB29B /* README */, + F966BBC008F27A3B005CB29B /* Tk-Info.plist.in */, + F966BBC208F27A3B005CB29B /* tkMacOSX.h */, + F966BBC508F27A3B005CB29B /* tkMacOSXBitmap.c */, + F966BBC608F27A3B005CB29B /* tkMacOSXButton.c */, + F966BBC808F27A3B005CB29B /* tkMacOSXClipboard.c */, + F966BBC908F27A3B005CB29B /* tkMacOSXColor.c */, + F966BBCA08F27A3B005CB29B /* tkMacOSXConfig.c */, + F966BBCB08F27A3B005CB29B /* tkMacOSXCursor.c */, + F966BBCC08F27A3B005CB29B /* tkMacOSXCursors.h */, + F966BBCD08F27A3B005CB29B /* tkMacOSXDebug.c */, + F966BBCE08F27A3B005CB29B /* tkMacOSXDebug.h */, + F966BBCF08F27A3B005CB29B /* tkMacOSXDefault.h */, + F966BBD008F27A3B005CB29B /* tkMacOSXDialog.c */, + F966BBD108F27A3B005CB29B /* tkMacOSXDraw.c */, + F966BBD208F27A3B005CB29B /* tkMacOSXEmbed.c */, + F966BBD308F27A3B005CB29B /* tkMacOSXEntry.c */, + F966BBD408F27A3B005CB29B /* tkMacOSXEvent.c */, + F966BBD508F27A3B005CB29B /* tkMacOSXEvent.h */, + F966BBD608F27A3B005CB29B /* tkMacOSXFont.c */, + F93E5EFD09CF8711008FA367 /* tkMacOSXFont.h */, + F966BBD708F27A3B005CB29B /* tkMacOSXHLEvents.c */, + F966BBD808F27A3B005CB29B /* tkMacOSXInit.c */, + F966BBDA08F27A3B005CB29B /* tkMacOSXInt.h */, + F966BBDB08F27A3B005CB29B /* tkMacOSXKeyboard.c */, + F966BBDC08F27A3B005CB29B /* tkMacOSXKeyEvent.c */, + F966BBDD08F27A3B005CB29B /* tkMacOSXMenu.c */, + F966BBE008F27A3B005CB29B /* tkMacOSXMenubutton.c */, + F966BBE108F27A3B005CB29B /* tkMacOSXMenus.c */, + F966BBE208F27A3B005CB29B /* tkMacOSXMouseEvent.c */, + F966BBE308F27A3B005CB29B /* tkMacOSXNotify.c */, + F966BBEA08F27A3C005CB29B /* tkMacOSXPort.h */, + F976F6A70C325FB6005066D9 /* tkMacOSXPrivate.h */, + F966BBEB08F27A3C005CB29B /* tkMacOSXRegion.c */, + F966BBEC08F27A3C005CB29B /* tkMacOSXScale.c */, + F966BBED08F27A3C005CB29B /* tkMacOSXScrlbr.c */, + F966BBEE08F27A3C005CB29B /* tkMacOSXSend.c */, + F966BBEF08F27A3C005CB29B /* tkMacOSXSubwindows.c */, + F966BBF008F27A3C005CB29B /* tkMacOSXTest.c */, + F966BBF108F27A3C005CB29B /* tkMacOSXWindowEvent.c */, + F966BBF208F27A3C005CB29B /* tkMacOSXWm.c */, + F966BBF308F27A3C005CB29B /* tkMacOSXWm.h */, + F966BBF408F27A3C005CB29B /* tkMacOSXXCursors.h */, + F966BBF508F27A3C005CB29B /* tkMacOSXXStubs.c */, + F96888840AF78938000797B5 /* ttkMacOSXTheme.c */, + F95D8D4B0F1715610006B020 /* Tk.icns */, + F95D8D4C0F1715610006B020 /* Tk.tiff */, + F966BBF708F27A3C005CB29B /* Wish-Info.plist.in */, + F97AE7F10B65C1E900310EA2 /* Wish-Common.xcconfig */, + F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */, + F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */, + ); + path = macosx; + sourceTree = "<group>"; + }; + F966BC0408F27A3C005CB29B /* tests */ = { + isa = PBXGroup; + children = ( + F966BC0508F27A3C005CB29B /* all.tcl */, + F966BC0608F27A3C005CB29B /* arc.tcl */, + F966BC0708F27A3C005CB29B /* bell.test */, + F966BC0808F27A3C005CB29B /* bevel.tcl */, + F966BC0908F27A3C005CB29B /* bgerror.test */, + F966BC0A08F27A3C005CB29B /* bind.test */, + F966BC0B08F27A3C005CB29B /* bitmap.test */, + F966BC0C08F27A3C005CB29B /* border.test */, + F966BC0D08F27A3C005CB29B /* bugs.tcl */, + F966BC0E08F27A3C005CB29B /* butGeom.tcl */, + F966BC0F08F27A3C005CB29B /* butGeom2.tcl */, + F966BC1008F27A3C005CB29B /* button.test */, + F966BC1108F27A3C005CB29B /* canvas.test */, + F966BC1208F27A3C005CB29B /* canvImg.test */, + F966BC1308F27A3C005CB29B /* canvPs.test */, + F966BC1408F27A3C005CB29B /* canvPsArc.tcl */, + F966BC1508F27A3C005CB29B /* canvPsBmap.tcl */, + F966BC1608F27A3C005CB29B /* canvPsGrph.tcl */, + F966BC1708F27A3C005CB29B /* canvPsImg.tcl */, + F966BC1808F27A3C005CB29B /* canvPsText.tcl */, + F966BC1908F27A3C005CB29B /* canvRect.test */, + F966BC1A08F27A3C005CB29B /* canvText.test */, + F966BC1B08F27A3C005CB29B /* canvWind.test */, + F966BC1C08F27A3C005CB29B /* choosedir.test */, + F966BC1D08F27A3C005CB29B /* clipboard.test */, + F966BC1E08F27A3C005CB29B /* clrpick.test */, + F966BC1F08F27A3C005CB29B /* cmap.tcl */, + F966BC2008F27A3C005CB29B /* cmds.test */, + F966BC2108F27A3C005CB29B /* color.test */, + F966BC2208F27A3C005CB29B /* config.test */, + F966BC2308F27A3C005CB29B /* constraints.tcl */, + F966BC2408F27A3C005CB29B /* cursor.test */, + F966BC2508F27A3C005CB29B /* dialog.test */, + F966BC2608F27A3C005CB29B /* embed.test */, + F966BC2708F27A3C005CB29B /* entry.test */, + F966BC2808F27A3C005CB29B /* event.test */, + F966BC2908F27A3C005CB29B /* filebox.test */, + F966BC2A08F27A3C005CB29B /* focus.test */, + F966BC2B08F27A3C005CB29B /* focusTcl.test */, + F966BC2C08F27A3C005CB29B /* font.test */, + F966BC2D08F27A3C005CB29B /* frame.test */, + F966BC2E08F27A3C005CB29B /* geometry.test */, + F966BC2F08F27A3C005CB29B /* get.test */, + F966BC3008F27A3C005CB29B /* grab.test */, + F966BC3108F27A3C005CB29B /* grid.test */, + F966BC3208F27A3C005CB29B /* id.test */, + F966BC3308F27A3C005CB29B /* image.test */, + F966BC3408F27A3C005CB29B /* imgBmap.test */, + F966BC3508F27A3C005CB29B /* imgPhoto.test */, + F966BC3608F27A3C005CB29B /* imgPPM.test */, + F966BC3708F27A3C005CB29B /* listbox.test */, + F966BC3808F27A3C005CB29B /* main.test */, + F966BC3908F27A3C005CB29B /* menu.test */, + F966BC3A08F27A3C005CB29B /* menubut.test */, + F966BC3B08F27A3C005CB29B /* menuDraw.test */, + F966BC3C08F27A3C005CB29B /* message.test */, + F966BC3D08F27A3C005CB29B /* msgbox.test */, + F966BC3E08F27A3C005CB29B /* obj.test */, + F966BC3F08F27A3C005CB29B /* oldpack.test */, + F966BC4008F27A3C005CB29B /* option.file1 */, + F966BC4108F27A3C005CB29B /* option.file2 */, + F966BC4208F27A3C005CB29B /* option.test */, + F966BC4308F27A3C005CB29B /* pack.test */, + F966BC4408F27A3C005CB29B /* panedwindow.test */, + F966BC4508F27A3D005CB29B /* place.test */, + F966BC4608F27A3D005CB29B /* raise.test */, + F966BC4708F27A3D005CB29B /* README */, + F966BC4808F27A3D005CB29B /* safe.test */, + F966BC4908F27A3D005CB29B /* scale.test */, + F966BC4A08F27A3D005CB29B /* scrollbar.test */, + F966BC4B08F27A3D005CB29B /* select.test */, + F966BC4C08F27A3D005CB29B /* send.test */, + F966BC4D08F27A3D005CB29B /* spinbox.test */, + F966BC4E08F27A3D005CB29B /* text.test */, + F966BC4F08F27A3D005CB29B /* textBTree.test */, + F966BC5008F27A3D005CB29B /* textDisp.test */, + F966BC5108F27A3D005CB29B /* textImage.test */, + F966BC5208F27A3D005CB29B /* textIndex.test */, + F966BC5308F27A3D005CB29B /* textMark.test */, + F966BC5408F27A3D005CB29B /* textTag.test */, + F966BC5508F27A3D005CB29B /* textWind.test */, + F966BC5608F27A3D005CB29B /* tk.test */, + F96888530AF7880C000797B5 /* ttk */, + F966BC5708F27A3D005CB29B /* unixButton.test */, + F966BC5808F27A3D005CB29B /* unixEmbed.test */, + F966BC5908F27A3D005CB29B /* unixFont.test */, + F966BC5A08F27A3D005CB29B /* unixMenu.test */, + F966BC5B08F27A3D005CB29B /* unixSelect.test */, + F966BC5C08F27A3D005CB29B /* unixWm.test */, + F966BC5D08F27A3D005CB29B /* util.test */, + F966BC5E08F27A3D005CB29B /* visual.test */, + F966BC5F08F27A3D005CB29B /* visual_bb.test */, + F966BC6008F27A3D005CB29B /* winButton.test */, + F966BC6108F27A3D005CB29B /* winClipboard.test */, + F966BC6208F27A3D005CB29B /* winDialog.test */, + F966BC6308F27A3D005CB29B /* window.test */, + F966BC6408F27A3D005CB29B /* winfo.test */, + F966BC6508F27A3D005CB29B /* winFont.test */, + F966BC6608F27A3D005CB29B /* winMenu.test */, + F966BC6708F27A3D005CB29B /* winSend.test */, + F966BC6808F27A3D005CB29B /* winWm.test */, + F966BC6908F27A3D005CB29B /* wm.test */, + F966BC6A08F27A3D005CB29B /* xmfbox.test */, + ); + path = tests; + sourceTree = "<group>"; + }; + F966BC6B08F27A3D005CB29B /* unix */ = { + isa = PBXGroup; + children = ( + F966BC6C08F27A3D005CB29B /* aclocal.m4 */, + F966BC6D08F27A3D005CB29B /* configure */, + F966BC6E08F27A3D005CB29B /* configure.in */, + F966BC6F08F27A3D005CB29B /* install-sh */, + F966BC7008F27A3D005CB29B /* installManPage */, + F966BC7108F27A3D005CB29B /* Makefile.in */, + F966BC7208F27A3D005CB29B /* README */, + F966BC7308F27A3D005CB29B /* tcl.m4 */, + F966BC7408F27A3D005CB29B /* tk.spec */, + F966BC7508F27A3D005CB29B /* tkAppInit.c */, + F966BC7608F27A3D005CB29B /* tkConfig.h.in */, + F966BC7708F27A3D005CB29B /* tkConfig.sh.in */, + F966BC7808F27A3D005CB29B /* tkUnix.c */, + F966BC7908F27A3D005CB29B /* tkUnix3d.c */, + F966BC7A08F27A3D005CB29B /* tkUnixButton.c */, + F966BC7B08F27A3D005CB29B /* tkUnixColor.c */, + F966BC7C08F27A3D005CB29B /* tkUnixConfig.c */, + F966BC7D08F27A3D005CB29B /* tkUnixCursor.c */, + F966BC7E08F27A3D005CB29B /* tkUnixDefault.h */, + F966BC7F08F27A3D005CB29B /* tkUnixDialog.c */, + F966BC8008F27A3D005CB29B /* tkUnixDraw.c */, + F966BC8108F27A3D005CB29B /* tkUnixEmbed.c */, + F966BC8208F27A3D005CB29B /* tkUnixEvent.c */, + F966BC8308F27A3D005CB29B /* tkUnixFocus.c */, + F966BC8408F27A3D005CB29B /* tkUnixFont.c */, + F966BC8508F27A3D005CB29B /* tkUnixInit.c */, + F966BC8608F27A3D005CB29B /* tkUnixInt.h */, + F966BC8708F27A3D005CB29B /* tkUnixKey.c */, + F966BC8808F27A3D005CB29B /* tkUnixMenu.c */, + F966BC8908F27A3D005CB29B /* tkUnixMenubu.c */, + F966BC8A08F27A3D005CB29B /* tkUnixPort.h */, + F966BC8B08F27A3D005CB29B /* tkUnixRFont.c */, + F966BC8C08F27A3D005CB29B /* tkUnixScale.c */, + F966BC8D08F27A3D005CB29B /* tkUnixScrlbr.c */, + F966BC8E08F27A3D005CB29B /* tkUnixSelect.c */, + F966BC8F08F27A3D005CB29B /* tkUnixSend.c */, + F966BC9008F27A3D005CB29B /* tkUnixWm.c */, + F966BC9108F27A3D005CB29B /* tkUnixXId.c */, + ); + path = unix; + sourceTree = "<group>"; + }; + F966BC9208F27A3D005CB29B /* win */ = { + isa = PBXGroup; + children = ( + F966BC9408F27A3D005CB29B /* aclocal.m4 */, + F966BC9508F27A3D005CB29B /* buildall.vc.bat */, + F966BC9608F27A3E005CB29B /* configure */, + F966BC9708F27A3E005CB29B /* configure.in */, + F966BC9808F27A3E005CB29B /* makefile.bc */, + F966BC9908F27A3E005CB29B /* Makefile.in */, + F966BC9A08F27A3E005CB29B /* makefile.vc */, + F966BC9B08F27A3E005CB29B /* mkd.bat */, + F966BC9C08F27A3E005CB29B /* nmakehlp.c */, + F966BC9D08F27A3E005CB29B /* rc */, + F966BCF308F27A3E005CB29B /* README */, + F966BCF408F27A3E005CB29B /* rmd.bat */, + F966BCF508F27A3F005CB29B /* rules.vc */, + F966BCF608F27A3F005CB29B /* stubs.c */, + F966BCF708F27A3F005CB29B /* tcl.m4 */, + F966BCF808F27A3F005CB29B /* tkConfig.sh.in */, + F966BCF908F27A3F005CB29B /* tkWin.h */, + F966BCFA08F27A3F005CB29B /* tkWin32Dll.c */, + F966BCFB08F27A3F005CB29B /* tkWin3d.c */, + F966BCFC08F27A3F005CB29B /* tkWinButton.c */, + F966BCFD08F27A3F005CB29B /* tkWinClipboard.c */, + F966BCFE08F27A3F005CB29B /* tkWinColor.c */, + F966BCFF08F27A3F005CB29B /* tkWinConfig.c */, + F966BD0008F27A3F005CB29B /* tkWinCursor.c */, + F966BD0108F27A3F005CB29B /* tkWinDefault.h */, + F966BD0208F27A3F005CB29B /* tkWinDialog.c */, + F966BD0308F27A3F005CB29B /* tkWinDraw.c */, + F966BD0408F27A3F005CB29B /* tkWinEmbed.c */, + F966BD0508F27A3F005CB29B /* tkWinFont.c */, + F966BD0708F27A3F005CB29B /* tkWinImage.c */, + F966BD0808F27A3F005CB29B /* tkWinInit.c */, + F966BD0908F27A3F005CB29B /* tkWinInt.h */, + F966BD0A08F27A3F005CB29B /* tkWinKey.c */, + F966BD0B08F27A3F005CB29B /* tkWinMenu.c */, + F966BD0C08F27A3F005CB29B /* tkWinPixmap.c */, + F966BD0D08F27A3F005CB29B /* tkWinPointer.c */, + F966BD0E08F27A3F005CB29B /* tkWinPort.h */, + F966BD0F08F27A3F005CB29B /* tkWinRegion.c */, + F966BD1008F27A3F005CB29B /* tkWinScrlbr.c */, + F966BD1108F27A3F005CB29B /* tkWinSend.c */, + F966BD1208F27A3F005CB29B /* tkWinSendCom.c */, + F966BD1308F27A3F005CB29B /* tkWinSendCom.h */, + F966BD1408F27A3F005CB29B /* tkWinTest.c */, + F966BD1508F27A3F005CB29B /* tkWinWindow.c */, + F966BD1608F27A3F005CB29B /* tkWinWm.c */, + F966BD1708F27A3F005CB29B /* tkWinX.c */, + F96888860AF78953000797B5 /* ttkWinMonitor.c */, + F96888870AF78953000797B5 /* ttkWinTheme.c */, + F96888880AF78953000797B5 /* ttkWinXPTheme.c */, + F966BD1808F27A3F005CB29B /* winMain.c */, + ); + path = win; + sourceTree = "<group>"; + }; + F966BC9D08F27A3E005CB29B /* rc */ = { + isa = PBXGroup; + children = ( + F966BCEE08F27A3E005CB29B /* tk.rc */, + F966BCEF08F27A3E005CB29B /* tk_base.rc */, + F966BCF208F27A3E005CB29B /* wish.rc */, + ); + path = rc; + sourceTree = "<group>"; + }; + F966BD1908F27A3F005CB29B /* xlib */ = { + isa = PBXGroup; + children = ( + F966BD1A08F27A3F005CB29B /* X11 */, + F966BD2308F27A3F005CB29B /* xbytes.h */, + F966BD2408F27A3F005CB29B /* xcolors.c */, + F966BD2508F27A3F005CB29B /* xdraw.c */, + F966BD2608F27A3F005CB29B /* xgc.c */, + F966BD2708F27A3F005CB29B /* ximage.c */, + F966BD2808F27A3F005CB29B /* xutil.c */, + ); + path = xlib; + sourceTree = "<group>"; + }; + F966BD1A08F27A3F005CB29B /* X11 */ = { + isa = PBXGroup; + children = ( + F966BD1B08F27A3F005CB29B /* cursorfont.h */, + F966BD1C08F27A3F005CB29B /* keysym.h */, + F966BD1D08F27A3F005CB29B /* keysymdef.h */, + F966BD1E08F27A3F005CB29B /* X.h */, + F966BD1F08F27A3F005CB29B /* Xatom.h */, + F966BD2008F27A3F005CB29B /* Xfuncproto.h */, + F966BD2108F27A3F005CB29B /* Xlib.h */, + F966BD2208F27A3F005CB29B /* Xutil.h */, + ); + path = X11; + sourceTree = "<group>"; + }; + F966C06F08F281DC005CB29B /* Frameworks */ = { + isa = PBXGroup; + children = ( + F9C9CBFF0E84059800E00935 /* ApplicationServices.framework */, + F966C07408F2820D005CB29B /* CoreFoundation.framework */, + F966C07608F2821B005CB29B /* Carbon.framework */, + F94523A10E6FC2AC00C1D987 /* Cocoa.framework */, + F966C07808F28233005CB29B /* IOKit.framework */, + F9FD32140CC1AF170073837D /* libX11.dylib */, + F9FD32150CC1AF170073837D /* libXext.dylib */, + F9FD32160CC1AF170073837D /* libXss.dylib */, + F9FD349A0CC1BB0D0073837D /* libXft.dylib */, + F9FD34990CC1BB0D0073837D /* libfreetype.dylib */, + F9FD34C30CC1BBD70073837D /* libfontconfig.dylib */, + ); + name = Frameworks; + sourceTree = "<group>"; + }; + F96887DF0AF786D5000797B5 /* ttk */ = { + isa = PBXGroup; + children = ( + F96887E00AF786D5000797B5 /* ttk.decls */, + F96887E10AF786D5000797B5 /* ttkBlink.c */, + F96887E20AF786D5000797B5 /* ttkButton.c */, + F96887E30AF786D5000797B5 /* ttkCache.c */, + F96887E40AF786D5000797B5 /* ttkClamTheme.c */, + F96887E50AF786D5000797B5 /* ttkClassicTheme.c */, + F96887E60AF786D5000797B5 /* ttkDecls.h */, + F96887E70AF786D5000797B5 /* ttkDefaultTheme.c */, + F96887E80AF786D5000797B5 /* ttkElements.c */, + F96887E90AF786D5000797B5 /* ttkEntry.c */, + F96887EA0AF786D5000797B5 /* ttkFrame.c */, + F96887EB0AF786D5000797B5 /* ttkImage.c */, + F96887EC0AF786D5000797B5 /* ttkInit.c */, + F96887ED0AF786D5000797B5 /* ttkLabel.c */, + F96887EE0AF786D5000797B5 /* ttkLayout.c */, + F96887EF0AF786D5000797B5 /* ttkManager.c */, + F96887F00AF786D5000797B5 /* ttkManager.h */, + F96887F10AF786D5000797B5 /* ttkNotebook.c */, + F96887F20AF786D5000797B5 /* ttkPanedwindow.c */, + F96887F30AF786D5000797B5 /* ttkProgress.c */, + F96887F40AF786D5000797B5 /* ttkScale.c */, + F96887F50AF786D5000797B5 /* ttkScroll.c */, + F96887F60AF786D5000797B5 /* ttkScrollbar.c */, + F96887F70AF786D5000797B5 /* ttkSeparator.c */, + F96887F80AF786D5000797B5 /* ttkSquare.c */, + F96887F90AF786D5000797B5 /* ttkState.c */, + F96887FA0AF786D5000797B5 /* ttkStubInit.c */, + F96887FB0AF786D5000797B5 /* ttkStubLib.c */, + F96887FC0AF786D5000797B5 /* ttkTagSet.c */, + F96887FD0AF786D5000797B5 /* ttkTheme.c */, + F96887FE0AF786D5000797B5 /* ttkTheme.h */, + F96887FF0AF786D5000797B5 /* ttkThemeInt.h */, + F96888000AF786D5000797B5 /* ttkTrace.c */, + F96888010AF786D5000797B5 /* ttkTrack.c */, + F96888020AF786D5000797B5 /* ttkTreeview.c */, + F96888030AF786D5000797B5 /* ttkWidget.c */, + F96888040AF786D5000797B5 /* ttkWidget.h */, + ); + path = ttk; + sourceTree = "<group>"; + }; + F96888360AF787B3000797B5 /* ttk */ = { + isa = PBXGroup; + children = ( + F96888370AF787B3000797B5 /* altTheme.tcl */, + F96888380AF787B3000797B5 /* aquaTheme.tcl */, + F96888390AF787B3000797B5 /* button.tcl */, + F968883A0AF787B3000797B5 /* clamTheme.tcl */, + F968883B0AF787B3000797B5 /* classicTheme.tcl */, + F968883C0AF787B3000797B5 /* combobox.tcl */, + F968883D0AF787B3000797B5 /* cursors.tcl */, + F968883E0AF787B3000797B5 /* defaults.tcl */, + F96888400AF787B3000797B5 /* entry.tcl */, + F96888410AF787B3000797B5 /* fonts.tcl */, + F96888440AF787B3000797B5 /* menubutton.tcl */, + F96888450AF787B3000797B5 /* notebook.tcl */, + F96888460AF787B3000797B5 /* panedwindow.tcl */, + F96888470AF787B3000797B5 /* progress.tcl */, + F96888480AF787B3000797B5 /* scale.tcl */, + F96888490AF787B3000797B5 /* scrollbar.tcl */, + F968884A0AF787B3000797B5 /* sizegrip.tcl */, + F968884B0AF787B3000797B5 /* treeview.tcl */, + F968884C0AF787B3000797B5 /* ttk.tcl */, + F968884D0AF787B3000797B5 /* utils.tcl */, + F968884E0AF787B3000797B5 /* winTheme.tcl */, + F968884F0AF787B3000797B5 /* xpTheme.tcl */, + ); + path = ttk; + sourceTree = "<group>"; + }; + F96888530AF7880C000797B5 /* ttk */ = { + isa = PBXGroup; + children = ( + F96888540AF7880C000797B5 /* all.tcl */, + F96888560AF7880C000797B5 /* combobox.test */, + F96888570AF7880C000797B5 /* entry.test */, + F96888580AF7880C000797B5 /* image.test */, + F96888590AF7880C000797B5 /* labelframe.test */, + F968885A0AF7880C000797B5 /* layout.test */, + F968885C0AF7880C000797B5 /* notebook.test */, + F968885D0AF7880C000797B5 /* panedwindow.test */, + F968885E0AF7880C000797B5 /* progressbar.test */, + F968885F0AF7880C000797B5 /* scrollbar.test */, + F96888600AF7880C000797B5 /* treetags.test */, + F96888610AF7880C000797B5 /* treeview.test */, + F96888620AF7880C000797B5 /* ttk.test */, + F96888630AF7880C000797B5 /* validate.test */, + F962F7C60DADC26200648DB8 /* vsapi.test */, + ); + path = ttk; + sourceTree = "<group>"; + }; + F96D3DF608F27169004A47F5 /* Tcl Sources */ = { + isa = PBXGroup; + children = ( + F96D3EC908F272A7004A47F5 /* generic */, + F96D432C08F272B4004A47F5 /* macosx */, + F96D443E08F272B9004A47F5 /* unix */, + F96D425C08F272B2004A47F5 /* libtommath */, + F96D446E08F272B9004A47F5 /* win */, + F96D3F3808F272A7004A47F5 /* library */, + F96D434408F272B5004A47F5 /* tests */, + F96D3DFC08F272A4004A47F5 /* doc */, + F96D43D008F272B8004A47F5 /* tools */, + F96D3DFA08F272A4004A47F5 /* ChangeLog */, + F96D3DFB08F272A4004A47F5 /* changes */, + F96D434308F272B5004A47F5 /* README */, + F96D432B08F272B4004A47F5 /* license.terms */, + ); + name = "Tcl Sources"; + sourceTree = TCL_SRCROOT; + }; + F96D3DF708F271BE004A47F5 /* Tk Sources */ = { + isa = PBXGroup; + children = ( + F966BAA508F27A38005CB29B /* generic */, + F966BB9708F27A3B005CB29B /* macosx */, + F966BC6B08F27A3D005CB29B /* unix */, + F966BD1908F27A3F005CB29B /* xlib */, + F966BA0308F27A37005CB29B /* bitmaps */, + F966BC9208F27A3D005CB29B /* win */, + F966BB1308F27A39005CB29B /* library */, + F966BC0408F27A3C005CB29B /* tests */, + F966BA1008F27A37005CB29B /* doc */, + F966BA0E08F27A37005CB29B /* ChangeLog */, + F966BA0F08F27A37005CB29B /* changes */, + F966BC0308F27A3C005CB29B /* README */, + F966BB9608F27A3B005CB29B /* license.terms */, + ); + name = "Tk Sources"; + sourceTree = TK_SRCROOT; + }; + F96D3DFC08F272A4004A47F5 /* doc */ = { + isa = PBXGroup; + children = ( + F96D3DFD08F272A4004A47F5 /* Access.3 */, + F96D3DFE08F272A4004A47F5 /* AddErrInfo.3 */, + F96D3DFF08F272A4004A47F5 /* after.n */, + F96D3E0008F272A4004A47F5 /* Alloc.3 */, + F96D3E0108F272A4004A47F5 /* AllowExc.3 */, + F96D3E0208F272A4004A47F5 /* append.n */, + F96D3E0308F272A4004A47F5 /* AppInit.3 */, + F96D3E0408F272A5004A47F5 /* array.n */, + F96D3E0508F272A5004A47F5 /* AssocData.3 */, + F96D3E0608F272A5004A47F5 /* Async.3 */, + F96D3E0708F272A5004A47F5 /* BackgdErr.3 */, + F96D3E0808F272A5004A47F5 /* Backslash.3 */, + F96D3E0908F272A5004A47F5 /* bgerror.n */, + F96D3E0A08F272A5004A47F5 /* binary.n */, + F96D3E0B08F272A5004A47F5 /* BoolObj.3 */, + F96D3E0C08F272A5004A47F5 /* break.n */, + F96D3E0D08F272A5004A47F5 /* ByteArrObj.3 */, + F96D3E0E08F272A5004A47F5 /* CallDel.3 */, + F96D3E0F08F272A5004A47F5 /* case.n */, + F96D3E1008F272A5004A47F5 /* catch.n */, + F96D3E1108F272A5004A47F5 /* cd.n */, + F96D3E1208F272A5004A47F5 /* chan.n */, + F96D3E1308F272A5004A47F5 /* ChnlStack.3 */, + F96D3E1408F272A5004A47F5 /* clock.n */, + F96D3E1508F272A5004A47F5 /* close.n */, + F96D3E1608F272A5004A47F5 /* CmdCmplt.3 */, + F96D3E1708F272A5004A47F5 /* Concat.3 */, + F96D3E1808F272A5004A47F5 /* concat.n */, + F96D3E1908F272A5004A47F5 /* continue.n */, + F96D3E1A08F272A5004A47F5 /* CrtChannel.3 */, + F96D3E1B08F272A5004A47F5 /* CrtChnlHdlr.3 */, + F96D3E1C08F272A5004A47F5 /* CrtCloseHdlr.3 */, + F96D3E1D08F272A5004A47F5 /* CrtCommand.3 */, + F96D3E1E08F272A5004A47F5 /* CrtFileHdlr.3 */, + F96D3E1F08F272A5004A47F5 /* CrtInterp.3 */, + F96D3E2008F272A5004A47F5 /* CrtMathFnc.3 */, + F96D3E2108F272A5004A47F5 /* CrtObjCmd.3 */, + F96D3E2208F272A5004A47F5 /* CrtSlave.3 */, + F96D3E2308F272A5004A47F5 /* CrtTimerHdlr.3 */, + F96D3E2408F272A5004A47F5 /* CrtTrace.3 */, + F96D3E2508F272A5004A47F5 /* dde.n */, + F96D3E2608F272A5004A47F5 /* DetachPids.3 */, + F96D3E2708F272A5004A47F5 /* dict.n */, + F96D3E2808F272A5004A47F5 /* DictObj.3 */, + F96D3E2908F272A5004A47F5 /* DoOneEvent.3 */, + F96D3E2A08F272A5004A47F5 /* DoubleObj.3 */, + F96D3E2B08F272A5004A47F5 /* DoWhenIdle.3 */, + F96D3E2C08F272A5004A47F5 /* DString.3 */, + F96D3E2D08F272A5004A47F5 /* DumpActiveMemory.3 */, + F96D3E2E08F272A5004A47F5 /* Encoding.3 */, + F96D3E2F08F272A5004A47F5 /* encoding.n */, + F96D3E3008F272A5004A47F5 /* Ensemble.3 */, + F96D3E3108F272A5004A47F5 /* Environment.3 */, + F96D3E3208F272A5004A47F5 /* eof.n */, + F96D3E3308F272A5004A47F5 /* error.n */, + F96D3E3408F272A5004A47F5 /* Eval.3 */, + F96D3E3508F272A5004A47F5 /* eval.n */, + F96D3E3608F272A5004A47F5 /* exec.n */, + F96D3E3708F272A5004A47F5 /* Exit.3 */, + F96D3E3808F272A5004A47F5 /* exit.n */, + F96D3E3908F272A5004A47F5 /* expr.n */, + F96D3E3A08F272A5004A47F5 /* ExprLong.3 */, + F96D3E3B08F272A5004A47F5 /* ExprLongObj.3 */, + F96D3E3C08F272A5004A47F5 /* fblocked.n */, + F96D3E3D08F272A5004A47F5 /* fconfigure.n */, + F96D3E3E08F272A5004A47F5 /* fcopy.n */, + F96D3E3F08F272A5004A47F5 /* file.n */, + F96D3E4008F272A5004A47F5 /* fileevent.n */, + F96D3E4108F272A5004A47F5 /* filename.n */, + F96D3E4208F272A5004A47F5 /* FileSystem.3 */, + F96D3E4308F272A5004A47F5 /* FindExec.3 */, + F96D3E4408F272A5004A47F5 /* flush.n */, + F96D3E4508F272A5004A47F5 /* for.n */, + F96D3E4608F272A5004A47F5 /* foreach.n */, + F96D3E4708F272A5004A47F5 /* format.n */, + F96D3E4808F272A5004A47F5 /* GetCwd.3 */, + F96D3E4908F272A5004A47F5 /* GetHostName.3 */, + F96D3E4A08F272A5004A47F5 /* GetIndex.3 */, + F96D3E4B08F272A5004A47F5 /* GetInt.3 */, + F96D3E4C08F272A5004A47F5 /* GetOpnFl.3 */, + F96D3E4D08F272A5004A47F5 /* gets.n */, + F96D3E4E08F272A5004A47F5 /* GetStdChan.3 */, + F96D3E4F08F272A5004A47F5 /* GetTime.3 */, + F96D3E5008F272A5004A47F5 /* GetVersion.3 */, + F96D3E5108F272A5004A47F5 /* glob.n */, + F96D3E5208F272A6004A47F5 /* global.n */, + F96D3E5308F272A6004A47F5 /* Hash.3 */, + F96D3E5408F272A6004A47F5 /* history.n */, + F96D3E5508F272A6004A47F5 /* http.n */, + F96D3E5608F272A6004A47F5 /* if.n */, + F96D3E5708F272A6004A47F5 /* incr.n */, + F96D3E5808F272A6004A47F5 /* info.n */, + F96D3E5908F272A6004A47F5 /* Init.3 */, + F96D3E5A08F272A6004A47F5 /* InitStubs.3 */, + F96D3E5B08F272A6004A47F5 /* Interp.3 */, + F96D3E5C08F272A6004A47F5 /* interp.n */, + F96D3E5D08F272A6004A47F5 /* IntObj.3 */, + F96D3E5E08F272A6004A47F5 /* join.n */, + F96D3E5F08F272A6004A47F5 /* lappend.n */, + F96D3E6008F272A6004A47F5 /* lassign.n */, + F96D3E6108F272A6004A47F5 /* library.n */, + F96D3E6208F272A6004A47F5 /* Limit.3 */, + F96D3E6308F272A6004A47F5 /* lindex.n */, + F96D3E6408F272A6004A47F5 /* LinkVar.3 */, + F96D3E6508F272A6004A47F5 /* linsert.n */, + F96D3E6608F272A6004A47F5 /* list.n */, + F96D3E6708F272A6004A47F5 /* ListObj.3 */, + F96D3E6808F272A6004A47F5 /* llength.n */, + F96D3E6908F272A6004A47F5 /* load.n */, + F96D3E6A08F272A6004A47F5 /* lrange.n */, + F96D3E6B08F272A6004A47F5 /* lrepeat.n */, + F96D3E6C08F272A6004A47F5 /* lreplace.n */, + F96D3E6D08F272A6004A47F5 /* lsearch.n */, + F96D3E6E08F272A6004A47F5 /* lset.n */, + F96D3E6F08F272A6004A47F5 /* lsort.n */, + F96D3E7008F272A6004A47F5 /* man.macros */, + F96D3E7108F272A6004A47F5 /* mathfunc.n */, + F96D3E7208F272A6004A47F5 /* memory.n */, + F96D3E7308F272A6004A47F5 /* msgcat.n */, + F96D3E7408F272A6004A47F5 /* Namespace.3 */, + F96D3E7508F272A6004A47F5 /* namespace.n */, + F96D3E7608F272A6004A47F5 /* Notifier.3 */, + F96D3E7708F272A6004A47F5 /* Object.3 */, + F96D3E7808F272A6004A47F5 /* ObjectType.3 */, + F96D3E7908F272A6004A47F5 /* open.n */, + F96D3E7A08F272A6004A47F5 /* OpenFileChnl.3 */, + F96D3E7B08F272A6004A47F5 /* OpenTcp.3 */, + F96D3E7C08F272A6004A47F5 /* package.n */, + F96D3E7D08F272A6004A47F5 /* packagens.n */, + F96D3E7E08F272A6004A47F5 /* Panic.3 */, + F96D3E7F08F272A6004A47F5 /* ParseCmd.3 */, + F96D3E8008F272A6004A47F5 /* pid.n */, + F96D3E8108F272A6004A47F5 /* pkgMkIndex.n */, + F96D3E8208F272A6004A47F5 /* PkgRequire.3 */, + F9ECB1E10B26543C00A28025 /* platform_shell.n */, + F9ECB1E20B26543C00A28025 /* platform.n */, + F96D3E8308F272A6004A47F5 /* Preserve.3 */, + F96D3E8408F272A6004A47F5 /* PrintDbl.3 */, + F96D3E8508F272A6004A47F5 /* proc.n */, + F96D3E8608F272A6004A47F5 /* puts.n */, + F96D3E8708F272A6004A47F5 /* pwd.n */, + F96D3E8808F272A6004A47F5 /* re_syntax.n */, + F96D3E8908F272A6004A47F5 /* read.n */, + F96D3E8A08F272A6004A47F5 /* RecEvalObj.3 */, + F96D3E8B08F272A6004A47F5 /* RecordEval.3 */, + F96D3E8C08F272A6004A47F5 /* RegConfig.3 */, + F96D3E8D08F272A6004A47F5 /* RegExp.3 */, + F96D3E8E08F272A6004A47F5 /* regexp.n */, + F96D3E8F08F272A6004A47F5 /* registry.n */, + F96D3E9008F272A6004A47F5 /* regsub.n */, + F96D3E9108F272A6004A47F5 /* rename.n */, + F96D3E9208F272A6004A47F5 /* return.n */, + F96D3E9308F272A6004A47F5 /* safe.n */, + F96D3E9408F272A6004A47F5 /* SaveResult.3 */, + F96D3E9508F272A6004A47F5 /* scan.n */, + F96D3E9608F272A6004A47F5 /* seek.n */, + F96D3E9708F272A6004A47F5 /* set.n */, + F96D3E9808F272A6004A47F5 /* SetChanErr.3 */, + F96D3E9908F272A6004A47F5 /* SetErrno.3 */, + F96D3E9A08F272A6004A47F5 /* SetRecLmt.3 */, + F96D3E9B08F272A7004A47F5 /* SetResult.3 */, + F96D3E9C08F272A7004A47F5 /* SetVar.3 */, + F96D3E9D08F272A7004A47F5 /* Signal.3 */, + F96D3E9E08F272A7004A47F5 /* Sleep.3 */, + F96D3E9F08F272A7004A47F5 /* socket.n */, + F96D3EA008F272A7004A47F5 /* source.n */, + F96D3EA108F272A7004A47F5 /* SourceRCFile.3 */, + F96D3EA208F272A7004A47F5 /* split.n */, + F96D3EA308F272A7004A47F5 /* SplitList.3 */, + F96D3EA408F272A7004A47F5 /* SplitPath.3 */, + F96D3EA508F272A7004A47F5 /* StaticPkg.3 */, + F96D3EA608F272A7004A47F5 /* StdChannels.3 */, + F96D3EA708F272A7004A47F5 /* string.n */, + F96D3EA808F272A7004A47F5 /* StringObj.3 */, + F96D3EA908F272A7004A47F5 /* StrMatch.3 */, + F96D3EAA08F272A7004A47F5 /* subst.n */, + F96D3EAB08F272A7004A47F5 /* SubstObj.3 */, + F96D3EAC08F272A7004A47F5 /* switch.n */, + F96D3EAD08F272A7004A47F5 /* Tcl.n */, + F96D3EAE08F272A7004A47F5 /* Tcl_Main.3 */, + F96D3EAF08F272A7004A47F5 /* TCL_MEM_DEBUG.3 */, + F96D3EB008F272A7004A47F5 /* tclsh.1 */, + F96D3EB108F272A7004A47F5 /* tcltest.n */, + F96D3EB208F272A7004A47F5 /* tclvars.n */, + F96D3EB308F272A7004A47F5 /* tell.n */, + F96D3EB408F272A7004A47F5 /* Thread.3 */, + F96D3EB508F272A7004A47F5 /* time.n */, + F96D3EB608F272A7004A47F5 /* tm.n */, + F96D3EB708F272A7004A47F5 /* ToUpper.3 */, + F96D3EB808F272A7004A47F5 /* trace.n */, + F96D3EB908F272A7004A47F5 /* TraceCmd.3 */, + F96D3EBA08F272A7004A47F5 /* TraceVar.3 */, + F96D3EBB08F272A7004A47F5 /* Translate.3 */, + F96D3EBC08F272A7004A47F5 /* UniCharIsAlpha.3 */, + F96D3EBD08F272A7004A47F5 /* unknown.n */, + F96D3EBE08F272A7004A47F5 /* unload.n */, + F96D3EBF08F272A7004A47F5 /* unset.n */, + F96D3EC008F272A7004A47F5 /* update.n */, + F96D3EC108F272A7004A47F5 /* uplevel.n */, + F96D3EC208F272A7004A47F5 /* UpVar.3 */, + F96D3EC308F272A7004A47F5 /* upvar.n */, + F96D3EC408F272A7004A47F5 /* Utf.3 */, + F96D3EC508F272A7004A47F5 /* variable.n */, + F96D3EC608F272A7004A47F5 /* vwait.n */, + F96D3EC708F272A7004A47F5 /* while.n */, + F96D3EC808F272A7004A47F5 /* WrongNumArgs.3 */, + ); + path = doc; + sourceTree = "<group>"; + }; + F96D3EC908F272A7004A47F5 /* generic */ = { + isa = PBXGroup; + children = ( + F96D3ECA08F272A7004A47F5 /* README */, + F96D3ECB08F272A7004A47F5 /* regc_color.c */, + F96D3ECC08F272A7004A47F5 /* regc_cvec.c */, + F96D3ECD08F272A7004A47F5 /* regc_lex.c */, + F96D3ECE08F272A7004A47F5 /* regc_locale.c */, + F96D3ECF08F272A7004A47F5 /* regc_nfa.c */, + F96D3ED008F272A7004A47F5 /* regcomp.c */, + F96D3ED108F272A7004A47F5 /* regcustom.h */, + F96D3ED208F272A7004A47F5 /* rege_dfa.c */, + F96D3ED308F272A7004A47F5 /* regerror.c */, + F96D3ED408F272A7004A47F5 /* regerrs.h */, + F96D3ED508F272A7004A47F5 /* regex.h */, + F96D3ED608F272A7004A47F5 /* regexec.c */, + F96D3ED708F272A7004A47F5 /* regfree.c */, + F96D3ED808F272A7004A47F5 /* regfronts.c */, + F96D3ED908F272A7004A47F5 /* regguts.h */, + F96D3EDA08F272A7004A47F5 /* tcl.decls */, + F96D3EDB08F272A7004A47F5 /* tcl.h */, + F96D3EDC08F272A7004A47F5 /* tclAlloc.c */, + F96D3EDD08F272A7004A47F5 /* tclAsync.c */, + F96D3EDE08F272A7004A47F5 /* tclBasic.c */, + F96D3EDF08F272A7004A47F5 /* tclBinary.c */, + F96D3EE008F272A7004A47F5 /* tclCkalloc.c */, + F96D3EE108F272A7004A47F5 /* tclClock.c */, + F96D3EE208F272A7004A47F5 /* tclCmdAH.c */, + F96D3EE308F272A7004A47F5 /* tclCmdIL.c */, + F96D3EE408F272A7004A47F5 /* tclCmdMZ.c */, + F96D3EE508F272A7004A47F5 /* tclCompCmds.c */, + F96D3EE608F272A7004A47F5 /* tclCompExpr.c */, + F96D3EE708F272A7004A47F5 /* tclCompile.c */, + F96D3EE808F272A7004A47F5 /* tclCompile.h */, + F96D3EE908F272A7004A47F5 /* tclConfig.c */, + F96D3EEA08F272A7004A47F5 /* tclDate.c */, + F96D3EEB08F272A7004A47F5 /* tclDecls.h */, + F96D3EEC08F272A7004A47F5 /* tclDictObj.c */, + F9F4415D0C8BAE6F00BCCD67 /* tclDTrace.d */, + F96D3EED08F272A7004A47F5 /* tclEncoding.c */, + F96D3EEE08F272A7004A47F5 /* tclEnv.c */, + F96D3EEF08F272A7004A47F5 /* tclEvent.c */, + F96D3EF008F272A7004A47F5 /* tclExecute.c */, + F96D3EF108F272A7004A47F5 /* tclFCmd.c */, + F96D3EF208F272A7004A47F5 /* tclFileName.c */, + F96D3EF308F272A7004A47F5 /* tclFileSystem.h */, + F96D3EF408F272A7004A47F5 /* tclGet.c */, + F96D3EF508F272A7004A47F5 /* tclGetDate.y */, + F96D3EF608F272A7004A47F5 /* tclHash.c */, + F96D3EF708F272A7004A47F5 /* tclHistory.c */, + F96D3EF808F272A7004A47F5 /* tclIndexObj.c */, + F96D3EF908F272A7004A47F5 /* tclInt.decls */, + F96D3EFA08F272A7004A47F5 /* tclInt.h */, + F96D3EFB08F272A7004A47F5 /* tclIntDecls.h */, + F96D3EFC08F272A7004A47F5 /* tclInterp.c */, + F96D3EFD08F272A7004A47F5 /* tclIntPlatDecls.h */, + F96D3EFE08F272A7004A47F5 /* tclIO.c */, + F96D3EFF08F272A7004A47F5 /* tclIO.h */, + F96D3F0008F272A7004A47F5 /* tclIOCmd.c */, + F96D3F0108F272A7004A47F5 /* tclIOGT.c */, + F96D3F0208F272A7004A47F5 /* tclIORChan.c */, + F96D3F0308F272A7004A47F5 /* tclIOSock.c */, + F96D3F0408F272A7004A47F5 /* tclIOUtil.c */, + F96D3F0508F272A7004A47F5 /* tclLink.c */, + F96D3F0608F272A7004A47F5 /* tclListObj.c */, + F96D3F0708F272A7004A47F5 /* tclLiteral.c */, + F96D3F0808F272A7004A47F5 /* tclLoad.c */, + F96D3F0908F272A7004A47F5 /* tclLoadNone.c */, + F96D3F0A08F272A7004A47F5 /* tclMain.c */, + F96D3F0B08F272A7004A47F5 /* tclNamesp.c */, + F96D3F0C08F272A7004A47F5 /* tclNotify.c */, + F96D3F0D08F272A7004A47F5 /* tclObj.c */, + F96D3F0E08F272A7004A47F5 /* tclPanic.c */, + F96D3F0F08F272A7004A47F5 /* tclParse.c */, + F96D3F1108F272A7004A47F5 /* tclPathObj.c */, + F96D3F1208F272A7004A47F5 /* tclPipe.c */, + F96D3F1308F272A7004A47F5 /* tclPkg.c */, + F96D3F1408F272A7004A47F5 /* tclPkgConfig.c */, + F96D3F1508F272A7004A47F5 /* tclPlatDecls.h */, + F96D3F1608F272A7004A47F5 /* tclPort.h */, + F96D3F1708F272A7004A47F5 /* tclPosixStr.c */, + F96D3F1808F272A7004A47F5 /* tclPreserve.c */, + F96D3F1908F272A7004A47F5 /* tclProc.c */, + F96D3F1A08F272A7004A47F5 /* tclRegexp.c */, + F96D3F1B08F272A7004A47F5 /* tclRegexp.h */, + F96D3F1C08F272A7004A47F5 /* tclResolve.c */, + F96D3F1D08F272A7004A47F5 /* tclResult.c */, + F96D3F1E08F272A7004A47F5 /* tclScan.c */, + F96D3F1F08F272A7004A47F5 /* tclStringObj.c */, + F96D3F2408F272A7004A47F5 /* tclStrToD.c */, + F96D3F2508F272A7004A47F5 /* tclStubInit.c */, + F96D3F2608F272A7004A47F5 /* tclStubLib.c */, + F96D3F2708F272A7004A47F5 /* tclTest.c */, + F96D3F2808F272A7004A47F5 /* tclTestObj.c */, + F96D3F2908F272A7004A47F5 /* tclTestProcBodyObj.c */, + F96D3F2A08F272A7004A47F5 /* tclThread.c */, + F96D3F2B08F272A7004A47F5 /* tclThreadAlloc.c */, + F96D3F2C08F272A7004A47F5 /* tclThreadJoin.c */, + F96D3F2D08F272A7004A47F5 /* tclThreadStorage.c */, + F96D3F2E08F272A7004A47F5 /* tclThreadTest.c */, + F96D3F2F08F272A7004A47F5 /* tclTimer.c */, + F9903CAF094FAADA004613E9 /* tclTomMath.decls */, + F96D3F3008F272A7004A47F5 /* tclTomMath.h */, + F9903CB0094FAADA004613E9 /* tclTomMathDecls.h */, + F96D3F3108F272A7004A47F5 /* tclTomMathInterface.c */, + F96D3F3208F272A7004A47F5 /* tclTrace.c */, + F96D3F3308F272A7004A47F5 /* tclUniData.c */, + F96D3F3408F272A7004A47F5 /* tclUtf.c */, + F96D3F3508F272A7004A47F5 /* tclUtil.c */, + F96D3F3608F272A7004A47F5 /* tclVar.c */, + F96D3F3708F272A7004A47F5 /* tommath.h */, + ); + path = generic; + sourceTree = "<group>"; + }; + F96D3F3808F272A7004A47F5 /* library */ = { + isa = PBXGroup; + children = ( + F96D3F3908F272A8004A47F5 /* auto.tcl */, + F96D3F3A08F272A8004A47F5 /* clock.tcl */, + F96D3F3B08F272A8004A47F5 /* dde */, + F96D3F8C08F272A8004A47F5 /* history.tcl */, + F96D3F8D08F272A8004A47F5 /* http */, + F96D3F9008F272A8004A47F5 /* http1.0 */, + F96D3F9308F272A8004A47F5 /* init.tcl */, + F96D3F9408F272A8004A47F5 /* msgcat */, + F96D401708F272AA004A47F5 /* opt */, + F96D401A08F272AA004A47F5 /* package.tcl */, + F96D401B08F272AA004A47F5 /* parray.tcl */, + F9ECB1110B26521500A28025 /* platform */, + F96D401C08F272AA004A47F5 /* reg */, + F96D401E08F272AA004A47F5 /* safe.tcl */, + F96D401F08F272AA004A47F5 /* tclIndex */, + F96D402008F272AA004A47F5 /* tcltest */, + F96D402308F272AA004A47F5 /* tm.tcl */, + F96D425B08F272B2004A47F5 /* word.tcl */, + ); + path = library; + sourceTree = "<group>"; + }; + F96D3F3B08F272A8004A47F5 /* dde */ = { + isa = PBXGroup; + children = ( + F96D3F3C08F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = dde; + sourceTree = "<group>"; + }; + F96D3F8D08F272A8004A47F5 /* http */ = { + isa = PBXGroup; + children = ( + F96D3F8E08F272A8004A47F5 /* http.tcl */, + F96D3F8F08F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = http; + sourceTree = "<group>"; + }; + F96D3F9008F272A8004A47F5 /* http1.0 */ = { + isa = PBXGroup; + children = ( + F96D3F9108F272A8004A47F5 /* http.tcl */, + F96D3F9208F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = http1.0; + sourceTree = "<group>"; + }; + F96D3F9408F272A8004A47F5 /* msgcat */ = { + isa = PBXGroup; + children = ( + F96D3F9508F272A8004A47F5 /* msgcat.tcl */, + F96D3F9608F272A8004A47F5 /* pkgIndex.tcl */, + ); + path = msgcat; + sourceTree = "<group>"; + }; + F96D401708F272AA004A47F5 /* opt */ = { + isa = PBXGroup; + children = ( + F96D401808F272AA004A47F5 /* optparse.tcl */, + F96D401908F272AA004A47F5 /* pkgIndex.tcl */, + ); + path = opt; + sourceTree = "<group>"; + }; + F96D401C08F272AA004A47F5 /* reg */ = { + isa = PBXGroup; + children = ( + F96D401D08F272AA004A47F5 /* pkgIndex.tcl */, + ); + path = reg; + sourceTree = "<group>"; + }; + F96D402008F272AA004A47F5 /* tcltest */ = { + isa = PBXGroup; + children = ( + F96D402108F272AA004A47F5 /* pkgIndex.tcl */, + F96D402208F272AA004A47F5 /* tcltest.tcl */, + ); + path = tcltest; + sourceTree = "<group>"; + }; + F96D425C08F272B2004A47F5 /* libtommath */ = { + isa = PBXGroup; + children = ( + F96D425F08F272B3004A47F5 /* bn.pdf */, + F96D426108F272B3004A47F5 /* bn_error.c */, + F96D426208F272B3004A47F5 /* bn_fast_mp_invmod.c */, + F96D426308F272B3004A47F5 /* bn_fast_mp_montgomery_reduce.c */, + F96D426408F272B3004A47F5 /* bn_fast_s_mp_mul_digs.c */, + F96D426508F272B3004A47F5 /* bn_fast_s_mp_mul_high_digs.c */, + F96D426608F272B3004A47F5 /* bn_fast_s_mp_sqr.c */, + F96D426708F272B3004A47F5 /* bn_mp_2expt.c */, + F96D426808F272B3004A47F5 /* bn_mp_abs.c */, + F96D426908F272B3004A47F5 /* bn_mp_add.c */, + F96D426A08F272B3004A47F5 /* bn_mp_add_d.c */, + F96D426B08F272B3004A47F5 /* bn_mp_addmod.c */, + F96D426C08F272B3004A47F5 /* bn_mp_and.c */, + F96D426D08F272B3004A47F5 /* bn_mp_clamp.c */, + F96D426E08F272B3004A47F5 /* bn_mp_clear.c */, + F96D426F08F272B3004A47F5 /* bn_mp_clear_multi.c */, + F96D427008F272B3004A47F5 /* bn_mp_cmp.c */, + F96D427108F272B3004A47F5 /* bn_mp_cmp_d.c */, + F96D427208F272B3004A47F5 /* bn_mp_cmp_mag.c */, + F96D427308F272B3004A47F5 /* bn_mp_cnt_lsb.c */, + F96D427408F272B3004A47F5 /* bn_mp_copy.c */, + F96D427508F272B3004A47F5 /* bn_mp_count_bits.c */, + F96D427608F272B3004A47F5 /* bn_mp_div.c */, + F96D427708F272B3004A47F5 /* bn_mp_div_2.c */, + F96D427808F272B3004A47F5 /* bn_mp_div_2d.c */, + F96D427908F272B3004A47F5 /* bn_mp_div_3.c */, + F96D427A08F272B3004A47F5 /* bn_mp_div_d.c */, + F96D427B08F272B3004A47F5 /* bn_mp_dr_is_modulus.c */, + F96D427C08F272B3004A47F5 /* bn_mp_dr_reduce.c */, + F96D427D08F272B3004A47F5 /* bn_mp_dr_setup.c */, + F96D427E08F272B3004A47F5 /* bn_mp_exch.c */, + F96D427F08F272B3004A47F5 /* bn_mp_expt_d.c */, + F96D428008F272B3004A47F5 /* bn_mp_exptmod.c */, + F96D428108F272B3004A47F5 /* bn_mp_exptmod_fast.c */, + F96D428208F272B3004A47F5 /* bn_mp_exteuclid.c */, + F96D428308F272B3004A47F5 /* bn_mp_fread.c */, + F96D428408F272B3004A47F5 /* bn_mp_fwrite.c */, + F96D428508F272B3004A47F5 /* bn_mp_gcd.c */, + F96D428608F272B3004A47F5 /* bn_mp_get_int.c */, + F96D428708F272B3004A47F5 /* bn_mp_grow.c */, + F96D428808F272B3004A47F5 /* bn_mp_init.c */, + F96D428908F272B3004A47F5 /* bn_mp_init_copy.c */, + F96D428A08F272B3004A47F5 /* bn_mp_init_multi.c */, + F96D428B08F272B3004A47F5 /* bn_mp_init_set.c */, + F96D428C08F272B3004A47F5 /* bn_mp_init_set_int.c */, + F96D428D08F272B3004A47F5 /* bn_mp_init_size.c */, + F96D428E08F272B3004A47F5 /* bn_mp_invmod.c */, + F96D428F08F272B3004A47F5 /* bn_mp_invmod_slow.c */, + F96D429008F272B3004A47F5 /* bn_mp_is_square.c */, + F96D429108F272B3004A47F5 /* bn_mp_jacobi.c */, + F96D429208F272B3004A47F5 /* bn_mp_karatsuba_mul.c */, + F96D429308F272B3004A47F5 /* bn_mp_karatsuba_sqr.c */, + F96D429408F272B3004A47F5 /* bn_mp_lcm.c */, + F96D429508F272B3004A47F5 /* bn_mp_lshd.c */, + F96D429608F272B3004A47F5 /* bn_mp_mod.c */, + F96D429708F272B3004A47F5 /* bn_mp_mod_2d.c */, + F96D429808F272B3004A47F5 /* bn_mp_mod_d.c */, + F96D429908F272B3004A47F5 /* bn_mp_montgomery_calc_normalization.c */, + F96D429A08F272B3004A47F5 /* bn_mp_montgomery_reduce.c */, + F96D429B08F272B3004A47F5 /* bn_mp_montgomery_setup.c */, + F96D429C08F272B3004A47F5 /* bn_mp_mul.c */, + F96D429D08F272B3004A47F5 /* bn_mp_mul_2.c */, + F96D429E08F272B3004A47F5 /* bn_mp_mul_2d.c */, + F96D429F08F272B3004A47F5 /* bn_mp_mul_d.c */, + F96D42A008F272B3004A47F5 /* bn_mp_mulmod.c */, + F96D42A108F272B3004A47F5 /* bn_mp_n_root.c */, + F96D42A208F272B3004A47F5 /* bn_mp_neg.c */, + F96D42A308F272B3004A47F5 /* bn_mp_or.c */, + F96D42A408F272B3004A47F5 /* bn_mp_prime_fermat.c */, + F96D42A508F272B3004A47F5 /* bn_mp_prime_is_divisible.c */, + F96D42A608F272B3004A47F5 /* bn_mp_prime_is_prime.c */, + F96D42A708F272B3004A47F5 /* bn_mp_prime_miller_rabin.c */, + F96D42A808F272B3004A47F5 /* bn_mp_prime_next_prime.c */, + F96D42A908F272B3004A47F5 /* bn_mp_prime_rabin_miller_trials.c */, + F96D42AA08F272B3004A47F5 /* bn_mp_prime_random_ex.c */, + F96D42AB08F272B3004A47F5 /* bn_mp_radix_size.c */, + F96D42AC08F272B3004A47F5 /* bn_mp_radix_smap.c */, + F96D42AD08F272B3004A47F5 /* bn_mp_rand.c */, + F96D42AE08F272B3004A47F5 /* bn_mp_read_radix.c */, + F96D42AF08F272B3004A47F5 /* bn_mp_read_signed_bin.c */, + F96D42B008F272B3004A47F5 /* bn_mp_read_unsigned_bin.c */, + F96D42B108F272B3004A47F5 /* bn_mp_reduce.c */, + F96D42B208F272B3004A47F5 /* bn_mp_reduce_2k.c */, + F96D42B308F272B3004A47F5 /* bn_mp_reduce_2k_l.c */, + F96D42B408F272B3004A47F5 /* bn_mp_reduce_2k_setup.c */, + F96D42B508F272B3004A47F5 /* bn_mp_reduce_2k_setup_l.c */, + F96D42B608F272B3004A47F5 /* bn_mp_reduce_is_2k.c */, + F96D42B708F272B3004A47F5 /* bn_mp_reduce_is_2k_l.c */, + F96D42B808F272B3004A47F5 /* bn_mp_reduce_setup.c */, + F96D42B908F272B3004A47F5 /* bn_mp_rshd.c */, + F96D42BA08F272B3004A47F5 /* bn_mp_set.c */, + F96D42BB08F272B3004A47F5 /* bn_mp_set_int.c */, + F96D42BC08F272B3004A47F5 /* bn_mp_shrink.c */, + F96D42BD08F272B3004A47F5 /* bn_mp_signed_bin_size.c */, + F96D42BE08F272B3004A47F5 /* bn_mp_sqr.c */, + F96D42BF08F272B3004A47F5 /* bn_mp_sqrmod.c */, + F96D42C008F272B3004A47F5 /* bn_mp_sqrt.c */, + F96D42C108F272B3004A47F5 /* bn_mp_sub.c */, + F96D42C208F272B3004A47F5 /* bn_mp_sub_d.c */, + F96D42C308F272B3004A47F5 /* bn_mp_submod.c */, + F96D42C408F272B3004A47F5 /* bn_mp_to_signed_bin.c */, + F96D42C508F272B3004A47F5 /* bn_mp_to_signed_bin_n.c */, + F96D42C608F272B3004A47F5 /* bn_mp_to_unsigned_bin.c */, + F96D42C708F272B3004A47F5 /* bn_mp_to_unsigned_bin_n.c */, + F96D42C808F272B3004A47F5 /* bn_mp_toom_mul.c */, + F96D42C908F272B3004A47F5 /* bn_mp_toom_sqr.c */, + F96D42CA08F272B3004A47F5 /* bn_mp_toradix.c */, + F96D42CB08F272B3004A47F5 /* bn_mp_toradix_n.c */, + F96D42CC08F272B3004A47F5 /* bn_mp_unsigned_bin_size.c */, + F96D42CD08F272B3004A47F5 /* bn_mp_xor.c */, + F96D42CE08F272B3004A47F5 /* bn_mp_zero.c */, + F96D42CF08F272B3004A47F5 /* bn_prime_tab.c */, + F96D42D008F272B3004A47F5 /* bn_reverse.c */, + F96D42D108F272B3004A47F5 /* bn_s_mp_add.c */, + F96D42D208F272B3004A47F5 /* bn_s_mp_exptmod.c */, + F96D42D308F272B3004A47F5 /* bn_s_mp_mul_digs.c */, + F96D42D408F272B3004A47F5 /* bn_s_mp_mul_high_digs.c */, + F96D42D508F272B3004A47F5 /* bn_s_mp_sqr.c */, + F96D42D608F272B3004A47F5 /* bn_s_mp_sub.c */, + F96D42D708F272B3004A47F5 /* bncore.c */, + F96D42D908F272B3004A47F5 /* callgraph.txt */, + F96D42DA08F272B3004A47F5 /* changes.txt */, + F96D42F008F272B3004A47F5 /* LICENSE */, + F96D431D08F272B4004A47F5 /* poster.pdf */, + F96D432608F272B4004A47F5 /* tommath.pdf */, + F96D432908F272B4004A47F5 /* tommath_class.h */, + F96D432A08F272B4004A47F5 /* tommath_superclass.h */, + ); + path = libtommath; + sourceTree = "<group>"; + }; + F96D432C08F272B4004A47F5 /* macosx */ = { + isa = PBXGroup; + children = ( + F96D432E08F272B5004A47F5 /* configure.ac */, + F96D432F08F272B5004A47F5 /* GNUmakefile */, + F96D433108F272B5004A47F5 /* README */, + F96D433908F272B5004A47F5 /* tclMacOSXBundle.c */, + F96D433D08F272B5004A47F5 /* tclMacOSXFCmd.c */, + F96D433E08F272B5004A47F5 /* tclMacOSXNotify.c */, + F96D433208F272B5004A47F5 /* Tcl-Info.plist.in */, + F91E62260C1AE686006C9D96 /* Tclsh-Info.plist.in */, + ); + path = macosx; + sourceTree = "<group>"; + }; + F96D434408F272B5004A47F5 /* tests */ = { + isa = PBXGroup; + children = ( + F96D434508F272B5004A47F5 /* all.tcl */, + F96D434608F272B5004A47F5 /* append.test */, + F96D434708F272B5004A47F5 /* appendComp.test */, + F9ECB1CA0B2652D300A28025 /* apply.test */, + F96D434808F272B5004A47F5 /* assocd.test */, + F96D434908F272B5004A47F5 /* async.test */, + F96D434A08F272B5004A47F5 /* autoMkindex.test */, + F96D434B08F272B5004A47F5 /* basic.test */, + F96D434C08F272B5004A47F5 /* binary.test */, + F96D434D08F272B5004A47F5 /* case.test */, + F96D434E08F272B5004A47F5 /* chan.test */, + F9A493240CEBF38300B78AE2 /* chanio.test */, + F96D434F08F272B5004A47F5 /* clock.test */, + F96D435008F272B5004A47F5 /* cmdAH.test */, + F96D435108F272B5004A47F5 /* cmdIL.test */, + F96D435208F272B5004A47F5 /* cmdInfo.test */, + F96D435308F272B5004A47F5 /* cmdMZ.test */, + F96D435408F272B5004A47F5 /* compExpr-old.test */, + F96D435508F272B5004A47F5 /* compExpr.test */, + F96D435608F272B5004A47F5 /* compile.test */, + F96D435708F272B5004A47F5 /* concat.test */, + F96D435808F272B5004A47F5 /* config.test */, + F96D435908F272B5004A47F5 /* dcall.test */, + F96D435A08F272B5004A47F5 /* dict.test */, + F96D435C08F272B5004A47F5 /* dstring.test */, + F96D435E08F272B5004A47F5 /* encoding.test */, + F96D435F08F272B5004A47F5 /* env.test */, + F96D436008F272B5004A47F5 /* error.test */, + F96D436108F272B5004A47F5 /* eval.test */, + F96D436208F272B5004A47F5 /* event.test */, + F96D436308F272B5004A47F5 /* exec.test */, + F96D436408F272B5004A47F5 /* execute.test */, + F96D436508F272B5004A47F5 /* expr-old.test */, + F96D436608F272B5004A47F5 /* expr.test */, + F96D436708F272B6004A47F5 /* fCmd.test */, + F96D436808F272B6004A47F5 /* fileName.test */, + F96D436908F272B6004A47F5 /* fileSystem.test */, + F96D436A08F272B6004A47F5 /* for-old.test */, + F96D436B08F272B6004A47F5 /* for.test */, + F96D436C08F272B6004A47F5 /* foreach.test */, + F96D436D08F272B6004A47F5 /* format.test */, + F96D436E08F272B6004A47F5 /* get.test */, + F96D436F08F272B6004A47F5 /* history.test */, + F96D437008F272B6004A47F5 /* http.test */, + F96D437108F272B6004A47F5 /* httpd */, + F96D437208F272B6004A47F5 /* httpold.test */, + F96D437308F272B6004A47F5 /* if-old.test */, + F96D437408F272B6004A47F5 /* if.test */, + F96D437508F272B6004A47F5 /* incr-old.test */, + F96D437608F272B6004A47F5 /* incr.test */, + F96D437708F272B6004A47F5 /* indexObj.test */, + F96D437808F272B6004A47F5 /* info.test */, + F96D437908F272B6004A47F5 /* init.test */, + F96D437A08F272B6004A47F5 /* interp.test */, + F96D437B08F272B6004A47F5 /* io.test */, + F96D437C08F272B6004A47F5 /* ioCmd.test */, + F96D437D08F272B6004A47F5 /* iogt.test */, + F96D437E08F272B6004A47F5 /* ioUtil.test */, + F96D437F08F272B6004A47F5 /* join.test */, + F96D438008F272B6004A47F5 /* lindex.test */, + F96D438108F272B6004A47F5 /* link.test */, + F96D438208F272B6004A47F5 /* linsert.test */, + F96D438308F272B6004A47F5 /* list.test */, + F96D438408F272B6004A47F5 /* listObj.test */, + F96D438508F272B6004A47F5 /* llength.test */, + F96D438608F272B6004A47F5 /* load.test */, + F96D438708F272B6004A47F5 /* lrange.test */, + F96D438808F272B6004A47F5 /* lrepeat.test */, + F96D438908F272B6004A47F5 /* lreplace.test */, + F96D438A08F272B6004A47F5 /* lsearch.test */, + F96D438B08F272B6004A47F5 /* lset.test */, + F96D438C08F272B6004A47F5 /* lsetComp.test */, + F96D438D08F272B6004A47F5 /* macOSXFCmd.test */, + F95FAFF90B34F1130072E431 /* macOSXLoad.test */, + F96D438E08F272B6004A47F5 /* main.test */, + F9ECB1CB0B26534C00A28025 /* mathop.test */, + F96D438F08F272B6004A47F5 /* misc.test */, + F96D439008F272B6004A47F5 /* msgcat.test */, + F96D439108F272B6004A47F5 /* namespace-old.test */, + F96D439208F272B7004A47F5 /* namespace.test */, + F96D439308F272B7004A47F5 /* notify.test */, + F96D439408F272B7004A47F5 /* obj.test */, + F96D439508F272B7004A47F5 /* opt.test */, + F96D439608F272B7004A47F5 /* package.test */, + F96D439708F272B7004A47F5 /* parse.test */, + F96D439808F272B7004A47F5 /* parseExpr.test */, + F96D439908F272B7004A47F5 /* parseOld.test */, + F96D439A08F272B7004A47F5 /* pid.test */, + F96D439B08F272B7004A47F5 /* pkg.test */, + F96D439C08F272B7004A47F5 /* pkgMkIndex.test */, + F96D439D08F272B7004A47F5 /* platform.test */, + F96D439E08F272B7004A47F5 /* proc-old.test */, + F96D439F08F272B7004A47F5 /* proc.test */, + F96D43A008F272B7004A47F5 /* pwd.test */, + F96D43A108F272B7004A47F5 /* README */, + F96D43A208F272B7004A47F5 /* reg.test */, + F96D43A308F272B7004A47F5 /* regexp.test */, + F96D43A408F272B7004A47F5 /* regexpComp.test */, + F96D43A508F272B7004A47F5 /* registry.test */, + F96D43A608F272B7004A47F5 /* remote.tcl */, + F96D43A708F272B7004A47F5 /* rename.test */, + F96D43A808F272B7004A47F5 /* result.test */, + F96D43A908F272B7004A47F5 /* safe.test */, + F96D43AA08F272B7004A47F5 /* scan.test */, + F96D43AB08F272B7004A47F5 /* security.test */, + F96D43AC08F272B7004A47F5 /* set-old.test */, + F96D43AD08F272B7004A47F5 /* set.test */, + F96D43AE08F272B7004A47F5 /* socket.test */, + F96D43AF08F272B7004A47F5 /* source.test */, + F96D43B008F272B7004A47F5 /* split.test */, + F96D43B108F272B7004A47F5 /* stack.test */, + F96D43B208F272B7004A47F5 /* string.test */, + F96D43B308F272B7004A47F5 /* stringComp.test */, + F96D43B408F272B7004A47F5 /* stringObj.test */, + F96D43B508F272B7004A47F5 /* subst.test */, + F96D43B608F272B7004A47F5 /* switch.test */, + F96D43B708F272B7004A47F5 /* tcltest.test */, + F96D43B808F272B7004A47F5 /* thread.test */, + F96D43B908F272B7004A47F5 /* timer.test */, + F96D43BA08F272B7004A47F5 /* tm.test */, + F96D43BB08F272B7004A47F5 /* trace.test */, + F96D43BC08F272B7004A47F5 /* unixFCmd.test */, + F96D43BD08F272B7004A47F5 /* unixFile.test */, + F96D43BE08F272B7004A47F5 /* unixInit.test */, + F96D43BF08F272B7004A47F5 /* unixNotfy.test */, + F96D43C008F272B7004A47F5 /* unknown.test */, + F96D43C108F272B7004A47F5 /* unload.test */, + F96D43C208F272B7004A47F5 /* uplevel.test */, + F96D43C308F272B7004A47F5 /* upvar.test */, + F96D43C408F272B7004A47F5 /* utf.test */, + F96D43C508F272B7004A47F5 /* util.test */, + F96D43C608F272B7004A47F5 /* var.test */, + F96D43C708F272B7004A47F5 /* while-old.test */, + F96D43C808F272B7004A47F5 /* while.test */, + F96D43C908F272B7004A47F5 /* winConsole.test */, + F96D43CA08F272B7004A47F5 /* winDde.test */, + F96D43CB08F272B7004A47F5 /* winFCmd.test */, + F96D43CC08F272B7004A47F5 /* winFile.test */, + F96D43CD08F272B7004A47F5 /* winNotify.test */, + F96D43CE08F272B7004A47F5 /* winPipe.test */, + F96D43CF08F272B7004A47F5 /* winTime.test */, + ); + path = tests; + sourceTree = "<group>"; + }; + F96D43D008F272B8004A47F5 /* tools */ = { + isa = PBXGroup; + children = ( + F96D43D108F272B8004A47F5 /* checkLibraryDoc.tcl */, + F96D43D208F272B8004A47F5 /* configure */, + F96D43D308F272B8004A47F5 /* configure.in */, + F96D442208F272B8004A47F5 /* eolFix.tcl */, + F96D442408F272B8004A47F5 /* fix_tommath_h.tcl */, + F96D442508F272B8004A47F5 /* genStubs.tcl */, + F96D442708F272B8004A47F5 /* index.tcl */, + F96D442808F272B8004A47F5 /* installData.tcl */, + F96D442908F272B8004A47F5 /* loadICU.tcl */, + F96D442A08F272B8004A47F5 /* Makefile.in */, + F96D442B08F272B8004A47F5 /* makeTestCases.tcl */, + F96D442C08F272B8004A47F5 /* man2help.tcl */, + F96D442D08F272B8004A47F5 /* man2help2.tcl */, + F96D442E08F272B8004A47F5 /* man2html.tcl */, + F96D442F08F272B8004A47F5 /* man2html1.tcl */, + F96D443008F272B8004A47F5 /* man2html2.tcl */, + F96D443108F272B8004A47F5 /* man2tcl.c */, + F96D443208F272B8004A47F5 /* README */, + F96D443308F272B8004A47F5 /* regexpTestLib.tcl */, + F96D443408F272B8004A47F5 /* str2c */, + F96D443508F272B8004A47F5 /* tcl.hpj.in */, + F96D443608F272B8004A47F5 /* tcl.wse.in */, + F96D443708F272B9004A47F5 /* tclmin.wse */, + F96D443908F272B9004A47F5 /* tcltk-man2html.tcl */, + F96D443A08F272B9004A47F5 /* tclZIC.tcl */, + F96D443B08F272B9004A47F5 /* uniClass.tcl */, + F96D443C08F272B9004A47F5 /* uniParse.tcl */, + ); + path = tools; + sourceTree = "<group>"; + }; + F96D443E08F272B9004A47F5 /* unix */ = { + isa = PBXGroup; + children = ( + F96D444008F272B9004A47F5 /* aclocal.m4 */, + F96D444108F272B9004A47F5 /* configure */, + F96D444208F272B9004A47F5 /* configure.in */, + F96D444308F272B9004A47F5 /* dltest */, + F96D444D08F272B9004A47F5 /* install-sh */, + F96D444E08F272B9004A47F5 /* installManPage */, + F96D444F08F272B9004A47F5 /* ldAix */, + F96D445008F272B9004A47F5 /* Makefile.in */, + F96D445208F272B9004A47F5 /* README */, + F96D445308F272B9004A47F5 /* tcl.m4 */, + F96D445408F272B9004A47F5 /* tcl.spec */, + F96D445508F272B9004A47F5 /* tclAppInit.c */, + F96D445608F272B9004A47F5 /* tclConfig.h.in */, + F96D445708F272B9004A47F5 /* tclConfig.sh.in */, + F96D445808F272B9004A47F5 /* tclLoadAix.c */, + F96D445908F272B9004A47F5 /* tclLoadDl.c */, + F96D445B08F272B9004A47F5 /* tclLoadDyld.c */, + F96D445C08F272B9004A47F5 /* tclLoadNext.c */, + F96D445D08F272B9004A47F5 /* tclLoadOSF.c */, + F96D445E08F272B9004A47F5 /* tclLoadShl.c */, + F96D445F08F272B9004A47F5 /* tclUnixChan.c */, + F9FC77B70AB29E9100B7077D /* tclUnixCompat.c */, + F96D446008F272B9004A47F5 /* tclUnixEvent.c */, + F96D446108F272B9004A47F5 /* tclUnixFCmd.c */, + F96D446208F272B9004A47F5 /* tclUnixFile.c */, + F96D446308F272B9004A47F5 /* tclUnixInit.c */, + F96D446408F272B9004A47F5 /* tclUnixNotfy.c */, + F96D446508F272B9004A47F5 /* tclUnixPipe.c */, + F96D446608F272B9004A47F5 /* tclUnixPort.h */, + F96D446708F272B9004A47F5 /* tclUnixSock.c */, + F96D446808F272B9004A47F5 /* tclUnixTest.c */, + F96D446908F272B9004A47F5 /* tclUnixThrd.c */, + F96D446A08F272B9004A47F5 /* tclUnixThrd.h */, + F96D446B08F272B9004A47F5 /* tclUnixTime.c */, + F96D446C08F272B9004A47F5 /* tclXtNotify.c */, + F96D446D08F272B9004A47F5 /* tclXtTest.c */, + ); + path = unix; + sourceTree = "<group>"; + }; + F96D444308F272B9004A47F5 /* dltest */ = { + isa = PBXGroup; + children = ( + F96D444408F272B9004A47F5 /* Makefile.in */, + F96D444508F272B9004A47F5 /* pkga.c */, + F96D444608F272B9004A47F5 /* pkgb.c */, + F96D444708F272B9004A47F5 /* pkgc.c */, + F96D444808F272B9004A47F5 /* pkgd.c */, + F96D444908F272B9004A47F5 /* pkge.c */, + F96D444B08F272B9004A47F5 /* pkgua.c */, + F96D444C08F272B9004A47F5 /* README */, + ); + path = dltest; + sourceTree = "<group>"; + }; + F96D446E08F272B9004A47F5 /* win */ = { + isa = PBXGroup; + children = ( + F96D447008F272BA004A47F5 /* aclocal.m4 */, + F96D447108F272BA004A47F5 /* buildall.vc.bat */, + F96D447208F272BA004A47F5 /* cat.c */, + F96D447308F272BA004A47F5 /* coffbase.txt */, + F96D447408F272BA004A47F5 /* configure */, + F96D447508F272BA004A47F5 /* configure.in */, + F96D447608F272BA004A47F5 /* makefile.bc */, + F96D447708F272BA004A47F5 /* Makefile.in */, + F96D447808F272BA004A47F5 /* makefile.vc */, + F96D447908F272BA004A47F5 /* nmakehlp.c */, + F96D447A08F272BA004A47F5 /* README */, + F96D447C08F272BA004A47F5 /* rules.vc */, + F96D447D08F272BA004A47F5 /* stub16.c */, + F96D447E08F272BA004A47F5 /* tcl.dsp */, + F96D447F08F272BA004A47F5 /* tcl.dsw */, + F96D448008F272BA004A47F5 /* tcl.hpj.in */, + F96D448108F272BA004A47F5 /* tcl.m4 */, + F96D448208F272BA004A47F5 /* tcl.rc */, + F96D448308F272BA004A47F5 /* tclAppInit.c */, + F96D448408F272BA004A47F5 /* tclConfig.sh.in */, + F96D448608F272BA004A47F5 /* tclsh.rc */, + F96D448708F272BA004A47F5 /* tclWin32Dll.c */, + F96D448808F272BA004A47F5 /* tclWinChan.c */, + F96D448908F272BA004A47F5 /* tclWinConsole.c */, + F96D448A08F272BA004A47F5 /* tclWinDde.c */, + F96D448B08F272BA004A47F5 /* tclWinError.c */, + F96D448C08F272BA004A47F5 /* tclWinFCmd.c */, + F96D448D08F272BA004A47F5 /* tclWinFile.c */, + F96D448E08F272BA004A47F5 /* tclWinInit.c */, + F96D448F08F272BA004A47F5 /* tclWinInt.h */, + F96D449008F272BA004A47F5 /* tclWinLoad.c */, + F96D449108F272BA004A47F5 /* tclWinNotify.c */, + F96D449208F272BA004A47F5 /* tclWinPipe.c */, + F96D449308F272BA004A47F5 /* tclWinPort.h */, + F96D449408F272BA004A47F5 /* tclWinReg.c */, + F96D449508F272BA004A47F5 /* tclWinSerial.c */, + F96D449608F272BA004A47F5 /* tclWinSock.c */, + F96D449708F272BA004A47F5 /* tclWinTest.c */, + F96D449808F272BA004A47F5 /* tclWinThrd.c */, + F96D449908F272BA004A47F5 /* tclWinThrd.h */, + F96D449A08F272BA004A47F5 /* tclWinTime.c */, + ); + path = win; + sourceTree = "<group>"; + }; + F9ECB1110B26521500A28025 /* platform */ = { + isa = PBXGroup; + children = ( + F9ECB1120B26521500A28025 /* pkgIndex.tcl */, + F9ECB1130B26521500A28025 /* platform.tcl */, + F9ECB1140B26521500A28025 /* shell.tcl */, + ); + path = platform; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 8DD76FA90486AB0100D96B5E /* tktest */ = { + isa = PBXNativeTarget; + buildConfigurationList = F95CC8B009158F3100EA5ACE /* Build configuration list for PBXNativeTarget "tktest" */; + buildPhases = ( + F9A5C5F508F651A2008AE941 /* ShellScript */, + F9A5C5F608F651AB008AE941 /* ShellScript */, + 8DD76FAB0486AB0100D96B5E /* Sources */, + 8DD76FAD0486AB0100D96B5E /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = tktest; + productInstallPath = "$(BINDIR)"; + productName = tktest; + productReference = 8DD76FB20486AB0100D96B5E /* tktest */; + productType = "com.apple.product-type.tool"; + }; + F97258A50A86873C00096C78 /* tktest-X11 */ = { + isa = PBXNativeTarget; + buildConfigurationList = F97258A80A86873D00096C78 /* Build configuration list for PBXNativeTarget "tktest-X11" */; + buildPhases = ( + F9FD30B40CC1AD070073837D /* ShellScript */, + F9FD30B50CC1AD070073837D /* ShellScript */, + F9FD30BB0CC1AD070073837D /* Sources */, + F9FD31E30CC1AD070073837D /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "tktest-X11"; + productInstallPath = "$(BINDIR)"; + productName = tktest; + productReference = F9FD31F40CC1AD070073837D /* tktest-X11 */; + productType = "com.apple.product-type.tool"; + }; + F9E61D16090A3E94002B3151 /* Tk */ = { + isa = PBXNativeTarget; + buildConfigurationList = F95CC8AB09158F3100EA5ACE /* Build configuration list for PBXNativeTarget "Tk" */; + buildPhases = ( + F97AF02F0B665DA900310EA2 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Tk; + productName = Wish; + productReference = F9A3084B08F2D4CE00BAE1AB /* Wish.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 08FB7793FE84155DC02AAC07 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + }; + buildConfigurationList = F95CC8B509158F3100EA5ACE /* Build configuration list for PBXProject "Wish" */; + compatibilityVersion = "Xcode 3.2"; + hasScannedForEncodings = 1; + mainGroup = 08FB7794FE84155DC02AAC07 /* Wish */; + projectDirPath = ""; + projectRoot = ..; + targets = ( + F9E61D16090A3E94002B3151 /* Tk */, + 8DD76FA90486AB0100D96B5E /* tktest */, + F97258A50A86873C00096C78 /* tktest-X11 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXShellScriptBuildPhase section */ + F97AF02F0B665DA900310EA2 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_TEMP_DIR}/.none", + ); + outputPaths = ( + "${TARGET_BUILD_DIR}/${WRAPPER_NAME}", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/bash; + shellScript = "gnumake -C \"${TK_SRCROOT}/macosx\" -j \"$(sysctl -n hw.activecpu)\" \"$(echo \"${ACTION}\" | sed -e s/build// -e s/clean/distclean/ -e s/..\\*/\\&-/)${MAKE_TARGET}\" CFLAGS_WARNING=\"${WARNING_CFLAGS}\" CFLAGS_OPTIMIZE=\"-O${GCC_OPTIMIZATION_LEVEL}\" SYMROOT=\"${BUILT_PRODUCTS_DIR}\" OBJ_DIR=\"${OBJECT_FILE_DIR}\" INSTALL_ROOT=\"${DSTROOT}\" PREFIX=\"${PREFIX}\" BINDIR=\"${BINDIR}\" LIBDIR=\"${FRAMEWORK_INSTALL_PATH}\" MANDIR=\"${MANDIR}\" EXTRA_CONFIGURE_ARGS=\"${CONFIGURE_ARGS}\" APPLICATION_INSTALL_PATH=\"${APPLICATION_INSTALL_PATH}\" TCL_BUILD_DIR=\"${TCL_BUILD_DIR}\" TCL_FRAMEWORK_DIR=\"${TCL_FRAMEWORK_DIR}\" ${EXTRA_MAKE_FLAGS}\nresult=$?\nif [ -e \"${BUILT_PRODUCTS_DIR}/tktest\" ]; then\n\trm -f \"${BUILT_PRODUCTS_DIR}/tktest\"\nfi\necho \"Done\"\nrm -f \"${SCRIPT_INPUT_FILE_0}\"\nexit ${result}\n"; + showEnvVarsInLog = 0; + }; + F9A5C5F508F651A2008AE941 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TCL_SRCROOT)/macosx/configure.ac", + "$(TCL_SRCROOT)/unix/configure.in", + "$(TCL_SRCROOT)/unix/tcl.m4", + "$(TCL_SRCROOT)/unix/aclocal.m4", + "$(TCL_SRCROOT)/unix/tclConfig.sh.in", + "$(TCL_SRCROOT)/unix/Makefile.in", + "$(TCL_SRCROOT)/unix/dltest/Makefile.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tcl/tclConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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"; + showEnvVarsInLog = 0; + }; + F9A5C5F608F651AB008AE941 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TK_SRCROOT)/macosx/configure.ac", + "$(TK_SRCROOT)/unix/configure.in", + "$(TK_SRCROOT)/unix/tcl.m4", + "$(TK_SRCROOT)/unix/aclocal.m4", + "$(TK_SRCROOT)/unix/tkConfig.sh.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tk/tkConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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"; + showEnvVarsInLog = 0; + }; + F9FD30B40CC1AD070073837D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TCL_SRCROOT)/macosx/configure.ac", + "$(TCL_SRCROOT)/unix/configure.in", + "$(TCL_SRCROOT)/unix/tcl.m4", + "$(TCL_SRCROOT)/unix/aclocal.m4", + "$(TCL_SRCROOT)/unix/tclConfig.sh.in", + "$(TCL_SRCROOT)/unix/Makefile.in", + "$(TCL_SRCROOT)/unix/dltest/Makefile.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tcl/tclConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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 --disable-corefoundation ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi\n"; + showEnvVarsInLog = 0; + }; + F9FD30B50CC1AD070073837D /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(TK_SRCROOT)/macosx/configure.ac", + "$(TK_SRCROOT)/unix/configure.in", + "$(TK_SRCROOT)/unix/tcl.m4", + "$(TK_SRCROOT)/unix/aclocal.m4", + "$(TK_SRCROOT)/unix/tkConfig.sh.in", + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/tk/tkConfig.sh", + ); + 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:-${DEVELOPER_DIR}/usr/bin/autoconf} && ${AUTOHEADER:-${DEVELOPER_DIR}/usr/bin/autoheader} || exit $?\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 PATH=\"${PATH}:/usr/X11R6/bin\" \"${TK_SRCROOT}\"/macosx/configure --cache-file=../config.cache --prefix=${PREFIX} --bindir=${BINDIR} --libdir=${LIBDIR} --mandir=${MANDIR} --includedir=${INCLUDEDIR} --disable-shared --disable-corefoundation --enable-xft --with-tcl=../tcl ${CONFIGURE_ARGS}\nelse\n ./config.status\nfi"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 8DD76FAB0486AB0100D96B5E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F96D456F08F272BB004A47F5 /* regcomp.c in Sources */, + F96D457208F272BB004A47F5 /* regerror.c in Sources */, + F96D457508F272BB004A47F5 /* regexec.c in Sources */, + F96D457608F272BB004A47F5 /* regfree.c in Sources */, + F96D457B08F272BB004A47F5 /* tclAlloc.c in Sources */, + F96D457C08F272BB004A47F5 /* tclAsync.c in Sources */, + F96D457D08F272BB004A47F5 /* tclBasic.c in Sources */, + F96D457E08F272BC004A47F5 /* tclBinary.c in Sources */, + F96D457F08F272BC004A47F5 /* tclCkalloc.c in Sources */, + F96D458008F272BC004A47F5 /* tclClock.c in Sources */, + F96D458108F272BC004A47F5 /* tclCmdAH.c in Sources */, + F96D458208F272BC004A47F5 /* tclCmdIL.c in Sources */, + F96D458308F272BC004A47F5 /* tclCmdMZ.c in Sources */, + F96D458408F272BC004A47F5 /* tclCompCmds.c in Sources */, + F96D458508F272BC004A47F5 /* tclCompExpr.c in Sources */, + F96D458608F272BC004A47F5 /* tclCompile.c in Sources */, + F96D458808F272BC004A47F5 /* tclConfig.c in Sources */, + F96D458908F272BC004A47F5 /* tclDate.c in Sources */, + F96D458B08F272BC004A47F5 /* tclDictObj.c in Sources */, + F96D458C08F272BC004A47F5 /* tclEncoding.c in Sources */, + F96D458D08F272BC004A47F5 /* tclEnv.c in Sources */, + F96D458E08F272BC004A47F5 /* tclEvent.c in Sources */, + F96D458F08F272BC004A47F5 /* tclExecute.c in Sources */, + F96D459008F272BC004A47F5 /* tclFCmd.c in Sources */, + F96D459108F272BC004A47F5 /* tclFileName.c in Sources */, + F96D459308F272BC004A47F5 /* tclGet.c in Sources */, + F96D459508F272BC004A47F5 /* tclHash.c in Sources */, + F96D459608F272BC004A47F5 /* tclHistory.c in Sources */, + F96D459708F272BC004A47F5 /* tclIndexObj.c in Sources */, + F96D459B08F272BC004A47F5 /* tclInterp.c in Sources */, + F96D459D08F272BC004A47F5 /* tclIO.c in Sources */, + F96D459F08F272BC004A47F5 /* tclIOCmd.c in Sources */, + F96D45A008F272BC004A47F5 /* tclIOGT.c in Sources */, + F96D45A108F272BC004A47F5 /* tclIORChan.c in Sources */, + F96D45A208F272BC004A47F5 /* tclIOSock.c in Sources */, + F96D45A308F272BC004A47F5 /* tclIOUtil.c in Sources */, + F96D45A408F272BC004A47F5 /* tclLink.c in Sources */, + F96D45A508F272BC004A47F5 /* tclListObj.c in Sources */, + F96D45A608F272BC004A47F5 /* tclLiteral.c in Sources */, + F96D45A708F272BC004A47F5 /* tclLoad.c in Sources */, + F96D45A908F272BC004A47F5 /* tclMain.c in Sources */, + F96D45AA08F272BC004A47F5 /* tclNamesp.c in Sources */, + F96D45AB08F272BC004A47F5 /* tclNotify.c in Sources */, + F96D45AC08F272BC004A47F5 /* tclObj.c in Sources */, + F96D45AD08F272BC004A47F5 /* tclPanic.c in Sources */, + F96D45AE08F272BC004A47F5 /* tclParse.c in Sources */, + F96D45B008F272BC004A47F5 /* tclPathObj.c in Sources */, + F96D45B108F272BC004A47F5 /* tclPipe.c in Sources */, + F96D45B208F272BC004A47F5 /* tclPkg.c in Sources */, + F96D45B308F272BC004A47F5 /* tclPkgConfig.c in Sources */, + F96D45B608F272BC004A47F5 /* tclPosixStr.c in Sources */, + F96D45B708F272BC004A47F5 /* tclPreserve.c in Sources */, + F96D45B808F272BC004A47F5 /* tclProc.c in Sources */, + F96D45B908F272BC004A47F5 /* tclRegexp.c in Sources */, + F96D45BB08F272BC004A47F5 /* tclResolve.c in Sources */, + F96D45BC08F272BC004A47F5 /* tclResult.c in Sources */, + F96D45BD08F272BC004A47F5 /* tclScan.c in Sources */, + F96D45BE08F272BC004A47F5 /* tclStringObj.c in Sources */, + F96D45C308F272BC004A47F5 /* tclStrToD.c in Sources */, + F96D45C408F272BC004A47F5 /* tclStubInit.c in Sources */, + F96D45C508F272BC004A47F5 /* tclStubLib.c in Sources */, + F96D45C908F272BC004A47F5 /* tclThread.c in Sources */, + F96D45CA08F272BC004A47F5 /* tclThreadAlloc.c in Sources */, + F96D45CB08F272BC004A47F5 /* tclThreadJoin.c in Sources */, + F96D45CC08F272BC004A47F5 /* tclThreadStorage.c in Sources */, + F96D45CE08F272BC004A47F5 /* tclTimer.c in Sources */, + F96D45D008F272BC004A47F5 /* tclTomMathInterface.c in Sources */, + F96D45D108F272BC004A47F5 /* tclTrace.c in Sources */, + F96D45D308F272BC004A47F5 /* tclUtf.c in Sources */, + F96D45D408F272BC004A47F5 /* tclUtil.c in Sources */, + F96D45D508F272BC004A47F5 /* tclVar.c in Sources */, + F96D48E208F272C3004A47F5 /* bn_fast_s_mp_mul_digs.c in Sources */, + F96D48E408F272C3004A47F5 /* bn_fast_s_mp_sqr.c in Sources */, + F96D48E708F272C3004A47F5 /* bn_mp_add.c in Sources */, + F96D48E808F272C3004A47F5 /* bn_mp_add_d.c in Sources */, + F9E61D2B090A48A4002B3151 /* bn_mp_and.c in Sources */, + F96D48EB08F272C3004A47F5 /* bn_mp_clamp.c in Sources */, + F96D48EC08F272C3004A47F5 /* bn_mp_clear.c in Sources */, + F96D48ED08F272C3004A47F5 /* bn_mp_clear_multi.c in Sources */, + F96D48EE08F272C3004A47F5 /* bn_mp_cmp.c in Sources */, + F9E61D28090A481F002B3151 /* bn_mp_cmp_d.c in Sources */, + F96D48F008F272C3004A47F5 /* bn_mp_cmp_mag.c in Sources */, + F96D48F208F272C3004A47F5 /* bn_mp_copy.c in Sources */, + F96D48F308F272C3004A47F5 /* bn_mp_count_bits.c in Sources */, + F96D48F408F272C3004A47F5 /* bn_mp_div.c in Sources */, + F96D48F508F272C3004A47F5 /* bn_mp_div_2.c in Sources */, + F96D48F608F272C3004A47F5 /* bn_mp_div_2d.c in Sources */, + F96D48F708F272C3004A47F5 /* bn_mp_div_3.c in Sources */, + F96D48F808F272C3004A47F5 /* bn_mp_div_d.c in Sources */, + F96D48FC08F272C3004A47F5 /* bn_mp_exch.c in Sources */, + F9E61D2C090A48AC002B3151 /* bn_mp_expt_d.c in Sources */, + F96D490508F272C3004A47F5 /* bn_mp_grow.c in Sources */, + F96D490608F272C3004A47F5 /* bn_mp_init.c in Sources */, + F96D490708F272C3004A47F5 /* bn_mp_init_copy.c in Sources */, + F96D490808F272C3004A47F5 /* bn_mp_init_multi.c in Sources */, + F96D490908F272C3004A47F5 /* bn_mp_init_set.c in Sources */, + F96D490B08F272C3004A47F5 /* bn_mp_init_size.c in Sources */, + F96D491008F272C3004A47F5 /* bn_mp_karatsuba_mul.c in Sources */, + F96D491108F272C3004A47F5 /* bn_mp_karatsuba_sqr.c in Sources */, + F96D491308F272C3004A47F5 /* bn_mp_lshd.c in Sources */, + F96D491408F272C3004A47F5 /* bn_mp_mod.c in Sources */, + F96D491508F272C3004A47F5 /* bn_mp_mod_2d.c in Sources */, + F96D491A08F272C3004A47F5 /* bn_mp_mul.c in Sources */, + F96D491B08F272C3004A47F5 /* bn_mp_mul_2.c in Sources */, + F96D491C08F272C3004A47F5 /* bn_mp_mul_2d.c in Sources */, + F96D491D08F272C3004A47F5 /* bn_mp_mul_d.c in Sources */, + F9E61D29090A486C002B3151 /* bn_mp_neg.c in Sources */, + F9E61D2E090A48BF002B3151 /* bn_mp_or.c in Sources */, + F96D492908F272C3004A47F5 /* bn_mp_radix_size.c in Sources */, + F96D492A08F272C3004A47F5 /* bn_mp_radix_smap.c in Sources */, + F96D492C08F272C3004A47F5 /* bn_mp_read_radix.c in Sources */, + F96D493708F272C3004A47F5 /* bn_mp_rshd.c in Sources */, + F96D493808F272C3004A47F5 /* bn_mp_set.c in Sources */, + F9E61D2F090A48C7002B3151 /* bn_mp_shrink.c in Sources */, + F96D493C08F272C3004A47F5 /* bn_mp_sqr.c in Sources */, + F9E61D2A090A4891002B3151 /* bn_mp_sqrt.c in Sources */, + F96D493F08F272C3004A47F5 /* bn_mp_sub.c in Sources */, + F96D494008F272C3004A47F5 /* bn_mp_sub_d.c in Sources */, + F9E61D30090A48E2002B3151 /* bn_mp_to_unsigned_bin_n.c in Sources */, + F9E61D31090A48F9002B3151 /* bn_mp_to_unsigned_bin.c in Sources */, + F96D494608F272C3004A47F5 /* bn_mp_toom_mul.c in Sources */, + F96D494708F272C3004A47F5 /* bn_mp_toom_sqr.c in Sources */, + F96D494908F272C3004A47F5 /* bn_mp_toradix_n.c in Sources */, + F9E61D32090A48FA002B3151 /* bn_mp_unsigned_bin_size.c in Sources */, + F9E61D2D090A48BB002B3151 /* bn_mp_xor.c in Sources */, + F96D494C08F272C3004A47F5 /* bn_mp_zero.c in Sources */, + F96D494E08F272C3004A47F5 /* bn_reverse.c in Sources */, + F96D494F08F272C3004A47F5 /* bn_s_mp_add.c in Sources */, + F96D495108F272C3004A47F5 /* bn_s_mp_mul_digs.c in Sources */, + F96D495308F272C3004A47F5 /* bn_s_mp_sqr.c in Sources */, + F96D495408F272C3004A47F5 /* bn_s_mp_sub.c in Sources */, + F96D495508F272C3004A47F5 /* bncore.c in Sources */, + F96D49A908F272C4004A47F5 /* tclMacOSXBundle.c in Sources */, + F96D49AD08F272C4004A47F5 /* tclMacOSXFCmd.c in Sources */, + F96D49AE08F272C4004A47F5 /* tclMacOSXNotify.c in Sources */, + F96D4AC608F272C9004A47F5 /* tclLoadDyld.c in Sources */, + F96D4ACA08F272C9004A47F5 /* tclUnixChan.c in Sources */, + F9FC77B80AB29E9100B7077D /* tclUnixCompat.c in Sources */, + F96D4ACB08F272C9004A47F5 /* tclUnixEvent.c in Sources */, + F96D4ACC08F272C9004A47F5 /* tclUnixFCmd.c in Sources */, + F96D4ACD08F272C9004A47F5 /* tclUnixFile.c in Sources */, + F96D4ACE08F272C9004A47F5 /* tclUnixInit.c in Sources */, + F96D4ACF08F272C9004A47F5 /* tclUnixNotfy.c in Sources */, + F96D4AD008F272C9004A47F5 /* tclUnixPipe.c in Sources */, + F96D4AD208F272CA004A47F5 /* tclUnixSock.c in Sources */, + F96D4AD408F272CA004A47F5 /* tclUnixThrd.c in Sources */, + F96D4AD608F272CA004A47F5 /* tclUnixTime.c in Sources */, + F9F4415E0C8BAE6F00BCCD67 /* tclDTrace.d in Sources */, + F966BDCF08F27A3F005CB29B /* tk3d.c in Sources */, + F966BDD108F27A3F005CB29B /* tkArgv.c in Sources */, + F966BDD208F27A3F005CB29B /* tkAtom.c in Sources */, + F966BDD308F27A3F005CB29B /* tkBind.c in Sources */, + F966BDD408F27A3F005CB29B /* tkBitmap.c in Sources */, + F966BDD508F27A3F005CB29B /* tkButton.c in Sources */, + F966BDD708F27A3F005CB29B /* tkCanvArc.c in Sources */, + F966BDD808F27A3F005CB29B /* tkCanvas.c in Sources */, + F966BDDA08F27A3F005CB29B /* tkCanvBmap.c in Sources */, + F966BDDB08F27A3F005CB29B /* tkCanvImg.c in Sources */, + F966BDDC08F27A3F005CB29B /* tkCanvLine.c in Sources */, + F966BDDD08F27A3F005CB29B /* tkCanvPoly.c in Sources */, + F966BDDE08F27A3F005CB29B /* tkCanvPs.c in Sources */, + F966BDE008F27A3F005CB29B /* tkCanvText.c in Sources */, + F966BDE108F27A3F005CB29B /* tkCanvUtil.c in Sources */, + F966BDE208F27A3F005CB29B /* tkCanvWind.c in Sources */, + F966BDE308F27A3F005CB29B /* tkClipboard.c in Sources */, + F966BDE408F27A3F005CB29B /* tkCmds.c in Sources */, + F966BDE508F27A3F005CB29B /* tkColor.c in Sources */, + F966BDE708F27A3F005CB29B /* tkConfig.c in Sources */, + F966BDE808F27A3F005CB29B /* tkConsole.c in Sources */, + F966BDE908F27A3F005CB29B /* tkCursor.c in Sources */, + F966BDEB08F27A3F005CB29B /* tkEntry.c in Sources */, + F966BDED08F27A3F005CB29B /* tkError.c in Sources */, + F966BDEE08F27A3F005CB29B /* tkEvent.c in Sources */, + F966BDEF08F27A3F005CB29B /* tkFileFilter.c in Sources */, + F966BDF108F27A3F005CB29B /* tkFocus.c in Sources */, + F966BDF208F27A3F005CB29B /* tkFont.c in Sources */, + F966BDF408F27A3F005CB29B /* tkFrame.c in Sources */, + F966BDF508F27A3F005CB29B /* tkGC.c in Sources */, + F966BDF608F27A3F005CB29B /* tkGeometry.c in Sources */, + F966BDF708F27A3F005CB29B /* tkGet.c in Sources */, + F966BDF808F27A3F005CB29B /* tkGrab.c in Sources */, + F966BDF908F27A3F005CB29B /* tkGrid.c in Sources */, + F966BDFA08F27A3F005CB29B /* tkImage.c in Sources */, + F966BDFB08F27A3F005CB29B /* tkImgBmap.c in Sources */, + F966BDFC08F27A3F005CB29B /* tkImgGIF.c in Sources */, + F966BDFD08F27A3F005CB29B /* tkImgPhoto.c in Sources */, + F966BDFE08F27A3F005CB29B /* tkImgPPM.c in Sources */, + F966BE0708F27A3F005CB29B /* tkListbox.c in Sources */, + F966BE0808F27A3F005CB29B /* tkMacWinMenu.c in Sources */, + F966BE0908F27A3F005CB29B /* tkMain.c in Sources */, + F966BE0A08F27A3F005CB29B /* tkMenu.c in Sources */, + F966BE0C08F27A3F005CB29B /* tkMenubutton.c in Sources */, + F966BE0E08F27A3F005CB29B /* tkMenuDraw.c in Sources */, + F966BE0F08F27A3F005CB29B /* tkMessage.c in Sources */, + F966BE1008F27A3F005CB29B /* tkObj.c in Sources */, + F966BE1108F27A3F005CB29B /* tkOldConfig.c in Sources */, + F9067BCD0BFBA2900074F726 /* tkOldTest.c in Sources */, + F966BE1208F27A3F005CB29B /* tkOption.c in Sources */, + F966BE1308F27A3F005CB29B /* tkPack.c in Sources */, + F966BE1408F27A3F005CB29B /* tkPanedWindow.c in Sources */, + F966BE1508F27A3F005CB29B /* tkPlace.c in Sources */, + F966BE1708F27A3F005CB29B /* tkPointer.c in Sources */, + F966BE1908F27A3F005CB29B /* tkRectOval.c in Sources */, + F966BE1A08F27A3F005CB29B /* tkScale.c in Sources */, + F966BE1C08F27A40005CB29B /* tkScrollbar.c in Sources */, + F966BE1E08F27A40005CB29B /* tkSelect.c in Sources */, + F966BE2008F27A40005CB29B /* tkSquare.c in Sources */, + F966BE2208F27A40005CB29B /* tkStubInit.c in Sources */, + F966BE2308F27A40005CB29B /* tkStubLib.c in Sources */, + F966BE2408F27A40005CB29B /* tkStyle.c in Sources */, + F966BE2508F27A40005CB29B /* tkTest.c in Sources */, + F966BE2608F27A40005CB29B /* tkText.c in Sources */, + F966BE2808F27A40005CB29B /* tkTextBTree.c in Sources */, + F966BE2908F27A40005CB29B /* tkTextDisp.c in Sources */, + F966BE2B08F27A40005CB29B /* tkTextImage.c in Sources */, + F966BE2C08F27A40005CB29B /* tkTextIndex.c in Sources */, + F966BE2D08F27A40005CB29B /* tkTextMark.c in Sources */, + F966BE2E08F27A40005CB29B /* tkTextTag.c in Sources */, + F966BE2F08F27A40005CB29B /* tkTextWind.c in Sources */, + F966BE3008F27A40005CB29B /* tkTrig.c in Sources */, + F966BE3108F27A40005CB29B /* tkUndo.c in Sources */, + F966BE3308F27A40005CB29B /* tkUtil.c in Sources */, + F966BE3408F27A40005CB29B /* tkVisual.c in Sources */, + F966BE3508F27A40005CB29B /* tkWindow.c in Sources */, + F96888050AF786D5000797B5 /* ttkBlink.c in Sources */, + F96888060AF786D5000797B5 /* ttkButton.c in Sources */, + F96888070AF786D5000797B5 /* ttkCache.c in Sources */, + F96888080AF786D5000797B5 /* ttkClamTheme.c in Sources */, + F96888090AF786D5000797B5 /* ttkClassicTheme.c in Sources */, + F968880A0AF786D5000797B5 /* ttkDefaultTheme.c in Sources */, + F968880B0AF786D5000797B5 /* ttkElements.c in Sources */, + F968880C0AF786D5000797B5 /* ttkEntry.c in Sources */, + F968880D0AF786D5000797B5 /* ttkFrame.c in Sources */, + F968880E0AF786D5000797B5 /* ttkImage.c in Sources */, + F968880F0AF786D5000797B5 /* ttkInit.c in Sources */, + F96888100AF786D5000797B5 /* ttkLabel.c in Sources */, + F96888110AF786D5000797B5 /* ttkLayout.c in Sources */, + F96888120AF786D5000797B5 /* ttkManager.c in Sources */, + F96888130AF786D5000797B5 /* ttkNotebook.c in Sources */, + F96888140AF786D5000797B5 /* ttkPanedwindow.c in Sources */, + F96888150AF786D5000797B5 /* ttkProgress.c in Sources */, + F96888160AF786D5000797B5 /* ttkScale.c in Sources */, + F96888170AF786D5000797B5 /* ttkScroll.c in Sources */, + F96888180AF786D5000797B5 /* ttkScrollbar.c in Sources */, + F96888190AF786D5000797B5 /* ttkSeparator.c in Sources */, + F968881A0AF786D5000797B5 /* ttkSquare.c in Sources */, + F968881B0AF786D5000797B5 /* ttkState.c in Sources */, + F968881C0AF786D5000797B5 /* ttkStubInit.c in Sources */, + F968881D0AF786D5000797B5 /* ttkStubLib.c in Sources */, + F968881E0AF786D5000797B5 /* ttkTagSet.c in Sources */, + F968881F0AF786D5000797B5 /* ttkTheme.c in Sources */, + F96888200AF786D5000797B5 /* ttkTrace.c in Sources */, + F96888210AF786D5000797B5 /* ttkTrack.c in Sources */, + F96888220AF786D5000797B5 /* ttkTreeview.c in Sources */, + F96888230AF786D5000797B5 /* ttkWidget.c in Sources */, + F966BEDB08F27A40005CB29B /* tkMacOSXBitmap.c in Sources */, + F966BEDC08F27A40005CB29B /* tkMacOSXButton.c in Sources */, + F966BEDE08F27A40005CB29B /* tkMacOSXClipboard.c in Sources */, + F966BEDF08F27A40005CB29B /* tkMacOSXColor.c in Sources */, + F966BEE008F27A40005CB29B /* tkMacOSXConfig.c in Sources */, + F966BEE108F27A40005CB29B /* tkMacOSXCursor.c in Sources */, + F966BEE308F27A40005CB29B /* tkMacOSXDebug.c in Sources */, + F966BEE608F27A40005CB29B /* tkMacOSXDialog.c in Sources */, + F966BEE708F27A40005CB29B /* tkMacOSXDraw.c in Sources */, + F966BEE808F27A40005CB29B /* tkMacOSXEmbed.c in Sources */, + F966BEE908F27A40005CB29B /* tkMacOSXEntry.c in Sources */, + F966BEEA08F27A40005CB29B /* tkMacOSXEvent.c in Sources */, + F966BEEC08F27A40005CB29B /* tkMacOSXFont.c in Sources */, + F966BEED08F27A40005CB29B /* tkMacOSXHLEvents.c in Sources */, + F966BEEE08F27A40005CB29B /* tkMacOSXInit.c in Sources */, + F966BEF108F27A40005CB29B /* tkMacOSXKeyboard.c in Sources */, + F966BEF208F27A40005CB29B /* tkMacOSXKeyEvent.c in Sources */, + F966BEF308F27A40005CB29B /* tkMacOSXMenu.c in Sources */, + F966BEF608F27A40005CB29B /* tkMacOSXMenubutton.c in Sources */, + F966BEF708F27A40005CB29B /* tkMacOSXMenus.c in Sources */, + F966BEF808F27A40005CB29B /* tkMacOSXMouseEvent.c in Sources */, + F966BEF908F27A40005CB29B /* tkMacOSXNotify.c in Sources */, + F966BF0108F27A40005CB29B /* tkMacOSXRegion.c in Sources */, + F966BF0308F27A40005CB29B /* tkMacOSXScrlbr.c in Sources */, + F966BF0408F27A40005CB29B /* tkMacOSXSend.c in Sources */, + F966BF0508F27A40005CB29B /* tkMacOSXSubwindows.c in Sources */, + F966BF0608F27A40005CB29B /* tkMacOSXTest.c in Sources */, + F966BF0708F27A40005CB29B /* tkMacOSXWindowEvent.c in Sources */, + F966BF0808F27A40005CB29B /* tkMacOSXWm.c in Sources */, + F966BF0B08F27A40005CB29B /* tkMacOSXXStubs.c in Sources */, + F96888850AF78938000797B5 /* ttkMacOSXTheme.c in Sources */, + F966BF7F08F27A41005CB29B /* tkAppInit.c in Sources */, + F966BF8308F27A41005CB29B /* tkUnix3d.c in Sources */, + F966BF9608F27A41005CB29B /* tkUnixScale.c in Sources */, + F966C02A08F27A42005CB29B /* xcolors.c in Sources */, + F966C02B08F27A42005CB29B /* xdraw.c in Sources */, + F966C02C08F27A42005CB29B /* xgc.c in Sources */, + F966C02D08F27A42005CB29B /* ximage.c in Sources */, + F966C02E08F27A42005CB29B /* xutil.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F9FD30BB0CC1AD070073837D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F9FD30BC0CC1AD070073837D /* regcomp.c in Sources */, + F9FD30BD0CC1AD070073837D /* regerror.c in Sources */, + F9FD30BE0CC1AD070073837D /* regexec.c in Sources */, + F9FD30BF0CC1AD070073837D /* regfree.c in Sources */, + F9FD30C00CC1AD070073837D /* tclAlloc.c in Sources */, + F9FD30C10CC1AD070073837D /* tclAsync.c in Sources */, + F9FD30C20CC1AD070073837D /* tclBasic.c in Sources */, + F9FD30C30CC1AD070073837D /* tclBinary.c in Sources */, + F9FD30C40CC1AD070073837D /* tclCkalloc.c in Sources */, + F9FD30C50CC1AD070073837D /* tclClock.c in Sources */, + F9FD30C60CC1AD070073837D /* tclCmdAH.c in Sources */, + F9FD30C70CC1AD070073837D /* tclCmdIL.c in Sources */, + F9FD30C80CC1AD070073837D /* tclCmdMZ.c in Sources */, + F9FD30C90CC1AD070073837D /* tclCompCmds.c in Sources */, + F9FD30CA0CC1AD070073837D /* tclCompExpr.c in Sources */, + F9FD30CB0CC1AD070073837D /* tclCompile.c in Sources */, + F9FD30CC0CC1AD070073837D /* tclConfig.c in Sources */, + F9FD30CD0CC1AD070073837D /* tclDate.c in Sources */, + F9FD30CE0CC1AD070073837D /* tclDictObj.c in Sources */, + F9FD30CF0CC1AD070073837D /* tclEncoding.c in Sources */, + F9FD30D00CC1AD070073837D /* tclEnv.c in Sources */, + F9FD30D10CC1AD070073837D /* tclEvent.c in Sources */, + F9FD30D20CC1AD070073837D /* tclExecute.c in Sources */, + F9FD30D30CC1AD070073837D /* tclFCmd.c in Sources */, + F9FD30D40CC1AD070073837D /* tclFileName.c in Sources */, + F9FD30D50CC1AD070073837D /* tclGet.c in Sources */, + F9FD30D60CC1AD070073837D /* tclHash.c in Sources */, + F9FD30D70CC1AD070073837D /* tclHistory.c in Sources */, + F9FD30D80CC1AD070073837D /* tclIndexObj.c in Sources */, + F9FD30D90CC1AD070073837D /* tclInterp.c in Sources */, + F9FD30DA0CC1AD070073837D /* tclIO.c in Sources */, + F9FD30DB0CC1AD070073837D /* tclIOCmd.c in Sources */, + F9FD30DC0CC1AD070073837D /* tclIOGT.c in Sources */, + F9FD30DD0CC1AD070073837D /* tclIORChan.c in Sources */, + F9FD30DE0CC1AD070073837D /* tclIOSock.c in Sources */, + F9FD30DF0CC1AD070073837D /* tclIOUtil.c in Sources */, + F9FD30E00CC1AD070073837D /* tclLink.c in Sources */, + F9FD30E10CC1AD070073837D /* tclListObj.c in Sources */, + F9FD30E20CC1AD070073837D /* tclLiteral.c in Sources */, + F9FD30E30CC1AD070073837D /* tclLoad.c in Sources */, + F9FD30E40CC1AD070073837D /* tclMain.c in Sources */, + F9FD30E50CC1AD070073837D /* tclNamesp.c in Sources */, + F9FD30E60CC1AD070073837D /* tclNotify.c in Sources */, + F9FD30E70CC1AD070073837D /* tclObj.c in Sources */, + F9FD30E80CC1AD070073837D /* tclPanic.c in Sources */, + F9FD30E90CC1AD070073837D /* tclParse.c in Sources */, + F9FD30EA0CC1AD070073837D /* tclPathObj.c in Sources */, + F9FD30EB0CC1AD070073837D /* tclPipe.c in Sources */, + F9FD30EC0CC1AD070073837D /* tclPkg.c in Sources */, + F9FD30ED0CC1AD070073837D /* tclPkgConfig.c in Sources */, + F9FD30EE0CC1AD070073837D /* tclPosixStr.c in Sources */, + F9FD30EF0CC1AD070073837D /* tclPreserve.c in Sources */, + F9FD30F00CC1AD070073837D /* tclProc.c in Sources */, + F9FD30F10CC1AD070073837D /* tclRegexp.c in Sources */, + F9FD30F20CC1AD070073837D /* tclResolve.c in Sources */, + F9FD30F30CC1AD070073837D /* tclResult.c in Sources */, + F9FD30F40CC1AD070073837D /* tclScan.c in Sources */, + F9FD30F50CC1AD070073837D /* tclStringObj.c in Sources */, + F9FD30F60CC1AD070073837D /* tclStrToD.c in Sources */, + F9FD30F70CC1AD070073837D /* tclStubInit.c in Sources */, + F9FD30F80CC1AD070073837D /* tclStubLib.c in Sources */, + F9FD30F90CC1AD070073837D /* tclThread.c in Sources */, + F9FD30FA0CC1AD070073837D /* tclThreadAlloc.c in Sources */, + F9FD30FB0CC1AD070073837D /* tclThreadJoin.c in Sources */, + F9FD30FC0CC1AD070073837D /* tclThreadStorage.c in Sources */, + F9FD30FD0CC1AD070073837D /* tclTimer.c in Sources */, + F9FD30FE0CC1AD070073837D /* tclTomMathInterface.c in Sources */, + F9FD30FF0CC1AD070073837D /* tclTrace.c in Sources */, + F9FD31000CC1AD070073837D /* tclUtf.c in Sources */, + F9FD31010CC1AD070073837D /* tclUtil.c in Sources */, + F9FD31020CC1AD070073837D /* tclVar.c in Sources */, + F9FD31030CC1AD070073837D /* bn_fast_s_mp_mul_digs.c in Sources */, + F9FD31040CC1AD070073837D /* bn_fast_s_mp_sqr.c in Sources */, + F9FD31050CC1AD070073837D /* bn_mp_add.c in Sources */, + F9FD31060CC1AD070073837D /* bn_mp_add_d.c in Sources */, + F9FD31070CC1AD070073837D /* bn_mp_and.c in Sources */, + F9FD31080CC1AD070073837D /* bn_mp_clamp.c in Sources */, + F9FD31090CC1AD070073837D /* bn_mp_clear.c in Sources */, + F9FD310A0CC1AD070073837D /* bn_mp_clear_multi.c in Sources */, + F9FD310B0CC1AD070073837D /* bn_mp_cmp.c in Sources */, + F9FD310C0CC1AD070073837D /* bn_mp_cmp_d.c in Sources */, + F9FD310D0CC1AD070073837D /* bn_mp_cmp_mag.c in Sources */, + F9FD310E0CC1AD070073837D /* bn_mp_copy.c in Sources */, + F9FD310F0CC1AD070073837D /* bn_mp_count_bits.c in Sources */, + F9FD31100CC1AD070073837D /* bn_mp_div.c in Sources */, + F9FD31110CC1AD070073837D /* bn_mp_div_2.c in Sources */, + F9FD31120CC1AD070073837D /* bn_mp_div_2d.c in Sources */, + F9FD31130CC1AD070073837D /* bn_mp_div_3.c in Sources */, + F9FD31140CC1AD070073837D /* bn_mp_div_d.c in Sources */, + F9FD31150CC1AD070073837D /* bn_mp_exch.c in Sources */, + F9FD31160CC1AD070073837D /* bn_mp_expt_d.c in Sources */, + F9FD31170CC1AD070073837D /* bn_mp_grow.c in Sources */, + F9FD31180CC1AD070073837D /* bn_mp_init.c in Sources */, + F9FD31190CC1AD070073837D /* bn_mp_init_copy.c in Sources */, + F9FD311A0CC1AD070073837D /* bn_mp_init_multi.c in Sources */, + F9FD311B0CC1AD070073837D /* bn_mp_init_set.c in Sources */, + F9FD311C0CC1AD070073837D /* bn_mp_init_size.c in Sources */, + F9FD311D0CC1AD070073837D /* bn_mp_karatsuba_mul.c in Sources */, + F9FD311E0CC1AD070073837D /* bn_mp_karatsuba_sqr.c in Sources */, + F9FD311F0CC1AD070073837D /* bn_mp_lshd.c in Sources */, + F9FD31200CC1AD070073837D /* bn_mp_mod.c in Sources */, + F9FD31210CC1AD070073837D /* bn_mp_mod_2d.c in Sources */, + F9FD31220CC1AD070073837D /* bn_mp_mul.c in Sources */, + F9FD31230CC1AD070073837D /* bn_mp_mul_2.c in Sources */, + F9FD31240CC1AD070073837D /* bn_mp_mul_2d.c in Sources */, + F9FD31250CC1AD070073837D /* bn_mp_mul_d.c in Sources */, + F9FD31260CC1AD070073837D /* bn_mp_neg.c in Sources */, + F9FD31270CC1AD070073837D /* bn_mp_or.c in Sources */, + F9FD31280CC1AD070073837D /* bn_mp_radix_size.c in Sources */, + F9FD31290CC1AD070073837D /* bn_mp_radix_smap.c in Sources */, + F9FD312A0CC1AD070073837D /* bn_mp_read_radix.c in Sources */, + F9FD312B0CC1AD070073837D /* bn_mp_rshd.c in Sources */, + F9FD312C0CC1AD070073837D /* bn_mp_set.c in Sources */, + F9FD312D0CC1AD070073837D /* bn_mp_shrink.c in Sources */, + F9FD312E0CC1AD070073837D /* bn_mp_sqr.c in Sources */, + F9FD312F0CC1AD070073837D /* bn_mp_sqrt.c in Sources */, + F9FD31300CC1AD070073837D /* bn_mp_sub.c in Sources */, + F9FD31310CC1AD070073837D /* bn_mp_sub_d.c in Sources */, + F9FD31320CC1AD070073837D /* bn_mp_to_unsigned_bin_n.c in Sources */, + F9FD31330CC1AD070073837D /* bn_mp_to_unsigned_bin.c in Sources */, + F9FD31340CC1AD070073837D /* bn_mp_toom_mul.c in Sources */, + F9FD31350CC1AD070073837D /* bn_mp_toom_sqr.c in Sources */, + F9FD31360CC1AD070073837D /* bn_mp_toradix_n.c in Sources */, + F9FD31370CC1AD070073837D /* bn_mp_unsigned_bin_size.c in Sources */, + F9FD31380CC1AD070073837D /* bn_mp_xor.c in Sources */, + F9FD31390CC1AD070073837D /* bn_mp_zero.c in Sources */, + F9FD313A0CC1AD070073837D /* bn_reverse.c in Sources */, + F9FD313B0CC1AD070073837D /* bn_s_mp_add.c in Sources */, + F9FD313C0CC1AD070073837D /* bn_s_mp_mul_digs.c in Sources */, + F9FD313D0CC1AD070073837D /* bn_s_mp_sqr.c in Sources */, + F9FD313E0CC1AD070073837D /* bn_s_mp_sub.c in Sources */, + F9FD313F0CC1AD070073837D /* bncore.c in Sources */, + F9FD31400CC1AD070073837D /* tclMacOSXBundle.c in Sources */, + F9FD31410CC1AD070073837D /* tclMacOSXFCmd.c in Sources */, + F9FD31420CC1AD070073837D /* tclMacOSXNotify.c in Sources */, + F9FD31430CC1AD070073837D /* tclLoadDyld.c in Sources */, + F9FD31440CC1AD070073837D /* tclUnixChan.c in Sources */, + F9FD31450CC1AD070073837D /* tclUnixCompat.c in Sources */, + F9FD31460CC1AD070073837D /* tclUnixEvent.c in Sources */, + F9FD31470CC1AD070073837D /* tclUnixFCmd.c in Sources */, + F9FD31480CC1AD070073837D /* tclUnixFile.c in Sources */, + F9FD31490CC1AD070073837D /* tclUnixInit.c in Sources */, + F9FD314A0CC1AD070073837D /* tclUnixNotfy.c in Sources */, + F9FD314B0CC1AD070073837D /* tclUnixPipe.c in Sources */, + F9FD314C0CC1AD070073837D /* tclUnixSock.c in Sources */, + F9FD314D0CC1AD070073837D /* tclUnixThrd.c in Sources */, + F9FD314E0CC1AD070073837D /* tclUnixTime.c in Sources */, + F9FD31E20CC1AD070073837D /* tclDTrace.d in Sources */, + F9FD314F0CC1AD070073837D /* tk3d.c in Sources */, + F9FD31500CC1AD070073837D /* tkArgv.c in Sources */, + F9FD31510CC1AD070073837D /* tkAtom.c in Sources */, + F9FD31520CC1AD070073837D /* tkBind.c in Sources */, + F9FD31530CC1AD070073837D /* tkBitmap.c in Sources */, + F9FD31540CC1AD070073837D /* tkButton.c in Sources */, + F9FD31550CC1AD070073837D /* tkCanvArc.c in Sources */, + F9FD31560CC1AD070073837D /* tkCanvas.c in Sources */, + F9FD31570CC1AD070073837D /* tkCanvBmap.c in Sources */, + F9FD31580CC1AD070073837D /* tkCanvImg.c in Sources */, + F9FD31590CC1AD070073837D /* tkCanvLine.c in Sources */, + F9FD315A0CC1AD070073837D /* tkCanvPoly.c in Sources */, + F9FD315B0CC1AD070073837D /* tkCanvPs.c in Sources */, + F9FD315C0CC1AD070073837D /* tkCanvText.c in Sources */, + F9FD315D0CC1AD070073837D /* tkCanvUtil.c in Sources */, + F9FD315E0CC1AD070073837D /* tkCanvWind.c in Sources */, + F9FD315F0CC1AD070073837D /* tkClipboard.c in Sources */, + F9FD31600CC1AD070073837D /* tkCmds.c in Sources */, + F9FD31610CC1AD070073837D /* tkColor.c in Sources */, + F9FD31620CC1AD070073837D /* tkConfig.c in Sources */, + F9FD31630CC1AD070073837D /* tkConsole.c in Sources */, + F9FD31640CC1AD070073837D /* tkCursor.c in Sources */, + F9FD31650CC1AD070073837D /* tkEntry.c in Sources */, + F9FD31660CC1AD070073837D /* tkError.c in Sources */, + F9FD31670CC1AD070073837D /* tkEvent.c in Sources */, + F9FD31680CC1AD070073837D /* tkFileFilter.c in Sources */, + F9FD31690CC1AD070073837D /* tkFocus.c in Sources */, + F9FD316A0CC1AD070073837D /* tkFont.c in Sources */, + F9FD316B0CC1AD070073837D /* tkFrame.c in Sources */, + F9FD316C0CC1AD070073837D /* tkGC.c in Sources */, + F9FD316D0CC1AD070073837D /* tkGeometry.c in Sources */, + F9FD316E0CC1AD070073837D /* tkGet.c in Sources */, + F9FD316F0CC1AD070073837D /* tkGrab.c in Sources */, + F9FD31700CC1AD070073837D /* tkGrid.c in Sources */, + F9FD31710CC1AD070073837D /* tkImage.c in Sources */, + F9FD31720CC1AD070073837D /* tkImgBmap.c in Sources */, + F9FD31730CC1AD070073837D /* tkImgGIF.c in Sources */, + F9FD31740CC1AD070073837D /* tkImgPhoto.c in Sources */, + F9FD31750CC1AD070073837D /* tkImgPPM.c in Sources */, + F9FD31760CC1AD070073837D /* tkListbox.c in Sources */, + F9FD31770CC1AD070073837D /* tkMacWinMenu.c in Sources */, + F9FD31780CC1AD070073837D /* tkMain.c in Sources */, + F9FD31790CC1AD070073837D /* tkMenu.c in Sources */, + F9FD317A0CC1AD070073837D /* tkMenubutton.c in Sources */, + F9FD317B0CC1AD070073837D /* tkMenuDraw.c in Sources */, + F9FD317C0CC1AD070073837D /* tkMessage.c in Sources */, + F9FD317D0CC1AD070073837D /* tkObj.c in Sources */, + F9FD317E0CC1AD070073837D /* tkOldConfig.c in Sources */, + F9FD317F0CC1AD070073837D /* tkOldTest.c in Sources */, + F9FD31800CC1AD070073837D /* tkOption.c in Sources */, + F9FD31810CC1AD070073837D /* tkPack.c in Sources */, + F9FD31820CC1AD070073837D /* tkPanedWindow.c in Sources */, + F9FD31830CC1AD070073837D /* tkPlace.c in Sources */, + F9FD31850CC1AD070073837D /* tkRectOval.c in Sources */, + F9FD31860CC1AD070073837D /* tkScale.c in Sources */, + F9FD31870CC1AD070073837D /* tkScrollbar.c in Sources */, + F9FD31880CC1AD070073837D /* tkSelect.c in Sources */, + F9FD31890CC1AD070073837D /* tkSquare.c in Sources */, + F9FD318A0CC1AD070073837D /* tkStubInit.c in Sources */, + F9FD318B0CC1AD070073837D /* tkStubLib.c in Sources */, + F9FD318C0CC1AD070073837D /* tkStyle.c in Sources */, + F9FD318D0CC1AD070073837D /* tkTest.c in Sources */, + F9FD318E0CC1AD070073837D /* tkText.c in Sources */, + F9FD318F0CC1AD070073837D /* tkTextBTree.c in Sources */, + F9FD31900CC1AD070073837D /* tkTextDisp.c in Sources */, + F9FD31910CC1AD070073837D /* tkTextImage.c in Sources */, + F9FD31920CC1AD070073837D /* tkTextIndex.c in Sources */, + F9FD31930CC1AD070073837D /* tkTextMark.c in Sources */, + F9FD31940CC1AD070073837D /* tkTextTag.c in Sources */, + F9FD31950CC1AD070073837D /* tkTextWind.c in Sources */, + F9FD31960CC1AD070073837D /* tkTrig.c in Sources */, + F9FD31970CC1AD070073837D /* tkUndo.c in Sources */, + F9FD31980CC1AD070073837D /* tkUtil.c in Sources */, + F9FD31990CC1AD070073837D /* tkVisual.c in Sources */, + F9FD319A0CC1AD070073837D /* tkWindow.c in Sources */, + F9FD319B0CC1AD070073837D /* ttkBlink.c in Sources */, + F9FD319C0CC1AD070073837D /* ttkButton.c in Sources */, + F9FD319D0CC1AD070073837D /* ttkCache.c in Sources */, + F9FD319E0CC1AD070073837D /* ttkClamTheme.c in Sources */, + F9FD319F0CC1AD070073837D /* ttkClassicTheme.c in Sources */, + F9FD31A00CC1AD070073837D /* ttkDefaultTheme.c in Sources */, + F9FD31A10CC1AD070073837D /* ttkElements.c in Sources */, + F9FD31A20CC1AD070073837D /* ttkEntry.c in Sources */, + F9FD31A30CC1AD070073837D /* ttkFrame.c in Sources */, + F9FD31A40CC1AD070073837D /* ttkImage.c in Sources */, + F9FD31A50CC1AD070073837D /* ttkInit.c in Sources */, + F9FD31A60CC1AD070073837D /* ttkLabel.c in Sources */, + F9FD31A70CC1AD070073837D /* ttkLayout.c in Sources */, + F9FD31A80CC1AD070073837D /* ttkManager.c in Sources */, + F9FD31A90CC1AD070073837D /* ttkNotebook.c in Sources */, + F9FD31AA0CC1AD070073837D /* ttkPanedwindow.c in Sources */, + F9FD31AB0CC1AD070073837D /* ttkProgress.c in Sources */, + F9FD31AC0CC1AD070073837D /* ttkScale.c in Sources */, + F9FD31AD0CC1AD070073837D /* ttkScroll.c in Sources */, + F9FD31AE0CC1AD070073837D /* ttkScrollbar.c in Sources */, + F9FD31AF0CC1AD070073837D /* ttkSeparator.c in Sources */, + F9FD31B00CC1AD070073837D /* ttkSquare.c in Sources */, + F9FD31B10CC1AD070073837D /* ttkState.c in Sources */, + F9FD31B20CC1AD070073837D /* ttkStubInit.c in Sources */, + F9FD31B30CC1AD070073837D /* ttkStubLib.c in Sources */, + F9FD31B40CC1AD070073837D /* ttkTagSet.c in Sources */, + F9FD31B50CC1AD070073837D /* ttkTheme.c in Sources */, + F9FD31B60CC1AD070073837D /* ttkTrace.c in Sources */, + F9FD31B70CC1AD070073837D /* ttkTrack.c in Sources */, + F9FD31B80CC1AD070073837D /* ttkTreeview.c in Sources */, + F9FD31B90CC1AD070073837D /* ttkWidget.c in Sources */, + F9FD31DA0CC1AD070073837D /* tkAppInit.c in Sources */, + F9FD32020CC1ADB70073837D /* tkUnix.c in Sources */, + F9FD31DB0CC1AD070073837D /* tkUnix3d.c in Sources */, + F9FD320A0CC1ADB70073837D /* tkUnixButton.c in Sources */, + F9FD32090CC1ADB70073837D /* tkUnixColor.c in Sources */, + F9FD32040CC1ADB70073837D /* tkUnixConfig.c in Sources */, + F9FD31F80CC1ADB70073837D /* tkUnixCursor.c in Sources */, + F9FD32060CC1ADB70073837D /* tkUnixDialog.c in Sources */, + F9FD32050CC1ADB70073837D /* tkUnixDraw.c in Sources */, + F9FD31FD0CC1ADB70073837D /* tkUnixEmbed.c in Sources */, + F9FD32080CC1ADB70073837D /* tkUnixEvent.c in Sources */, + F9FD31FF0CC1ADB70073837D /* tkUnixFocus.c in Sources */, + F9FD31FC0CC1ADB70073837D /* tkUnixInit.c in Sources */, + F9FD31FA0CC1ADB70073837D /* tkUnixKey.c in Sources */, + F9FD32030CC1ADB70073837D /* tkUnixMenu.c in Sources */, + F9FD320B0CC1ADB70073837D /* tkUnixMenubu.c in Sources */, + F9FD32010CC1ADB70073837D /* tkUnixRFont.c in Sources */, + F9FD31DC0CC1AD070073837D /* tkUnixScale.c in Sources */, + F9FD320C0CC1ADB70073837D /* tkUnixScrlbr.c in Sources */, + F9FD32070CC1ADB70073837D /* tkUnixSelect.c in Sources */, + F9FD31FE0CC1ADB70073837D /* tkUnixSend.c in Sources */, + F9FD32000CC1ADB70073837D /* tkUnixWm.c in Sources */, + F9FD31FB0CC1ADB70073837D /* tkUnixXId.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + F90E36D50F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = unsupported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = 4.2; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = "Debug gcc42 nogc"; + }; + F90E36D60F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "Debug gcc42 nogc"; + }; + F90E36D70F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "Debug gcc42 nogc"; + }; + F90E36D80F3B5C8400810A10 /* Debug gcc42 nogc */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "Debug gcc42 nogc"; + }; + F91BCC4F093152310042A6BF /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = ReleaseUniversal; + }; + F91BCC50093152310042A6BF /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = ReleaseUniversal; + }; + F91BCC51093152310042A6BF /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PREBINDING = NO; + }; + name = ReleaseUniversal; + }; + F93084370BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugMemCompile; + }; + F93084380BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugMemCompile; + }; + F93084390BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugMemCompile; + }; + F930843A0BB93D2800CD0B9E /* DebugMemCompile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-symbols=all"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugMemCompile; + }; + F9359B250DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_GENERATE_TEST_COVERAGE_FILES = YES; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS)", + "-lgcov", + ); + PREBINDING = NO; + }; + name = DebugGCov; + }; + F9359B260DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugGCov; + }; + F9359B270DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugGCov; + }; + F9359B280DF212DA00E04F67 /* DebugGCov */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugGCov; + }; + F95CC8AC09158F3100EA5ACE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = Debug; + }; + F95CC8AD09158F3100EA5ACE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = Release; + }; + F95CC8AE09158F3100EA5ACE /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugNoFixZL; + }; + F95CC8B109158F3100EA5ACE /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = Debug; + }; + F95CC8B209158F3100EA5ACE /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = Release; + }; + F95CC8B309158F3100EA5ACE /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugNoFixZL; + }; + F95CC8B609158F3100EA5ACE /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = Debug; + }; + F95CC8B709158F3100EA5ACE /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH_32_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PREBINDING = NO; + }; + name = Release; + }; + F95CC8B809158F3100EA5ACE /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugNoFixZL; + }; + F97258A90A86873D00096C78 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = Debug; + }; + F97258AA0A86873D00096C78 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = Release; + }; + F97258AB0A86873D00096C78 /* DebugNoFixZL */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugNoFixZL; + }; + F97258AC0A86873D00096C78 /* ReleaseUniversal */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = ReleaseUniversal; + }; + F97AED1B0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = Debug64bit; + }; + F97AED1C0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = Debug64bit; + }; + F97AED1D0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = Debug64bit; + }; + F97AED1E0B660B2100310EA2 /* Debug64bit */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = "$(NATIVE_ARCH_64_BIT)"; + CONFIGURE_ARGS = "--enable-64bit $(CONFIGURE_ARGS)"; + CPPFLAGS = "-arch $(NATIVE_ARCH_64_BIT) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PREBINDING = NO; + }; + name = Debug64bit; + }; + F987512F0DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --disable-corefoundation"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugNoCF; + }; + F98751300DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugNoCF; + }; + F98751310DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugNoCF; + }; + F98751320DE7B57E00B1C9EC /* DebugNoCF */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugNoCF; + }; + F98751330DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --disable-threads --disable-corefoundation"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugNoCFUnthreaded; + }; + F98751340DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugNoCFUnthreaded; + }; + F98751350DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --enable-corefoundation"; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugNoCFUnthreaded; + }; + F98751360DE7B5A200B1C9EC /* DebugNoCFUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugNoCFUnthreaded; + }; + F9988AB10D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = 4.2; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = "Debug gcc42"; + }; + F9988AB20D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "Debug gcc42"; + }; + F9988AB30D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "Debug gcc42"; + }; + F9988AB40D814C6500B6B03B /* Debug gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "Debug gcc42"; + }; + F9988AB50D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CC = "$(DEVELOPER_DIR)/usr/bin/llvm-gcc-4.2"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = com.apple.compilers.llvmgcc42; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = "Debug llvmgcc42"; + }; + F9988AB60D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "Debug llvmgcc42"; + }; + F9988AB70D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "Debug llvmgcc42"; + }; + F9988AB80D814C7500B6B03B /* Debug llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + CONFIGURE_ARGS = "tcl_cv_cc_visibility_hidden=no $(CONFIGURE_ARGS)"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_FIX_AND_CONTINUE = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "__private_extern__=extern", + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "Debug llvmgcc42"; + }; + F9988BB10D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_VERSION = 4.2; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PREBINDING = NO; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB20D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB30D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB40D81586D00B6B03B /* ReleaseUniversal gcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "ReleaseUniversal gcc42"; + }; + F9988BB50D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CC = "$(DEVELOPER_DIR)/usr/bin/llvm-gcc-4.2"; + CFLAGS = "-arch i386 -arch x86_64 $(CFLAGS)"; + DEBUG_INFORMATION_FORMAT = dwarf; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_OPTIMIZATION_LEVEL = 4; + GCC_VERSION = com.apple.compilers.llvmgcc42; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PREBINDING = NO; + TCL_CONFIGURE_ARGS = "$(TCL_CONFIGURE_ARGS) --disable-dtrace"; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F9988BB60D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F9988BB70D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F9988BB80D81587400B6B03B /* ReleaseUniversal llvmgcc42 */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = "ReleaseUniversal llvmgcc42"; + }; + F99EE73B0BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugUnthreaded; + }; + F99EE73C0BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = DebugLeaks; + }; + F99EE73D0BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugUnthreaded; + }; + F99EE73E0BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = DebugLeaks; + }; + F99EE73F0BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugUnthreaded; + }; + F99EE7400BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + buildSettings = { + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = DebugLeaks; + }; + F99EE7410BE835310060D4AF /* DebugUnthreaded */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CONFIGURE_ARGS = "$(CONFIGURE_ARGS) --disable-threads"; + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugUnthreaded; + }; + F99EE7420BE835310060D4AF /* DebugLeaks */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE8330B65C87F00310EA2 /* Wish-Debug.xcconfig */; + buildSettings = { + ARCHS = ( + "$(NATIVE_ARCH_32_BIT)", + "$(NATIVE_ARCH_64_BIT)", + ); + CPPFLAGS = "-arch $(CURRENT_ARCH) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = unsupported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + GCC_PREPROCESSOR_DEFINITIONS = ( + PURIFY, + "$(GCC_PREPROCESSOR_DEFINITIONS)", + ); + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + PREBINDING = NO; + }; + name = DebugLeaks; + }; + F9EEED960C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + buildSettings = { + PRODUCT_NAME = Wish; + SKIP_INSTALL = NO; + }; + name = ReleaseUniversal10.5SDK; + }; + F9EEED970C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + buildSettings = { + OTHER_LDFLAGS = ( + "$(OTHER_LDFLAGS_AQUA)", + "$(OTHER_LDFLAGS)", + ); + PRODUCT_NAME = tktest; + }; + name = ReleaseUniversal10.5SDK; + }; + F9EEED980C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + HEADER_SEARCH_PATHS = ( + /usr/X11R6/include, + /usr/X11R6/include/freetype2, + "$(HEADER_SEARCH_PATHS)", + ); + LIBRARY_SEARCH_PATHS = ( + /usr/X11R6/lib, + "$(LIBRARY_SEARCH_PATHS)", + ); + PRODUCT_NAME = "tktest-X11"; + }; + name = ReleaseUniversal10.5SDK; + }; + F9EEED990C2FEFD300396116 /* ReleaseUniversal10.5SDK */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F97AE82B0B65C69B00310EA2 /* Wish-Release.xcconfig */; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + CFLAGS = "-arch i386 -arch x86_64 -arch ppc $(CFLAGS)"; + CPPFLAGS = "-isysroot $(SDKROOT) $(CPPFLAGS)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_GC = supported; + GCC_ENABLE_PASCAL_STRINGS = NO; + GCC_INPUT_FILETYPE = sourcecode.c.objc; + MACOSX_DEPLOYMENT_TARGET = 10.5; + PREBINDING = NO; + SDKROOT = macosx10.5; + }; + name = ReleaseUniversal10.5SDK; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F95CC8AB09158F3100EA5ACE /* Build configuration list for PBXNativeTarget "Tk" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F95CC8AC09158F3100EA5ACE /* Debug */, + F9988AB20D814C6500B6B03B /* Debug gcc42 */, + F90E36D60F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB60D814C7500B6B03B /* Debug llvmgcc42 */, + F95CC8AE09158F3100EA5ACE /* DebugNoFixZL */, + F99EE73B0BE835310060D4AF /* DebugUnthreaded */, + F98751300DE7B57E00B1C9EC /* DebugNoCF */, + F98751340DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F93084370BB93D2800CD0B9E /* DebugMemCompile */, + F99EE73C0BE835310060D4AF /* DebugLeaks */, + F9359B260DF212DA00E04F67 /* DebugGCov */, + F97AED1B0B660B2100310EA2 /* Debug64bit */, + F95CC8AD09158F3100EA5ACE /* Release */, + F91BCC4F093152310042A6BF /* ReleaseUniversal */, + F9988BB20D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB60D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED960C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F95CC8B009158F3100EA5ACE /* Build configuration list for PBXNativeTarget "tktest" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F95CC8B109158F3100EA5ACE /* Debug */, + F9988AB30D814C6500B6B03B /* Debug gcc42 */, + F90E36D70F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB70D814C7500B6B03B /* Debug llvmgcc42 */, + F95CC8B309158F3100EA5ACE /* DebugNoFixZL */, + F99EE73D0BE835310060D4AF /* DebugUnthreaded */, + F98751310DE7B57E00B1C9EC /* DebugNoCF */, + F98751350DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F93084380BB93D2800CD0B9E /* DebugMemCompile */, + F99EE73E0BE835310060D4AF /* DebugLeaks */, + F9359B270DF212DA00E04F67 /* DebugGCov */, + F97AED1C0B660B2100310EA2 /* Debug64bit */, + F95CC8B209158F3100EA5ACE /* Release */, + F91BCC50093152310042A6BF /* ReleaseUniversal */, + F9988BB30D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB70D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED970C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F95CC8B509158F3100EA5ACE /* Build configuration list for PBXProject "Wish" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F95CC8B609158F3100EA5ACE /* Debug */, + F9988AB10D814C6500B6B03B /* Debug gcc42 */, + F90E36D50F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB50D814C7500B6B03B /* Debug llvmgcc42 */, + F95CC8B809158F3100EA5ACE /* DebugNoFixZL */, + F99EE7410BE835310060D4AF /* DebugUnthreaded */, + F987512F0DE7B57E00B1C9EC /* DebugNoCF */, + F98751330DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F930843A0BB93D2800CD0B9E /* DebugMemCompile */, + F99EE7420BE835310060D4AF /* DebugLeaks */, + F9359B250DF212DA00E04F67 /* DebugGCov */, + F97AED1E0B660B2100310EA2 /* Debug64bit */, + F95CC8B709158F3100EA5ACE /* Release */, + F91BCC51093152310042A6BF /* ReleaseUniversal */, + F9988BB10D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB50D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED990C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + F97258A80A86873D00096C78 /* Build configuration list for PBXNativeTarget "tktest-X11" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F97258A90A86873D00096C78 /* Debug */, + F9988AB40D814C6500B6B03B /* Debug gcc42 */, + F90E36D80F3B5C8400810A10 /* Debug gcc42 nogc */, + F9988AB80D814C7500B6B03B /* Debug llvmgcc42 */, + F97258AB0A86873D00096C78 /* DebugNoFixZL */, + F99EE73F0BE835310060D4AF /* DebugUnthreaded */, + F98751320DE7B57E00B1C9EC /* DebugNoCF */, + F98751360DE7B5A200B1C9EC /* DebugNoCFUnthreaded */, + F93084390BB93D2800CD0B9E /* DebugMemCompile */, + F99EE7400BE835310060D4AF /* DebugLeaks */, + F9359B280DF212DA00E04F67 /* DebugGCov */, + F97AED1D0B660B2100310EA2 /* Debug64bit */, + F97258AA0A86873D00096C78 /* Release */, + F97258AC0A86873D00096C78 /* ReleaseUniversal */, + F9988BB40D81586D00B6B03B /* ReleaseUniversal gcc42 */, + F9988BB80D81587400B6B03B /* ReleaseUniversal llvmgcc42 */, + F9EEED980C2FEFD300396116 /* ReleaseUniversal10.5SDK */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; +} diff --git a/macosx/configure.ac b/macosx/configure.ac new file mode 100644 index 0000000..69573c5 --- /dev/null +++ b/macosx/configure.ac @@ -0,0 +1,11 @@ +#! /bin/bash -norc +dnl This file is an input file used by the GNU "autoconf" program to +dnl generate the file "configure", which is run during Tk installation +dnl to configure the system for the local environment. + +dnl Ensure that the config (auto)headers support is used, then just +dnl include the configure sources from ../unix: + +m4_include(../unix/aclocal.m4) +m4_define(SC_USE_CONFIG_HEADERS) +m4_include(../unix/configure.in) diff --git a/macosx/tkAboutDlg.r b/macosx/tkAboutDlg.r deleted file mode 100644 index 7bb0a0e..0000000 --- a/macosx/tkAboutDlg.r +++ /dev/null @@ -1,382 +0,0 @@ -/* - * tkAboutDlg.r -- - * - * This file creates resources for the Tk "About Box" dialog. - * - * Copyright (c) 1996 Sun Microsystems, Inc. - * Copyright (c) 2006-2008 Daniel A. Steffen <das@users.sourceforge.net> - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -/* - * The folowing include and defines help construct - * the version string for Tcl. - */ - -#define RC_INVOKED -#include <Carbon.r> -#include <tcl.h> -#include "tk.h" - -/* - * The following two resources define the default "About Box" for Mac Tk. - * This dialog appears if the "About Tk..." menu item is selected from - * the Apple menu. This dialog may be overridden by defining a Tcl procedure - * with the name of "tkAboutDialog". If this procedure is defined the - * default dialog will not be shown and the Tcl procedure is expected to - * create and manage an About Dialog box. - */ - -resource 'DLOG' (128, "About Box", purgeable) { - {60, 40, 332, 404}, - kWindowMovableModalDialogProc, - visible, - noGoAway, - 0x0, - 128, - "About Tcl & Tk", - centerMainScreen -}; - -resource 'DITL' (128, "About Box", purgeable) { - { - {232, 147, 252, 217}, Button {enabled, "Ok"}, - { 20, 108, 212, 344}, StaticText {disabled, - "Tcl " TCL_PATCH_LEVEL " & Tk " TK_PATCH_LEVEL "\n\n" - "© 2002-2009 Tcl Core Team." "\n\n" - "© 2002-2009 Daniel A. Steffen." "\n\n" - "Jim Ingham & Ian Reid" "\n" - "© 2001-2002 Apple Computer, Inc." "\n\n" - "Jim Ingham & Ray Johnson" "\n" - "© 1998-2000 Scriptics Inc." "\n" - "© 1996-1997 Sun Microsystems Inc."}, - { 20, 24, 120, 92}, Picture {enabled, 128} - } -}; - -resource 'dlgx' (128, "About Box", purgeable) { - versionZero { - kDialogFlagsUseThemeBackground | kDialogFlagsUseControlHierarchy - | kDialogFlagsHandleMovableModal | kDialogFlagsUseThemeControls - } -}; - -data 'PICT' (128, purgeable) { - $"13A4 0000 0000 0064 0044 0011 02FF 0C00" - $"FFFE 0000 0048 0000 0048 0000 0000 0000" - $"0064 0044 0000 0000 0001 000A 0000 0000" - $"0064 0044 0099 8044 0000 0000 0064 0044" - $"0000 0000 0000 0000 0048 0000 0048 0000" - $"0000 0008 0001 0008 0000 0000 0108 00D8" - $"0000 0000 0001 5A5A 8000 00FF 3736 FF00" - $"FF00 FF00 3535 FF00 FF00 CC00 3434 FF00" - $"FF00 9900 3333 FF00 FF00 6600 3736 FF00" - $"FF00 3300 3535 FF00 FF00 0000 3434 FF00" - $"CC00 FF00 3333 FF00 CC00 CC00 3736 FF00" - $"CC00 9900 3535 FF00 CC00 6600 FAFA FF00" - $"CC00 3300 3333 FF00 CC00 0000 3130 FF00" - $"9900 FF00 2F2F FF00 9900 CC00 FAFA FF00" - $"9900 9900 F9F9 FF00 9900 6600 3130 FF00" - $"9900 3300 2F2F FF00 9900 0000 2E2E FF00" - $"6600 FF00 F9F9 FF00 6600 CC00 3130 FF00" - $"6600 9900 2F2F FF00 6600 6600 2E2E FF00" - $"6600 3300 2D2D FF00 6600 0000 3130 FF00" - $"3300 FF00 2F2F FF00 3300 CC00 2E2E FF00" - $"3300 9900 2D2D FF00 3300 6600 3130 FF00" - $"3300 3300 2F2F FF00 3300 0000 2E2E FF00" - $"0000 FF00 2D2D FF00 0000 CC00 3130 FF00" - $"0000 9900 2F2F FF00 0000 6600 2E2E FF00" - $"0000 3300 2DF8 FF00 0000 0000 2B2A CC00" - $"FF00 FF00 2929 CC00 FF00 CC00 2828 CC00" - $"FF00 9900 27F8 CC00 FF00 6600 2B2A CC00" - $"FF00 3300 2929 CC00 FF00 0000 2828 CC00" - $"CC00 FF00 2727 CC00 CC00 CC00 2B2A CC00" - $"CC00 9900 2929 CC00 CC00 6600 2828 CC00" - $"CC00 3300 2727 CC00 CC00 0000 2B2A CC00" - $"9900 FF00 2929 CC00 9900 CC00 2828 CC00" - $"9900 9900 2727 CC00 9900 6600 DBDB CC00" - $"9900 3300 4747 CC00 9900 0000 4646 CC00" - $"6600 FF00 4545 CC00 6600 CC00 DBDB CC00" - $"6600 9900 4747 CC00 6600 6600 4646 CC00" - $"6600 3300 4545 CC00 6600 0000 DBDB CC00" - $"3300 FF00 4747 CC00 3300 CC00 4646 CC00" - $"3300 9900 4545 CC00 3300 6600 DBDB CC00" - $"3300 3300 4141 CC00 3300 0000 4040 CC00" - $"0000 FF00 3F3F CC00 0000 CC00 4342 CC00" - $"0000 9900 4141 CC00 0000 6600 4040 CC00" - $"0000 3300 3F3F CC00 0000 0000 4342 9900" - $"FF00 FF00 4141 9900 FF00 CC00 4040 9900" - $"FF00 9900 3F3F 9900 FF00 6600 4342 9900" - $"FF00 3300 4141 9900 FF00 0000 4040 9900" - $"CC00 FF00 3F3F 9900 CC00 CC00 4342 9900" - $"CC00 9900 4141 9900 CC00 6600 4040 9900" - $"CC00 3300 3F3F 9900 CC00 0000 4342 9900" - $"9900 FF00 4141 9900 9900 CC00 4040 9900" - $"9900 9900 3F3F 9900 9900 6600 3D3C 9900" - $"9900 3300 3B3B 9900 9900 0000 3A3A 9900" - $"6600 FF00 3939 9900 6600 CC00 3D3C 9900" - $"6600 9900 3B3B 9900 6600 6600 3A3A 9900" - $"6600 3300 3939 9900 6600 0000 3D3C 9900" - $"3300 FF00 3B3B 9900 3300 CC00 3A3A 9900" - $"3300 9900 3939 9900 3300 6600 3D3C 9900" - $"3300 3300 3B3B 9900 3300 0000 3A3A 9900" - $"0000 FF00 3939 9900 0000 CC00 3D3C 9900" - $"0000 9900 3B3B 9900 0000 6600 3A3A 9900" - $"0000 3300 3939 9900 0000 0000 3D3C 6600" - $"FF00 FF00 3B3B 6600 FF00 CC00 3A3A 6600" - $"FF00 9900 3939 6600 FF00 6600 3D3C 6600" - $"FF00 3300 3B3B 6600 FF00 0000 3A3A 6600" - $"CC00 FF00 3939 6600 CC00 CC00 3736 6600" - $"CC00 9900 3535 6600 CC00 6600 3434 6600" - $"CC00 3300 3333 6600 CC00 0000 3736 6600" - $"9900 FF00 3535 6600 9900 CC00 3434 6600" - $"9900 9900 3333 6600 9900 6600 3736 6600" - $"9900 3300 3535 6600 9900 0000 3434 6600" - $"6600 FF00 3333 6600 6600 CC00 3736 6600" - $"6600 9900 3535 6600 6600 6600 3434 6600" - $"6600 3300 3333 6600 6600 0000 3736 6600" - $"3300 FF00 3535 6600 3300 CC00 3434 6600" - $"3300 9900 3333 6600 3300 6600 3736 6600" - $"3300 3300 3535 6600 3300 0000 3434 6600" - $"0000 FF00 3333 6600 0000 CC00 3130 6600" - $"0000 9900 2F2F 6600 0000 6600 2E2E 6600" - $"0000 3300 F9F9 6600 0000 0000 3130 3300" - $"FF00 FF00 2F2F 3300 FF00 CC00 2E2E 3300" - $"FF00 9900 F9F9 3300 FF00 6600 3130 3300" - $"FF00 3300 2F2F 3300 FF00 0000 2E2E 3300" - $"CC00 FF00 2D2D 3300 CC00 CC00 3130 3300" - $"CC00 9900 2F2F 3300 CC00 6600 2E2E 3300" - $"CC00 3300 2D2D 3300 CC00 0000 3130 3300" - $"9900 FF00 2F2F 3300 9900 CC00 2E2E 3300" - $"9900 9900 2D2D 3300 9900 6600 3130 3300" - $"9900 3300 2F2F 3300 9900 0000 2E2E 3300" - $"6600 FF00 2DF8 3300 6600 CC00 2B2A 3300" - $"6600 9900 2929 3300 6600 6600 2828 3300" - $"6600 3300 27F8 3300 6600 0000 2B2A 3300" - $"3300 FF00 2929 3300 3300 CC00 2828 3300" - $"3300 9900 2727 3300 3300 6600 2B2A 3300" - $"3300 3300 2929 3300 3300 0000 2828 3300" - $"0000 FF00 2727 3300 0000 CC00 2B2A 3300" - $"0000 9900 2929 3300 0000 6600 2828 3300" - $"0000 3300 2727 3300 0000 0000 4948 0000" - $"FF00 FF00 4747 0000 FF00 CC00 4646 0000" - $"FF00 9900 4545 0000 FF00 6600 4948 0000" - $"FF00 3300 4747 0000 FF00 0000 4646 0000" - $"CC00 FF00 4545 0000 CC00 CC00 4948 0000" - $"CC00 9900 4747 0000 CC00 6600 4646 0000" - $"CC00 3300 4545 0000 CC00 0000 4342 0000" - $"9900 FF00 4141 0000 9900 CC00 4040 0000" - $"9900 9900 3F3F 0000 9900 6600 4342 0000" - $"9900 3300 4141 0000 9900 0000 4040 0000" - $"6600 FF00 3F3F 0000 6600 CC00 4342 0000" - $"6600 9900 4141 0000 6600 6600 4040 0000" - $"6600 3300 3F3F 0000 6600 0000 4342 0000" - $"3300 FF00 4141 0000 3300 CC00 4040 0000" - $"3300 9900 3F3F 0000 3300 6600 4342 0000" - $"3300 3300 4141 0000 3300 0000 4040 0000" - $"0000 FF00 3F3F 0000 0000 CC00 4342 0000" - $"0000 9900 4141 0000 0000 6600 4040 0000" - $"0000 3300 3F3F EE00 0000 0000 3D3C DD00" - $"0000 0000 3B3B BB00 0000 0000 3A3A AA00" - $"0000 0000 3939 8800 0000 0000 3D3C 7700" - $"0000 0000 3B3B 5500 0000 0000 3A3A 4400" - $"0000 0000 3939 2200 0000 0000 3D3C 1100" - $"0000 0000 3B3B 0000 EE00 0000 3A3A 0000" - $"DD00 0000 3939 0000 BB00 0000 3D3C 0000" - $"AA00 0000 3B3B 0000 8800 0000 3A3A 0000" - $"7700 0000 3939 0000 5500 0000 3D3C 0000" - $"4400 0000 3B3B 0000 2200 0000 3A3A 0000" - $"1100 0000 3939 0000 0000 EE00 3D3C 0000" - $"0000 DD00 3B3B 0000 0000 BB00 3A3A 0000" - $"0000 AA00 3939 0000 0000 8800 3D3C 0000" - $"0000 7700 3B3B 0000 0000 5500 3A3A 0000" - $"0000 4400 3939 0000 0000 2200 3736 0000" - $"0000 1100 3535 EE00 EE00 EE00 3434 DD00" - $"DD00 DD00 3333 BB00 BB00 BB00 3736 AA00" - $"AA00 AA00 3535 8800 8800 8800 3434 7700" - $"7700 7700 3333 5500 5500 5500 3736 4400" - $"4400 4400 3535 2200 2200 2200 3434 1100" - $"1100 1100 3333 0000 0000 0000 0000 0000" - $"0064 0044 0000 0000 0064 0044 0000 000A" - $"0000 0000 0064 0044 02BD 0013 E800 01F5" - $"F6FE 07FE 0E02 3232 33FD 3900 0EE6 001D" - $"FC00 01F5 F5FE 0700 08FE 0E02 3232 33FE" - $"3900 3AFC 40F2 4102 4033 07E9 0017 0100" - $"0EFC 40DC 4102 390E F5F5 0002 F5F5 F6FE" - $"0702 0E07 0016 0100 32D5 4104 4039 0E32" - $"33FD 3900 3AFC 40FC 4101 3200 0801 000E" - $"C141 010E 0008 0100 0EC1 4101 0800 0801" - $"000E C141 0107 0008 0100 0EC1 4101 0700" - $"0901 0007 C241 0240 F500 0E01 0007 E841" - $"0147 47DD 4102 4000 0012 0100 07F0 4100" - $"47FA 4101 3B3B DD41 0240 0000 1901 0007" - $"F141 0C47 3B0B 3B47 4141 4711 0505 3B47" - $"DF41 023A 0000 1701 00F6 F041 010B 0BFE" - $"4105 473B 0505 113B DE41 0239 0000 1A02" - $"00F5 40F3 410C 473B 053B 4741 4741 0B0B" - $"3B47 47DE 4102 3900 0018 0200 F540 F341" - $"0247 110B FE41 0447 1105 4147 DC41 0233" - $"0000 1B02 0000 40F3 4103 4711 1147 FE41" - $"0205 3547 F741 FD47 E941 0232 0000 1E02" - $"0000 40F2 4106 113B 4741 4735 0BF7 4106" - $"4741 390E 0E40 47EA 4102 0E00 0021 0200" - $"0040 F241 0711 3B47 4141 0B35 47F9 4102" - $"4740 07FE 0002 F640 47EB 4102 0E00 0023" - $"0200 0040 F341 0847 3541 4147 3B05 4147" - $"FA41 0947 3AF6 00F5 4F55 F50E 47EB 4102" - $"0700 0022 0200 003A F341 0147 3BFE 4101" - $"0B0B F941 0547 3AF5 0055 C8FE CE01 5640" - $"EB41 0207 0000 1F02 0000 39F0 4104 4741" - $"053B 47FB 4104 4740 F5F5 A4FC CE01 C85D" - $"EB41 02F6 0000 1F02 0000 39F0 4104 473B" - $"0541 47FC 4104 4740 07F6 C8FA CE00 64EC" - $"4103 40F5 0000 1C02 0000 39F0 4102 4711" - $"0BFA 4103 4708 2AC8 FACE 0164 D8EC 4100" - $"40FE 0025 0200 0039 EF41 020B 3B47 FC41" - $"0347 0FF5 A4FB CE02 C887 D8FC 41FE 47FC" - $"4100 47F9 4100 3AFE 0028 0200 0039 EF41" - $"020B 3B47 FD41 0347 3900 A4FA CE00 ABFA" - $"4109 3B11 3B41 4147 3B0B 3B47 FA41 0039" - $"FE00 2402 0000 33F1 4102 4741 0BFA 4101" - $"0779 F9CE 0064 FA41 0235 050B FD41 010B" - $"0BF9 4100 39FE 0028 0200 0032 F141 0247" - $"3B0B FC41 0247 39F6 F9CE 0187 D8FB 4103" - $"4741 050B FE41 0247 110B F941 0039 FE00" - $"2C02 0000 32F1 4102 473B 11FB 4101 0879" - $"FACE 05AA 4041 4147 47FE 410A 4741 0511" - $"4741 4147 3511 47FA 4100 32FE 002F 0200" - $"000E F141 0347 3B11 47FE 4103 4740 F6C8" - $"FACE 0564 D841 4039 39FE 4104 473B 053B" - $"47FE 4102 3541 47FA 4100 0EFE 0027 0200" - $"000E F141 0347 3B3B 47FE 4102 470F 79FA" - $"CE0C 8741 4032 F500 003A 4741 473B 05F2" - $"4100 0EFE 0027 0200 000E F141 0347 3B3B" - $"47FD 4101 0EA4 FACE 01AB AAFE C808 7900" - $"3947 4147 110B 47F3 4100 07FE 001C 0200" - $"000E EA41 0240 2BC8 F5CE 0881 0033 4741" - $"410B 3B47 F341 0007 FE00 1A02 0000 08EB" - $"4102 473A 55F4 CE06 5D00 3947 4741 0BF1" - $"4100 F6FE 001C 0200 0007 EB41 0247 3979" - $"F4CE 0739 0039 4747 3511 47F3 4101 40F5" - $"FE00 1C02 0000 07EB 4102 4739 A4F5 CE08" - $"AB0E 0040 4741 1141 47F3 4100 40FD 001B" - $"0200 0007 EB41 0247 39A4 F5CE 0787 0707" - $"4147 4111 47F2 4100 40FD 001B 0200 0007" - $"EB41 0247 39C8 F5CE 0763 F532 4747 3B3B" - $"47F2 4100 3AFD 001A 0300 00F6 40EC 4102" - $"4739 C8F5 CE05 39F5 4047 413B F041 0039" - $"FD00 1C03 0000 F540 EB41 0140 C8FD CE01" - $"C8A4 FCCE 03AB 080E 47ED 4100 39FD 001A" - $"FE00 0040 EB41 0040 FCCE 01A4 C8FC CE03" - $"FA07 4047 ED41 0032 FD00 1AFE 0000 40EA" - $"4100 AAFE CE02 87F9 C8FC CE02 560F 47EC" - $"4100 32FD 0019 FE00 0040 EA41 00AB FECE" - $"0264 56C8 FDCE 01C8 32EA 4100 0EFD 001B" - $"FE00 0040 ED41 030E 4047 87FE CE01 4055" - $"FCCE 01FA 40EA 4100 08FD 001A FE00 003A" - $"ED41 0807 0740 FBCE CEAB 3979 FDCE 00AB" - $"E841 0007 FD00 1CFE 0000 3AED 4108 0700" - $"F6A4 CECE 8733 79FD CE02 4147 47EA 4100" - $"07FD 001E FE00 0039 ED41 0807 2AA4 C8CE" - $"CE88 0E9D FECE 0364 1C39 39EB 4101 40F5" - $"FD00 1CFE 0000 39ED 4101 074F FDCE 0264" - $"F7A4 FECE 03AB 80F6 07EB 4100 40FC 001C" - $"FE00 0039 ED41 0108 79FE CE03 AB40 2BA4" - $"FCCE 02F7 0E47 EC41 0040 FC00 1CFE 0000" - $"39ED 4101 0879 FECE 03AB 40F6 C8FC CE02" - $"F615 47EC 4100 40FC 001E FE00 003A EE41" - $"0247 0E79 FECE 03AB 40F5 C8FD CE03 A4F5" - $"3A47 EC41 0040 FC00 1EFE 0000 3AEE 4102" - $"470E 56FE CE03 FB3A F6C8 FDCE 0280 F540" - $"EB41 0140 F5FD 001E FE00 0040 EE41 0947" - $"0F56 CECE C888 39F6 C8FD CE02 5601 40EB" - $"4101 40F5 FD00 1CFE 0000 40EE 4109 4739" - $"32CE CEC8 8839 2AC8 FDCE 0156 07E9 4100" - $"F6FD 001B FE00 0040 EE41 0847 3A32 CECE" - $"C864 152A FCCE 0132 07E9 4100 07FD 001A" - $"FE00 0040 ED41 0740 32AB CEC8 6439 4EFC" - $"CE01 3A07 E941 0007 FD00 1D03 0000 F540" - $"ED41 0740 0EAB CECE 640F 4EFD CE03 AB40" - $"0840 EA41 0007 FD00 1B03 0000 F540 EC41" - $"060F 81CE CE64 334E FDCE 02AB 400E E941" - $"000E FD00 1C02 0000 F6EC 4107 4715 FACE" - $"CE64 334E FDCE 0387 0F0E 47EA 4100 0EFD" - $"001C 0200 0007 EC41 0747 16F9 CEC8 6433" - $"4EFD CE03 6308 4047 EA41 000E FD00 1A02" - $"0000 07EB 4106 40F9 CEC8 6439 4EFD CE02" - $"3940 47E9 4100 32FD 001B 0200 0007 EA41" - $"0539 CECE 8839 F6FE CE04 AB41 4139 40EA" - $"4100 32FD 001C 0200 0007 EB41 0E47 3AC8" - $"CE88 39F6 C8CE CE64 15F6 F540 EA41 0033" - $"FD00 1A02 0000 07EA 410C 40A4 CE87 392A" - $"C8CE AB41 40F8 F6E9 4100 39FD 001B 0200" - $"000E EB41 0D47 41AB C887 39F5 C8CE ABAB" - $"CEA4 07E9 4100 39FD 001C 0200 000E ED41" - $"0947 3939 4787 C8AB 40F5 C8FD CE01 A40E" - $"E941 0039 FD00 1D02 0000 0EED 4109 473A" - $"0007 80CE AB40 F5C8 FDCE 0255 0E47 EA41" - $"0039 FD00 1B02 0000 0EEB 4107 0779 C8CE" - $"CE40 F6A4 FDCE 022B 3947 EA41 003A FD00" - $"1C02 0000 0EEC 4102 4739 79FE CE02 6407" - $"A4FE CE02 A407 40E9 4100 40FD 001A 0200" - $"0032 EA41 0632 A4CE CE88 0879 FECE 02F9" - $"0F47 E941 0040 FD00 1A02 0000 32EB 4107" - $"4740 F7C8 CE87 0E79 FECE 0132 40E8 4100" - $"40FD 0019 0200 0033 EA41 0B47 40F8 C8AB" - $"0E55 CECE 8015 47E8 4100 40FD 0017 0200" - $"0033 E941 0847 40F9 A439 4FCE CE5D E641" - $"0140 F5FE 0014 0200 0039 E841 0647 64FB" - $"392B C8AB E441 00F6 FE00 1102 0000 39E5" - $"4103 40F6 8764 E441 0007 FE00 1E02 0000" - $"39EB 4102 3A0E 0EFD 4102 0740 47F6 4104" - $"400F 0839 47F4 4100 07FE 0027 0200 0039" - $"FB41 0147 47F2 4102 0800 40FE 4102 0839" - $"47FC 4101 4747 FC41 0339 0039 47F4 4100" - $"07FE 0029 0200 0039 FB41 0140 39F3 4109" - $"470E F540 4141 470E 3347 FC41 0139 3AFD" - $"4104 4739 0039 47F4 4100 08FE 0036 0200" - $"003A FC41 0347 0E00 40FC 4102 4741 40FC" - $"4109 470E F540 4141 4733 0E47 FE41 0447" - $"4000 0E47 FE41 0447 3900 3941 FE40 F741" - $"000E FE00 3A02 0000 3AFD 410E 4740 0700" - $"0E40 4741 4147 390E 390E 40FE 4108 470E" - $"F540 4141 4739 0EFC 4103 0F00 0739 FE41" - $"0747 3900 3940 080F 39F7 4100 0EFE 0035" - $"0200 0040 FB41 020E 0040 FE41 0D47 4000" - $"3941 0032 4741 4147 0EF5 40FE 4101 4008" - $"FC41 023A 000E FD41 0547 3900 3939 33F5" - $"4100 0EFE 0039 0200 0040 FC41 0347 0E00" - $"40FE 4106 4732 0040 4139 40FE 4103 470E" - $"F540 FD41 0108 40FE 4104 4740 000E 47FE" - $"4106 4739 0007 F540 47F6 4100 32FE 003A" - $"0200 0040 FC41 0C47 0E00 4047 4141 470E" - $"0040 4747 FD41 0347 0EF5 40FE 410A 470E" - $"3947 4141 4740 000E 47FE 4107 4739 000E" - $"0007 4147 F741 0032 FE00 3802 0000 40FC" - $"4102 470E 00FD 4106 4739 003A 4740 39FE" - $"4102 470E F5FD 410A 4733 3347 4141 4740" - $"000E 47FE 4106 4739 0039 3900 0EF6 4100" - $"33FE 003A 0200 F540 FC41 0447 3200 0E39" - $"FD41 0B0E 0E40 333A 4741 413A 07F5 39FE" - $"4102 473A 0EFD 410F 40F5 0733 4041 4140" - $"0E00 0E40 0700 0E40 F841 0039 FE00 2902" - $"00F5 40FA 4101 3939 FB41 023A 3A40 FD41" - $"FD40 FD41 0240 0E40 FD41 0240 3940 FD41" - $"FA40 F741 0039 FE00 2A01 00F6 F941 0147" - $"47FB 4101 4747 FB41 0147 47FB 4101 3940" - $"FD41 0147 47FB 4100 47FE 4100 47F6 4100" - $"39FE 000D 0100 07E1 4100 40E4 4100 3AFE" - $"0009 0100 07C3 4100 3AFE 0009 0100 07C3" - $"4100 40FE 0009 0100 07C3 4100 40FE 0009" - $"0100 07C3 4100 40FE 000A 0100 0EC3 4103" - $"40F5 0000 0901 000E C241 02F6 0000 0901" - $"000E C241 0207 0000 0901 000E C241 0207" - $"0000 1101 000E ED41 FE40 003A F940 E241" - $"0207 0000 2B01 0032 F941 FE40 FE39 0632" - $"0E0E 0707 F6F5 F800 02F5 F5F6 FB07 FB0E" - $"0332 3233 33FB 3901 3A3A FB40 0207 0000" - $"0E0A 000E 3939 320E 0E07 07F6 F5C8 0002" - $"BD00 00FF" -}; diff --git a/macosx/tkMacOSX.h b/macosx/tkMacOSX.h index a2a35a5..05ea6c2 100644 --- a/macosx/tkMacOSX.h +++ b/macosx/tkMacOSX.h @@ -4,8 +4,8 @@ * Declarations of Macintosh specific exported variables and procedures. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -18,18 +18,16 @@ #include "tk.h" #endif -#include <Carbon/Carbon.h> - /* * Structures and function types for handling Netscape-type in process * embedding where Tk does not control the top-level */ -typedef int (Tk_MacOSXEmbedRegisterWinProc) (int winID, Tk_Window window); -typedef GWorldPtr (Tk_MacOSXEmbedGetGrafPortProc) (Tk_Window window); +typedef int (Tk_MacOSXEmbedRegisterWinProc) (long winID, Tk_Window window); +typedef void* (Tk_MacOSXEmbedGetGrafPortProc) (Tk_Window window); typedef int (Tk_MacOSXEmbedMakeContainerExistProc) (Tk_Window window); -typedef void (Tk_MacOSXEmbedGetClipProc) (Tk_Window window, RgnHandle rgn); -typedef void (Tk_MacOSXEmbedGetOffsetInParentProc) (Tk_Window window, Point *ulCorner); +typedef void (Tk_MacOSXEmbedGetClipProc) (Tk_Window window, TkRegion rgn); +typedef void (Tk_MacOSXEmbedGetOffsetInParentProc) (Tk_Window window, void *ulCorner); #include "tkPlatDecls.h" diff --git a/macosx/tkMacOSXAETE.r b/macosx/tkMacOSXAETE.r deleted file mode 100644 index 54bb8cc..0000000 --- a/macosx/tkMacOSXAETE.r +++ /dev/null @@ -1,51 +0,0 @@ -/* - * tclMacAETE.r -- - * - * This file creates the Apple Event Terminology resources - * for use by Wish.app. - * - * Copyright (c) 1997 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -#define SystemSevenOrLater 1 - -#include <Carbon.r> - -/* - * The following resources defines the Apple Events that Tk can be - * sent from Apple Script. - */ - -resource 'aete' (0, "Wish Suite") { - 0x01, 0x00, english, roman, - { - "Required Suite", - "Events that every application should support", - 'reqd', 1, 1, - {}, - {}, - {}, - {}, - - "Wish Suite", "Events for the Wish application", 'WIsH', 1, 1, - { - "do script", "Execute a Tcl script", 'misc', kAEDoScript, - 'TEXT', "Result", replyOptional, singleItem, - notEnumerated, reserved, reserved, reserved, reserved, - reserved, reserved, reserved, reserved, reserved, - reserved, reserved, reserved, reserved, - 'TEXT', "Script to execute", directParamRequired, - singleItem, notEnumerated, changesState, reserved, - reserved, reserved, reserved, reserved, reserved, - reserved, reserved, reserved, reserved, reserved, - reserved, - {}, - }, - {}, - {}, - {}, - } -}; diff --git a/macosx/tkMacOSXBitmap.c b/macosx/tkMacOSXBitmap.c index 263a3c8..f503460 100644 --- a/macosx/tkMacOSXBitmap.c +++ b/macosx/tkMacOSXBitmap.c @@ -4,31 +4,14 @@ * This file handles the implementation of native bitmaps. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#include "tkMacOSXInt.h" - -/* - * Depending on the resource type there are different ways to - * draw native icons. - */ -#define TYPE1 0 /* Family icon suite. */ -#define TYPE2 1 /* ICON resource. */ -#define TYPE3 2 /* cicn resource. */ - -/* - * This data structure describes the id and type of a given icon. - * It is used as the source for native icons. - */ -typedef struct { - int id; /* Resource Id for Icon. */ - long int type; /* Type of icon. */ -} NativeIcon; +#include "tkMacOSXPrivate.h" /* * This structure holds information about native bitmaps. @@ -36,9 +19,7 @@ typedef struct { typedef struct { const char *name; /* Name of icon. */ - long int type; /* Type of icon. */ - int id; /* Id of icon. */ - int size; /* Size of icon. */ + OSType iconType; /* OSType of icon. */ } BuiltInIcon; /* @@ -47,24 +28,42 @@ typedef struct { */ static BuiltInIcon builtInIcons[] = { - {"document", TYPE1, kGenericDocumentIconResource, 32}, - {"stationery", TYPE1, kGenericStationeryIconResource, 32}, - {"edition", TYPE1, kGenericEditionFileIconResource, 32}, - {"application", TYPE1, kGenericApplicationIconResource, 32}, - {"accessory", TYPE1, kGenericDeskAccessoryIconResource, 32}, - {"folder", TYPE1, kGenericFolderIconResource, 32}, - {"pfolder", TYPE1, kPrivateFolderIconResource, 32}, - {"trash", TYPE1, kTrashIconResource, 32}, - {"floppy", TYPE1, kFloppyIconResource, 32}, - {"ramdisk", TYPE1, kGenericRAMDiskIconResource, 32}, - {"cdrom", TYPE1, kGenericCDROMIconResource, 32}, - {"preferences", TYPE1, kGenericPreferencesIconResource, 32}, - {"querydoc", TYPE1, kGenericQueryDocumentIconResource, 32}, - {"stop", TYPE2, kStopIcon, 32}, - {"note", TYPE2, kNoteIcon, 32}, - {"caution", TYPE2, kCautionIcon, 32}, - {NULL, 0, 0, 0} + {"document", kGenericDocumentIcon}, + {"stationery", kGenericStationeryIcon}, + {"edition", kGenericEditionFileIcon}, + {"application", kGenericApplicationIcon}, + {"accessory", kGenericDeskAccessoryIcon}, + {"folder", kGenericFolderIcon}, + {"pfolder", kPrivateFolderIcon}, + {"trash", kTrashIcon}, + {"floppy", kGenericFloppyIcon}, + {"ramdisk", kGenericRAMDiskIcon}, + {"cdrom", kGenericCDROMIcon}, + {"preferences", kGenericPreferencesIcon}, + {"querydoc", kGenericQueryDocumentIcon}, + {"stop", kAlertStopIcon}, + {"note", kAlertNoteIcon}, + {"caution", kAlertCautionIcon}, + {NULL} }; + +#define builtInIconSize 32 + +static Tcl_HashTable iconBitmapTable = {}; +typedef struct { + int kind, width, height; + char *value; +} IconBitmap; + +static const char *iconBitmapOptionStrings[] = { + "-file", "-fileType", "-osType", "-systemType", "-namedImage", + "-imageFile", NULL +}; +enum iconBitmapOptions { + ICON_FILE, ICON_FILETYPE, ICON_OSTYPE, ICON_SYSTEMTYPE, ICON_NAMEDIMAGE, + ICON_IMAGEFILE, +}; + /* *---------------------------------------------------------------------- @@ -92,7 +91,7 @@ TkpDefineNativeBitmaps(void) for (builtInPtr = builtInIcons; builtInPtr->name != NULL; builtInPtr++) { Tcl_HashEntry *predefHashPtr; - const char * name; + Tk_Uid name; int isNew; name = Tk_GetUid(builtInPtr->name); @@ -100,14 +99,9 @@ TkpDefineNativeBitmaps(void) if (isNew) { TkPredefBitmap *predefPtr = (TkPredefBitmap *) ckalloc(sizeof(TkPredefBitmap)); - NativeIcon *nativeIconPtr = (NativeIcon *) - ckalloc(sizeof(NativeIcon)); - - nativeIconPtr->id = builtInPtr->id; - nativeIconPtr->type = builtInPtr->type; - predefPtr->source = (char *) nativeIconPtr; - predefPtr->width = builtInPtr->size; - predefPtr->height = builtInPtr->size; + predefPtr->source = UINT2PTR(builtInPtr->iconType); + predefPtr->width = builtInIconSize; + predefPtr->height = builtInIconSize; predefPtr->native = 1; Tcl_SetHashValue(predefHashPtr, predefPtr); } @@ -117,17 +111,54 @@ TkpDefineNativeBitmaps(void) /* *---------------------------------------------------------------------- * + * GetBitmapForIcon -- + * + * Results: + * Bitmap for the given IconRef. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +static Pixmap +GetBitmapForIcon( + Display *display, + IconRef icon, + CGSize size) +{ + TkMacOSXDrawingContext dc; + Pixmap pixmap; + + pixmap = Tk_GetPixmap(display, None, size.width, size.height, 0); + if (TkMacOSXSetupDrawingContext(pixmap, NULL, 1, &dc)) { + if (dc.context) { + const CGAffineTransform t = { .a = 1, .b = 0, .c = 0, .d = -1, + .tx = 0, .ty = size.height }; + const CGRect r = { .origin = { .x = 0, .y = 0 }, .size = size }; + + CGContextConcatCTM(dc.context, t); + PlotIconRefInContext(dc.context, &r, kAlignAbsoluteCenter, + kTransformNone, NULL, kPlotIconRefNormalFlags, icon); + } + TkMacOSXRestoreDrawingContext(&dc); + } + return pixmap; +} + +/* + *---------------------------------------------------------------------- + * * TkpCreateNativeBitmap -- * - * Add native bitmaps. + * Create native bitmap. * * Results: - * A standard Tcl result. If an error occurs then TCL_ERROR is - * returned and a message is left in the interp's result. + * Native bitmap. * * Side effects: - * "Name" is entered into the bitmap table and may be used from - * here on to refer to the given bitmap. + * None. * *---------------------------------------------------------------------- */ @@ -135,41 +166,58 @@ TkpDefineNativeBitmaps(void) Pixmap TkpCreateNativeBitmap( Display *display, - CONST char *source) /* Info about the icon to build. */ + const char *source) /* Info about the icon to build. */ { - Pixmap pix; - Rect destRect; - CGrafPtr savePort; - Boolean portChanged; - const NativeIcon *nativeIconPtr; - - pix = Tk_GetPixmap(display, None, 32, 32, 0); - portChanged = QDSwapPort(TkMacOSXGetDrawablePort(pix), &savePort); - - nativeIconPtr = (const NativeIcon *) source; - SetRect(&destRect, 0, 0, 32, 32); - if (nativeIconPtr->type == TYPE1) { - RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF}; + Pixmap pixmap; + IconRef icon; + OSErr err; - RGBForeColor(&white); - PaintRect(&destRect); - PlotIconID(&destRect, atAbsoluteCenter, ttNone, nativeIconPtr->id); - } else if (nativeIconPtr->type == TYPE2) { - Handle icon = GetIcon(nativeIconPtr->id); - - if (icon != NULL) { - RGBColor black = {0, 0, 0}; - - RGBForeColor(&black); - PlotIcon(&destRect, icon); - ReleaseResource(icon); - } + err = ChkErr(GetIconRef, kOnSystemDisk, kSystemIconsCreator, + PTR2UINT(source), &icon); + if (err == noErr) { + pixmap = GetBitmapForIcon(display, icon, CGSizeMake(builtInIconSize, + builtInIconSize)); + ReleaseIconRef(icon); + } else { + pixmap = Tk_GetPixmap(display, None, builtInIconSize, + builtInIconSize, 0); } + return pixmap; +} + +/* + *---------------------------------------------------------------------- + * + * OSTypeFromString -- + * + * Helper to convert string to OSType. + * + * Results: + * A standard Tcl result. + * + * Side effects: + * t is set to OSType if conversion successful. + * + *---------------------------------------------------------------------- + */ - if (portChanged) { - QDSwapPort(savePort, NULL); +static int +OSTypeFromString(const char *s, OSType *t) { + int result = TCL_ERROR; + Tcl_DString ds; + Tcl_Encoding encoding = Tcl_GetEncoding(NULL, "macRoman"); + + Tcl_UtfToExternalDString(encoding, s, -1, &ds); + if (Tcl_DStringLength(&ds) <= 4) { + char string[4] = {}; + memcpy(string, Tcl_DStringValue(&ds), (size_t) Tcl_DStringLength(&ds)); + *t = (OSType) string[0] << 24 | (OSType) string[1] << 16 | + (OSType) string[2] << 8 | (OSType) string[3]; + result = TCL_OK; } - return pix; + Tcl_DStringFree(&ds); + Tcl_FreeEncoding(encoding); + return result; } /* @@ -177,15 +225,19 @@ TkpCreateNativeBitmap( * * TkpGetNativeAppBitmap -- * - * Add native bitmaps. + * Get a named native bitmap. + * + * Attemps to interpret the given name in order as: + * - name defined by ::tk::mac::iconBitmap + * - NSImage named image name + * - NSImage url string + * - 4-char OSType of IconServices icon * * Results: - * A standard Tcl result. If an error occurs then TCL_ERROR is - * returned and a message is left in the interp's result. + * Native bitmap or None. * * Side effects: - * "Name" is entered into the bitmap table and may be used from - * here on to refer to the given bitmap. + * None. * *---------------------------------------------------------------------- */ @@ -193,78 +245,211 @@ TkpCreateNativeBitmap( Pixmap TkpGetNativeAppBitmap( Display *display, /* The display. */ - CONST char *name, /* The name of the bitmap. */ + const char *name, /* The name of the bitmap. */ int *width, /* The width & height of the bitmap. */ int *height) { - Pixmap pix; - CGrafPtr savePort; - Boolean portChanged; - Rect destRect; - Handle resource; - int type = -1, destWrote; - Str255 nativeName; - Tcl_Encoding encoding; - - /* - * macRoman is the encoding that the resource fork uses. - */ + Tcl_HashEntry *hPtr; + Pixmap pixmap = None; + NSString *string; + NSImage *image = nil; + NSSize size = { .width = builtInIconSize, .height = builtInIconSize }; - encoding = Tcl_GetEncoding(NULL, "macRoman"); - Tcl_UtfToExternal(NULL, encoding, name, strlen(name), 0, NULL, - (char *) &nativeName[1], 255, NULL, &destWrote, NULL); - nativeName[0] = destWrote; - Tcl_FreeEncoding(encoding); - - resource = GetNamedResource('cicn', nativeName); - if (resource != NULL) { - type = TYPE3; + if (iconBitmapTable.buckets && + (hPtr = Tcl_FindHashEntry(&iconBitmapTable, name))) { + OSType type; + IconBitmap *iconBitmap = Tcl_GetHashValue(hPtr); + name = NULL; + size = NSMakeSize(iconBitmap->width, iconBitmap->height); + switch (iconBitmap->kind) { + case ICON_FILE: + string = [[NSString stringWithUTF8String:iconBitmap->value] + stringByExpandingTildeInPath]; + image = [[NSWorkspace sharedWorkspace] iconForFile:string]; + break; + case ICON_FILETYPE: + string = [NSString stringWithUTF8String:iconBitmap->value]; + image = [[NSWorkspace sharedWorkspace] iconForFileType:string]; + break; + case ICON_OSTYPE: + if (OSTypeFromString(iconBitmap->value, &type) == TCL_OK) { + string = NSFileTypeForHFSTypeCode(type); + image = [[NSWorkspace sharedWorkspace] iconForFileType:string]; + } + break; + case ICON_SYSTEMTYPE: + name = iconBitmap->value; + break; + case ICON_NAMEDIMAGE: + string = [NSString stringWithUTF8String:iconBitmap->value]; + image = [NSImage imageNamed:string]; + break; + case ICON_IMAGEFILE: + string = [[NSString stringWithUTF8String:iconBitmap->value] + stringByExpandingTildeInPath]; + image = [[[NSImage alloc] initWithContentsOfFile:string] + autorelease]; + break; + } + if (image) { + [image setSize:size]; + } } else { - resource = GetNamedResource('ICON', nativeName); - if (resource != NULL) { - type = TYPE2; + string = [NSString stringWithUTF8String:name]; + image = [NSImage imageNamed:string]; + if (!image) { + NSURL *url = [NSURL URLWithString:string]; + if (url) { + image = [[[NSImage alloc] initWithContentsOfURL:url] + autorelease]; + } + } + if (image) { + size = [image size]; } } + if (image) { + TkMacOSXDrawingContext dc; + int depth = 0; - if (resource == NULL) { - return (Pixmap) NULL; - } - - pix = Tk_GetPixmap(display, None, 32, 32, 0); - portChanged = QDSwapPort(TkMacOSXGetDrawablePort(pix), &savePort); - - SetRect(&destRect, 0, 0, 32, 32); - if (type == TYPE2) { - RGBColor black = {0, 0, 0}; +#ifdef MAC_OSX_TK_TODO + for (NSImageRep *r in [image representations]) { + NSInteger bitsPerSample = [r bitsPerSample]; + if (bitsPerSample && bitsPerSample > depth) { + depth = bitsPerSample; + }; + } + if (depth == 1) { + /* TODO: convert BW NSImage to CGImageMask */ + } +#endif + pixmap = Tk_GetPixmap(display, None, size.width, size.height, depth); + *width = size.width; + *height = size.height; + if (TkMacOSXSetupDrawingContext(pixmap, NULL, 1, &dc)) { + if (dc.context) { + CGAffineTransform t = { .a = 1, .b = 0, .c = 0, .d = -1, + .tx = 0, .ty = size.height}; - RGBForeColor(&black); - PlotIcon(&destRect, resource); - ReleaseResource(resource); - } else if (type == TYPE3) { - RGBColor white = {0xFFFF, 0xFFFF, 0xFFFF}; - short id; - ResType theType; - Str255 dummy; + CGContextConcatCTM(dc.context, t); + [NSGraphicsContext saveGraphicsState]; + [NSGraphicsContext setCurrentContext:[NSGraphicsContext + graphicsContextWithGraphicsPort:dc.context flipped:NO]]; + [image drawAtPoint:NSZeroPoint fromRect:NSZeroRect + operation:NSCompositeCopy fraction:1.0]; + [NSGraphicsContext restoreGraphicsState]; + } + TkMacOSXRestoreDrawingContext(&dc); + } + } else if (name) { + OSType iconType; + if (OSTypeFromString(name, &iconType) == TCL_OK) { + IconRef icon; + OSErr err = ChkErr(GetIconRef, kOnSystemDisk, kSystemIconsCreator, + iconType, &icon); + if (err == noErr) { + pixmap = GetBitmapForIcon(display, icon, NSSizeToCGSize(size)); + *width = size.width; + *height = size.height; + ReleaseIconRef(icon); + } + } + } + return pixmap; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXIconBitmapObjCmd -- + * + * Implements the ::tk::mac::iconBitmap command. + * + * Results: + * A standard Tcl result. + * + * Side effects: + * none + * + *---------------------------------------------------------------------- + */ - /* - * We need to first paint the background white. Also, for - * some reason we *must* use GetCIcon instead of GetNamedResource - * for PlotCIcon to work - so we use GetResInfo to get the id. - */ +int +TkMacOSXIconBitmapObjCmd( + ClientData clientData, /* Unused. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *const objv[]) /* Argument objects. */ +{ + Tcl_HashEntry *hPtr; + int i = 1, len, isNew, result = TCL_ERROR; + const char *name, *value; + IconBitmap ib, *iconBitmap; - RGBForeColor(&white); - PaintRect(&destRect); - GetResInfo(resource, &id, &theType, dummy); - ReleaseResource(resource); - resource = (Handle) GetCIcon(id); - PlotCIcon(&destRect, (CIconHandle) resource); - DisposeCIcon((CIconHandle) resource); + if (objc != 6) { + Tcl_WrongNumArgs(interp, 1, objv, "name width height " + "-file|-fileType|-osType|-systemType|-namedImage|-imageFile " + "value"); + goto end; } - - *width = 32; - *height = 32; - if (portChanged) { - QDSwapPort(savePort, NULL); + name = Tcl_GetStringFromObj(objv[i++], &len); + if (!len) { + Tcl_AppendResult(interp, "empty bitmap name", NULL); + goto end; + } + if (Tcl_GetIntFromObj(interp, objv[i++], &ib.width) != TCL_OK) { + goto end; + } + if (Tcl_GetIntFromObj(interp, objv[i++], &ib.height) != TCL_OK) { + goto end; + } + if (Tcl_GetIndexFromObj(interp, objv[i++], iconBitmapOptionStrings, + "kind", TCL_EXACT, &ib.kind) != TCL_OK) { + goto end; + } + value = Tcl_GetStringFromObj(objv[i++], &len); + if (!len) { + Tcl_AppendResult(interp, "empty bitmap value", NULL); + goto end; + } +#if 0 + if ((kind == ICON_TYPE || kind == ICON_SYSTEM)) { + Tcl_DString ds; + Tcl_Encoding encoding = Tcl_GetEncoding(NULL, "macRoman"); + Tcl_UtfToExternalDString(encoding, value, -1, &ds); + len = Tcl_DStringLength(&ds); + Tcl_DStringFree(&ds); + Tcl_FreeEncoding(encoding); + if (len > 4) { + Tcl_AppendResult(interp, "invalid bitmap value", NULL); + goto end; + } } - return pix; +#endif + ib.value = ckalloc(len + 1); + strcpy(ib.value, value); + if (!iconBitmapTable.buckets) { + Tcl_InitHashTable(&iconBitmapTable, TCL_STRING_KEYS); + } + hPtr = Tcl_CreateHashEntry(&iconBitmapTable, name, &isNew); + if (!isNew) { + iconBitmap = Tcl_GetHashValue(hPtr); + ckfree(iconBitmap->value); + } else { + iconBitmap = (IconBitmap *) ckalloc(sizeof(IconBitmap)); + Tcl_SetHashValue(hPtr, iconBitmap); + } + *iconBitmap = ib; + result = TCL_OK; +end: + return result; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXButton.c b/macosx/tkMacOSXButton.c index 6940a5a..f912b81 100644 --- a/macosx/tkMacOSXButton.c +++ b/macosx/tkMacOSXButton.c @@ -5,8 +5,8 @@ * button widgets. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -17,98 +17,60 @@ #include "tkMacOSXFont.h" #include "tkMacOSXDebug.h" -#define DEFAULT_USE_TK_TEXT 0 - -#define CONTROL_INITIALIZED 1 -#define FIRST_DRAW 2 -#define ACTIVE 4 - -#define MAX_VALUE 1 - /* - * Default insets for controls - */ +#ifdef TK_MAC_DEBUG +#define TK_MAC_DEBUG_BUTTON +#endif +*/ -#define DEF_INSET_LEFT 2 -#define DEF_INSET_RIGHT 2 -#define DEF_INSET_TOP 2 -#define DEF_INSET_BOTTOM 4 +typedef struct MacButton { + TkButton info; + NSButton *button; + NSImage *image, *selectImage, *tristateImage; +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + int fix; +#endif +} MacButton; -/* - * Some defines used to control what type of control is drawn. - */ +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS -#define DRAW_LABEL 0 /* Labels are treated genericly. */ -#define DRAW_CONTROL 1 /* Draw using the Native control. */ -#define DRAW_CUSTOM 2 /* Make our own button drawing. */ -#define DRAW_BEVEL 3 +int tkMacOSXUseCompatibilityMetrics = 1; /* - * Declaration of Mac specific button structure. + * Use the following heuristic conversion constants to make NSButton-based + * widget metrics match up with the old Carbon control buttons (for the + * default Lucida Grande 13 font). */ -typedef struct { - SInt16 initialValue; - SInt16 minValue; - SInt16 maxValue; - SInt16 procID; - int isBevel; -} MacControlParams; +#define NATIVE_BUTTON_INSET 2 +#define NATIVE_BUTTON_EXTRA_H 2 typedef struct { - int drawType; - Tk_3DBorder border; - int relief; - int offset; /* 0 means this is a normal widget. 1 means - * it is an image button, so we offset the - * image to make the button appear to move - * up and down as the relief changes. */ - GC gc; - int hasImageOrBitmap; -} DrawParams; - -typedef struct { - TkButton info; /* Generic button info */ - int id; - int usingControl; - int useTkText; - int flags; /* Initialisation status */ - MacControlParams params; - WindowRef windowRef; - unsigned long userPaneBackground; - ControlRef userPane; /* Carbon control */ - ControlRef control; /* Carbon control */ - Str255 controlTitle; - ControlFontStyleRec fontStyle; - /* - * The following are used to store the image content for - * beveled buttons, i.e. buttons with images. - */ - ControlButtonContentInfo bevelButtonContent; - OpenCPicParams picParams; -} MacButton; + int trimW, trimH, inset, shrinkH, offsetX, offsetY; +} BoundsFix; + +#define fixForTypeStyle(type, style) ( \ + type == NSSwitchButton ? 0 : \ + type == NSRadioButton ? 1 : \ + style == NSRoundedBezelStyle ? 2 : \ + style == NSRegularSquareBezelStyle ? 3 : \ + style == NSShadowlessSquareBezelStyle ? 4 : \ + INT_MIN) + +static const BoundsFix boundsFixes[] = { + [fixForTypeStyle(NSSwitchButton,0)] = { 2, 2, -1, 0, 2, 1 }, + [fixForTypeStyle(NSRadioButton,0)] = { 0, 2, -1, 0, 1, 1 }, + [fixForTypeStyle(0,NSRoundedBezelStyle)] = { 28, 16, -6, 0, 0, 3 }, + [fixForTypeStyle(0,NSRegularSquareBezelStyle)] = { 28, 15, -2, -1 }, + [fixForTypeStyle(0,NSShadowlessSquareBezelStyle)] = { 2, 2 }, +}; -/* - * Forward declarations for procedures defined later in this file: - */ +#endif -static OSStatus SetUserPaneDrawProc(ControlRef control, - ControlUserPaneDrawProcPtr upp); -static OSStatus SetUserPaneSetUpSpecialBackgroundProc(ControlRef control, - ControlUserPaneBackgroundProcPtr upp); -static void UserPaneDraw(ControlRef control, ControlPartCode cpc); -static void UserPaneBackgroundProc(ControlHandle, - ControlBackgroundPtr info); - -static void ButtonEventProc(ClientData clientData, XEvent *eventPtr); -static int UpdateControlColors(MacButton *mbPtr); -static void TkMacOSXComputeControlParams(TkButton *butPtr, - MacControlParams *paramsPtr); -static int TkMacOSXComputeDrawParams(TkButton *butPtr, DrawParams *dpPtr); -static void TkMacOSXDrawControl(MacButton *butPtr, GWorldPtr destPort, GC gc, - Pixmap pixmap); -static void SetupBevelButton(MacButton *butPtr, ControlRef controlHandle, - GWorldPtr destPort, GC gc, Pixmap pixmap); +static void DisplayNativeButton(TkButton *butPtr); +static void ComputeNativeButtonGeometry(TkButton *butPtr); +static void DisplayUnixButton(TkButton *butPtr); +static void ComputeUnixButtonGeometry(TkButton *butPtr); /* * The class procedure table for the button widgets. @@ -117,10 +79,10 @@ static void SetupBevelButton(MacButton *butPtr, ControlRef controlHandle, Tk_ClassProcs tkpButtonProcs = { sizeof(Tk_ClassProcs), /* size */ TkButtonWorldChanged, /* worldChangedProc */ + NULL, /* createProc */ + NULL /* modalProc */ }; -static int bCount; - /* *---------------------------------------------------------------------- @@ -144,20 +106,40 @@ TkpCreateButton( { MacButton *macButtonPtr = (MacButton *) ckalloc(sizeof(MacButton)); - Tk_CreateEventHandler(tkwin, ActivateMask, - ButtonEventProc, (ClientData) macButtonPtr); - macButtonPtr->id = bCount++; - macButtonPtr->usingControl = 0; - macButtonPtr->flags = 0; - macButtonPtr->userPaneBackground = PIXEL_MAGIC << 24; - macButtonPtr->userPane = NULL; - macButtonPtr->control = NULL; - macButtonPtr->controlTitle[0] = 0; - macButtonPtr->controlTitle[1] = 0; - bzero(&macButtonPtr->params, sizeof(macButtonPtr->params)); - bzero(&macButtonPtr->fontStyle, sizeof(macButtonPtr->fontStyle)); - - return (TkButton *)macButtonPtr; + macButtonPtr->button = nil; + macButtonPtr->image = nil; + macButtonPtr->selectImage = nil; + macButtonPtr->tristateImage = nil; + + return (TkButton *) macButtonPtr; +} + +/* + *---------------------------------------------------------------------- + * + * TkpDestroyButton -- + * + * Free data structures associated with the button control. + * + * Results: + * None. + * + * Side effects: + * Restores the default control state. + * + *---------------------------------------------------------------------- + */ + +void +TkpDestroyButton( + TkButton *butPtr) +{ + MacButton *macButtonPtr = (MacButton *) butPtr; + + TkMacOSXMakeCollectableAndRelease(macButtonPtr->button); + TkMacOSXMakeCollectableAndRelease(macButtonPtr->selectImage); + TkMacOSXMakeCollectableAndRelease(macButtonPtr->selectImage); + TkMacOSXMakeCollectableAndRelease(macButtonPtr->tristateImage); } /* @@ -182,317 +164,22 @@ void TkpDisplayButton( ClientData clientData) /* Information about widget. */ { - MacButton *macButtonPtr = (MacButton *) clientData; TkButton *butPtr = (TkButton *) clientData; - Tk_Window tkwin = butPtr->tkwin; - CGrafPtr destPort, savePort; - Boolean portChanged; - Pixmap pixmap; - int width, height, fullWidth, fullHeight, textXOffset, textYOffset; - int borderWidth, wasUsingControl; - int haveImage = 0, haveText = 0, imageWidth = 0, imageHeight = 0; - int imageXOffset = 0, imageYOffset = 0; /* image information that will - * be used to restrict disabled - * pixmap as well */ - DrawParams drawParams, *dpPtr = &drawParams; butPtr->flags &= ~REDRAW_PENDING; - if ((butPtr->tkwin == NULL) || !Tk_IsMapped(tkwin)) { + if (!butPtr->tkwin || !Tk_IsMapped(butPtr->tkwin)) { return; } - pixmap = (Pixmap) Tk_WindowId(tkwin); - wasUsingControl = macButtonPtr->usingControl; - - if (TkMacOSXComputeDrawParams(butPtr, &drawParams) ) { - macButtonPtr->usingControl = 1; - if (butPtr->type == TYPE_BUTTON) { - macButtonPtr->useTkText = 0; - } else { - macButtonPtr->useTkText = 1; - } - } else { - macButtonPtr->usingControl = 0; - macButtonPtr->useTkText = 1; - } - - /* - * See the comment in UpdateControlColors as to why we use the - * highlightbackground for the border of Macintosh buttons. - */ - - if (macButtonPtr->useTkText) { - if (butPtr->type == TYPE_BUTTON) { - Tk_Fill3DRectangle(tkwin, pixmap, butPtr->highlightBorder, 0, 0, - Tk_Width(tkwin), Tk_Height(tkwin), 0, TK_RELIEF_FLAT); - } else { - Tk_Fill3DRectangle(tkwin, pixmap, butPtr->normalBorder, 0, 0, - Tk_Width(tkwin), Tk_Height(tkwin), 0, TK_RELIEF_FLAT); - } - } - - /* - * Set up clipping region. Make sure the we are using the port - * for this button, or we will set the wrong window's clip. - */ - - destPort = TkMacOSXGetDrawablePort(pixmap); - portChanged = QDSwapPort(destPort, &savePort); - TkMacOSXSetUpClippingRgn(pixmap); - - /* - * Draw the native portion of the buttons. Start by creating the control - * if it doesn't already exist. Then configure the Macintosh control from - * the Tk info. Finally, we call Draw1Control to draw to the screen. - */ - - if (macButtonPtr->usingControl) { - borderWidth = 0; - TkMacOSXDrawControl(macButtonPtr, destPort, dpPtr->gc, pixmap); - } else if (wasUsingControl && macButtonPtr->userPane) { - DisposeControl(macButtonPtr->userPane); - macButtonPtr->userPane = NULL; - macButtonPtr->control = NULL; - macButtonPtr->flags = 0; - } - - if ((dpPtr->drawType == DRAW_CUSTOM) || (dpPtr->drawType == DRAW_LABEL)) { - borderWidth = butPtr->borderWidth; - } - - /* - * Display image or bitmap or text for button. This has - * already been done under Appearance with the Bevel - * button types. - */ - - if (dpPtr->drawType == DRAW_BEVEL) { - goto applyStipple; - } - - if (butPtr->image != None) { - Tk_SizeOfImage(butPtr->image, &width, &height); - haveImage = 1; - } else if (butPtr->bitmap != None) { - Tk_SizeOfBitmap(butPtr->display, butPtr->bitmap, &width, &height); - haveImage = 1; - } - imageWidth = width; - imageHeight = height; - - haveText = (butPtr->textWidth != 0 && butPtr->textHeight != 0); - if (butPtr->compound != COMPOUND_NONE && haveImage && haveText) { - int x, y; - - textXOffset = 0; - textYOffset = 0; - fullWidth = 0; - fullHeight = 0; - - switch ((enum compound) butPtr->compound) { - case COMPOUND_TOP: - case COMPOUND_BOTTOM: - /* - * Image is above or below text. - */ - if (butPtr->compound == COMPOUND_TOP) { - textYOffset = height + butPtr->padY; - } else { - imageYOffset = butPtr->textHeight + butPtr->padY; - } - fullHeight = height + butPtr->textHeight + butPtr->padY; - fullWidth = (width > butPtr->textWidth ? width : - butPtr->textWidth); - textXOffset = (fullWidth - butPtr->textWidth)/2; - imageXOffset = (fullWidth - width)/2; - break; - - case COMPOUND_LEFT: - case COMPOUND_RIGHT: - /* - * Image is left or right of text. - */ - - if (butPtr->compound == COMPOUND_LEFT) { - textXOffset = width + butPtr->padX; - } else { - imageXOffset = butPtr->textWidth + butPtr->padX; - } - fullWidth = butPtr->textWidth + butPtr->padX + width; - fullHeight = (height > butPtr->textHeight ? height : - butPtr->textHeight); - textYOffset = (fullHeight - butPtr->textHeight)/2; - imageYOffset = (fullHeight - height)/2; - break; - - case COMPOUND_CENTER: - /* - * Image and text are superimposed. - */ - - fullWidth = (width > butPtr->textWidth ? width : - butPtr->textWidth); - fullHeight = (height > butPtr->textHeight ? height : - butPtr->textHeight); - textXOffset = (fullWidth - butPtr->textWidth)/2; - imageXOffset = (fullWidth - width)/2; - textYOffset = (fullHeight - butPtr->textHeight)/2; - imageYOffset = (fullHeight - height)/2; - break; - - case COMPOUND_NONE: - break; - } - - TkComputeAnchor(butPtr->anchor, tkwin, butPtr->padX, butPtr->padY, - butPtr->indicatorSpace + fullWidth, fullHeight, &x, &y); - - x += butPtr->indicatorSpace; - - x += dpPtr->offset; - y += dpPtr->offset; - if (dpPtr->relief == TK_RELIEF_RAISED) { - x -= dpPtr->offset; - y -= dpPtr->offset; - } else if (dpPtr->relief == TK_RELIEF_SUNKEN) { - x += dpPtr->offset; - y += dpPtr->offset; - } - imageXOffset += x; - imageYOffset += y; - if (butPtr->image != NULL) { - if ((butPtr->selectImage != NULL) && (butPtr->flags & SELECTED)) { - Tk_RedrawImage(butPtr->selectImage, 0, 0, width, height, - pixmap, imageXOffset, imageYOffset); -#if 0 - } else if ((butPtr->tristateImage != NULL) && - (butPtr->flags & TRISTATED)) { - Tk_RedrawImage(butPtr->tristateImage, 0, 0, width, height, - pixmap, imageXOffset, imageYOffset); -#endif - } else { - Tk_RedrawImage(butPtr->image, 0, 0, width, height, - pixmap, imageXOffset, imageYOffset); - } - } else { - XSetClipOrigin(butPtr->display, dpPtr->gc, imageXOffset, - imageYOffset); - XCopyPlane(butPtr->display, butPtr->bitmap, pixmap, dpPtr->gc, - 0, 0, width, height, imageXOffset, imageYOffset, 1); - XSetClipOrigin(butPtr->display, dpPtr->gc, 0, 0); - } - - if (macButtonPtr->useTkText) { - Tk_DrawTextLayout(butPtr->display, pixmap, dpPtr->gc, - butPtr->textLayout, x + textXOffset, y + textYOffset, 0, - -1); - Tk_UnderlineTextLayout(butPtr->display, pixmap, dpPtr->gc, - butPtr->textLayout, x + textXOffset, y + textYOffset, - butPtr->underline); - } - y += fullHeight/2; - } else if (haveImage) { - int x = 0, y; - - TkComputeAnchor(butPtr->anchor, tkwin, 0, 0, - butPtr->indicatorSpace + width, height, &x, &y); - x += butPtr->indicatorSpace; - - x += dpPtr->offset; - y += dpPtr->offset; - if (dpPtr->relief == TK_RELIEF_RAISED) { - x -= dpPtr->offset; - y -= dpPtr->offset; - } else if (dpPtr->relief == TK_RELIEF_SUNKEN) { - x += dpPtr->offset; - y += dpPtr->offset; - } - imageXOffset += x; - imageYOffset += y; - if (butPtr->image != NULL) { - if ((butPtr->selectImage != NULL) && (butPtr->flags & SELECTED)) { - Tk_RedrawImage(butPtr->selectImage, 0, 0, width, height, - pixmap, imageXOffset, imageYOffset); -#if 0 - } else if ((butPtr->tristateImage != NULL) && - (butPtr->flags & TRISTATED)) { - Tk_RedrawImage(butPtr->tristateImage, 0, 0, width, height, - pixmap, imageXOffset, imageYOffset); -#endif - } else { - Tk_RedrawImage(butPtr->image, 0, 0, width, height, - pixmap, imageXOffset, imageYOffset); - } - } else { - XSetClipOrigin(butPtr->display, dpPtr->gc, x, y); - XCopyPlane(butPtr->display, butPtr->bitmap, pixmap, dpPtr->gc, - 0, 0, width, height, x, y, 1); - XSetClipOrigin(butPtr->display, dpPtr->gc, 0, 0); - } - y += height/2; - } else if (macButtonPtr->useTkText) { - int x = 0, y; - - TkComputeAnchor(butPtr->anchor, tkwin, butPtr->padX, butPtr->padY, - butPtr->indicatorSpace + butPtr->textWidth, - butPtr->textHeight, &x, &y); - x += butPtr->indicatorSpace; - Tk_DrawTextLayout(butPtr->display, pixmap, dpPtr->gc, - butPtr->textLayout, x, y, 0, -1); - } - - /* - * If the button is disabled with a stipple rather than a special - * foreground color, generate the stippled effect. If the widget - * is selected and we use a different background color when selected, - * must temporarily modify the GC so the stippling is the right color. - */ - - applyStipple: - if (macButtonPtr->useTkText) { - if ((butPtr->state == STATE_DISABLED) - && ((butPtr->disabledFg == NULL) || (butPtr->image != NULL))) { - if ((butPtr->flags & SELECTED) && !butPtr->indicatorOn - && (butPtr->selectBorder != NULL)) { - XSetForeground(butPtr->display, butPtr->stippleGC, - Tk_3DBorderColor(butPtr->selectBorder)->pixel); - } - - /* - * Stipple the whole button if no disabledFg was specified, - * otherwise restrict stippling only to displayed image - */ - - if (butPtr->disabledFg == NULL) { - XFillRectangle(butPtr->display, pixmap, butPtr->stippleGC, - 0, 0, (unsigned) Tk_Width(tkwin), - (unsigned) Tk_Height(tkwin)); - } else { - XFillRectangle(butPtr->display, pixmap, butPtr->stippleGC, - imageXOffset, imageYOffset, - (unsigned) imageWidth, (unsigned) imageHeight); - } - if ((butPtr->flags & SELECTED) && !butPtr->indicatorOn - && (butPtr->selectBorder != NULL)) { - XSetForeground(butPtr->display, butPtr->stippleGC, - Tk_3DBorderColor(butPtr->normalBorder)->pixel); - } - } - - /* - * Draw the border and traversal highlight last. This way, if the - * button's contents overflow they'll be covered up by the border. - */ - - if (dpPtr->relief != TK_RELIEF_FLAT) { - int inset = butPtr->highlightWidth; - Tk_Draw3DRectangle(tkwin, pixmap, dpPtr->border, inset, inset, - Tk_Width(tkwin) - 2*inset, Tk_Height(tkwin) - 2*inset, - borderWidth, dpPtr->relief); - } - } - if (portChanged) { - QDSwapPort(savePort, NULL); + switch (butPtr->type) { + case TYPE_LABEL: + DisplayUnixButton(butPtr); + break; + case TYPE_BUTTON: + case TYPE_CHECK_BUTTON: + case TYPE_RADIO_BUTTON: + DisplayNativeButton(butPtr); + break; } } @@ -516,894 +203,826 @@ TkpDisplayButton( void TkpComputeButtonGeometry( - TkButton *butPtr) /* Button whose geometry may have changed. */ + register TkButton *butPtr) /* Button whose geometry may have changed. */ { - int width, height, avgWidth, haveImage = 0, haveText = 0; - int xInset, yInset, txtWidth, txtHeight; - Tk_FontMetrics fm; - DrawParams drawParams; - - /* - * First figure out the size of the contents of the button. - */ - - width = 0; - height = 0; - txtWidth = 0; - txtHeight = 0; - avgWidth = 0; + MacButton *macButtonPtr = (MacButton *) butPtr; - butPtr->indicatorSpace = 0; - if (butPtr->image != NULL) { - Tk_SizeOfImage(butPtr->image, &width, &height); - haveImage = 1; - } else if (butPtr->bitmap != None) { - Tk_SizeOfBitmap(butPtr->display, butPtr->bitmap, &width, &height); - haveImage = 1; - } - - if (haveImage == 0 || butPtr->compound != COMPOUND_NONE) { - Tk_FreeTextLayout(butPtr->textLayout); - butPtr->textLayout = Tk_ComputeTextLayout(butPtr->tkfont, - Tcl_GetString(butPtr->textPtr), -1, butPtr->wrapLength, - butPtr->justify, 0, &butPtr->textWidth, &butPtr->textHeight); - - txtWidth = butPtr->textWidth; - txtHeight = butPtr->textHeight; - avgWidth = Tk_TextWidth(butPtr->tkfont, "0", 1); - Tk_GetFontMetrics(butPtr->tkfont, &fm); - haveText = (txtWidth != 0 && txtHeight != 0); - } - - /* - * If the button is compound (ie, it shows both an image and text), - * the new geometry is a combination of the image and text geometry. - * We only honor the compound bit if the button has both text and an - * image, because otherwise it is not really a compound button. - */ - - if (butPtr->compound != COMPOUND_NONE && haveImage && haveText) { - switch ((enum compound) butPtr->compound) { - case COMPOUND_TOP: - case COMPOUND_BOTTOM: - /* - * Image is above or below text. - */ - - height += txtHeight + butPtr->padY; - width = (width > txtWidth ? width : txtWidth); - break; - case COMPOUND_LEFT: - case COMPOUND_RIGHT: - /* - * Image is left or right of text. - */ - - width += txtWidth + butPtr->padX; - height = (height > txtHeight ? height : txtHeight); - break; - case COMPOUND_CENTER: - /* - * Image and text are superimposed. - */ - - width = (width > txtWidth ? width : txtWidth); - height = (height > txtHeight ? height : txtHeight); - break; - case COMPOUND_NONE: - break; - } - if (butPtr->width > 0) { - width = butPtr->width; - } - if (butPtr->height > 0) { - height = butPtr->height; - } - - if ((butPtr->type >= TYPE_CHECK_BUTTON) && butPtr->indicatorOn) { - butPtr->indicatorSpace = height; - if (butPtr->type == TYPE_CHECK_BUTTON) { - butPtr->indicatorDiameter = (65 * height)/100; - } else { - butPtr->indicatorDiameter = (75 * height)/100; - } - } - - width += 2 * butPtr->padX; - height += 2 * butPtr->padY; - } else if (haveImage) { - if (butPtr->width > 0) { - width = butPtr->width; - } - if (butPtr->height > 0) { - height = butPtr->height; - } - if ((butPtr->type >= TYPE_CHECK_BUTTON) && butPtr->indicatorOn) { - butPtr->indicatorSpace = height; - if (butPtr->type == TYPE_CHECK_BUTTON) { - butPtr->indicatorDiameter = (65 * height)/100; - } else { - butPtr->indicatorDiameter = (75 * height)/100; - } - } - } else { - width = txtWidth; - height = txtHeight; - if (butPtr->width > 0) { - width = butPtr->width * avgWidth; - } - if (butPtr->height > 0) { - height = butPtr->height * fm.linespace; - } - if ((butPtr->type >= TYPE_CHECK_BUTTON) && butPtr->indicatorOn) { - butPtr->indicatorDiameter = fm.linespace; - if (butPtr->type == TYPE_CHECK_BUTTON) { - butPtr->indicatorDiameter = - (80 * butPtr->indicatorDiameter)/100; - } - butPtr->indicatorSpace = butPtr->indicatorDiameter + avgWidth; - } - } - - /* - * Now figure out the size of the border decorations for the button. - */ - - if (butPtr->highlightWidth < 0) { - butPtr->highlightWidth = 0; - } - - /* - * The width and height calculation for Appearance buttons with images & - * non-Appearance buttons with images is different. In the latter case, - * we add the borderwidth to the inset, since we are going to stamp a - * 3-D border over the image. In the former, we add it to the height, - * directly, since Appearance will draw the border as part of our control. - * - * When issuing the geometry request, add extra space for the indicator, - * if any, and for the border and padding, plus if this is an image two - * extra pixels so the display can be offset by 1 pixel in either - * direction for the raised or lowered effect. - * - * The highlight width corresponds to the default ring on the Macintosh. - * As such, the highlight width is only added if the button is the default - * button. The actual width of the default ring is one less than the - * highlight width as there is also one pixel of spacing. - * Appearance buttons with images do not have a highlight ring, because the - * Bevel button type does not support one. - */ - - if ((butPtr->image == None) && (butPtr->bitmap == None)) { - width += 2*butPtr->padX; - height += 2*butPtr->padY; - } - - if ((butPtr->type == TYPE_BUTTON)) { - if ((butPtr->image == None) && (butPtr->bitmap == None)) { - butPtr->inset = 0; - if (butPtr->defaultState != STATE_DISABLED) { - butPtr->inset += butPtr->highlightWidth; - } - } else { - butPtr->inset = 0; - width += (2 * butPtr->borderWidth + 4); - height += (2 * butPtr->borderWidth + 4); + switch (butPtr->type) { + case TYPE_LABEL: + if (macButtonPtr->button && [macButtonPtr->button superview]) { + [macButtonPtr->button removeFromSuperviewWithoutNeedingDisplay]; } - } else if (butPtr->type == TYPE_LABEL) { - butPtr->inset = butPtr->borderWidth; - } else if (butPtr->indicatorOn) { - butPtr->inset = 0; - } else { - /* - * Under Appearance, the Checkbutton or radiobutton with an image - * is represented by a BevelButton with the Sticky defProc... - * So we must set its height in the same way as the Button - * with an image or bitmap. - */ - - if (butPtr->image != None || butPtr->bitmap != None) { - int border; - - butPtr->inset = 0; - if (butPtr->borderWidth <= 2) { - border = 6; - } else { - border = 2 * butPtr->borderWidth + 2; - } - width += border; - height += border; - } else { - butPtr->inset = butPtr->borderWidth; + ComputeUnixButtonGeometry(butPtr); + break; + case TYPE_BUTTON: + case TYPE_CHECK_BUTTON: + case TYPE_RADIO_BUTTON: + if (!macButtonPtr->button) { + NSButton *button = [[NSButton alloc] initWithFrame:NSZeroRect]; + macButtonPtr->button = TkMacOSXMakeUncollectable(button); } + ComputeNativeButtonGeometry(butPtr); + break; } - - if (TkMacOSXComputeDrawParams(butPtr, &drawParams)) { - xInset = butPtr->indicatorSpace + DEF_INSET_LEFT + DEF_INSET_RIGHT; - yInset = DEF_INSET_TOP + DEF_INSET_BOTTOM; - } else { - xInset = butPtr->indicatorSpace+butPtr->inset*2; - yInset = butPtr->inset*2; - } - Tk_GeometryRequest(butPtr->tkwin, width + xInset, height + yInset); - Tk_SetInternalBorder(butPtr->tkwin, butPtr->inset); } /* *---------------------------------------------------------------------- * - * TkpDestroyButton -- + * TkpButtonSetDefaults -- * - * Free data structures associated with the button control. + * This procedure is invoked before option tables are created for + * buttons. It modifies some of the default values to match the current + * values defined for this platform. * * Results: - * None. + * Some of the default values in *specPtr are modified. * * Side effects: - * Restores the default control state. + * Updates some of. * *---------------------------------------------------------------------- */ void -TkpDestroyButton( - TkButton *butPtr) +TkpButtonSetDefaults() { - MacButton *mbPtr = (MacButton *) butPtr; /* Mac button. */ - - if (mbPtr->userPane) { - DisposeControl(mbPtr->userPane); - mbPtr->userPane = NULL; +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (!tkMacOSXUseCompatibilityMetrics) { + strcpy(tkDefButtonHighlightWidth, DEF_BUTTON_HIGHLIGHT_WIDTH_NOCM); + strcpy(tkDefLabelHighlightWidth, DEF_BUTTON_HIGHLIGHT_WIDTH_NOCM); + strcpy(tkDefButtonPadx, DEF_BUTTON_PADX_NOCM); + strcpy(tkDefLabelPadx, DEF_BUTTON_PADX_NOCM); + strcpy(tkDefButtonPady, DEF_BUTTON_PADY_NOCM); + strcpy(tkDefLabelPady, DEF_BUTTON_PADY_NOCM); } +#endif } + +#pragma mark - +#pragma mark Native Buttons: + /* *---------------------------------------------------------------------- * - * TkMacOSXInitControl -- + * DisplayNativeButton -- * - * This procedure initialises a Carbon control. + * This procedure is invoked to display a button widget. It is + * normally invoked as an idle handler. * * Results: - * 0 on success, 1 on failure. + * None. * * Side effects: - * A background pane control and the control itself is created - * The contol is embedded in the background control - * The background control is embedded in the root control - * of the containing window - * The creation parameters for the control are also computed + * Commands are output to X to display the button in its + * current mode. The REDRAW_PENDING flag is cleared. * *---------------------------------------------------------------------- */ -static int -TkMacOSXInitControl( - MacButton *mbPtr, /* Mac button. */ - GWorldPtr destPort, - GC gc, - Pixmap pixmap, - Rect *paneRect, - Rect *cntrRect) +static void +DisplayNativeButton( + TkButton *butPtr) { - TkButton *butPtr = (TkButton *) mbPtr; - ControlRef rootControl; - SInt16 procID, initialValue, minValue, maxValue; - Boolean initiallyVisible; - SInt32 controlReference; - - rootControl = TkMacOSXGetRootControl(Tk_WindowId(butPtr->tkwin)); - mbPtr->windowRef = TkMacOSXDrawableWindow(Tk_WindowId(butPtr->tkwin)); + MacButton *macButtonPtr = (MacButton *) butPtr; + NSButton *button = macButtonPtr->button; + Tk_Window tkwin = butPtr->tkwin; + TkWindow *winPtr = (TkWindow *) tkwin; + MacDrawable *macWin = (MacDrawable *) winPtr->window; + TkMacOSXDrawingContext dc; + NSView *view = TkMacOSXDrawableView(macWin); + CGFloat viewHeight = [view bounds].size.height; + CGAffineTransform t = { .a = 1, .b = 0, .c = 0, .d = -1, .tx = 0, + .ty = viewHeight}; + NSRect frame; + int enabled; + NSCellStateValue state; + + if (!view || + !TkMacOSXSetupDrawingContext((Drawable) macWin, NULL, 1, &dc)) { + return; + } + CGContextConcatCTM(dc.context, t); /* - * Set up the user pane. + * We cannot change the background color of the button itself, only the + * color of the background of its container. + * This will be the color that peeks around the rounded corners of the + * button. We make this the highlightbackground rather than the background, + * because if you color the background of a frame containing a + * button, you usually also color the highlightbackground as well, + * or you will get a thin grey ring around the button. */ - initiallyVisible = false; - initialValue = kControlSupportsEmbedding|kControlHasSpecialBackground; - minValue = 0; - maxValue = 1; - procID = kControlUserPaneProc; - controlReference = (SInt32)mbPtr; - mbPtr->userPane = NewControl(mbPtr->windowRef, paneRect, "\p", - initiallyVisible, initialValue, minValue, maxValue, procID, - controlReference); - - if (!mbPtr->userPane) { - TkMacOSXDbgMsg("Failed to create user pane control"); - return 1; + Tk_Fill3DRectangle(tkwin, (Pixmap) macWin, butPtr->type == TYPE_BUTTON ? + butPtr->highlightBorder : butPtr->normalBorder, 0, 0, + Tk_Width(tkwin), Tk_Height(tkwin), 0, TK_RELIEF_FLAT); + if ([button superview] != view) { + [view addSubview:button]; } - if (ChkErr(EmbedControl, mbPtr->userPane,rootControl) != noErr) { - return 1; + if (macButtonPtr->tristateImage) { + NSImage *selectImage = macButtonPtr->selectImage ? + macButtonPtr->selectImage : macButtonPtr->image; + [button setImage:(butPtr->flags & TRISTATED ? + selectImage : macButtonPtr->image)]; + [button setAlternateImage:(butPtr->flags & TRISTATED ? + macButtonPtr->tristateImage : selectImage)]; } - - SetUserPaneSetUpSpecialBackgroundProc(mbPtr->userPane, - UserPaneBackgroundProc); - SetUserPaneDrawProc(mbPtr->userPane,UserPaneDraw); - initiallyVisible = false; - TkMacOSXComputeControlParams(butPtr,&mbPtr->params); - mbPtr->control = NewControl(mbPtr->windowRef, cntrRect, "\p", - initiallyVisible, mbPtr->params.initialValue, - mbPtr->params.minValue, mbPtr->params.maxValue, - mbPtr->params.procID, controlReference); - - if (!mbPtr->control) { - TkMacOSXDbgMsg("Failed to create control of type %d\n", procID); - return 1; + if (butPtr->flags & SELECTED) { + state = NSOnState; + } else if (butPtr->flags & TRISTATED) { + state = NSMixedState; + } else { + state = NSOffState; } - if (ChkErr(EmbedControl, mbPtr->control,mbPtr->userPane) != noErr ) { - return 1; + [button setState:state]; + enabled = !(butPtr->state == STATE_DISABLED); + [button setEnabled:enabled]; + if (enabled) { + //[button highlight:(butPtr->state == STATE_ACTIVE)]; + //[cell setHighlighted:(butPtr->state == STATE_ACTIVE)]; } - - mbPtr->flags |= (CONTROL_INITIALIZED | FIRST_DRAW); - if (IsWindowActive(mbPtr->windowRef)) { - mbPtr->flags |= ACTIVE; + if (butPtr->type == TYPE_BUTTON && butPtr->defaultState == STATE_ACTIVE) { + //[[view window] setDefaultButtonCell:cell]; + [button setKeyEquivalent:@"\r"]; + } else { + [button setKeyEquivalent:@""]; + } + frame = NSMakeRect(macWin->xOff, macWin->yOff, Tk_Width(tkwin), + Tk_Height(tkwin)); +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + BoundsFix boundsFix = boundsFixes[macButtonPtr->fix]; + frame = NSOffsetRect(frame, boundsFix.offsetX, boundsFix.offsetY); + frame.size.height -= boundsFix.shrinkH + NATIVE_BUTTON_EXTRA_H; + frame = NSInsetRect(frame, boundsFix.inset + NATIVE_BUTTON_INSET, + boundsFix.inset + NATIVE_BUTTON_INSET); } - return 0; +#endif + frame.origin.y = viewHeight - (frame.origin.y + frame.size.height); + if (!NSEqualRects(frame, [button frame])) { + [button setFrame:frame]; + } + [button displayRectIgnoringOpacity:[button bounds]]; + TkMacOSXRestoreDrawingContext(&dc); +#ifdef TK_MAC_DEBUG_BUTTON + TKLog(@"button %s frame %@ width %d height %d", + ((TkWindow *)butPtr->tkwin)->pathName, NSStringFromRect(frame), + Tk_Width(tkwin), Tk_Height(tkwin)); +#endif } /* - *-------------------------------------------------------------- + *---------------------------------------------------------------------- * - * TkMacOSXDrawControl -- + * ComputeNativeButtonGeometry -- * - * This function draws the tk button using Mac controls - * In addition, this code may apply custom colors passed - * in the TkButton. + * After changes in a button's text or bitmap, this procedure + * recomputes the button's geometry and passes this information + * along to the geometry manager for the window. * * Results: * None. * * Side effects: - * The control is created, or reinitialised as needed. + * The button's window may change size. * - *-------------------------------------------------------------- + *---------------------------------------------------------------------- */ static void -TkMacOSXDrawControl( - MacButton *mbPtr, /* Mac button. */ - GWorldPtr destPort, /* Off screen GWorld. */ - GC gc, /* The GC we are drawing into - needed for the - * bevel button */ - Pixmap pixmap) /* The pixmap we are drawing into - needed for - * the bevel button */ +ComputeNativeButtonGeometry( + TkButton *butPtr) /* Button whose geometry may have changed. */ { - TkButton *butPtr = (TkButton *) mbPtr; - TkWindow *winPtr; - Rect paneRect, cntrRect; - int active, enabled; - int rebuild; - - winPtr = (TkWindow *) butPtr->tkwin; - - paneRect.left = winPtr->privatePtr->xOff; - paneRect.top = winPtr->privatePtr->yOff; - paneRect.right = paneRect.left + Tk_Width(butPtr->tkwin); - paneRect.bottom = paneRect.top + Tk_Height(butPtr->tkwin); + MacButton *macButtonPtr = (MacButton *) butPtr; + NSButton *button = macButtonPtr->button; + NSButtonCell *cell = [button cell]; + NSButtonType type = -1; + NSBezelStyle style = 0; + NSInteger highlightsBy = 0, showsStateBy = 0; + NSFont *font; + NSRect bounds = NSZeroRect, titleRect = NSZeroRect; + int haveImage = (butPtr->image || butPtr->bitmap != None), haveText = 0; + int haveCompound = (butPtr->compound != COMPOUND_NONE); + int width, height, border = 0; - cntrRect = paneRect; - -/* - cntrRect.left += butPtr->inset; - cntrRect.top += butPtr->inset; - cntrRect.right -= butPtr->inset; - cntrRect.bottom -= butPtr->inset; -*/ - cntrRect.left += DEF_INSET_LEFT; - cntrRect.top += DEF_INSET_TOP; - cntrRect.right -= DEF_INSET_RIGHT; - cntrRect.bottom -= DEF_INSET_BOTTOM; - - /* - * The control has been previously initialised. - * It may need to be re-initialised - */ -#if 0 - rebuild = (winPtr->flags & TK_REBUILD_TOPLEVEL); - winPtr->flags &= ~TK_REBUILD_TOPLEVEL; -#else - rebuild = 0; + butPtr->indicatorSpace = 0; + butPtr->inset = 0; + if (butPtr->highlightWidth < 0) { + butPtr->highlightWidth = 0; + } + switch (butPtr->type) { + case TYPE_BUTTON: + type = NSMomentaryPushInButton; + if (!haveImage) { + style = NSRoundedBezelStyle; + butPtr->inset = butPtr->defaultState != STATE_DISABLED ? + butPtr->highlightWidth : 0; + [button setImage:nil]; + [button setImagePosition:NSNoImage]; + } else { + style = NSShadowlessSquareBezelStyle; + highlightsBy = butPtr->selectImage || butPtr->bitmap ? + NSContentsCellMask : 0; + border = butPtr->borderWidth; + } + break; + case TYPE_RADIO_BUTTON: + case TYPE_CHECK_BUTTON: + if (!haveImage /*|| butPtr->indicatorOn*/) { // TODO: indicatorOn + type = butPtr->type == TYPE_RADIO_BUTTON ? + NSRadioButton : NSSwitchButton; + butPtr->inset = /*butPtr->indicatorOn ? 0 :*/ butPtr->borderWidth; + } else { + type = NSPushOnPushOffButton; + style = NSShadowlessSquareBezelStyle; + highlightsBy = butPtr->selectImage || butPtr->bitmap ? + NSContentsCellMask : 0; + showsStateBy = butPtr->selectImage || butPtr->tristateImage ? + NSContentsCellMask : 0; +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + border = butPtr->borderWidth > 1 ? butPtr->borderWidth - 1 : 1; + } else #endif - if (mbPtr->flags) { - MacControlParams params; - - TkMacOSXComputeControlParams(butPtr, ¶ms); - if (rebuild || bcmp(¶ms, &mbPtr->params, sizeof(params))) { - /* - * The type of control has changed. - * Clean it up and clear the flag. - */ - - if (mbPtr->userPane) { - DisposeControl(mbPtr->userPane); - mbPtr->userPane = NULL; - mbPtr->control = NULL; + { + border = butPtr->borderWidth; } - mbPtr->flags = 0; } + break; } - if (!(mbPtr->flags & CONTROL_INITIALIZED)) { - if (TkMacOSXInitControl(mbPtr, destPort, gc, pixmap, &paneRect, - &cntrRect)) { - return; + [button setButtonType:type]; + if (style) { + [button setBezelStyle:style]; + } + if (highlightsBy) { + [cell setHighlightsBy:highlightsBy|[cell highlightsBy]]; + } + if (showsStateBy) { + [cell setShowsStateBy:showsStateBy|[cell showsStateBy]]; + } +#if 0 + if (style == NSShadowlessSquareBezelStyle) { + NSControlSize controlSize = NSRegularControlSize; + + if (butPtr->borderWidth <= 2) { + controlSize = NSMiniControlSize; + } else if (butPtr->borderWidth == 3) { + controlSize = NSSmallControlSize; } + [cell setControlSize:controlSize]; } - SetControlBounds(mbPtr->userPane, &paneRect); - SetControlBounds(mbPtr->control, &cntrRect); +#endif + [button setAllowsMixedState:YES]; - if (!mbPtr->useTkText) { - Str255 controlTitle; - ControlFontStyleRec fontStyle; - Tk_Font font; + if (!haveImage || haveCompound) { int len; + char *text = Tcl_GetStringFromObj(butPtr->textPtr, &len); - if (((mbPtr->info.image == NULL) && (mbPtr->info.bitmap == None)) - || (mbPtr->info.compound != COMPOUND_NONE)) { - len = TkFontGetFirstTextLayout(butPtr->textLayout, - &font, (char*) controlTitle); - controlTitle[len] = 0; - } else { - len = 0; - controlTitle[0] = 0; - } - if (rebuild || bcmp(mbPtr->controlTitle, controlTitle, len+1)) { - CFStringRef cf = CFStringCreateWithCString(NULL, - (char*) controlTitle, kCFStringEncodingUTF8); - - if (cf != NULL) { - SetControlTitleWithCFString(mbPtr->control, cf); - CFRelease(cf); - } - bcopy(controlTitle, mbPtr->controlTitle, len+1); - } if (len) { - TkMacOSXInitControlFontStyle(font, &fontStyle); - if (bcmp(&mbPtr->fontStyle, &fontStyle, sizeof(fontStyle)) ) { - ChkErr(SetControlFontStyle, mbPtr->control, &fontStyle); - bcopy(&fontStyle, &mbPtr->fontStyle, sizeof(fontStyle)); - } + NSString *title = [[NSString alloc] initWithBytes:text length:len + encoding:NSUTF8StringEncoding]; + [button setTitle:title]; + [title release]; + haveText = 1; } } - if (mbPtr->params.isBevel) { - /* - * Initialiase the image/button parameters. - */ - - SetupBevelButton(mbPtr, mbPtr->control, destPort, gc, pixmap); - } + haveCompound = (haveCompound && haveImage && haveText); + if (haveText) { + NSTextAlignment alignment = NSNaturalTextAlignment; - if (butPtr->flags & SELECTED) { - SetControlValue(mbPtr->control, 1); -#if 0 - } else if (butPtr->flags & TRISTATED) { - SetControlValue(mbPtr->control, 2); -#endif + switch (butPtr->justify) { + case TK_JUSTIFY_LEFT: + alignment = NSLeftTextAlignment; + break; + case TK_JUSTIFY_RIGHT: + alignment = NSRightTextAlignment; + break; + case TK_JUSTIFY_CENTER: + alignment = NSCenterTextAlignment; + break; + } + [button setAlignment:alignment]; } else { - SetControlValue(mbPtr->control, 0); + [button setTitle:@""]; } - - active = ((mbPtr->flags & ACTIVE) != 0); - if (active != IsControlActive(mbPtr->control)) { - if (active) { - ChkErr(ActivateControl, mbPtr->control); - } else { - ChkErr(DeactivateControl, mbPtr->control); - } + font = TkMacOSXNSFontForFont(butPtr->tkfont); + if (font) { + [button setFont:font]; } - enabled = !(butPtr->state == STATE_DISABLED); - if (enabled != IsControlEnabled(mbPtr->control)) { - if (enabled) { - ChkErr(EnableControl, mbPtr->control); + TkMacOSXMakeCollectableAndRelease(macButtonPtr->image); + TkMacOSXMakeCollectableAndRelease(macButtonPtr->selectImage); + TkMacOSXMakeCollectableAndRelease(macButtonPtr->tristateImage); + if (haveImage) { + int width, height; + NSImage *image, *selectImage = nil, *tristateImage = nil; + NSCellImagePosition pos = NSImageOnly; + + if (butPtr->image) { + Tk_SizeOfImage(butPtr->image, &width, &height); + image = TkMacOSXGetNSImageWithTkImage(butPtr->display, + butPtr->image, width, height); + if (butPtr->selectImage) { + selectImage = TkMacOSXGetNSImageWithTkImage(butPtr->display, + butPtr->selectImage, width, height); + } + if (butPtr->tristateImage) { + tristateImage = TkMacOSXGetNSImageWithTkImage(butPtr->display, + butPtr->tristateImage, width, height); + } } else { - ChkErr(DisableControl, mbPtr->control); + Tk_SizeOfBitmap(butPtr->display, butPtr->bitmap, &width, &height); + image = TkMacOSXGetNSImageWithBitmap(butPtr->display, + butPtr->bitmap, butPtr->normalTextGC, width, height); + selectImage = TkMacOSXGetNSImageWithBitmap(butPtr->display, + butPtr->bitmap, butPtr->activeTextGC, width, height); } - } - if (active && enabled) { - if (butPtr->state == STATE_ACTIVE) { - if (mbPtr->params.isBevel) { - HiliteControl(mbPtr->control, kControlButtonPart); - } else { - switch (butPtr->type) { - case TYPE_BUTTON: - HiliteControl(mbPtr->control, kControlButtonPart); - break; - case TYPE_RADIO_BUTTON: - HiliteControl(mbPtr->control, kControlRadioButtonPart); - break; - case TYPE_CHECK_BUTTON: - HiliteControl(mbPtr->control, kControlCheckBoxPart); - break; - } + [button setImage:image]; + if (selectImage) { + [button setAlternateImage:selectImage]; + } + if (tristateImage) { + macButtonPtr->image = TkMacOSXMakeUncollectableAndRetain(image); + if (selectImage) { + macButtonPtr->selectImage = + TkMacOSXMakeUncollectableAndRetain(selectImage); + } + macButtonPtr->tristateImage = + TkMacOSXMakeUncollectableAndRetain(tristateImage); + } + if (haveCompound) { + switch ((enum compound) butPtr->compound) { + case COMPOUND_TOP: + pos = NSImageAbove; + break; + case COMPOUND_BOTTOM: + pos = NSImageBelow; + break; + case COMPOUND_LEFT: + pos = NSImageLeft; + break; + case COMPOUND_RIGHT: + pos = NSImageRight; + break; + case COMPOUND_CENTER: + pos = NSImageOverlaps; + break; + case COMPOUND_NONE: + pos = NSImageOnly; + break; } - } else { - HiliteControl(mbPtr->control, kControlNoPart); } + [button setImagePosition:pos]; } - UpdateControlColors(mbPtr); - if (butPtr->type == TYPE_BUTTON && !mbPtr->params.isBevel) { - Boolean isDefault; + // if font is too tall, we can't use the fixed-height rounded bezel + if (!haveImage && haveText && style == NSRoundedBezelStyle) { + Tk_FontMetrics fm; + Tk_GetFontMetrics(butPtr->tkfont, &fm); + if (fm.linespace > 18) { + [button setBezelStyle:(style = NSRegularSquareBezelStyle)]; + } + } - if (butPtr->defaultState == STATE_ACTIVE) { - isDefault = true; - } else { - isDefault = false; + bounds.size = [cell cellSize]; + if (haveText) { + titleRect = [cell titleRectForBounds:bounds]; + if (butPtr->wrapLength > 0 && + titleRect.size.width > butPtr->wrapLength) { + if (style == NSRoundedBezelStyle) { + [button setBezelStyle:(style = NSRegularSquareBezelStyle)]; + bounds.size = [cell cellSize]; + titleRect = [cell titleRectForBounds:bounds]; + } + bounds.size.width -= titleRect.size.width - butPtr->wrapLength; + bounds.size.height = 40000.0; + [cell setWraps:YES]; + bounds.size = [cell cellSizeForBounds:bounds]; +#ifdef TK_MAC_DEBUG_BUTTON + titleRect = [cell titleRectForBounds:bounds]; +#endif +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + bounds.size.height += 3; + } +#endif } - ChkErr(SetControlData, mbPtr->control, kControlNoPart, - kControlPushButtonDefaultTag, sizeof(isDefault), &isDefault); } + width = lround(bounds.size.width); + height = lround(bounds.size.height); +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + macButtonPtr->fix = fixForTypeStyle(type, style); + width -= boundsFixes[macButtonPtr->fix].trimW; + height -= boundsFixes[macButtonPtr->fix].trimH; + } +#endif - if (mbPtr->flags & FIRST_DRAW) { - ShowControl(mbPtr->userPane); - ShowControl(mbPtr->control); - mbPtr->flags ^= FIRST_DRAW; + if (haveImage || haveCompound) { + if (butPtr->width > 0) { + width = butPtr->width; + } + if (butPtr->height > 0) { + height = butPtr->height; + } } else { - SetControlVisibility(mbPtr->control, true, true); - Draw1Control(mbPtr->userPane); - } + if (butPtr->width > 0) { + int avgWidth = Tk_TextWidth(butPtr->tkfont, "0", 1); + width = butPtr->width * avgWidth; + } + if (butPtr->height > 0) { + Tk_FontMetrics fm; - if (mbPtr->params.isBevel) { - if (mbPtr->bevelButtonContent.contentType == - kControlContentPictHandle) { - KillPicture(mbPtr->bevelButtonContent.u.picture); + Tk_GetFontMetrics(butPtr->tkfont, &fm); + height = butPtr->height * fm.linespace; } } + if (!haveImage || haveCompound) { + width += 2*butPtr->padX; + height += 2*butPtr->padY; + } + if (haveImage) { + width += 2*border; + height += 2*border; + } +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + width += 2*NATIVE_BUTTON_INSET; + height += 2*NATIVE_BUTTON_INSET + NATIVE_BUTTON_EXTRA_H; + } +#endif + Tk_GeometryRequest(butPtr->tkwin, width, height); + Tk_SetInternalBorder(butPtr->tkwin, butPtr->inset); +#ifdef TK_MAC_DEBUG_BUTTON + TKLog(@"button %s bounds %@ titleRect %@ width %d height %d inset %d borderWidth %d", + ((TkWindow *)butPtr->tkwin)->pathName, NSStringFromRect(bounds), + NSStringFromRect(titleRect), width, height, butPtr->inset, + butPtr->borderWidth); +#endif } + +#pragma mark - +#pragma mark Unix Buttons: + /* - *-------------------------------------------------------------- + *---------------------------------------------------------------------- * - * SetupBevelButton -- + * DisplayUnixButton -- * - * Sets up the Bevel Button with image by copying the - * source image onto the PicHandle for the button. + * This procedure is invoked to display a button widget. It is + * normally invoked as an idle handler. * * Results: - * None + * None. * * Side effects: - * The image or bitmap for the button is copied over to a picture. + * Commands are output to X to display the button in its + * current mode. The REDRAW_PENDING flag is cleared. * - *-------------------------------------------------------------- + *---------------------------------------------------------------------- */ void -SetupBevelButton( - MacButton *mbPtr, /* Mac button. */ - ControlRef controlHandle, /* The control to set this picture to. */ - GWorldPtr destPort, /* Off screen GWorld. */ - GC gc, /* The GC we are drawing into - needed for the - * bevel button. */ - Pixmap pixmap) /* The pixmap we are drawing into - needed for - * the bevel button. */ +DisplayUnixButton( + TkButton *butPtr) { - TkButton *butPtr = (TkButton *) mbPtr; - int height, width; - ControlButtonGraphicAlignment theAlignment; - CGrafPtr savePort; - Boolean portChanged = false; + GC gc; + Tk_3DBorder border; + Pixmap pixmap; + int x = 0; /* Initialization only needed to stop compiler + * warning. */ + int y, relief; + Tk_Window tkwin = butPtr->tkwin; + int width = 0, height = 0, fullWidth, fullHeight; + int textXOffset, textYOffset; + int haveImage = 0, haveText = 0; + int imageWidth, imageHeight; + int imageXOffset = 0, imageYOffset = 0; + /* image information that will be used to + * restrict disabled pixmap as well */ + + border = butPtr->normalBorder; + if ((butPtr->state == STATE_DISABLED) && (butPtr->disabledFg != NULL)) { + gc = butPtr->disabledGC; + } else if ((butPtr->state == STATE_ACTIVE) + && !Tk_StrictMotif(butPtr->tkwin)) { + gc = butPtr->activeTextGC; + border = butPtr->activeBorder; + } else { + gc = butPtr->normalTextGC; + } + if ((butPtr->flags & SELECTED) && (butPtr->state != STATE_ACTIVE) + && (butPtr->selectBorder != NULL) && !butPtr->indicatorOn) { + border = butPtr->selectBorder; + } + + relief = butPtr->relief; + + pixmap = (Pixmap) Tk_WindowId(tkwin); + Tk_Fill3DRectangle(tkwin, pixmap, border, 0, 0, Tk_Width(tkwin), + Tk_Height(tkwin), 0, TK_RELIEF_FLAT); - if (butPtr->image != None) { + /* + * Display image or bitmap or text for button. + */ + + if (butPtr->image != NULL) { Tk_SizeOfImage(butPtr->image, &width, &height); - } else { + haveImage = 1; + } else if (butPtr->bitmap != None) { Tk_SizeOfBitmap(butPtr->display, butPtr->bitmap, &width, &height); + haveImage = 1; } + imageWidth = width; + imageHeight = height; - if ((butPtr->width > 0) && (butPtr->width < width)) { - width = butPtr->width; - } - if ((butPtr->height > 0) && (butPtr->height < height)) { - height = butPtr->height; - } + haveText = (butPtr->textWidth != 0 && butPtr->textHeight != 0); - { - portChanged = QDSwapPort(destPort, &savePort); - mbPtr->picParams.version = -2; - mbPtr->picParams.hRes = 0x00480000; - mbPtr->picParams.vRes = 0x00480000; - mbPtr->picParams.srcRect.top = 0; - mbPtr->picParams.srcRect.left = 0; - mbPtr->picParams.srcRect.bottom = height; - mbPtr->picParams.srcRect.right = width; - mbPtr->picParams.reserved1 = 0; - mbPtr->picParams.reserved2 = 0; - mbPtr->bevelButtonContent.contentType = kControlContentPictHandle; - mbPtr->bevelButtonContent.u.picture = OpenCPicture(&mbPtr->picParams); - if (!mbPtr->bevelButtonContent.u.picture) { - TkMacOSXDbgMsg("OpenCPicture failed"); - } - tkPictureIsOpen = 1; + if (butPtr->compound != COMPOUND_NONE && haveImage && haveText) { + textXOffset = 0; + textYOffset = 0; + fullWidth = 0; + fullHeight = 0; - /* - * TO DO - There is one case where XCopyPlane calls CopyDeepMask, - * which does not get recorded in the picture. So the bitmap code - * will fail in that case. - */ - } + switch ((enum compound) butPtr->compound) { + case COMPOUND_TOP: + case COMPOUND_BOTTOM: + /* + * Image is above or below text. + */ - if (butPtr->selectImage != NULL && (butPtr->flags & SELECTED)) { - Tk_RedrawImage(butPtr->selectImage, 0, 0, width, height, pixmap, 0, 0); -#if 0 - } else if (butPtr->tristateImage != NULL && (butPtr->flags & TRISTATED)) { - Tk_RedrawImage(butPtr->tristateImage, 0, 0, width, height, pixmap, 0, - 0); -#endif - } else if (butPtr->image != NULL) { - Tk_RedrawImage(butPtr->image, 0, 0, width, height, pixmap, 0, 0); - } else { - XSetClipOrigin(butPtr->display, gc, 0, 0); - XCopyPlane(butPtr->display, butPtr->bitmap, pixmap, gc, 0, 0, width, - height, 0, 0, 1); - } + if (butPtr->compound == COMPOUND_TOP) { + textYOffset = height + butPtr->padY; + } else { + imageYOffset = butPtr->textHeight + butPtr->padY; + } + fullHeight = height + butPtr->textHeight + butPtr->padY; + fullWidth = (width > butPtr->textWidth ? width : + butPtr->textWidth); + textXOffset = (fullWidth - butPtr->textWidth)/2; + imageXOffset = (fullWidth - width)/2; + break; + case COMPOUND_LEFT: + case COMPOUND_RIGHT: + /* + * Image is left or right of text. + */ - { - ClosePicture(); - tkPictureIsOpen = 0; - if (portChanged) { - QDSwapPort(savePort, NULL); - } - } - ChkErr(SetControlData, controlHandle, kControlButtonPart, - kControlBevelButtonContentTag, - sizeof(ControlButtonContentInfo), - (char *) &mbPtr->bevelButtonContent); - - if (butPtr->anchor == TK_ANCHOR_N) { - theAlignment = kControlBevelButtonAlignTop; - } else if (butPtr->anchor == TK_ANCHOR_NE) { - theAlignment = kControlBevelButtonAlignTopRight; - } else if (butPtr->anchor == TK_ANCHOR_E) { - theAlignment = kControlBevelButtonAlignRight; - } else if (butPtr->anchor == TK_ANCHOR_SE) { - theAlignment = kControlBevelButtonAlignBottomRight; - } else if (butPtr->anchor == TK_ANCHOR_S) { - theAlignment = kControlBevelButtonAlignBottom; - } else if (butPtr->anchor == TK_ANCHOR_SW) { - theAlignment = kControlBevelButtonAlignBottomLeft; - } else if (butPtr->anchor == TK_ANCHOR_W) { - theAlignment = kControlBevelButtonAlignLeft; - } else if (butPtr->anchor == TK_ANCHOR_NW) { - theAlignment = kControlBevelButtonAlignTopLeft; - } else if (butPtr->anchor == TK_ANCHOR_CENTER) { - theAlignment = kControlBevelButtonAlignCenter; - } - ChkErr(SetControlData, controlHandle, kControlButtonPart, - kControlBevelButtonGraphicAlignTag, - sizeof(ControlButtonGraphicAlignment), (char *) &theAlignment); - - if (butPtr->compound != COMPOUND_NONE) { - ControlButtonTextPlacement thePlacement = - kControlBevelButtonPlaceNormally; - - if (butPtr->compound == COMPOUND_TOP) { - thePlacement = kControlBevelButtonPlaceBelowGraphic; - } else if (butPtr->compound == COMPOUND_BOTTOM) { - thePlacement = kControlBevelButtonPlaceAboveGraphic; - } else if (butPtr->compound == COMPOUND_LEFT) { - thePlacement = kControlBevelButtonPlaceToRightOfGraphic; - } else if (butPtr->compound == COMPOUND_RIGHT) { - thePlacement = kControlBevelButtonPlaceToLeftOfGraphic; + if (butPtr->compound == COMPOUND_LEFT) { + textXOffset = width + butPtr->padX; + } else { + imageXOffset = butPtr->textWidth + butPtr->padX; + } + fullWidth = butPtr->textWidth + butPtr->padX + width; + fullHeight = (height > butPtr->textHeight ? height : + butPtr->textHeight); + textYOffset = (fullHeight - butPtr->textHeight)/2; + imageYOffset = (fullHeight - height)/2; + break; + case COMPOUND_CENTER: + /* + * Image and text are superimposed. + */ + + fullWidth = (width > butPtr->textWidth ? width : + butPtr->textWidth); + fullHeight = (height > butPtr->textHeight ? height : + butPtr->textHeight); + textXOffset = (fullWidth - butPtr->textWidth)/2; + imageXOffset = (fullWidth - width)/2; + textYOffset = (fullHeight - butPtr->textHeight)/2; + imageYOffset = (fullHeight - height)/2; + break; + case COMPOUND_NONE: + break; } - ChkErr(SetControlData, controlHandle, kControlButtonPart, - kControlBevelButtonTextPlaceTag, - sizeof(ControlButtonTextPlacement), (char *) &thePlacement); - } -} - -/* - *-------------------------------------------------------------- - * - * SetUserPaneDrawProc -- - * - * Utility function to add a UserPaneDrawProc - * to a userPane control. From MoreControls code - * from Apple DTS. - * - * Results: - * MacOS system error. - * - * Side effects: - * The user pane gets a new UserPaneDrawProc. - * - *-------------------------------------------------------------- - */ -OSStatus -SetUserPaneDrawProc( - ControlRef control, - ControlUserPaneDrawProcPtr upp) -{ - ControlUserPaneDrawUPP myControlUserPaneDrawUPP; + TkComputeAnchor(butPtr->anchor, tkwin, butPtr->padX, butPtr->padY, + fullWidth, fullHeight, &x, &y); - myControlUserPaneDrawUPP = NewControlUserPaneDrawUPP(upp); - return SetControlData(control, kControlNoPart, - kControlUserPaneDrawProcTag, sizeof(myControlUserPaneDrawUPP), - (Ptr) &myControlUserPaneDrawUPP); -} - -/* - *-------------------------------------------------------------- - * - * SetUserPaneSetUpSpecialBackgroundProc -- - * - * Utility function to add a UserPaneBackgroundProc - * to a userPane control - * - * Results: - * MacOS system error. - * - * Side effects: - * The user pane gets a new UserPaneBackgroundProc. - * - *-------------------------------------------------------------- - */ + imageXOffset += x; + imageYOffset += y; -OSStatus -SetUserPaneSetUpSpecialBackgroundProc( - ControlRef control, - ControlUserPaneBackgroundProcPtr upp) -{ - ControlUserPaneBackgroundUPP myControlUserPaneBackgroundUPP; + if (butPtr->image != NULL) { + /* + * Do boundary clipping, so that Tk_RedrawImage is passed valid + * coordinates. [Bug 979239] + */ - myControlUserPaneBackgroundUPP = NewControlUserPaneBackgroundUPP(upp); - return SetControlData(control, kControlNoPart, - kControlUserPaneBackgroundProcTag, - sizeof(myControlUserPaneBackgroundUPP), - (Ptr) &myControlUserPaneBackgroundUPP); -} - -/* - *-------------------------------------------------------------- - * - * UserPaneDraw -- - * - * This function draws the background of the user pane that will - * lie under checkboxes and radiobuttons. - * - * Results: - * None. - * - * Side effects: - * The user pane gets updated to the current color. - * - *-------------------------------------------------------------- - */ + if (imageXOffset < 0) { + imageXOffset = 0; + } + if (imageYOffset < 0) { + imageYOffset = 0; + } + if (width > Tk_Width(tkwin)) { + width = Tk_Width(tkwin); + } + if (height > Tk_Height(tkwin)) { + height = Tk_Height(tkwin); + } + if ((width + imageXOffset) > Tk_Width(tkwin)) { + imageXOffset = Tk_Width(tkwin) - width; + } + if ((height + imageYOffset) > Tk_Height(tkwin)) { + imageYOffset = Tk_Height(tkwin) - height; + } -void -UserPaneDraw( - ControlRef control, - ControlPartCode cpc) -{ - MacButton *mbPtr = (MacButton *)(intptr_t)GetControlReference(control); - Rect contrlRect; - CGrafPtr port; - - GetPort(&port); - GetControlBounds(control,&contrlRect); - TkMacOSXSetColorInPort(mbPtr->userPaneBackground, 0, NULL, port); - EraseRect(&contrlRect); -} - -/* - *-------------------------------------------------------------- - * - * UserPaneBackgroundProc -- - * - * This function sets up the background of the user pane that will - * lie under checkboxes and radiobuttons. - * - * Results: - * None. - * - * Side effects: - * The user pane background gets set to the current color. - * - *-------------------------------------------------------------- - */ + if ((butPtr->selectImage != NULL) && (butPtr->flags & SELECTED)) { + Tk_RedrawImage(butPtr->selectImage, 0, 0, + width, height, pixmap, imageXOffset, imageYOffset); + } else if ((butPtr->tristateImage != NULL) && (butPtr->flags & TRISTATED)) { + Tk_RedrawImage(butPtr->tristateImage, 0, 0, + width, height, pixmap, imageXOffset, imageYOffset); + } else { + Tk_RedrawImage(butPtr->image, 0, 0, width, + height, pixmap, imageXOffset, imageYOffset); + } + } else { + XSetClipOrigin(butPtr->display, gc, imageXOffset, imageYOffset); + XCopyPlane(butPtr->display, butPtr->bitmap, pixmap, gc, + 0, 0, (unsigned int) width, (unsigned int) height, + imageXOffset, imageYOffset, 1); + XSetClipOrigin(butPtr->display, gc, 0, 0); + } -void -UserPaneBackgroundProc( - ControlHandle control, - ControlBackgroundPtr info) -{ - MacButton * mbPtr = (MacButton *)(intptr_t)GetControlReference(control); + Tk_DrawTextLayout(butPtr->display, pixmap, gc, + butPtr->textLayout, x + textXOffset, y + textYOffset, 0, -1); + Tk_UnderlineTextLayout(butPtr->display, pixmap, gc, + butPtr->textLayout, x + textXOffset, y + textYOffset, + butPtr->underline); + y += fullHeight/2; + } else { + if (haveImage) { + TkComputeAnchor(butPtr->anchor, tkwin, 0, 0, + width, height, &x, &y); + imageXOffset += x; + imageYOffset += y; + if (butPtr->image != NULL) { + /* + * Do boundary clipping, so that Tk_RedrawImage is passed + * valid coordinates. [Bug 979239] + */ - if (info->colorDevice) { - CGrafPtr port; - - GetPort(&port); - TkMacOSXSetColorInPort(mbPtr->userPaneBackground, 0, NULL, port); - } -} - -/* - *-------------------------------------------------------------- - * - * UpdateControlColors -- - * - * This function will review the colors used to display - * a Macintosh button. If any non-standard colors are - * used we create a custom palette for the button, populate - * with the colors for the button and install the palette. - * - * Under Appearance, we just set the pointer that will be - * used by the UserPaneDrawProc. - * - * Results: - * None. - * - * Side effects: - * The Macintosh control may get a custom palette installed. - * - *-------------------------------------------------------------- - */ + if (imageXOffset < 0) { + imageXOffset = 0; + } + if (imageYOffset < 0) { + imageYOffset = 0; + } + if (width > Tk_Width(tkwin)) { + width = Tk_Width(tkwin); + } + if (height > Tk_Height(tkwin)) { + height = Tk_Height(tkwin); + } + if ((width + imageXOffset) > Tk_Width(tkwin)) { + imageXOffset = Tk_Width(tkwin) - width; + } + if ((height + imageYOffset) > Tk_Height(tkwin)) { + imageYOffset = Tk_Height(tkwin) - height; + } -static int -UpdateControlColors( - MacButton *mbPtr) -{ - XColor *xcolor; - TkButton *butPtr = (TkButton *) mbPtr; + if ((butPtr->selectImage != NULL) && + (butPtr->flags & SELECTED)) { + Tk_RedrawImage(butPtr->selectImage, 0, 0, width, + height, pixmap, imageXOffset, imageYOffset); + } else if ((butPtr->tristateImage != NULL) && + (butPtr->flags & TRISTATED)) { + Tk_RedrawImage(butPtr->tristateImage, 0, 0, width, + height, pixmap, imageXOffset, imageYOffset); + } else { + Tk_RedrawImage(butPtr->image, 0, 0, width, height, pixmap, + imageXOffset, imageYOffset); + } + } else { + XSetClipOrigin(butPtr->display, gc, x, y); + XCopyPlane(butPtr->display, butPtr->bitmap, pixmap, gc, 0, 0, + (unsigned int) width, (unsigned int) height, x, y, 1); + XSetClipOrigin(butPtr->display, gc, 0, 0); + } + y += height/2; + } else { + TkComputeAnchor(butPtr->anchor, tkwin, butPtr->padX, butPtr->padY, + butPtr->textWidth, butPtr->textHeight, &x, &y); + + Tk_DrawTextLayout(butPtr->display, pixmap, gc, butPtr->textLayout, + x, y, 0, -1); + Tk_UnderlineTextLayout(butPtr->display, pixmap, gc, + butPtr->textLayout, x, y, butPtr->underline); + y += butPtr->textHeight/2; + } + } /* - * Under Appearance we cannot change the background of the - * button itself. However, the color we are setting is the color - * of the containing userPane. This will be the color that peeks - * around the rounded corners of the button. - * We make this the highlightbackground rather than the background, - * because if you color the background of a frame containing a - * button, you usually also color the highlightbackground as well, - * or you will get a thin grey ring around the button. + * If the button is disabled with a stipple rather than a special + * foreground color, generate the stippled effect. If the widget is + * selected and we use a different background color when selected, must + * temporarily modify the GC so the stippling is the right color. */ - if (butPtr->type == TYPE_BUTTON) { - xcolor = Tk_3DBorderColor(butPtr->highlightBorder); - } else { - xcolor = Tk_3DBorderColor(butPtr->normalBorder); + if ((butPtr->state == STATE_DISABLED) + && ((butPtr->disabledFg == NULL) || (butPtr->image != NULL))) { + if ((butPtr->flags & SELECTED) && !butPtr->indicatorOn + && (butPtr->selectBorder != NULL)) { + XSetForeground(butPtr->display, butPtr->stippleGC, + Tk_3DBorderColor(butPtr->selectBorder)->pixel); + } + + /* + * Stipple the whole button if no disabledFg was specified, otherwise + * restrict stippling only to displayed image + */ + + if (butPtr->disabledFg == NULL) { + XFillRectangle(butPtr->display, pixmap, butPtr->stippleGC, 0, 0, + (unsigned) Tk_Width(tkwin), (unsigned) Tk_Height(tkwin)); + } else { + XFillRectangle(butPtr->display, pixmap, butPtr->stippleGC, + imageXOffset, imageYOffset, + (unsigned) imageWidth, (unsigned) imageHeight); + } + if ((butPtr->flags & SELECTED) && !butPtr->indicatorOn + && (butPtr->selectBorder != NULL)) { + XSetForeground(butPtr->display, butPtr->stippleGC, + Tk_3DBorderColor(butPtr->normalBorder)->pixel); + } } - mbPtr->userPaneBackground = xcolor->pixel; - return false; -} - -/* - *-------------------------------------------------------------- - * - * ButtonEventProc -- - * - * This procedure is invoked by the Tk dispatcher for various - * events on buttons. - * - * Results: - * None. - * - * Side effects: - * When it gets exposed, it is redisplayed. - * - *-------------------------------------------------------------- - */ + /* + * Draw the border and traversal highlight last. This way, if the button's + * contents overflow they'll be covered up by the border. This code is + * complicated by the possible combinations of focus highlight and default + * rings. We draw the focus and highlight rings using the highlight border + * and highlight foreground color. + */ -static void -ButtonEventProc( - ClientData clientData, /* Information about window. */ - XEvent *eventPtr) /* Information about event. */ -{ - TkButton *buttonPtr = (TkButton *) clientData; - MacButton *mbPtr = (MacButton *) clientData; + if (relief != TK_RELIEF_FLAT) { + int inset = butPtr->highlightWidth; - if (eventPtr->type == ActivateNotify - || eventPtr->type == DeactivateNotify) { - if ((buttonPtr->tkwin == NULL) || (!Tk_IsMapped(buttonPtr->tkwin))) { - return; + if (butPtr->defaultState == DEFAULT_ACTIVE) { + /* + * Draw the default ring with 2 pixels of space between the + * default ring and the button and the default ring and the focus + * ring. Note that we need to explicitly draw the space in the + * highlightBorder color to ensure that we overwrite any overflow + * text and/or a different button background color. + */ + + Tk_Draw3DRectangle(tkwin, pixmap, butPtr->highlightBorder, inset, + inset, Tk_Width(tkwin) - 2*inset, + Tk_Height(tkwin) - 2*inset, 2, TK_RELIEF_FLAT); + inset += 2; + Tk_Draw3DRectangle(tkwin, pixmap, butPtr->highlightBorder, inset, + inset, Tk_Width(tkwin) - 2*inset, + Tk_Height(tkwin) - 2*inset, 1, TK_RELIEF_SUNKEN); + inset++; + Tk_Draw3DRectangle(tkwin, pixmap, butPtr->highlightBorder, inset, + inset, Tk_Width(tkwin) - 2*inset, + Tk_Height(tkwin) - 2*inset, 2, TK_RELIEF_FLAT); + + inset += 2; + } else if (butPtr->defaultState == DEFAULT_NORMAL) { + /* + * Leave room for the default ring and write over any text or + * background color. + */ + + Tk_Draw3DRectangle(tkwin, pixmap, butPtr->highlightBorder, 0, + 0, Tk_Width(tkwin), Tk_Height(tkwin), 5, TK_RELIEF_FLAT); + inset += 5; } - if (eventPtr->type == ActivateNotify) { - mbPtr->flags |= ACTIVE; + + /* + * Draw the button border. + */ + + Tk_Draw3DRectangle(tkwin, pixmap, border, inset, inset, + Tk_Width(tkwin) - 2*inset, Tk_Height(tkwin) - 2*inset, + butPtr->borderWidth, relief); + } + if (butPtr->highlightWidth > 0) { + GC gc; + + if (butPtr->flags & GOT_FOCUS) { + gc = Tk_GCForColor(butPtr->highlightColorPtr, pixmap); } else { - mbPtr->flags &= ~ACTIVE; + gc = Tk_GCForColor(Tk_3DBorderColor(butPtr->highlightBorder), + pixmap); } - if ((buttonPtr->flags & REDRAW_PENDING) == 0) { - Tcl_DoWhenIdle(TkpDisplayButton, (ClientData) buttonPtr); - buttonPtr->flags |= REDRAW_PENDING; + + /* + * Make sure the focus ring shrink-wraps the actual button, not the + * padding space left for a default ring. + */ + + if (butPtr->defaultState == DEFAULT_NORMAL) { + TkDrawInsetFocusHighlight(tkwin, gc, butPtr->highlightWidth, + pixmap, 5); + } else { + Tk_DrawFocusHighlight(tkwin, gc, butPtr->highlightWidth, pixmap); } } } @@ -1411,217 +1030,150 @@ ButtonEventProc( /* *---------------------------------------------------------------------- * - * TkMacOSXComputeControlParams -- + * ComputeUnixButtonGeometry -- * - * This procedure computes the various parameters used - * when creating a Carbon control (NewControl). - * These are determined by the various tk button parameters + * After changes in a button's text or bitmap, this procedure + * recomputes the button's geometry and passes this information + * along to the geometry manager for the window. * * Results: * None. * * Side effects: - * Sets the control initialisation parameters + * The button's window may change size. * *---------------------------------------------------------------------- */ -static void -TkMacOSXComputeControlParams( - TkButton *butPtr, - MacControlParams *paramsPtr) +void +ComputeUnixButtonGeometry( + register TkButton *butPtr) /* Button whose geometry may have changed. */ { - paramsPtr->isBevel = 0; + int width, height, avgWidth, txtWidth, txtHeight; + int haveImage = 0, haveText = 0; + Tk_FontMetrics fm; + + butPtr->inset = butPtr->highlightWidth + butPtr->borderWidth; /* - * Determine ProcID based on button type and dimensions. + * Leave room for the default ring if needed. */ - switch (butPtr->type) { - case TYPE_BUTTON: - if ((butPtr->image == None) && (butPtr->bitmap == None)) { - paramsPtr->initialValue = 1; - paramsPtr->minValue = 0; - paramsPtr->maxValue = 1; - paramsPtr->procID = kControlPushButtonProc; - } else { - paramsPtr->initialValue = 0; - paramsPtr->minValue = kControlBehaviorOffsetContents | - kControlContentPictHandle; - paramsPtr->maxValue = 1; - if (butPtr->borderWidth <= 2) { - paramsPtr->procID = kControlBevelButtonSmallBevelProc; - } else if (butPtr->borderWidth == 3) { - paramsPtr->procID = kControlBevelButtonNormalBevelProc; - } else { - paramsPtr->procID = kControlBevelButtonLargeBevelProc; - } - paramsPtr->isBevel = 1; - } - break; - case TYPE_RADIO_BUTTON: - if (((butPtr->image == None) && (butPtr->bitmap == None)) - || (butPtr->indicatorOn)) { - paramsPtr->initialValue = 1; - paramsPtr->minValue = 0; - paramsPtr->maxValue = MAX_VALUE; - paramsPtr->procID = kControlRadioButtonProc; - } else { - paramsPtr->initialValue = 0; - paramsPtr->minValue = kControlBehaviorOffsetContents | - kControlBehaviorSticky | kControlContentPictHandle; - paramsPtr->maxValue = MAX_VALUE; - if (butPtr->borderWidth <= 2) { - paramsPtr->procID = kControlBevelButtonSmallBevelProc; - } else if (butPtr->borderWidth == 3) { - paramsPtr->procID = kControlBevelButtonNormalBevelProc; - } else { - paramsPtr->procID = kControlBevelButtonLargeBevelProc; - } - paramsPtr->isBevel = 1; - } - break; - case TYPE_CHECK_BUTTON: - if (((butPtr->image == None) && (butPtr->bitmap == None)) - || (butPtr->indicatorOn)) { - paramsPtr->initialValue = 1; - paramsPtr->minValue = 0; - paramsPtr->maxValue = MAX_VALUE; - paramsPtr->procID = kControlCheckBoxProc; - } else { - paramsPtr->initialValue = 0; - paramsPtr->minValue = kControlBehaviorOffsetContents | - kControlBehaviorSticky | kControlContentPictHandle; - paramsPtr->maxValue = MAX_VALUE; - if (butPtr->borderWidth <= 2) { - paramsPtr->procID = kControlBevelButtonSmallBevelProc; - } else if (butPtr->borderWidth == 3) { - paramsPtr->procID = kControlBevelButtonNormalBevelProc; - } else { - paramsPtr->procID = kControlBevelButtonLargeBevelProc; - } - paramsPtr->isBevel = 1; - } - break; + if (butPtr->defaultState != DEFAULT_DISABLED) { + butPtr->inset += 5; } -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXComputeDrawParams -- - * - * This procedure computes the various parameters used - * when drawing a button - * These are determined by the various tk button parameters - * - * Results: - * 1 if control will be used, 0 otherwise. - * - * Side effects: - * Sets the button draw parameters - * - *---------------------------------------------------------------------- - */ + butPtr->indicatorSpace = 0; -static int -TkMacOSXComputeDrawParams( - TkButton *butPtr, - DrawParams *dpPtr) -{ - dpPtr->hasImageOrBitmap = ((butPtr->image != NULL) - || (butPtr->bitmap != None)); - dpPtr->offset = (butPtr->type == TYPE_BUTTON) - && dpPtr->hasImageOrBitmap; - dpPtr->border = butPtr->normalBorder; - if ((butPtr->state == STATE_DISABLED) && (butPtr->disabledFg != NULL)) { - dpPtr->gc = butPtr->disabledGC; - } else if (butPtr->type == TYPE_BUTTON && butPtr->state == STATE_ACTIVE) { - dpPtr->gc = butPtr->activeTextGC; - dpPtr->border = butPtr->activeBorder; - } else { - dpPtr->gc = butPtr->normalTextGC; - } + width = 0; + height = 0; + txtWidth = 0; + txtHeight = 0; + avgWidth = 0; - if ((butPtr->flags & SELECTED) && (butPtr->state != STATE_ACTIVE) - && (butPtr->selectBorder != NULL) && !butPtr->indicatorOn) { - dpPtr->border = butPtr->selectBorder; + if (butPtr->image != NULL) { + Tk_SizeOfImage(butPtr->image, &width, &height); + haveImage = 1; + } else if (butPtr->bitmap != None) { + Tk_SizeOfBitmap(butPtr->display, butPtr->bitmap, &width, &height); + haveImage = 1; } - /* - * Override the relief specified for the button if this is a - * checkbutton or radiobutton and there's no indicator. - * However, don't do this in the presence of Appearance, since - * then the bevel button will take care of the relief. - */ + if (haveImage == 0 || butPtr->compound != COMPOUND_NONE) { + Tk_FreeTextLayout(butPtr->textLayout); - dpPtr->relief = butPtr->relief; + butPtr->textLayout = Tk_ComputeTextLayout(butPtr->tkfont, + Tcl_GetString(butPtr->textPtr), -1, butPtr->wrapLength, + butPtr->justify, 0, &butPtr->textWidth, &butPtr->textHeight); - if ((butPtr->type >= TYPE_CHECK_BUTTON) && !butPtr->indicatorOn) { - if (!dpPtr->hasImageOrBitmap) { - dpPtr->relief = (butPtr->flags & SELECTED) ? TK_RELIEF_SUNKEN - : TK_RELIEF_RAISED; - } + txtWidth = butPtr->textWidth; + txtHeight = butPtr->textHeight; + avgWidth = Tk_TextWidth(butPtr->tkfont, "0", 1); + Tk_GetFontMetrics(butPtr->tkfont, &fm); + haveText = (txtWidth != 0 && txtHeight != 0); } /* - * Determine the draw type + * If the button is compound (i.e., it shows both an image and text), the + * new geometry is a combination of the image and text geometry. We only + * honor the compound bit if the button has both text and an image, + * because otherwise it is not really a compound button. */ - if (butPtr->type == TYPE_LABEL) { - dpPtr->drawType = DRAW_LABEL; - } else if (butPtr->type == TYPE_BUTTON) { - if (!dpPtr->hasImageOrBitmap) { - dpPtr->drawType = DRAW_CONTROL; - } else if (butPtr->image != None) { - dpPtr->drawType = DRAW_BEVEL; - } else { + if (butPtr->compound != COMPOUND_NONE && haveImage && haveText) { + switch ((enum compound) butPtr->compound) { + case COMPOUND_TOP: + case COMPOUND_BOTTOM: /* - * TO DO - The current way the we draw bitmaps (XCopyPlane) - * uses CopyDeepMask in this one case. The Picture recording - * does not record this call, and so we can't use the - * Appearance bevel button here. The only case that would - * exercise this is if you use a bitmap, with - * -data & -mask specified. We should probably draw the - * appearance button and overprint the image in this case. - * This just punts and draws the old-style, ugly, button. + * Image is above or below text. */ - if (dpPtr->gc->clip_mask == 0) { - dpPtr->drawType = DRAW_BEVEL; - } else { - TkpClipMask *clipPtr = (TkpClipMask *) dpPtr->gc->clip_mask; + height += txtHeight + butPtr->padY; + width = (width > txtWidth ? width : txtWidth); + break; + case COMPOUND_LEFT: + case COMPOUND_RIGHT: + /* + * Image is left or right of text. + */ - if ((clipPtr->type == TKP_CLIP_PIXMAP) && - (clipPtr->value.pixmap != butPtr->bitmap)) { - dpPtr->drawType = DRAW_CUSTOM; - } else { - dpPtr->drawType = DRAW_BEVEL; - } - } + width += txtWidth + butPtr->padX; + height = (height > txtHeight ? height : txtHeight); + break; + case COMPOUND_CENTER: + /* + * Image and text are superimposed. + */ + + width = (width > txtWidth ? width : txtWidth); + height = (height > txtHeight ? height : txtHeight); + break; + case COMPOUND_NONE: + break; } - } else if (butPtr->indicatorOn) { - dpPtr->drawType = DRAW_CONTROL; - } else if (dpPtr->hasImageOrBitmap) { - if (dpPtr->gc->clip_mask == 0) { - dpPtr->drawType = DRAW_BEVEL; + if (butPtr->width > 0) { + width = butPtr->width; + } + if (butPtr->height > 0) { + height = butPtr->height; + } + + width += 2*butPtr->padX; + height += 2*butPtr->padY; + } else { + if (haveImage) { + if (butPtr->width > 0) { + width = butPtr->width; + } + if (butPtr->height > 0) { + height = butPtr->height; + } } else { - TkpClipMask *clipPtr = (TkpClipMask*) dpPtr->gc->clip_mask; + width = txtWidth; + height = txtHeight; - if ((clipPtr->type == TKP_CLIP_PIXMAP) && - (clipPtr->value.pixmap != butPtr->bitmap)) { - dpPtr->drawType = DRAW_CUSTOM; - } else { - dpPtr->drawType = DRAW_BEVEL; + if (butPtr->width > 0) { + width = butPtr->width * avgWidth; + } + if (butPtr->height > 0) { + height = butPtr->height * fm.linespace; } } - } else { - dpPtr->drawType = DRAW_CUSTOM; } - if ((dpPtr->drawType == DRAW_CONTROL) || (dpPtr->drawType == DRAW_BEVEL)) { - return 1; - } else { - return 0; + if (!haveImage) { + width += 2*butPtr->padX; + height += 2*butPtr->padY; } + Tk_GeometryRequest(butPtr->tkwin, (int) (width + + 2*butPtr->inset), (int) (height + 2*butPtr->inset)); + Tk_SetInternalBorder(butPtr->tkwin, butPtr->inset); } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXCarbonEvents.c b/macosx/tkMacOSXCarbonEvents.c deleted file mode 100644 index 1339e67..0000000 --- a/macosx/tkMacOSXCarbonEvents.c +++ /dev/null @@ -1,681 +0,0 @@ -/* - * tkMacOSXCarbonEvents.c -- - * - * This file implements functions that register for and handle - * various Carbon Events and Timers. Most carbon events of interest - * to TkAqua are processed in a handler registered on the dispatcher - * event target so that we get first crack at them before HIToolbox - * dispatchers/processes them further. - * As some events are sent directly to the focus or app event target - * and not dispatched normally, we also register a handler on the - * application event target. - * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2008 Daniel A. Steffen <das@users.sourceforge.net> - * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. - */ - -#include "tkMacOSXPrivate.h" -#include "tkMacOSXEvent.h" -#include "tkMacOSXDebug.h" - -/* -#ifdef TK_MAC_DEBUG -#define TK_MAC_DEBUG_CARBON_EVENTS -#endif -*/ - -/* - * Declarations of functions used only in this file: - */ - -static OSStatus CarbonEventHandlerProc(EventHandlerCallRef callRef, - EventRef event, void *userData); -static OSStatus InstallStandardApplicationEventHandler(void); -static void CarbonTimerProc(EventLoopTimerRef timer, void *userData); - -/* - * Static data used by several functions in this file: - */ - -static EventLoopTimerRef carbonTimer = NULL; -static int carbonTimerEnabled = 0; -static EventHandlerUPP carbonEventHandlerUPP = NULL; -static Tcl_Interp *carbonEventInterp = NULL; -static int inTrackingLoop = 0; - -#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050 -/* - * For InstallStandardApplicationEventHandler(): - */ - -static jmp_buf exitRaelJmpBuf; -static void ExitRaelEventHandlerProc(EventHandlerCallRef callRef, - EventRef event, void *userData) __attribute__ ((__noreturn__)); -#endif - - -/* - *---------------------------------------------------------------------- - * - * CarbonEventHandlerProc -- - * - * This procedure is the handler for all registered CarbonEvents. - * - * Results: - * OS status code. - * - * Side effects: - * Dispatches CarbonEvents. - * - *---------------------------------------------------------------------- - */ - -static OSStatus -CarbonEventHandlerProc( - EventHandlerCallRef callRef, - EventRef event, - void *userData) -{ - OSStatus err = eventNotHandledErr; - TkMacOSXEvent macEvent; - MacEventStatus eventStatus; - - macEvent.eventRef = event; - macEvent.eClass = GetEventClass(event); - macEvent.eKind = GetEventKind(event); - macEvent.interp = (Tcl_Interp *) userData; - macEvent.callRef = callRef; - bzero(&eventStatus, sizeof(eventStatus)); - -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - if (!(macEvent.eClass == kEventClassMouse && ( - macEvent.eKind == kEventMouseMoved || - macEvent.eKind == kEventMouseDragged))) { - TkMacOSXDbgMsg("Started handling %s", - TkMacOSXCarbonEventToAscii(event)); - TkMacOSXInitNamedDebugSymbol(HIToolbox, void, _DebugPrintEvent, - EventRef inEvent); - if (_DebugPrintEvent) { - /* - * Carbon-internal event debugging (c.f. Technote 2124) - */ - - _DebugPrintEvent(event); - } - } -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ - - TkMacOSXProcessEvent(&macEvent,&eventStatus); - if (eventStatus.stopProcessing) { - err = noErr; - } - -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - if (macEvent.eKind != kEventMouseMoved && - macEvent.eKind != kEventMouseDragged) { - TkMacOSXDbgMsg("Finished handling %s: %s handled", - TkMacOSXCarbonEventToAscii(event), - eventStatus.stopProcessing ? " " : "not"); - } -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ - return err; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXInitCarbonEvents -- - * - * This procedure initializes all CarbonEvent handlers. - * - * Results: - * None. - * - * Side effects: - * Handlers for Carbon Events are registered. - * - *---------------------------------------------------------------------- - */ - -MODULE_SCOPE void -TkMacOSXInitCarbonEvents( - Tcl_Interp *interp) -{ - const EventTypeSpec dispatcherEventTypes[] = { - {kEventClassKeyboard, kEventRawKeyDown}, - {kEventClassKeyboard, kEventRawKeyRepeat}, - {kEventClassKeyboard, kEventRawKeyUp}, - {kEventClassKeyboard, kEventRawKeyModifiersChanged}, - {kEventClassKeyboard, kEventRawKeyRepeat}, - }; - const EventTypeSpec applicationEventTypes[] = { - {kEventClassMenu, kEventMenuBeginTracking}, - {kEventClassMenu, kEventMenuEndTracking}, - {kEventClassMenu, kEventMenuOpening}, - {kEventClassMenu, kEventMenuTargetItem}, - {kEventClassCommand, kEventCommandProcess}, - {kEventClassCommand, kEventCommandUpdateStatus}, - {kEventClassApplication, kEventAppActivated}, - {kEventClassApplication, kEventAppDeactivated}, - {kEventClassApplication, kEventAppQuit}, - {kEventClassApplication, kEventAppHidden}, - {kEventClassApplication, kEventAppShown}, - {kEventClassApplication, kEventAppAvailableWindowBoundsChanged}, - {kEventClassAppearance, kEventAppearanceScrollBarVariantChanged}, - }; - - carbonEventHandlerUPP = NewEventHandlerUPP(CarbonEventHandlerProc); - carbonEventInterp = interp; - ChkErr(InstallStandardApplicationEventHandler); - ChkErr(InstallEventHandler, GetEventDispatcherTarget(), - carbonEventHandlerUPP, GetEventTypeCount(dispatcherEventTypes), - dispatcherEventTypes, (void *) carbonEventInterp, NULL); - ChkErr(InstallEventHandler, GetApplicationEventTarget(), - carbonEventHandlerUPP, GetEventTypeCount(applicationEventTypes), - applicationEventTypes, (void *) carbonEventInterp, NULL); - -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - TkMacOSXInitNamedSymbol(HIToolbox, void, DebugTraceEvent, OSType, UInt32, - Boolean); - if (DebugTraceEvent) { - unsigned int i; - const EventTypeSpec *e; - - for (i = 0, e = dispatcherEventTypes; - i < GetEventTypeCount(dispatcherEventTypes); i++, e++) { - DebugTraceEvent(e->eventClass, e->eventKind, 1); - } - for (i = 0, e = applicationEventTypes; - i < GetEventTypeCount(applicationEventTypes); i++, e++) { - DebugTraceEvent(e->eventClass, e->eventKind, 1); - } - DebugTraceEvent = NULL; /* Only enable tracing once. */ - } -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXInstallWindowCarbonEventHandler -- - * - * This procedure installs our window CarbonEvent handler. - * - * Results: - * None. - * - * Side effects: - * Handler for Carbon Events is registered. - * - *---------------------------------------------------------------------- - */ - -MODULE_SCOPE void -TkMacOSXInstallWindowCarbonEventHandler( - Tcl_Interp *interp, WindowRef window) -{ - const EventTypeSpec windowEventTypes[] = { - {kEventClassMouse, kEventMouseDown}, - {kEventClassMouse, kEventMouseUp}, - {kEventClassMouse, kEventMouseMoved}, - {kEventClassMouse, kEventMouseDragged}, - {kEventClassMouse, kEventMouseWheelMoved}, - {kEventClassWindow, kEventWindowActivated}, - {kEventClassWindow, kEventWindowDeactivated}, - {kEventClassWindow, kEventWindowUpdate}, - {kEventClassWindow, kEventWindowExpanding}, - {kEventClassWindow, kEventWindowBoundsChanged}, - {kEventClassWindow, kEventWindowDragStarted}, - {kEventClassWindow, kEventWindowDragCompleted}, - {kEventClassWindow, kEventWindowConstrain}, - {kEventClassWindow, kEventWindowGetRegion}, - {kEventClassWindow, kEventWindowDrawContent}, - }; - - ChkErr(InstallEventHandler, GetWindowEventTarget(window), - carbonEventHandlerUPP, GetEventTypeCount(windowEventTypes), - windowEventTypes, (void *) (interp ? interp : carbonEventInterp), - NULL); - -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - TkMacOSXInitNamedSymbol(HIToolbox, void, DebugTraceEvent, OSType, UInt32, - Boolean); - if (DebugTraceEvent) { - unsigned int i; - const EventTypeSpec *e; - - for (i = 0, e = windowEventTypes; - i < GetEventTypeCount(windowEventTypes); i++, e++) { - if (!(e->eventClass == kEventClassMouse && ( - e->eventKind == kEventMouseMoved || - e->eventKind == kEventMouseDragged))) { - DebugTraceEvent(e->eventClass, e->eventKind, 1); - } - } - } -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ -} - -/* - *---------------------------------------------------------------------- - * - * InstallStandardApplicationEventHandler -- - * - * This procedure installs the carbon standard application event - * handler. - * - * Results: - * OS status code. - * - * Side effects: - * Standard handlers for application Carbon Events are registered. - * - *---------------------------------------------------------------------- - */ - -static OSStatus -InstallStandardApplicationEventHandler(void) -{ - OSStatus err = memFullErr; - - TK_IF_HI_TOOLBOX(5, - /* - * The approach below does not work correctly in Leopard, it leads to - * crashes in [NSView unlockFocus] whenever HIToolbox uses Cocoa (Help - * menu, Nav Services, Color Picker). While it is now possible to - * install the standard app handler with InstallStandardEventHandler(), - * to fully replicate RAEL the standard menubar event handler also needs - * to be installed. Unfortunately there appears to be no public API to - * obtain the menubar event target. As a workaround, for now we resort - * to calling the HIToolbox-internal GetMenuBarEventTarget() directly - * (symbol acquired via TkMacOSXInitNamedSymbol() from HIToolbox - * version 343, may not exist in later versions). - */ - err = ChkErr(InstallStandardEventHandler, GetApplicationEventTarget()); - TkMacOSXInitNamedSymbol(HIToolbox, EventTargetRef, - GetMenuBarEventTarget, void); - if (GetMenuBarEventTarget) { - ChkErr(InstallStandardEventHandler, GetMenuBarEventTarget()); - } else { - TkMacOSXDbgMsg("Unable to install standard menubar event handler"); - } - ) TK_ELSE_HI_TOOLBOX (5, - /* - * This is a hack to workaround missing Carbon API to install the - * standard application event handler (InstallStandardEventHandler() - * does not work on the application target). The only way to install the - * standard app handler is to call RunApplicationEventLoop(), but since - * we are running our own event loop, we'll immediately need to break - * out of RAEL again: we do this via longjmp out of the - * ExitRaelEventHandlerProc event handler called first off from RAEL by - * posting a high priority dummy event. This workaround is derived from - * a similar approach in Technical Q&A 1061. - */ - enum { - kExitRaelEvent = 'ExiT' - }; - const EventTypeSpec exitRaelEventType = { - kExitRaelEvent, kExitRaelEvent - }; - EventHandlerUPP exitRaelEventHandler; - EventHandlerRef exitRaelEventHandlerRef = NULL; - EventRef exitRaelEvent = NULL; - - exitRaelEventHandler = NewEventHandlerUPP( - (EventHandlerProcPtr) ExitRaelEventHandlerProc); - if (exitRaelEventHandler) { - err = ChkErr(InstallEventHandler, GetEventDispatcherTarget(), - exitRaelEventHandler, 1, &exitRaelEventType, NULL, - &exitRaelEventHandlerRef); - } - if (err == noErr) { - err = ChkErr(CreateEvent, NULL, kExitRaelEvent, kExitRaelEvent, - GetCurrentEventTime(), kEventAttributeNone, - &exitRaelEvent); - } - if (err == noErr) { - err = ChkErr(PostEventToQueue, GetMainEventQueue(), exitRaelEvent, - kEventPriorityHigh); - } - if (err == noErr) { - if (!setjmp(exitRaelJmpBuf)) { - RunApplicationEventLoop(); - - /* - * This point should never be reached! - */ - - Tcl_Panic("RunApplicationEventLoop exited !"); - } - } - if (exitRaelEvent) { - ReleaseEvent(exitRaelEvent); - } - if (exitRaelEventHandlerRef) { - RemoveEventHandler(exitRaelEventHandlerRef); - } - if (exitRaelEventHandler) { - DisposeEventHandlerUPP(exitRaelEventHandler); - } - ) TK_ENDIF - return err; -} - -#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050 -/* - *---------------------------------------------------------------------- - * - * ExitRaelEventHandlerProc -- - * - * This procedure is the dummy event handler used to break out of - * RAEL via longjmp, it is called as the first ever event handler - * in RAEL by posting a high priority dummy event. - * - * Results: - * None. Never returns ! - * - * Side effects: - * longjmp back to InstallStandardApplicationEventHandler(). - * - *---------------------------------------------------------------------- - */ - -static void -ExitRaelEventHandlerProc( - EventHandlerCallRef callRef, - EventRef event, - void *userData) -{ - longjmp(exitRaelJmpBuf, 1); -} -#endif - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXRunTclEventLoop -- - * - * Process a limited number of tcl events. - * - * Results: - * Returns 1 if events were handled and 0 otherwise. - * - * Side effects: - * Runs the Tcl event loop. - * - *---------------------------------------------------------------------- - */ - -MODULE_SCOPE int -TkMacOSXRunTclEventLoop(void) -{ - int i = 4, result = 0; - - /* Avoid starving main event loop: process at most 4 events. */ - while(--i && Tcl_ServiceAll()) { - result = 1; - } - return result; -} - -/* - *---------------------------------------------------------------------- - * - * CarbonTimerProc -- - * - * This procedure is the carbon timer handler that runs the tcl - * event loop periodically. - * - * Results: - * None. - * - * Side effects: - * Runs the Tcl event loop. - * - *---------------------------------------------------------------------- - */ - -static void -CarbonTimerProc( - EventLoopTimerRef timer, - void *userData) -{ - if(carbonTimerEnabled > 0 && TkMacOSXRunTclEventLoop()) { -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - TkMacOSXDbgMsg("Processed tcl events from carbon timer"); -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ - } -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXStartTclEventLoopCarbonTimer -- - * - * This procedure installs (if necessary) and starts a carbon - * event timer that runs the tcl event loop periodically. - * It should be called whenever a nested carbon event loop might - * run by HIToolbox (e.g. during mouse tracking) to ensure that - * tcl events continue to be processed. - * - * Results: - * OS status code. - * - * Side effects: - * Carbon event timer is installed and started. - * - *---------------------------------------------------------------------- - */ - -MODULE_SCOPE OSStatus -TkMacOSXStartTclEventLoopCarbonTimer(void) -{ - OSStatus err = noErr; - - if (++carbonTimerEnabled > 0) { - if(!carbonTimer) { - EventLoopTimerUPP timerUPP = NewEventLoopTimerUPP(CarbonTimerProc); - - err = ChkErr(InstallEventLoopTimer, GetMainEventLoop(), - 5 * kEventDurationMillisecond, - 5 * kEventDurationMillisecond, - timerUPP, NULL, &carbonTimer); - } else { - err = ChkErr(SetEventLoopTimerNextFireTime, carbonTimer, - 5 * kEventDurationMillisecond); - } - } - return err; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXStopTclEventLoopCarbonTimer -- - * - * This procedure stops the carbon event timer started by - * TkMacOSXStartTclEventLoopCarbonTimer(). - * - * Results: - * OS status code. - * - * Side effects: - * Carbon event timer is stopped. - * - *---------------------------------------------------------------------- - */ - -MODULE_SCOPE OSStatus -TkMacOSXStopTclEventLoopCarbonTimer(void) -{ - OSStatus err = noErr; - - if (--carbonTimerEnabled == 0) { - if(carbonTimer) { - err = ChkErr(SetEventLoopTimerNextFireTime, carbonTimer, - kEventDurationForever); - } - } - return err; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXTrackingLoop -- - * - * Call with 1 before entering a mouse tracking loop (e.g. window - * resizing or menu tracking) to enable tcl event processing but - * disable carbon event processing (except for update events) - * during the loop, and with 0 after exiting the loop to reset. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -MODULE_SCOPE void -TkMacOSXTrackingLoop(int tracking) -{ - static int previousServiceMode = TCL_SERVICE_NONE; - - if (tracking) { - inTrackingLoop++; - previousServiceMode = Tcl_SetServiceMode(TCL_SERVICE_ALL); - TkMacOSXStartTclEventLoopCarbonTimer(); -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - TkMacOSXDbgMsg("Entering tracking loop"); -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ - } else { - TkMacOSXStopTclEventLoopCarbonTimer(); - previousServiceMode = Tcl_SetServiceMode(previousServiceMode); - inTrackingLoop--; -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - TkMacOSXDbgMsg("Exiting tracking loop"); -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ - } -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXReceiveAndDispatchEvent -- - * - * This receives a carbon event and sends it to the carbon event - * dispatcher. - * - * Results: - * Mac OS status - * - * Side effects: - * This receives and dispatches the next Carbon event. - * - *---------------------------------------------------------------------- - */ -MODULE_SCOPE OSStatus -TkMacOSXReceiveAndDispatchEvent(void) -{ - static EventTargetRef targetRef = NULL; - int numEventTypes = 0; - const EventTypeSpec *eventTypes = NULL; - EventRef eventRef; - OSStatus err; - const EventTypeSpec trackingEventTypes[] = { - {'dniw', kEventWindowUpdate}, - {kEventClassWindow, kEventWindowUpdate}, - }; - - if (inTrackingLoop > 0) { - eventTypes = trackingEventTypes; - numEventTypes = GetEventTypeCount(trackingEventTypes); - } - - /* - * This is a poll, since we have already counted the events coming - * into this routine, and are guaranteed to have one waiting. - */ - - err = ReceiveNextEvent(numEventTypes, eventTypes, - kEventDurationNoWait, true, &eventRef); - if (err == noErr) { -#ifdef TK_MAC_DEBUG_CARBON_EVENTS - UInt32 kind = GetEventKind(eventRef); - - if (kind != kEventMouseMoved && kind != kEventMouseDragged) { - TkMacOSXDbgMsg("Dispatching %s", TkMacOSXCarbonEventToAscii(eventRef)); - TkMacOSXInitNamedDebugSymbol(HIToolbox, void, _DebugPrintEvent, - EventRef inEvent); - if (_DebugPrintEvent) { - /* Carbon-internal event debugging (c.f. Technote 2124) */ - _DebugPrintEvent(eventRef); - } - } -#endif /* TK_MAC_DEBUG_CARBON_EVENTS */ - if (!targetRef) { - targetRef = GetEventDispatcherTarget(); - } - TkMacOSXStartTclEventLoopCarbonTimer(); - err = SendEventToEventTarget(eventRef, targetRef); - TkMacOSXStopTclEventLoopCarbonTimer(); - if (err != noErr && err != eventLoopTimedOutErr - && err != eventNotHandledErr) { - TkMacOSXDbgMsg("SendEventToEventTarget(%s) failed: %ld", - TkMacOSXCarbonEventToAscii(eventRef), err); - } - ReleaseEvent(eventRef); - } else if (err != eventLoopTimedOutErr) { - TkMacOSXDbgMsg("ReceiveNextEvent failed: %ld", err); - } - return err; -} diff --git a/macosx/tkMacOSXClipboard.c b/macosx/tkMacOSXClipboard.c index ae56383..7cd9c30 100644 --- a/macosx/tkMacOSXClipboard.c +++ b/macosx/tkMacOSXClipboard.c @@ -4,8 +4,8 @@ * This file manages the clipboard for the Tk toolkit. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -14,20 +14,84 @@ #include "tkMacOSXPrivate.h" #include "tkSelect.h" +static NSInteger changeCount = -1; +static Tk_Window clipboardOwner = NULL; + +#pragma mark TKApplication(TKClipboard) + +@implementation TKApplication(TKClipboard) +- (void)tkProvidePasteboard:(TkDisplay *)dispPtr + pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type { + NSMutableString *string = [NSMutableString new]; + + if (dispPtr && dispPtr->clipboardActive && + [type isEqualToString:NSStringPboardType]) { + for (TkClipboardTarget *targetPtr = dispPtr->clipTargetPtr; targetPtr; + targetPtr = targetPtr->nextPtr) { + if (targetPtr->type == XA_STRING || + targetPtr->type == dispPtr->utf8Atom) { + for (TkClipboardBuffer *cbPtr = targetPtr->firstBufferPtr; + cbPtr; cbPtr = cbPtr->nextPtr) { + NSString *s = [[NSString alloc] initWithBytesNoCopy: + cbPtr->buffer length:cbPtr->length + encoding:NSUTF8StringEncoding freeWhenDone:NO]; + [string appendString:s]; + [s release]; + } + break; + } + } + } + [sender setString:string forType:type]; + [string release]; +} +- (void)tkProvidePasteboard:(TkDisplay *)dispPtr { + if (dispPtr && dispPtr->clipboardActive) { + [self tkProvidePasteboard:dispPtr + pasteboard:[NSPasteboard generalPasteboard] + provideDataForType:NSStringPboardType]; + } +} +- (void)pasteboard:(NSPasteboard *)sender provideDataForType:(NSString *)type { + [self tkProvidePasteboard:TkGetDisplayList() pasteboard:sender + provideDataForType:type]; +} +- (void)tkCheckPasteboard { + if (clipboardOwner && [[NSPasteboard generalPasteboard] changeCount] != + changeCount) { + TkDisplay *dispPtr = TkGetDisplayList(); + + if (dispPtr) { + XEvent event; + + event.xany.type = SelectionClear; + event.xany.serial = NextRequest(Tk_Display(clipboardOwner)); + event.xany.send_event = False; + event.xany.window = Tk_WindowId(clipboardOwner); + event.xany.display = Tk_Display(clipboardOwner); + event.xselectionclear.selection = dispPtr->clipboardAtom; + Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); + } + clipboardOwner = NULL; + } +} +@end + +#pragma mark - /* *---------------------------------------------------------------------- * * TkSelGetSelection -- * - * Retrieve the specified selection from another process. For - * now, only fetching XA_STRING from CLIPBOARD is supported. - * Eventually other types should be allowed. + * Retrieve the specified selection from another process. For now, only + * fetching XA_STRING from CLIPBOARD is supported. Eventually other types + * should be allowed. * * Results: - * The return value is a standard Tcl return value. - * If an error occurs (such as no selection exists) - * then an error message is left in the interp's result. + * The return value is a standard Tcl return value. If an error occurs + * (such as no selection exists) then an error message is left in the + * interp's result. * * Side effects: * None. @@ -48,109 +112,36 @@ TkSelGetSelection( * once it has been retrieved. */ ClientData clientData) /* Arbitrary value to pass to proc. */ { - int result; - OSStatus err; - long length; - ScrapRef scrapRef; - char *buf; - - if ((selection == Tk_InternAtom(tkwin, "CLIPBOARD")) - && (target == XA_STRING)) { - /* - * Get the scrap from the Macintosh global clipboard. - */ - - err = ChkErr(GetCurrentScrap, &scrapRef); - if (err != noErr) { - Tcl_AppendResult(interp, Tk_GetAtomName(tkwin, selection), - " GetCurrentScrap failed.", NULL); - return TCL_ERROR; - } - - /* - * Try UNICODE first - */ - err = ChkErr(GetScrapFlavorSize, scrapRef, kScrapFlavorTypeUnicode, - &length); - if (err == noErr && length > 0) { - Tcl_DString ds; - char *data; - - buf = (char *) ckalloc(length + 2); - buf[length] = 0; - buf[length+1] = 0; /* 2-byte unicode null */ - err = ChkErr(GetScrapFlavorData, scrapRef, kScrapFlavorTypeUnicode, - &length, buf); - if (err == noErr) { - Tcl_DStringInit(&ds); - Tcl_UniCharToUtfDString((Tcl_UniChar *)buf, - Tcl_UniCharLen((Tcl_UniChar *)buf), &ds); - for (data = Tcl_DStringValue(&ds); *data != '\0'; data++) { - if (*data == '\r') { - *data = '\n'; - } - } - result = (*proc)(clientData, interp, Tcl_DStringValue(&ds)); - Tcl_DStringFree(&ds); - ckfree(buf); - return result; - } - } - - err = ChkErr(GetScrapFlavorSize, scrapRef, 'TEXT', &length); - if (err != noErr) { - Tcl_AppendResult(interp, Tk_GetAtomName(tkwin, selection), - " GetScrapFlavorSize failed.", NULL); - return TCL_ERROR; - } - if (length > 0) { - Tcl_DString encodedText; - char *data; - - buf = (char *) ckalloc(length + 1); - buf[length] = 0; - err = ChkErr(GetScrapFlavorData, scrapRef, 'TEXT', &length, buf); - if (err != noErr) { - Tcl_AppendResult(interp, Tk_GetAtomName(tkwin, selection), - " GetScrapFlavorData failed.", NULL); - return TCL_ERROR; - } - - /* - * Tcl expects '\n' not '\r' as the line break character. - */ - - for (data = buf; *data != '\0'; data++) { - if (*data == '\r') { - *data = '\n'; - } - } - - Tcl_ExternalToUtfDString(TkMacOSXCarbonEncoding, buf, length, - &encodedText); - result = (*proc)(clientData, interp, - Tcl_DStringValue(&encodedText)); - Tcl_DStringFree(&encodedText); - - ckfree(buf); - return result; + int result = TCL_ERROR; + TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; + + if (dispPtr && selection == dispPtr->clipboardAtom && (target == XA_STRING + || target == dispPtr->utf8Atom)) { + NSString *string = nil; + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + NSString *type = [pb availableTypeFromArray:[NSArray arrayWithObject: + NSStringPboardType]]; + + if (type) { + string = [pb stringForType:type]; } + result = proc(clientData, interp, string ? (char*)[string UTF8String] + : ""); + } else { + Tcl_AppendResult(interp, Tk_GetAtomName(tkwin, selection), + " selection doesn't exist or form \"", + Tk_GetAtomName(tkwin, target), "\" not defined", NULL); } - - Tcl_AppendResult(interp, Tk_GetAtomName(tkwin, selection), - " selection doesn't exist or form \"", - Tk_GetAtomName(tkwin, target), "\" not defined", NULL); - return TCL_ERROR; + return result; } /* *---------------------------------------------------------------------- * - * TkSetSelectionOwner -- + * XSetSelectionOwner -- * - * This function claims ownership of the specified selection. - * If the selection is CLIPBOARD, then we empty the system - * clipboard. + * This function claims ownership of the specified selection. If the + * selection is CLIPBOARD, then we empty the system clipboard. * * Results: * None. @@ -168,27 +159,41 @@ XSetSelectionOwner( Window owner, /* Window to be the owner. */ Time time) /* The current time? */ { - Tk_Window tkwin; - TkDisplay *dispPtr; - - /* - * This is a gross hack because the Tk_InternAtom interface is broken. - * It expects a Tk_Window, even though it only needs a Tk_Display. - */ - - tkwin = (Tk_Window) TkGetMainInfoList()->winPtr; - - if (selection == Tk_InternAtom(tkwin, "CLIPBOARD")) { - /* - * Only claim and empty the clipboard if we aren't already the - * owner of the clipboard. - */ + TkDisplay *dispPtr = TkGetDisplayList(); - dispPtr = TkGetMainInfoList()->winPtr->dispPtr; + if (dispPtr && selection == dispPtr->clipboardAtom) { + clipboardOwner = owner ? Tk_IdToWindow(display, owner) : NULL; if (!dispPtr->clipboardActive) { - ClearCurrentScrap(); + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + changeCount = [pb declareTypes:[NSArray array] owner:NSApp]; } } +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXSelDeadWindow -- + * + * This function is invoked just before a TkWindow is deleted. It + * performs selection-related cleanup. + * + * Results: + * None. + * + * Side effects: + * clipboardOwner is cleared. + * + *---------------------------------------------------------------------- + */ + +void +TkMacOSXSelDeadWindow( + TkWindow *winPtr) +{ + if (winPtr && winPtr == (TkWindow *)clipboardOwner) { + clipboardOwner = NULL; + } return Success; } @@ -197,9 +202,8 @@ XSetSelectionOwner( * * TkSelUpdateClipboard -- * - * This function is called to force the clipboard to be updated - * after new data is added. On the Mac we don't need to do - * anything. + * This function is called to force the clipboard to be updated after new + * data is added. * * Results: * None. @@ -216,6 +220,9 @@ TkSelUpdateClipboard( TkClipboardTarget *targetPtr) /* Info about the content. */ { + NSPasteboard *pb = [NSPasteboard generalPasteboard]; + changeCount = [pb addTypes:[NSArray arrayWithObject:NSStringPboardType] + owner:NSApp]; } /* @@ -223,8 +230,7 @@ TkSelUpdateClipboard( * * TkSelEventProc -- * - * This procedure is invoked whenever a selection-related - * event occurs. + * This procedure is invoked whenever a selection-related event occurs. * * Results: * None. @@ -242,6 +248,7 @@ TkSelEventProc( * SelectionRequest, or SelectionNotify. */ { if (eventPtr->type == SelectionClear) { + clipboardOwner = NULL; TkSelClearSelection(tkwin, eventPtr); } } @@ -251,9 +258,8 @@ TkSelEventProc( * * TkSelPropProc -- * - * This procedure is invoked when property-change events - * occur on windows not known to the toolkit. This is a stub - * function under Windows. + * This procedure is invoked when property-change events occur on windows + * not known to the toolkit. This is a stub function under Windows. * * Results: * None. @@ -276,7 +282,6 @@ TkSelPropProc( * TkSuspendClipboard -- * * Handle clipboard conversion as required by the suppend event. - * This function is also called on exit. * * Results: * None. @@ -290,80 +295,14 @@ TkSelPropProc( void TkSuspendClipboard(void) { - TkClipboardTarget *targetPtr; - TkClipboardBuffer *cbPtr; - TkDisplay *dispPtr; - char *buffer, *p, *endPtr, *buffPtr; - long length; - ScrapRef scrapRef; - - dispPtr = TkGetDisplayList(); - if ((dispPtr == NULL) || !dispPtr->clipboardActive) { - return; - } - - for (targetPtr = dispPtr->clipTargetPtr; targetPtr != NULL; - targetPtr = targetPtr->nextPtr) { - if (targetPtr->type == XA_STRING) { - break; - } - } - if (targetPtr != NULL) { - Tcl_DString encodedText, unicodedText; - - length = 0; - for (cbPtr = targetPtr->firstBufferPtr; cbPtr != NULL; - cbPtr = cbPtr->nextPtr) { - length += cbPtr->length; - } - - buffer = ckalloc(length); - buffPtr = buffer; - for (cbPtr = targetPtr->firstBufferPtr; cbPtr != NULL; - cbPtr = cbPtr->nextPtr) { - for (p = cbPtr->buffer, endPtr = p + cbPtr->length; - p < endPtr; p++) { - if (*p == '\n') { - *buffPtr++ = '\r'; - } else { - *buffPtr++ = *p; - } - } - } - - ClearCurrentScrap(); - GetCurrentScrap(&scrapRef); - Tcl_UtfToExternalDString(TkMacOSXCarbonEncoding, buffer, length, - &encodedText); - PutScrapFlavor(scrapRef, 'TEXT', 0, Tcl_DStringLength(&encodedText), - Tcl_DStringValue(&encodedText)); - Tcl_DStringFree(&encodedText); - - /* - * Also put unicode data on scrap. - */ - - Tcl_DStringInit(&unicodedText); - Tcl_UtfToUniCharDString(buffer, length, &unicodedText); - PutScrapFlavor(scrapRef, kScrapFlavorTypeUnicode, 0, - Tcl_DStringLength(&unicodedText), - Tcl_DStringValue(&unicodedText)); - Tcl_DStringFree(&unicodedText); - - ckfree(buffer); - } - - /* - * The system now owns the scrap. We tell Tk that it has - * lost the selection so that it will look for it the next time - * it needs it. (Window list NULL if quiting.) - */ - - if (TkGetMainInfoList() != NULL) { - Tk_ClearSelection((Tk_Window) TkGetMainInfoList()->winPtr, - Tk_InternAtom((Tk_Window) TkGetMainInfoList()->winPtr, - "CLIPBOARD")); - } - - return; + changeCount = [[NSPasteboard generalPasteboard] changeCount]; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXColor.c b/macosx/tkMacOSXColor.c index 22686a3..6f34c74 100644 --- a/macosx/tkMacOSXColor.c +++ b/macosx/tkMacOSXColor.c @@ -7,8 +7,8 @@ * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1996 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -17,11 +17,6 @@ #include "tkMacOSXPrivate.h" #include "tkColor.h" -#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 -/* Undocumented CG API for creating CGPattern from CGImage */ -extern CGPatternRef CGPatternCreateWithImage(CGImageRef img, int i) WEAK_IMPORT_ATTRIBUTE; -#endif - struct SystemColorMapEntry { const char *name; ThemeBrush brush; @@ -176,7 +171,7 @@ static const struct SystemColorMapEntry systemColorMap[] = { { NULL, 0, 0, 0 } }; #define MAX_PIXELCODE 165 - + /* *---------------------------------------------------------------------- * @@ -202,7 +197,7 @@ GetThemeFromPixelCode( ThemeTextColor *textColor, ThemeBackgroundKind *background) { - if (code >= MIN_PIXELCODE && code <= MAX_PIXELCODE && code != PIXEL_MAGIC) { + if (code >= MIN_PIXELCODE && code <= MAX_PIXELCODE) { *brush = systemColorMap[code - MIN_PIXELCODE].brush; *textColor = systemColorMap[code - MIN_PIXELCODE].textColor; *background = systemColorMap[code - MIN_PIXELCODE].background; @@ -211,7 +206,8 @@ GetThemeFromPixelCode( *textColor = 0; *background = 0; } - if (!*brush && !*textColor && !*background && code != PIXEL_MAGIC) { + if (!*brush && !*textColor && !*background && code != PIXEL_MAGIC && + code != TRANSPARENT_PIXEL) { return false; } else { return true; @@ -240,23 +236,45 @@ GetThemeColor( ThemeBrush brush, ThemeTextColor textColor, ThemeBackgroundKind background, - RGBColor *c) + CGColorRef *c) { OSStatus err = noErr; if (brush) { - err = ChkErr(GetThemeBrushAsColor, - brush == kThemeBrushMenuBackgroundSelected ? - kThemeBrushFocusHighlight : brush, 32, true, c); - } else if (textColor) { - err = ChkErr(GetThemeTextColor, textColor, 32, true, c); + err = ChkErr(HIThemeBrushCreateCGColor, brush, c); + /*} else if (textColor) { + err = ChkErr(GetThemeTextColor, textColor, 32, true, c);*/ } else { - c->red = (pixel >> 16) & 0xff; - c->green = (pixel >> 8) & 0xff; - c->blue = (pixel ) & 0xff; - c->red |= c->red << 8; - c->green |= c->green << 8; - c->blue |= c->blue << 8; + CGFloat rgba[4] = {0, 0, 0, 1}; + + switch ((pixel >> 24) & 0xff) { + case PIXEL_MAGIC: { + unsigned short red, green, blue; + red = (pixel >> 16) & 0xff; + green = (pixel >> 8) & 0xff; + blue = (pixel ) & 0xff; + red |= red << 8; + green |= green << 8; + blue |= blue << 8; + rgba[0] = red / 65535.0; + rgba[1] = green / 65535.0; + rgba[2] = blue / 65535.0; + break; + } + case TRANSPARENT_PIXEL: + rgba[3] = 0.0; + break; + } + + // this attempts to find something roughly fitting for any display +// *c = CGColorCreateGenericRGB(rgba[0], rgba[1], rgba[2], rgba[3]); + + // may be off for non-main display but in most cases better than prev + static CGColorSpaceRef deviceRGBSpace = NULL; + if (!deviceRGBSpace) { + deviceRGBSpace = CGDisplayCopyColorSpace(CGMainDisplayID()); + } + *c = CGColorCreate(deviceRGBSpace, rgba ); } return err; } @@ -266,14 +284,14 @@ GetThemeColor( * * TkSetMacColor -- * - * Populates a Macintosh RGBColor structure from a X style - * pixel value. + * Creates a CGColorRef from a X style pixel value. * * Results: * Returns false if not a real pixel, true otherwise. * * Side effects: - * The variable macColor is updated to the pixels value. + * The variable macColor is set to a new CGColorRef, the caller is + * responsible for releasing it! * *---------------------------------------------------------------------- */ @@ -281,8 +299,9 @@ GetThemeColor( int TkSetMacColor( unsigned long pixel, /* Pixel value to convert. */ - RGBColor *macColor) /* Mac color struct to modify. */ + void *macColor) /* CGColorRef to modify. */ { + CGColorRef *color = (CGColorRef*)macColor; OSStatus err = -1; ThemeBrush brush; ThemeTextColor textColor; @@ -291,7 +310,7 @@ TkSetMacColor( if (GetThemeFromPixelCode((pixel >> 24) & 0xff, &brush, &textColor, &background)) { err = ChkErr(GetThemeColor, pixel, brush, textColor, background, - macColor); + color); } return (err == noErr); } @@ -299,81 +318,149 @@ TkSetMacColor( /* *---------------------------------------------------------------------- * - * TkMacOSXSetColorInPort -- + * TkpInitGCCache, TkpFreeGCCache, CopyCachedColor, SetCachedColor -- * - * Sets fore or back color in the given QD port from an X pixel - * value, and if the pixel code indicates a system color, sets - * the corresponding brush, textColor or background via - * Appearance mgr APIs. + * Maintain a per-GC cache of previously converted CGColorRefs * * Results: - * None. + * None resp. retained CGColorRef for CopyCachedColor() * * Side effects: - * If penPat is non-NULL it is set to the forground color/pattern. + * None. * *---------------------------------------------------------------------- */ void -TkMacOSXSetColorInPort( - unsigned long pixel, - int fg, - PixPatHandle penPat, - CGrafPtr port) +TkpInitGCCache( + GC gc) { - OSStatus err; - RGBColor c; - ThemeBrush brush; - ThemeTextColor textColor; - ThemeBackgroundKind background; - int setPenPat = 0; + bzero(TkpGetGCCache(gc), sizeof(TkpGCCache)); +} - if (GetThemeFromPixelCode((pixel >> 24) & 0xff, &brush, &textColor, - &background)) { - CGrafPtr savePort; - Boolean portChanged; +void +TkpFreeGCCache( + GC gc) +{ + TkpGCCache *gcCache = TkpGetGCCache(gc); - portChanged = QDSwapPort(port, &savePort); - err = ChkErr(GetThemeColor, pixel, brush, textColor, background, &c); - if (err == noErr) { - if (fg) { - RGBForeColor(&c); - if (penPat) { - MakeRGBPat(penPat, &c); - setPenPat = 1; - } - } else { - RGBBackColor(&c); - } - } - err = -1; - if (brush) { - err = ChkErr(SetThemeBackground, - brush == kThemeBrushMenuBackgroundSelected ? - kThemeBrushFocusHighlight : brush, 32, true); - } else if (textColor && fg) { - err = ChkErr(SetThemeTextColor, textColor, 32, true); - } else if (background) { - Rect bounds; + if (gcCache->cachedForegroundColor) { + CFRelease(gcCache->cachedForegroundColor); + } + if (gcCache->cachedBackgroundColor) { + CFRelease(gcCache->cachedBackgroundColor); + } +} - GetPortBounds(port, &bounds); - err = ChkErr(ApplyThemeBackground, background, &bounds, - kThemeStateActive, 32, true); +static CGColorRef +CopyCachedColor( + GC gc, + unsigned long pixel) +{ + TkpGCCache *gcCache = TkpGetGCCache(gc); + CGColorRef cgColor = NULL; + + if (gcCache) { + if (gcCache->cachedForeground == pixel) { + cgColor = gcCache->cachedForegroundColor; + } else if (gcCache->cachedBackground == pixel) { + cgColor = gcCache->cachedBackgroundColor; } - if (penPat && err == noErr && (brush || background)) { - GetPortBackPixPat(port, penPat); - setPenPat = 1; + if (cgColor) { + CFRetain(cgColor); } - if (portChanged) { - QDSwapPort(savePort, NULL); + } + return cgColor; +} + +static void +SetCachedColor( + GC gc, + unsigned long pixel, + CGColorRef cgColor) +{ + TkpGCCache *gcCache = TkpGetGCCache(gc); + + if (gcCache && cgColor) { + if (gc->foreground == pixel) { + if (gcCache->cachedForegroundColor) { + CFRelease(gcCache->cachedForegroundColor); + } + gcCache->cachedForegroundColor = (CGColorRef) CFRetain(cgColor); + gcCache->cachedForeground = pixel; + } else if (gc->background == pixel) { + if (gcCache->cachedBackgroundColor) { + CFRelease(gcCache->cachedBackgroundColor); + } + gcCache->cachedBackgroundColor = (CGColorRef) CFRetain(cgColor); + gcCache->cachedBackground = pixel; } - } else { - TkMacOSXDbgMsg("Ignored unknown pixel value 0x%lx", pixel); } - if (penPat && !setPenPat) { - GetPortBackPixPat(port, penPat); +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXCreateCGColor -- + * + * Creates a CGColorRef from a X style pixel value. + * + * Results: + * Returns NULL if not a real pixel, CGColorRef otherwise. + * + * Side effects: + * None + * + *---------------------------------------------------------------------- + */ + +CGColorRef +TkMacOSXCreateCGColor( + GC gc, + unsigned long pixel) /* Pixel value to convert. */ +{ + CGColorRef cgColor = CopyCachedColor(gc, pixel); + + if (!cgColor && TkSetMacColor(pixel, &cgColor)) { + SetCachedColor(gc, pixel, cgColor); + } + return cgColor; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXGetNSColor -- + * + * Creates an autoreleased NSColor from a X style pixel value. + * + * Results: + * Returns nil if not a real pixel, NSColor* otherwise. + * + * Side effects: + * None + * + *---------------------------------------------------------------------- + */ + +NSColor* +TkMacOSXGetNSColor( + GC gc, + unsigned long pixel) /* Pixel value to convert. */ +{ + CGColorRef cgColor = TkMacOSXCreateCGColor(gc, pixel); + NSColor *nsColor = nil; + + if (cgColor) { + NSColorSpace *colorSpace = [[NSColorSpace alloc] + initWithCGColorSpace:CGColorGetColorSpace(cgColor)]; + nsColor = [NSColor colorWithColorSpace:colorSpace + components:CGColorGetComponents(cgColor) + count:CGColorGetNumberOfComponents(cgColor)]; + [colorSpace release]; + CFRelease(cgColor); } + return nsColor; } /* @@ -397,136 +484,52 @@ TkMacOSXSetColorInPort( void TkMacOSXSetColorInContext( + GC gc, unsigned long pixel, CGContextRef context) { OSStatus err = -1; - RGBColor c; + CGColorRef cgColor = CopyCachedColor(gc, pixel); ThemeBrush brush; ThemeTextColor textColor; ThemeBackgroundKind background; - if (GetThemeFromPixelCode((pixel >> 24) & 0xff, &brush, &textColor, - &background)) { + if (!cgColor && GetThemeFromPixelCode((pixel >> 24) & 0xff, &brush, + &textColor, &background)) { if (brush) { - TK_IF_MAC_OS_X_API (4, HIThemeSetFill, - err = ChkErr(HIThemeSetFill, brush, NULL, context, + err = ChkErr(HIThemeSetFill, brush, NULL, context, + kHIThemeOrientationNormal); + if (err == noErr) { + err = ChkErr(HIThemeSetStroke, brush, NULL, context, kHIThemeOrientationNormal); - TK_IF_MAC_OS_X_API_COND (4, HIThemeSetFill, err == noErr, - err = ChkErr(HIThemeSetStroke, brush, NULL, context, - kHIThemeOrientationNormal); - ) TK_ENDIF - ) TK_ENDIF + } } else if (textColor) { - TK_IF_MAC_OS_X_API (4, HIThemeSetTextFill, - err = ChkErr(HIThemeSetTextFill, textColor, NULL, context, - kHIThemeOrientationNormal); - ) TK_ENDIF + err = ChkErr(HIThemeSetTextFill, textColor, NULL, context, + kHIThemeOrientationNormal); } else if (background) { - TK_IF_MAC_OS_X_API (3, CGContextGetClipBoundingBox, - CGRect rect = CGContextGetClipBoundingBox(context); - HIThemeBackgroundDrawInfo info = { 0, kThemeStateActive, - background }; - - TK_IF_MAC_OS_X_API (3, HIThemeApplyBackground, - TK_IF_HI_TOOLBOX (3, /* c.f. QA1377 */ - err = ChkErr(HIThemeApplyBackground, &rect, &info, - context, kHIThemeOrientationNormal); - ) TK_ENDIF - ) TK_ENDIF - ) TK_ENDIF + CGRect rect = CGContextGetClipBoundingBox(context); + HIThemeBackgroundDrawInfo info = { 0, kThemeStateActive, + background }; + + err = ChkErr(HIThemeApplyBackground, &rect, &info, + context, kHIThemeOrientationNormal); } if (err == noErr) { return; } -#if MAC_OS_X_VERSION_MIN_REQUIRED < 1040 - /* - * Convert Appearance theme pattern to CGPattern: - */ - if ((brush || background) && CGPatternCreateWithImage != NULL) { - static PixPatHandle pixpat = NULL; - static GWorldPtr patGWorld = NULL; - static uint32_t bitmapInfo = 0; - const short patDim = 16; - const Rect bounds = {0, 0, patDim, patDim}; - CGrafPtr savePort; - Boolean portChanged; - PixMapHandle pixmap; - long rowbytes; - CGImageRef img; - CGColorSpaceRef rgbCspace; - CGDataProviderRef provider; - - if (!pixpat) { - pixpat = NewPixPat(); - err = ChkErr(NewGWorld, &patGWorld, 32, &bounds, NULL, NULL, 0 -#ifdef __LITTLE_ENDIAN__ - | kNativeEndianPixMap -#endif - ); - if (!pixpat || err != noErr || !patGWorld) { - Tcl_Panic("TkMacOSXSetColorInContext(): " - "pattern initialization failed !"); - } - TK_IF_HI_TOOLBOX (4, - bitmapInfo = kCGBitmapByteOrder32Host; - ) TK_ENDIF - } - portChanged = QDSwapPort(patGWorld, &savePort); - TkMacOSXSetColorInPort(pixel, 1, pixpat, patGWorld); -#ifdef TK_MAC_DEBUG - Rect patBounds; - GetPixBounds((**pixpat).patMap, &patBounds); - if (patBounds.right > patDim || patBounds.bottom > patDim) { - Tcl_Panic("TkMacOSXSetColorInContext(): " - "pattern larger than expected !"); - } -#endif /* TK_MAC_DEBUG */ - FillCRect(&bounds, pixpat); - if (portChanged) { - QDSwapPort(savePort, NULL); - } - pixmap = GetPortPixMap(patGWorld); - rowbytes = GetPixRowBytes(pixmap); - provider = CGDataProviderCreateWithData(&patGWorld, - GetPixBaseAddr(pixmap), rowbytes * patDim, NULL); - rgbCspace = CGColorSpaceCreateDeviceRGB(); - img = CGImageCreate(patDim, patDim, 8, 32, - rowbytes, rgbCspace, kCGImageAlphaFirst | bitmapInfo, - provider, NULL, 0, kCGRenderingIntentDefault); - CGColorSpaceRelease(rgbCspace); - CGDataProviderRelease(provider); - if (img) { - CGPatternRef pat = CGPatternCreateWithImage(img, 2); - CGColorSpaceRef patCSpace = CGColorSpaceCreatePattern(NULL); - const float alpha = 1; - - CGContextSetFillColorSpace(context, patCSpace); - CGContextSetFillPattern(context, pat, &alpha); - CGContextSetStrokeColorSpace(context, patCSpace); - CGContextSetStrokePattern(context, pat, &alpha); - CGColorSpaceRelease(patCSpace); - CGPatternRelease(pat); - CGImageRelease(img); - return; - } - } -#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1040 */ - err = ChkErr(GetThemeColor, pixel, brush, textColor, background, &c); + err = ChkErr(GetThemeColor, pixel, brush, textColor, background, + &cgColor); if (err == noErr) { - double r = c.red / 65535.0; - double g = c.green / 65535.0; - double b = c.blue / 65535.0; - - CGContextSetRGBFillColor(context, r, g, b, 1.0); - CGContextSetRGBStrokeColor(context, r, g, b, 1.0); + SetCachedColor(gc, pixel, cgColor); } - } else if (((pixel >> 24) & 0xff) == TRANSPARENT_PIXEL) { - CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0.0); - CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 0.0); - } else { + } else if (!cgColor) { TkMacOSXDbgMsg("Ignored unknown pixel value 0x%lx", pixel); } + if (cgColor) { + CGContextSetFillColorWithColor(context, cgColor); + CGContextSetStrokeColorWithColor(context, cgColor); + CGColorRelease(cgColor); + } } /* @@ -553,8 +556,8 @@ TkpGetColor( Tk_Uid name) /* Name of color to allocated (in form * suitable for passing to XParseColor). */ { - Display *display = Tk_Display(tkwin); - Colormap colormap = Tk_Colormap(tkwin); + Display *display = tkwin != None ? Tk_Display(tkwin) : NULL; + Colormap colormap = tkwin!= None ? Tk_Colormap(tkwin) : None; TkColor *tkColPtr; XColor color; @@ -571,7 +574,7 @@ TkpGetColor( Tcl_DecrRefCount(strPtr); if (result == TCL_OK) { OSStatus err; - RGBColor c; + CGColorRef c; unsigned char pixelCode = idx + MIN_PIXELCODE; ThemeBrush brush = systemColorMap[idx].brush; ThemeTextColor textColor = systemColorMap[idx].textColor; @@ -579,15 +582,29 @@ TkpGetColor( err = ChkErr(GetThemeColor, 0, brush, textColor, background, &c); if (err == noErr) { - color.red = c.red; - color.green = c.green; - color.blue = c.blue; + const size_t n = CGColorGetNumberOfComponents(c); + const CGFloat *rgba = CGColorGetComponents(c); + + switch (n) { + case 4: + color.red = rgba[0] * 65535.0; + color.green = rgba[1] * 65535.0; + color.blue = rgba[2] * 65535.0; + break; + case 2: + color.red = color.green = color.blue = rgba[0] * 65535.0; + break; + default: + Tcl_Panic("CGColor with %d components", n); + } color.pixel = ((((((pixelCode << 8) | ((color.red >> 8) & 0xff)) << 8) | ((color.green >> 8) & 0xff)) << 8) | ((color.blue >> 8) & 0xff)); + CGColorRelease(c); goto validXColor; } + CGColorRelease(c); } } @@ -639,37 +656,6 @@ TkpGetColorByValue( return tkColPtr; } -#if 0 -/* - *---------------------------------------------------------------------- - * - * TkMacOSXCompareColors -- - * - * On Mac, color codes may specify symbolic values like "highlight - * foreground", but we really need the actual values to compare. - * Maybe see also: "TIP #154: Add Named Colors to Tk". - * - * Results: - * Returns true if both colors are the same, false otherwise. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -int -TkMacOSXCompareColors( - unsigned long c1, - unsigned long c2) -{ - RGBColor col1, col2; - return TkSetMacColor(c1,&col1) && - TkSetMacColor(c1,&col2) && - !memcmp(&col1,&col2,sizeof(col1)); -} -#endif /* !TK_DRAW_IN_CONTEXT */ - /* *---------------------------------------------------------------------- * @@ -736,3 +722,12 @@ XFreeColors( */ return Success; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXConfig.c b/macosx/tkMacOSXConfig.c index 4c803f0..bdfcb6e 100644 --- a/macosx/tkMacOSXConfig.c +++ b/macosx/tkMacOSXConfig.c @@ -5,7 +5,7 @@ * the configuration package. * * Copyright (c) 1997 by Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. + * Copyright 2001, Apple Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -36,8 +36,8 @@ Tcl_Obj * TkpGetSystemDefault( Tk_Window tkwin, /* A window to use. */ - CONST char *dbName, /* The option database name. */ - CONST char *className) /* The name of the option class. */ + const char *dbName, /* The option database name. */ + const char *className) /* The name of the option class. */ { return NULL; } diff --git a/macosx/tkMacOSXCursor.c b/macosx/tkMacOSXCursor.c index 1203491..c9815c1 100644 --- a/macosx/tkMacOSXCursor.c +++ b/macosx/tkMacOSXCursor.c @@ -4,113 +4,204 @@ * This file contains Macintosh specific cursor related routines. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tkMacOSXPrivate.h" +#include "tkMacOSXCursors.h" +#include "tkMacOSXXCursors.h" /* - * There are three different ways to set the cursor on the Mac. - * The default theme cursors (listed in cursorNames below), - * color resource cursors, & normal cursors. + * Mac Cursor Types. */ #define NONE -1 /* Hidden cursor */ -#define THEME 0 /* Theme cursors */ -#define ANIMATED 1 /* Animated theme cursors */ -#define COLOR 2 /* Cursors of type crsr. */ -#define NORMAL 3 /* Cursors of type CURS. */ +#define SELECTOR 1 /* NSCursor class method */ +#define IMAGENAMED 2 /* Named NSImage */ +#define IMAGEPATH 3 /* Path to NSImage */ +#define IMAGEBITMAP 4 /* Pointer to 16x16 cursor bitmap data */ + +#define pix 16 /* Pixel width & height of cursor bitmap data */ /* - * The following data structure contains the system specific data - * necessary to control Windows cursors. + * The following data structure contains the system specific data necessary to + * control Windows cursors. */ typedef struct { TkCursor info; /* Generic cursor info used by tkCursor.c */ - Handle macCursor; /* Resource containing Macintosh cursor. - * For theme cursors, this is -1. */ - int type; /* Type of Mac cursor: for theme cursors - * this is the theme cursor constant, - * otherwise one of crsr or CURS */ - int count; /* For animating cursors, the count for the - * cursor. */ + NSCursor *macCursor; /* Macintosh cursor */ + int type; /* Type of Mac cursor */ } TkMacOSXCursor; /* * The table below is used to map from the name of a predefined cursor - * to its resource identifier. + * to a NSCursor. */ struct CursorName { const char *name; - int id; -}; - -static struct CursorName noneCursorName = {"none", 0}; - -static struct CursorName themeCursorNames[] = { - {"arrow", kThemeArrowCursor}, - {"copyarrow", kThemeCopyArrowCursor}, - {"aliasarrow", kThemeAliasArrowCursor}, - {"contextualmenuarrow", kThemeContextualMenuArrowCursor}, - {"ibeam", kThemeIBeamCursor}, - {"text", kThemeIBeamCursor}, - {"xterm", kThemeIBeamCursor}, - {"cross", kThemeCrossCursor}, - {"crosshair", kThemeCrossCursor}, - {"cross-hair", kThemeCrossCursor}, - {"plus", kThemePlusCursor}, - {"closedhand", kThemeClosedHandCursor}, - {"openhand", kThemeOpenHandCursor}, - {"pointinghand", kThemePointingHandCursor}, - {"resizeleft", kThemeResizeLeftCursor}, - {"resizeright", kThemeResizeRightCursor}, - {"resizeleftright", kThemeResizeLeftRightCursor}, - {"resizeup", kThemeResizeUpCursor}, - {"resizedown", kThemeResizeDownCursor}, - {"resizeupdown", kThemeResizeUpDownCursor}, - {"notallowed", kThemeNotAllowedCursor}, - {"poof", kThemePoofCursor}, - {NULL, 0} + const int kind; + id id1, id2; + NSPoint hotspot; }; -static struct CursorName animatedThemeCursorNames[] = { - {"watch", kThemeWatchCursor}, - {"countinguphand", kThemeCountingUpHandCursor}, - {"countingdownhand", kThemeCountingDownHandCursor}, - {"countingupanddownhand", kThemeCountingUpAndDownHandCursor}, - {"spinning", kThemeSpinningCursor}, - {NULL, 0} +#define MacCursorData(n) ((id)tkMacOSXCursors[TK_MAC_CURSOR_##n]) +#define MacXCursorData(n) ((id)tkMacOSXXCursors[TK_MAC_XCURSOR_##n]) + +static const struct CursorName cursorNames[] = { + {"none", NONE, nil}, + {"arrow", SELECTOR, @"arrowCursor"}, + {"top_left_arrow", SELECTOR, @"arrowCursor"}, + {"left_ptr", SELECTOR, @"arrowCursor"}, + {"copyarrow", SELECTOR, @"dragCopyCursor", @"_copyDragCursor"}, + {"aliasarrow", SELECTOR, @"dragLinkCursor", @"_linkDragCursor"}, + {"contextualmenuarrow", SELECTOR, @"contextualMenuCursor"}, + {"movearrow", SELECTOR, @"_moveCursor"}, + {"ibeam", SELECTOR, @"IBeamCursor"}, + {"text", SELECTOR, @"IBeamCursor"}, + {"xterm", SELECTOR, @"IBeamCursor"}, + {"cross", SELECTOR, @"crosshairCursor"}, + {"crosshair", SELECTOR, @"crosshairCursor"}, + {"cross-hair", SELECTOR, @"crosshairCursor"}, + {"tcross", SELECTOR, @"crosshairCursor"}, + {"hand", SELECTOR, @"openHandCursor"}, + {"openhand", SELECTOR, @"openHandCursor"}, + {"closedhand", SELECTOR, @"closedHandCursor"}, + {"fist", SELECTOR, @"closedHandCursor"}, + {"pointinghand", SELECTOR, @"pointingHandCursor"}, + {"resize", SELECTOR, @"arrowCursor"}, + {"resizeleft", SELECTOR, @"resizeLeftCursor"}, + {"resizeright", SELECTOR, @"resizeRightCursor"}, + {"resizeleftright", SELECTOR, @"resizeLeftRightCursor"}, + {"resizeup", SELECTOR, @"resizeUpCursor"}, + {"resizedown", SELECTOR, @"resizeDownCursor"}, + {"resizeupdown", SELECTOR, @"resizeUpDownCursor"}, + {"resizebottomleft", SELECTOR, @"_bottomLeftResizeCursor"}, + {"resizetopleft", SELECTOR, @"_topLeftResizeCursor"}, + {"resizebottomright", SELECTOR, @"_bottomRightResizeCursor"}, + {"resizetopright", SELECTOR, @"_topRightResizeCursor"}, + {"notallowed", SELECTOR, @"operationNotAllowedCursor"}, + {"poof", SELECTOR, @"disappearingItemCursor"}, + {"wait", SELECTOR, @"busyButClickableCursor"}, + {"spinning", SELECTOR, @"busyButClickableCursor"}, + {"countinguphand", SELECTOR, @"busyButClickableCursor"}, + {"countingdownhand", SELECTOR, @"busyButClickableCursor"}, + {"countingupanddownhand", SELECTOR, @"busyButClickableCursor"}, + {"help", IMAGENAMED, @"NSHelpCursor", nil, {8, 8}}, +// {"hand", IMAGEBITMAP, MacCursorData(hand)}, + {"bucket", IMAGEBITMAP, MacCursorData(bucket)}, + {"cancel", IMAGEBITMAP, MacCursorData(cancel)}, +// {"resize", IMAGEBITMAP, MacCursorData(resize)}, + {"eyedrop", IMAGEBITMAP, MacCursorData(eyedrop)}, + {"eyedrop-full", IMAGEBITMAP, MacCursorData(eyedrop_full)}, + {"zoom-in", IMAGEBITMAP, MacCursorData(zoom_in)}, + {"zoom-out", IMAGEBITMAP, MacCursorData(zoom_out)}, + {"X_cursor", IMAGEBITMAP, MacXCursorData(X_cursor)}, +// {"arrow", IMAGEBITMAP, MacXCursorData(arrow)}, + {"based_arrow_down", IMAGEBITMAP, MacXCursorData(based_arrow_down)}, + {"based_arrow_up", IMAGEBITMAP, MacXCursorData(based_arrow_up)}, + {"boat", IMAGEBITMAP, MacXCursorData(boat)}, + {"bogosity", IMAGEBITMAP, MacXCursorData(bogosity)}, + {"bottom_left_corner", IMAGEBITMAP, MacXCursorData(bottom_left_corner)}, + {"bottom_right_corner", IMAGEBITMAP, MacXCursorData(bottom_right_corner)}, + {"bottom_side", IMAGEBITMAP, MacXCursorData(bottom_side)}, + {"bottom_tee", IMAGEBITMAP, MacXCursorData(bottom_tee)}, + {"box_spiral", IMAGEBITMAP, MacXCursorData(box_spiral)}, + {"center_ptr", IMAGEBITMAP, MacXCursorData(center_ptr)}, + {"circle", IMAGEBITMAP, MacXCursorData(circle)}, + {"clock", IMAGEBITMAP, MacXCursorData(clock)}, + {"coffee_mug", IMAGEBITMAP, MacXCursorData(coffee_mug)}, +// {"cross", IMAGEBITMAP, MacXCursorData(cross)}, + {"cross_reverse", IMAGEBITMAP, MacXCursorData(cross_reverse)}, +// {"crosshair", IMAGEBITMAP, MacXCursorData(crosshair)}, + {"diamond_cross", IMAGEBITMAP, MacXCursorData(diamond_cross)}, + {"dot", IMAGEBITMAP, MacXCursorData(dot)}, + {"dotbox", IMAGEBITMAP, MacXCursorData(dotbox)}, + {"double_arrow", IMAGEBITMAP, MacXCursorData(double_arrow)}, + {"draft_large", IMAGEBITMAP, MacXCursorData(draft_large)}, + {"draft_small", IMAGEBITMAP, MacXCursorData(draft_small)}, + {"draped_box", IMAGEBITMAP, MacXCursorData(draped_box)}, + {"exchange", IMAGEBITMAP, MacXCursorData(exchange)}, + {"fleur", IMAGEBITMAP, MacXCursorData(fleur)}, + {"gobbler", IMAGEBITMAP, MacXCursorData(gobbler)}, + {"gumby", IMAGEBITMAP, MacXCursorData(gumby)}, + {"hand1", IMAGEBITMAP, MacXCursorData(hand1)}, + {"hand2", IMAGEBITMAP, MacXCursorData(hand2)}, + {"heart", IMAGEBITMAP, MacXCursorData(heart)}, + {"icon", IMAGEBITMAP, MacXCursorData(icon)}, + {"iron_cross", IMAGEBITMAP, MacXCursorData(iron_cross)}, +// {"left_ptr", IMAGEBITMAP, MacXCursorData(left_ptr)}, + {"left_side", IMAGEBITMAP, MacXCursorData(left_side)}, + {"left_tee", IMAGEBITMAP, MacXCursorData(left_tee)}, + {"leftbutton", IMAGEBITMAP, MacXCursorData(leftbutton)}, + {"ll_angle", IMAGEBITMAP, MacXCursorData(ll_angle)}, + {"lr_angle", IMAGEBITMAP, MacXCursorData(lr_angle)}, + {"man", IMAGEBITMAP, MacXCursorData(man)}, + {"middlebutton", IMAGEBITMAP, MacXCursorData(middlebutton)}, + {"mouse", IMAGEBITMAP, MacXCursorData(mouse)}, + {"pencil", IMAGEBITMAP, MacXCursorData(pencil)}, + {"pirate", IMAGEBITMAP, MacXCursorData(pirate)}, + {"plus", IMAGEBITMAP, MacXCursorData(plus)}, + {"question_arrow", IMAGEBITMAP, MacXCursorData(question_arrow)}, + {"right_ptr", IMAGEBITMAP, MacXCursorData(right_ptr)}, + {"right_side", IMAGEBITMAP, MacXCursorData(right_side)}, + {"right_tee", IMAGEBITMAP, MacXCursorData(right_tee)}, + {"rightbutton", IMAGEBITMAP, MacXCursorData(rightbutton)}, + {"rtl_logo", IMAGEBITMAP, MacXCursorData(rtl_logo)}, + {"sailboat", IMAGEBITMAP, MacXCursorData(sailboat)}, + {"sb_down_arrow", IMAGEBITMAP, MacXCursorData(sb_down_arrow)}, + {"sb_h_double_arrow", IMAGEBITMAP, MacXCursorData(sb_h_double_arrow)}, + {"sb_left_arrow", IMAGEBITMAP, MacXCursorData(sb_left_arrow)}, + {"sb_right_arrow", IMAGEBITMAP, MacXCursorData(sb_right_arrow)}, + {"sb_up_arrow", IMAGEBITMAP, MacXCursorData(sb_up_arrow)}, + {"sb_v_double_arrow", IMAGEBITMAP, MacXCursorData(sb_v_double_arrow)}, + {"shuttle", IMAGEBITMAP, MacXCursorData(shuttle)}, + {"sizing", IMAGEBITMAP, MacXCursorData(sizing)}, + {"spider", IMAGEBITMAP, MacXCursorData(spider)}, + {"spraycan", IMAGEBITMAP, MacXCursorData(spraycan)}, + {"star", IMAGEBITMAP, MacXCursorData(star)}, + {"target", IMAGEBITMAP, MacXCursorData(target)}, +// {"tcross", IMAGEBITMAP, MacXCursorData(tcross)}, +// {"top_left_arrow", IMAGEBITMAP, MacXCursorData(top_left_arrow)}, + {"top_left_corner", IMAGEBITMAP, MacXCursorData(top_left_corner)}, + {"top_right_corner", IMAGEBITMAP, MacXCursorData(top_right_corner)}, + {"top_side", IMAGEBITMAP, MacXCursorData(top_side)}, + {"top_tee", IMAGEBITMAP, MacXCursorData(top_tee)}, + {"trek", IMAGEBITMAP, MacXCursorData(trek)}, + {"ul_angle", IMAGEBITMAP, MacXCursorData(ul_angle)}, + {"umbrella", IMAGEBITMAP, MacXCursorData(umbrella)}, + {"ur_angle", IMAGEBITMAP, MacXCursorData(ur_angle)}, + {"watch", IMAGEBITMAP, MacXCursorData(watch)}, +// {"xterm", IMAGEBITMAP, MacXCursorData(xterm)}, + {NULL} }; /* * Declarations of static variables used in this file. */ -static TkMacOSXCursor * gCurrentCursor = NULL; /* A pointer to the current - * cursor. */ -static int gResizeOverride = false; /* A boolean indicating whether - * we should use the resize - * cursor during installations. */ -static int gTkOwnsCursor = true; /* A boolean indicating whether - * Tk owns the cursor. If not (for - * instance, in the case where a Tk - * window is embedded in another app's - * window, and the cursor is out of - * the tk window, we will not attempt - * to adjust the cursor */ +static TkMacOSXCursor * gCurrentCursor = NULL; + /* A pointer to the current cursor. */ +static int gResizeOverride = false; + /* A boolean indicating whether we should use + * the resize cursor during installations. */ +static int gTkOwnsCursor = true;/* A boolean indicating whether Tk owns the + * cursor. If not (for instance, in the case + * where a Tk window is embedded in another + * app's window, and the cursor is out of the + * tk window, we will not attempt to adjust + * the cursor. */ /* * Declarations of procedures local to this file */ static void FindCursorByName(TkMacOSXCursor *macCursorPtr, const char *string); - /* *---------------------------------------------------------------------- @@ -119,9 +210,7 @@ static void FindCursorByName(TkMacOSXCursor *macCursorPtr, const char *string); * * Retrieve a system cursor by name, and fill the macCursorPtr * structure. If the cursor cannot be found, the macCursor field - * will be NULL. The function first attempts to load a color - * cursor. If that fails it will attempt to load a black & white - * cursor. + * will be nil. * * Results: * Fills the macCursorPtr record. @@ -135,41 +224,127 @@ static void FindCursorByName(TkMacOSXCursor *macCursorPtr, const char *string); void FindCursorByName( TkMacOSXCursor *macCursorPtr, - const char *string) + const char *name) { - Handle resource; - Str255 curName; - int destWrote, inCurLen; - Tcl_Encoding encoding; - - inCurLen = strlen(string); - if (inCurLen > 255) { - return; - } + NSString *path = nil; + NSImage *image = nil; + NSPoint hotSpot = NSZeroPoint; + int haveHotSpot = 0, result = TCL_ERROR; + NSCursor *macCursor = nil; - /* - * macRoman is the encoding that the resource fork uses. - */ + if (name[0] == '@') { + /* + * System cursor of type @filename + */ - encoding = Tcl_GetEncoding(NULL, "macRoman"); - Tcl_UtfToExternal(NULL, encoding, string, inCurLen, 0, NULL, - (char *) &curName[1], 255, NULL, &destWrote, NULL); - curName[0] = destWrote; - Tcl_FreeEncoding(encoding); - - resource = GetNamedResource('crsr', curName); - if (resource) { - short id; - Str255 theName; - ResType theType; - - GetResInfo(resource, &id, &theType, theName); - macCursorPtr->macCursor = (Handle) GetCCursor(id); - macCursorPtr->type = COLOR; + macCursorPtr->type = IMAGEPATH; + path = [NSString stringWithUTF8String:&name[1]]; } else { - macCursorPtr->macCursor = GetNamedResource('CURS', curName); - macCursorPtr->type = NORMAL; + Tcl_Obj *strPtr = Tcl_NewStringObj(name, -1); + int idx; + + result = Tcl_GetIndexFromObjStruct(NULL, strPtr, cursorNames, + sizeof(struct CursorName), NULL, TCL_EXACT, &idx); + Tcl_DecrRefCount(strPtr); + if (result == TCL_OK) { + macCursorPtr->type = cursorNames[idx].kind; + switch (cursorNames[idx].kind) { + case SELECTOR: { + SEL selector = NSSelectorFromString(cursorNames[idx].id1); + if ([NSCursor respondsToSelector:selector]) { + macCursor = [[NSCursor performSelector:selector] retain]; + } else if (cursorNames[idx].id2) { + selector = NSSelectorFromString(cursorNames[idx].id2); + if ([NSCursor respondsToSelector:selector]) { + macCursor = [[NSCursor performSelector:selector] retain]; + } + } + break; + } + case IMAGENAMED: + image = [[NSImage imageNamed:cursorNames[idx].id1] retain]; + hotSpot = cursorNames[idx].hotspot; + haveHotSpot = 1; + break; + case IMAGEPATH: + path = [NSApp tkFrameworkImagePath:cursorNames[idx].id1]; + break; + case IMAGEBITMAP: { + unsigned char *bitmap = (unsigned char *)(cursorNames[idx].id1); + NSBitmapImageRep *bitmapImageRep = NULL; + CGImageRef img = NULL, mask = NULL, maskedImg = NULL; + static const CGFloat decodeWB[] = {1, 0}; + CGColorSpaceRef colorspace = CGColorSpaceCreateWithName( + kCGColorSpaceGenericGray); + CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, + bitmap, pix*pix/8, NULL); + if (provider) { + img = CGImageCreate(pix, pix, 1, 1, pix/8, colorspace, + kCGBitmapByteOrderDefault, provider, decodeWB, 0, + kCGRenderingIntentDefault); + CFRelease(provider); + } + provider = CGDataProviderCreateWithData(NULL, bitmap + + pix*pix/8, pix*pix/8, NULL); + if (provider) { + mask = CGImageMaskCreate(pix, pix, 1, 1, pix/8, provider, + decodeWB, 0); + CFRelease(provider); + } + if (img && mask) { + maskedImg = CGImageCreateWithMask(img, mask); + } + if (maskedImg) { + bitmapImageRep = [[NSBitmapImageRep alloc] + initWithCGImage:maskedImg]; + CFRelease(maskedImg); + } + if (mask) { CFRelease(mask); } + if (img) { CFRelease(img); } + if (colorspace) { CFRelease(colorspace); } + if (bitmapImageRep) { + image = [[NSImage alloc] initWithSize:NSMakeSize(pix, pix)]; + [image addRepresentation:bitmapImageRep]; + [bitmapImageRep release]; + } + uint16_t *hotSpotData = (uint16_t*)(bitmap + 2*pix*pix/8); + hotSpot.y = CFSwapInt16BigToHost(*hotSpotData++); + hotSpot.x = CFSwapInt16BigToHost(*hotSpotData); + haveHotSpot = 1; + break; + } + } + } + } + if (path) { + image = [[NSImage alloc] initWithContentsOfFile:path]; + } + if (!image && !macCursor && result != TCL_OK) { + macCursorPtr->type = IMAGENAMED; + image = [[NSImage imageNamed:[NSString stringWithUTF8String:name]] + retain]; + haveHotSpot = 0; } + if (image) { + if (!haveHotSpot && [[path pathExtension] isEqualToString:@"cur"]) { + NSData *data = [NSData dataWithContentsOfFile:path]; + if ([data length] > 14) { + uint16_t *hotSpotData = (uint16_t*)((char*) [data bytes] + 10); + hotSpot.x = CFSwapInt16LittleToHost(*hotSpotData++); + hotSpot.y = CFSwapInt16LittleToHost(*hotSpotData); + haveHotSpot = 1; + } + } + if (!haveHotSpot) { + NSSize size = [image size]; + hotSpot.x = size.width * 0.5; + hotSpot.y = size.height * 0.5; + } + hotSpot.y = -hotSpot.y; + macCursor = [[NSCursor alloc] initWithImage:image hotSpot:hotSpot]; + [image release]; + } + macCursorPtr->macCursor = TkMacOSXMakeUncollectable(macCursor); } /* @@ -195,81 +370,34 @@ TkGetCursorByName( Tk_Uid string) /* Description of cursor. See manual entry * for details on legal syntax. */ { - struct CursorName *namePtr; - TkMacOSXCursor *macCursorPtr; - int count = -1; - - macCursorPtr = (TkMacOSXCursor *) ckalloc(sizeof(TkMacOSXCursor)); - macCursorPtr->info.cursor = (Tk_Cursor) macCursorPtr; + TkMacOSXCursor *macCursorPtr = NULL; + const char **argv = NULL; + int argc; /* - * To find a cursor we must first determine if it is one of the - * builtin cursors or the standard arrow cursor. Otherwise, we - * attempt to load the cursor as a named Mac resource. + * All cursor names are valid lists of one element (for + * TkX11-compatibility), even unadorned system cursor names. */ - if (strcmp(noneCursorName.name, string) == 0) { - namePtr = &noneCursorName; - macCursorPtr->type = NONE; - } else { - for (namePtr = themeCursorNames; namePtr->name != NULL; namePtr++) { - if (strcmp(namePtr->name, string) == 0) { - macCursorPtr->type = THEME; - break; - } + if (Tcl_SplitList(interp, string, &argc, &argv) == TCL_OK) { + if (argc) { + macCursorPtr = (TkMacOSXCursor *) ckalloc(sizeof(TkMacOSXCursor)); + macCursorPtr->info.cursor = (Tk_Cursor) macCursorPtr; + macCursorPtr->macCursor = nil; + macCursorPtr->type = 0; + FindCursorByName(macCursorPtr, argv[0]); } + ckfree((char *) argv); } - - if (namePtr->name == NULL) { - for (namePtr = animatedThemeCursorNames; - namePtr->name != NULL; namePtr++) { - int namelen = strlen (namePtr->name); - if (strncmp(namePtr->name, string, namelen) == 0) { - const char *numPtr = string + namelen; - if (*numPtr) { - int result = Tcl_GetInt(NULL, numPtr, &count); - if (result != TCL_OK) { - continue; - } - } - macCursorPtr->type = ANIMATED; - break; - } - } - } - - if (namePtr->name != NULL) { - macCursorPtr->macCursor = (Handle) namePtr; - macCursorPtr->count = count; - } else { - FindCursorByName(macCursorPtr, string); - - if (macCursorPtr->macCursor == NULL) { - const char **argv; - int argc; - - /* - * The user may be trying to specify an XCursor with fore - * & back colors. We don't want this to be an error, so pick - * off the first word, and try again. - */ - - if (Tcl_SplitList(interp, string, &argc, &argv) == TCL_OK ) { - if (argc > 1) { - FindCursorByName(macCursorPtr, argv[0]); - } - ckfree((char *) argv); - } - } - } - - if (macCursorPtr->macCursor == NULL) { - ckfree((char *)macCursorPtr); + if (!macCursorPtr || (!macCursorPtr->macCursor && + macCursorPtr->type != NONE)) { Tcl_AppendResult(interp, "bad cursor spec \"", string, "\"", NULL); - return NULL; - } else { - return (TkCursor *) macCursorPtr; + if (macCursorPtr) { + ckfree((char *)macCursorPtr); + macCursorPtr = NULL; + } } + return (TkCursor *) macCursorPtr; } /* @@ -291,8 +419,8 @@ TkGetCursorByName( TkCursor * TkCreateCursorFromData( Tk_Window tkwin, /* Window in which cursor will be used. */ - CONST char *source, /* Bitmap data for cursor shape. */ - CONST char *mask, /* Bitmap data for cursor mask. */ + const char *source, /* Bitmap data for cursor shape. */ + const char *mask, /* Bitmap data for cursor mask. */ int width, int height, /* Dimensions of cursor. */ int xHot, int yHot, /* Location of hot-spot in cursor. */ XColor fgColor, /* Foreground color for cursor. */ @@ -324,15 +452,7 @@ TkpFreeCursor( { TkMacOSXCursor *macCursorPtr = (TkMacOSXCursor *) cursorPtr; - switch (macCursorPtr->type) { - case COLOR: - DisposeCCursor((CCrsrHandle) macCursorPtr->macCursor); - break; - case NORMAL: - ReleaseResource(macCursorPtr->macCursor); - break; - } - + TkMacOSXMakeCollectableAndRelease(macCursorPtr->macCursor); if (macCursorPtr == gCurrentCursor) { gCurrentCursor = NULL; } @@ -343,9 +463,8 @@ TkpFreeCursor( * * TkMacOSXInstallCursor -- * - * Installs either the current cursor as defined by TkpSetCursor - * or a resize cursor as the cursor the Macintosh should currently - * display. + * Installs either the current cursor as defined by TkpSetCursor or a + * resize cursor as the cursor the Macintosh should currently display. * * Results: * None. @@ -361,59 +480,34 @@ TkMacOSXInstallCursor( int resizeOverride) { TkMacOSXCursor *macCursorPtr = gCurrentCursor; - CCrsrHandle ccursor; - CursHandle cursor; - static unsigned int cursorStep = 0; static int cursorHidden = 0; int cursorNone = 0; gResizeOverride = resizeOverride; - if (resizeOverride) { - cursor = (CursHandle) GetNamedResource('CURS', "\presize"); - if (cursor) { - SetCursor(*cursor); - } else { - TkMacOSXDbgMsg("Resize cursor failed: %d", ResError()); - } - } else if (macCursorPtr == NULL) { - SetThemeCursor(kThemeArrowCursor); + if (resizeOverride || !macCursorPtr) { + [[NSCursor arrowCursor] set]; } else { - struct CursorName *namePtr; switch (macCursorPtr->type) { - case NONE: - if (!cursorHidden) { - cursorHidden = 1; - HideCursor(); - } - cursorNone = 1; - break; - case THEME: - namePtr = (struct CursorName *) macCursorPtr->macCursor; - SetThemeCursor( - namePtr->id); - break; - case ANIMATED: - namePtr = (struct CursorName *) macCursorPtr->macCursor; - if (macCursorPtr->count == -1) { - SetAnimatedThemeCursor(namePtr->id, cursorStep++); - } else { - SetAnimatedThemeCursor(namePtr->id, macCursorPtr->count); - } - break; - case COLOR: - ccursor = (CCrsrHandle) macCursorPtr->macCursor; - SetCCursor(ccursor); - break; - case NORMAL: - cursor = (CursHandle) macCursorPtr->macCursor; - SetCursor(*cursor); - break; + case NONE: + if (!cursorHidden) { + cursorHidden = 1; + [NSCursor hide]; + } + cursorNone = 1; + break; + case SELECTOR: + case IMAGENAMED: + case IMAGEPATH: + case IMAGEBITMAP: + default: + [macCursorPtr->macCursor set]; + break; } } if (cursorHidden && !cursorNone) { cursorHidden = 0; - ShowCursor(); + [NSCursor unhide]; } } @@ -446,10 +540,10 @@ TkpSetCursor( if (cursor == None) { /* * This is a little tricky. We can't really tell whether - * gCurrentCursor is NULL because it was NULL last time around - * or because we just freed the current cursor. So if the input - * cursor is NULL, we always need to reset it, we can't trust the - * cursorChanged logic. + * gCurrentCursor is NULL because it was NULL last time around or + * because we just freed the current cursor. So if the input cursor is + * NULL, we always need to reset it, we can't trust the cursorChanged + * logic. */ gCurrentCursor = NULL; @@ -487,3 +581,12 @@ Tk_MacOSXTkOwnsCursor( { gTkOwnsCursor = tkOwnsIt; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXCursors.h b/macosx/tkMacOSXCursors.h new file mode 100644 index 0000000..2cf00fb --- /dev/null +++ b/macosx/tkMacOSXCursors.h @@ -0,0 +1,89 @@ +/* + * tkMacOSXCursors.h -- + * + * This file defines a set of Macintosh cursor resources that + * are only available on the Macintosh platform. + * + * Copyright (c) 1995-1996 Sun Microsystems, Inc. + * Copyright 2008-2009, Apple Inc. + * Copyright (c) 2008-2009 Daniel A. Steffen <das@users.sourceforge.net> + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +static const unsigned char tkMacOSXCursors[][68] = { + +#define TK_MAC_CURSOR_hand 0 +[TK_MAC_CURSOR_hand] = { + 0x01, 0x80, 0x1A, 0x70, 0x26, 0x48, 0x26, 0x4A, 0x12, 0x4D, 0x12, 0x49, 0x68, 0x09, 0x98, 0x01, + 0x88, 0x02, 0x40, 0x02, 0x20, 0x02, 0x20, 0x04, 0x10, 0x04, 0x08, 0x08, 0x04, 0x08, 0x04, 0x08, + 0x01, 0x80, 0x1B, 0xF0, 0x3F, 0xF8, 0x3F, 0xFA, 0x1F, 0xFF, 0x1F, 0xFF, 0x6F, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFE, 0x7F, 0xFE, 0x3F, 0xFE, 0x3F, 0xFC, 0x1F, 0xFC, 0x0F, 0xF8, 0x07, 0xF8, 0x07, 0xF8, + 0x00, 0x09, 0x00, 0x08, +}, + +#define TK_MAC_CURSOR_bucket 2 +[TK_MAC_CURSOR_bucket] = { + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09, 0x80, 0x09, 0x40, 0x0B, 0x30, 0x0D, 0x18, 0x09, 0x0C, + 0x12, 0x9C, 0x21, 0x2C, 0x10, 0x4C, 0x08, 0x8C, 0x05, 0x0C, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x09, 0x80, 0x09, 0xC0, 0x0B, 0xF0, 0x0F, 0xF8, 0x0F, 0xFC, + 0x1F, 0xFC, 0x3F, 0xEC, 0x1F, 0xCC, 0x0F, 0x8C, 0x07, 0x0C, 0x02, 0x08, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0D, 0x00, 0x0C, +}, + +#define TK_MAC_CURSOR_cancel 3 +[TK_MAC_CURSOR_cancel] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x80, 0x4A, 0x40, 0x4A, 0x40, 0x3F, 0x80, + 0x0A, 0x00, 0x3F, 0x80, 0x4A, 0x40, 0x4A, 0x46, 0x31, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x80, 0x7B, 0xC0, 0xFF, 0xE0, 0xFF, 0xE0, 0x7F, 0xC0, + 0x3F, 0x80, 0x7F, 0xC0, 0xFF, 0xE6, 0xFF, 0xEF, 0x7B, 0xCF, 0x31, 0x86, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x05, +}, + +#define TK_MAC_CURSOR_resize 4 +[TK_MAC_CURSOR_resize] = { + 0xFF, 0xFF, 0x80, 0x01, 0xBF, 0x01, 0xA1, 0x81, 0xA1, 0xF9, 0xA1, 0x8D, 0xA1, 0x8D, 0xBF, 0x8D, + 0x9F, 0x8D, 0x88, 0x0D, 0x88, 0x0D, 0x88, 0x0D, 0x8F, 0xFD, 0x87, 0xFD, 0x80, 0x01, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x08, 0x00, 0x08, +}, + +#define TK_MAC_CURSOR_eyedrop 5 +[TK_MAC_CURSOR_eyedrop] = { + 0x00, 0x0E, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0xFF, 0x00, 0x7E, 0x00, 0xB8, 0x01, 0x18, 0x02, 0x28, + 0x04, 0x40, 0x08, 0x80, 0x11, 0x00, 0x22, 0x00, 0x44, 0x00, 0x48, 0x00, 0xB0, 0x00, 0x40, 0x00, + 0x00, 0x0E, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0xFF, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xE8, + 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x40, 0x00, + 0x00, 0x0F, 0x00, 0x00, +}, + +#define TK_MAC_CURSOR_eyedrop_full 6 +[TK_MAC_CURSOR_eyedrop_full] = { + 0x00, 0x0E, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0xFF, 0x00, 0x7E, 0x00, 0xB8, 0x01, 0x18, 0x03, 0x28, + 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x40, 0x00, + 0x00, 0x0E, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0xFF, 0x00, 0x7E, 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xE8, + 0x07, 0xC0, 0x0F, 0x80, 0x1F, 0x00, 0x3E, 0x00, 0x7C, 0x00, 0x78, 0x00, 0xF0, 0x00, 0x40, 0x00, + 0x00, 0x0F, 0x00, 0x00, +}, + +#define TK_MAC_CURSOR_zoom_in 7 +[TK_MAC_CURSOR_zoom_in] = { + 0x07, 0x80, 0x18, 0x60, 0x27, 0x90, 0x58, 0x68, 0x53, 0x28, 0xA3, 0x14, 0xAF, 0xD4, 0xAF, 0xD4, + 0xA3, 0x14, 0x53, 0x28, 0x58, 0x68, 0x27, 0x98, 0x18, 0x7C, 0x07, 0x8E, 0x00, 0x07, 0x00, 0x03, + 0x07, 0x80, 0x1F, 0xE0, 0x3F, 0xF0, 0x78, 0x78, 0x73, 0x38, 0xE3, 0x1C, 0xEF, 0xDC, 0xEF, 0xDC, + 0xE3, 0x1C, 0x73, 0x38, 0x78, 0x78, 0x3F, 0xF8, 0x1F, 0xFC, 0x07, 0x8E, 0x00, 0x07, 0x00, 0x03, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_CURSOR_zoom_out 8 +[TK_MAC_CURSOR_zoom_out] = { + 0x07, 0x80, 0x18, 0x60, 0x27, 0x90, 0x58, 0x68, 0x50, 0x28, 0xA0, 0x14, 0xAF, 0xD4, 0xAF, 0xD4, + 0xA0, 0x14, 0x50, 0x28, 0x58, 0x68, 0x27, 0x98, 0x18, 0x7C, 0x07, 0x8E, 0x00, 0x07, 0x00, 0x03, + 0x07, 0x80, 0x1F, 0xE0, 0x3F, 0xF0, 0x78, 0x78, 0x70, 0x38, 0xE0, 0x1C, 0xEF, 0xDC, 0xEF, 0xDC, + 0xE0, 0x1C, 0x70, 0x38, 0x78, 0x78, 0x3F, 0xF8, 0x1F, 0xFC, 0x07, 0x8E, 0x00, 0x07, 0x00, 0x03, + 0x00, 0x07, 0x00, 0x07, +}, + +}; diff --git a/macosx/tkMacOSXCursors.r b/macosx/tkMacOSXCursors.r deleted file mode 100644 index f947ddf..0000000 --- a/macosx/tkMacOSXCursors.r +++ /dev/null @@ -1,128 +0,0 @@ -/* - * tkMacOSXCursors.r -- - * - * This file defines a set of Macintosh cursor resources that - * are only available on the Macintosh platform. - * - * Copyright (c) 1995-1996 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -/* - * These are resource definitions for Macintosh cursors. - * The are identified and loaded by the "name" of the - * cursor. However, the ids must be unique. - */ - -data 'CURS' (1000, "hand") { - $"0180 1A70 2648 264A 124D 1249 6809 9801" - $"8802 4002 2002 2004 1004 0808 0408 0408" - $"0180 1BF0 3FF8 3FFA 1FFF 1FFF 6FFF FFFF" - $"FFFE 7FFE 3FFE 3FFC 1FFC 0FF8 07F8 07F8" - $"0009 0008" -}; - -data 'CURS' (1002, "bucket") { - $"0000 0000 0600 0980 0940 0B30 0D18 090C" - $"129C 212C 104C 088C 050C 0208 0000 0000" - $"0000 0000 0600 0980 09C0 0BF0 0FF8 0FFC" - $"1FFC 3FEC 1FCC 0F8C 070C 0208 0000 0000" - $"000D 000C" -}; - -data 'CURS' (1003, "cancel") { - $"0000 0000 0000 0000 3180 4A40 4A40 3F80" - $"0A00 3F80 4A40 4A46 3186 0000 0000 0000" - $"0000 0000 0000 3180 7BC0 FFE0 FFE0 7FC0" - $"3F80 7FC0 FFE6 FFEF 7BCF 3186 0000 0000" - $"0008 0005" -}; - -data 'CURS' (1004, "resize") { - $"FFFF 8001 BF01 A181 A1F9 A18D A18D BF8D" - $"9F8D 880D 880D 880D 8FFD 87FD 8001 FFFF" - $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" - $"FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF" - $"0008 0008" -}; - -data 'CURS' (1005, "eyedrop") { - $"000E 001F 001F 00FF 007E 00B8 0118 0228" - $"0440 0880 1100 2200 4400 4800 B000 4000" - $"000E 001F 001F 00FF 007E 00F8 01F8 03E8" - $"07C0 0F80 1F00 3E00 7C00 7800 F000 4000" - $"000F 0000" -}; - -data 'CURS' (1006, "eyedrop-full") { - $"000E 001F 001F 00FF 007E 00B8 0118 0328" - $"07C0 0F80 1F00 3E00 7C00 7800 F000 4000" - $"000E 001F 001F 00FF 007E 00F8 01F8 03E8" - $"07C0 0F80 1F00 3E00 7C00 7800 F000 4000" - $"000F 0000" -}; - -data 'CURS' (1007, "zoom-in") { - $"0780 1860 2790 5868 5028 A014 AFD4 AFD4" - $"A014 5028 5868 2798 187C 078E 0007 0003" - $"0780 1FE0 3FF0 7878 7038 E01C EFDC EFDC" - $"E01C 7038 7878 3FF8 1FFC 078E 0007 0003" - $"0007 0007" -}; - -data 'CURS' (1008, "zoom-out") { - $"0780 1860 2790 5868 5328 A314 AFD4 AFD4" - $"A314 5328 5868 2798 187C 078E 0007 0003" - $"0780 1FE0 3FF0 7878 7338 E31C EFDC EFDC" - $"E31C 7338 7878 3FF8 1FFC 078E 0007 0003" - $"0007 0007" -}; - -/* - * The following are resource definitions for color - * cursors on the Macintosh. If a color cursor and - * a black & white cursor are both defined with the - * same name preference will be given to the color - * cursors. - */ - -data 'crsr' (1000, "hand") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0180 1A70 2648 264A 124D 1249" - $"6809 9801 8802 4002 2002 2004 1004 0808" - $"0408 0408 0180 1BF0 3FF8 3FFA 1FFF 1FFF" - $"6FFF FFFF FFFE 7FFE 3FFE 3FFC 1FFC 0FF8" - $"07F8 07F8 0008 0008 0000 0000 0000 0000" - $"0000 0000 8004 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0002 0001 0002 0000 0000 0000 00D2 0000" - $"0000 0003 C000 03CD 7F00 0D7D 75C0 0D7D" - $"75CC 035D 75F7 035D 75D7 3CD5 55D7 D7D5" - $"5557 D5D5 555C 3555 555C 0D55 555C 0D55" - $"5570 0355 5570 00D5 55C0 0035 55C0 0035" - $"55C0 0000 0000 0000 0002 0000 FFFF FFFF" - $"FFFF 0001 FFFF CCCC 9999 0003 0000 0000" - $"0000" -}; - -data 'crsr' (1001, "fist") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0DB0 124C" - $"100A 0802 1802 2002 2002 2004 1004 0808" - $"0408 0408 0000 0000 0000 0000 0DB0 1FFC" - $"1FFE 0FFE 1FFE 3FFE 3FFE 3FFC 1FFC 0FF8" - $"07F8 07F8 0008 0008 0000 0000 0000 0000" - $"0000 0000 8004 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0002 0001 0002 0000 0000 0000 00D2 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 00F3 CF00 035D 75F0 0355 55DC 00D5" - $"555C 03D5 555C 0D55 555C 0D55 555C 0D55" - $"5570 0355 5570 00D5 55C0 0035 55C0 0035" - $"55C0 0000 0000 0000 0002 0000 FFFF FFFF" - $"FFFF 0001 FFFF CCCC 9999 0003 0000 0000" - $"0000" -}; - diff --git a/macosx/tkMacOSXDebug.c b/macosx/tkMacOSXDebug.c index 9d1ebf6..78008f0 100644 --- a/macosx/tkMacOSXDebug.c +++ b/macosx/tkMacOSXDebug.c @@ -1,58 +1,14 @@ /* * tkMacOSXDebug.c -- * - * Implementation of Macintosh specific functions for debugging MacOS events, - * regions, etc... + * Implementation of Macintosh specific functions for debugging MacOS + * events, regions, etc... * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tkMacOSXPrivate.h" @@ -60,423 +16,6 @@ #ifdef TK_MAC_DEBUG -typedef struct { - EventKind kind; - const char * name; -} MyEventName; - -typedef struct { - EventClass c; - MyEventName * names; -} MyEventNameList; - -static MyEventName windowEventNames [] = { - { kEventWindowUpdate,"Update"}, - { kEventWindowDrawContent,"DrawContent"}, - { kEventWindowActivated,"Activated"}, - { kEventWindowDeactivated,"Deactivated"}, - { kEventWindowGetClickActivation,"GetClickActivation"}, - { kEventWindowShowing,"Showing"}, - { kEventWindowHiding,"Hiding"}, - { kEventWindowShown,"Shown"}, - { kEventWindowHidden,"Hidden"}, - { kEventWindowBoundsChanging,"BoundsChanging"}, - { kEventWindowBoundsChanged,"BoundsChanged"}, - { kEventWindowResizeStarted,"ResizeStarted"}, - { kEventWindowResizeCompleted,"ResizeCompleted"}, - { kEventWindowDragStarted,"DragStarted"}, - { kEventWindowDragCompleted,"DragCompleted"}, - { kEventWindowClickDragRgn,"ClickDragRgn"}, - { kEventWindowClickResizeRgn,"ClickResizeRgn"}, - { kEventWindowClickCollapseRgn,"ClickCollapseRgn"}, - { kEventWindowClickCloseRgn,"ClickCloseRgn"}, - { kEventWindowClickZoomRgn,"ClickZoomRgn"}, - { kEventWindowClickContentRgn,"ClickContentRgn"}, - { kEventWindowClickProxyIconRgn,"ClickProxyIconRgn"}, - { kEventWindowCursorChange,"CursorChange" }, - { kEventWindowCollapse,"Collapse"}, - { kEventWindowCollapsed,"Collapsed"}, - { kEventWindowCollapseAll,"CollapseAll"}, - { kEventWindowExpand,"Expand"}, - { kEventWindowExpanded,"Expanded"}, - { kEventWindowExpandAll,"ExpandAll"}, - { kEventWindowCollapse,"Collapse"}, - { kEventWindowClose,"Close"}, - { kEventWindowClosed,"Closed"}, - { kEventWindowCloseAll,"CloseAll"}, - { kEventWindowZoom,"Zoom"}, - { kEventWindowZoomed,"Zoomed"}, - { kEventWindowZoomAll,"ZoomAll"}, - { kEventWindowContextualMenuSelect,"ContextualMenuSelect"}, - { kEventWindowPathSelect,"PathSelect"}, - { kEventWindowGetIdealSize,"GetIdealSize"}, - { kEventWindowGetMinimumSize,"GetMinimumSize"}, - { kEventWindowGetMaximumSize,"GetMaximumSize"}, - { kEventWindowConstrain,"Constrain"}, - { kEventWindowHandleContentClick,"HandleContentClick"}, - { kEventWindowProxyBeginDrag,"ProxyBeginDra}"}, - { kEventWindowProxyEndDrag,"ProxyEndDrag"}, - { kEventWindowFocusAcquired,"FocusAcquired"}, - { kEventWindowFocusRelinquish,"FocusRelinquish"}, - { kEventWindowDrawFrame,"DrawFrame"}, - { kEventWindowDrawPart,"DrawPart"}, - { kEventWindowGetRegion,"GetRegion"}, - { kEventWindowHitTest,"HitTest"}, - { kEventWindowInit,"Init"}, - { kEventWindowDispose,"Dispose"}, - { kEventWindowDragHilite,"DragHilite"}, - { kEventWindowModified,"Modified"}, - { kEventWindowSetupProxyDragImage,"SetupProxyDragImage"}, - { kEventWindowStateChanged,"StateChanged"}, - { kEventWindowMeasureTitle,"MeasureTitle"}, - { kEventWindowDrawGrowBox,"DrawGrowBox"}, - { kEventWindowGetGrowImageRegion,"GetGrowImageRegion"}, - { kEventWindowPaint,"Paint"}, - { 0, NULL }, -}; - -static MyEventName mouseEventNames [] = { - { kEventMouseMoved, "Moved"}, - { kEventMouseUp, "Up"}, - { kEventMouseDown, "Down"}, - { kEventMouseDragged, "Dragged"}, - { kEventMouseWheelMoved, "WheelMoved"}, - { 0, NULL} -}; - -static MyEventName keyboardEventNames [] = { - { kEventRawKeyDown, "Down"}, - { kEventRawKeyRepeat, "Repeat"}, - { kEventRawKeyUp, "Up"}, - { kEventRawKeyModifiersChanged, "ModifiersChanged"}, - { kEventHotKeyPressed, "HotKeyPressed"}, - { kEventHotKeyReleased, "HotKeyReleased"}, - { 0, NULL} -}; - -static MyEventName appEventNames [] = { - { kEventAppActivated, "Activated"}, - { kEventAppDeactivated, "Deactivated"}, - { kEventAppQuit, "Quit"}, - { kEventAppLaunchNotification, "LaunchNotification"}, - { kEventAppLaunched, "Launched"}, - { kEventAppTerminated, "Terminated"}, - { kEventAppFrontSwitched, "FrontSwitched"}, - { 0, NULL} -}; - -static MyEventName menuEventNames [] = { - { kEventMenuBeginTracking, "BeginTracking"}, - { kEventMenuEndTracking, "EndTracking"}, - { kEventMenuChangeTrackingMode, "ChangeTrackingMode"}, - { kEventMenuOpening, "Opening"}, - { kEventMenuClosed, "Closed"}, - { kEventMenuTargetItem, "TargetItem"}, - { kEventMenuMatchKey, "MatchKey"}, - { kEventMenuEnableItems, "EnableItems"}, - { kEventMenuDispose, "Dispose"}, - { 0, NULL } -}; - -static MyEventName controlEventNames [] = { - { kEventControlInitialize, "Initialize" }, - { kEventControlDispose, "Dispose" }, - { kEventControlGetOptimalBounds, "GetOptimalBounds" }, - { kEventControlHit, "Hit" }, - { kEventControlSimulateHit, "SimulateHit" }, - { kEventControlHitTest, "HitTest" }, - { kEventControlDraw, "Draw" }, - { kEventControlApplyBackground, "ApplyBackground" }, - { kEventControlApplyTextColor, "ApplyTextColor" }, - { kEventControlSetFocusPart, "SetFocusPart" }, - { kEventControlGetFocusPart, "GetFocusPart" }, - { kEventControlActivate, "Activate" }, - { kEventControlDeactivate, "Deactivate" }, - { kEventControlSetCursor, "SetCursor" }, - { kEventControlContextualMenuClick, "ContextualMenuClick" }, - { kEventControlClick, "Click" }, - { kEventControlTrack, "Track" }, - { kEventControlGetScrollToHereStartPoint, "GetScrollToHereStartPoint" }, - { kEventControlGetIndicatorDragConstraint, "GetIndicatorDragConstraint" }, - { kEventControlIndicatorMoved, "IndicatorMoved" }, - { kEventControlGhostingFinished, "GhostingFinished" }, - { kEventControlGetActionProcPart, "GetActionProcPart" }, - { kEventControlGetPartRegion, "GetPartRegion" }, - { kEventControlGetPartBounds, "GetPartBounds" }, - { kEventControlSetData, "SetData" }, - { kEventControlGetData, "GetData" }, - { kEventControlValueFieldChanged, "ValueFieldChanged" }, - { kEventControlAddedSubControl, "AddedSubControl" }, - { kEventControlRemovingSubControl, "RemovingSubControl" }, - { kEventControlBoundsChanged, "BoundsChanged" }, - { kEventControlOwningWindowChanged, "OwningWindowChanged" }, - { kEventControlArbitraryMessage, "ArbitraryMessage" }, - { 0, NULL } -}; - -static MyEventName commandEventNames [] = { - { kEventCommandProcess, "Process" }, - { kEventCommandUpdateStatus, "UpdateStatus" }, - { 0, NULL } -}; - -static MyEventNameList eventNameList [] = { - { kEventClassWindow, windowEventNames }, - { kEventClassMouse, mouseEventNames }, - { kEventClassKeyboard, keyboardEventNames }, - { kEventClassApplication, appEventNames }, - { kEventClassMenu, menuEventNames }, - { kEventClassControl, controlEventNames }, - { kEventClassCommand, commandEventNames }, - { 0, NULL} -}; - -#ifdef TK_MACOSXDEBUG_UNUSED -static MyEventName classicEventNames [] = { - { nullEvent,"nullEvent" }, - { mouseDown,"mouseDown" }, - { mouseUp,"mouseUp" }, - { keyDown,"keyDown" }, - { keyUp,"keyUp" }, - { autoKey,"autoKey" }, - { updateEvt,"updateEvt" }, - { diskEvt,"diskEvt" }, - { activateEvt,"activateEvt" }, - { osEvt,"osEvt" }, - { kHighLevelEvent,"kHighLevelEvent" }, - { 0, NULL } -}; -#endif /* TK_MACOSXDEBUG_UNUSED */ - -MODULE_SCOPE char * -TkMacOSXCarbonEventToAscii(EventRef eventRef) -{ - EventClass eventClass; - EventKind eventKind; - MyEventNameList * list = eventNameList; - MyEventName * names = NULL; - static char str[256]; - char *buf = str; - int *iPtr = (int*)str; - int found = 0; - - eventClass = GetEventClass(eventRef); - eventKind = GetEventKind(eventRef); - - *iPtr = eventClass; - buf[4] = 0; - strcat(buf, " "); - buf += strlen(buf); - while (list->names && (!names) ) { - if (eventClass == list->c) { - names = list -> names; - } else { - list++; - } - } - while (names && names->name) { - if (eventKind == names->kind) { - snprintf(buf, 250, "%-20s", names->name); - break; - } else { - names++; - } - } - if (!found) { - snprintf(buf, 250, "%-20d", eventKind); - } - return str; -} - -#ifdef TK_MACOSXDEBUG_UNUSED -MODULE_SCOPE char * -TkMacOSXCarbonEventKindToAscii(EventRef eventRef, char * buf ) -{ - EventClass eventClass; - EventKind eventKind; - MyEventNameList * list = eventNameList; - MyEventName * names = NULL; - int found = 0; - eventClass = GetEventClass(eventRef); - eventKind = GetEventKind(eventRef); - while (list->names && (!names) ) { - if (eventClass == list -> c) { - names = list -> names; - } else { - list++; - } - } - if (names) { - found = 0; - while ( names->name && !found ) { - if (eventKind == names->kind) { - sprintf(buf,"%s",names->name); - found = 1; - } else { - names++; - } - } - } - if (!found) { - sprintf ( buf,"%d", eventKind ); - } else { - sprintf ( buf,"%d", eventKind ); - } - return buf; -} - -MODULE_SCOPE char * -TkMacOSXClassicEventToAscii(EventRecord * eventPtr, char * buf ) -{ - MyEventName * names = NULL; - int found = 0; - names = classicEventNames; - while ( names -> name && !found ) - if (eventPtr->what == names->kind) { - int * iPtr; - char cBuf[8]; - iPtr=(int *) &cBuf; - *iPtr = eventPtr->message; - cBuf[4] = 0; - sprintf(buf, "%-16s %08x %04x %s", names->name, - (int) eventPtr->message, - eventPtr->modifiers, - cBuf); - found = 1; - } else { - names++; - } - if (!found) { - sprintf(buf,"%-16d %08x %08x, %s", - eventPtr->what, (int) eventPtr->message, - eventPtr->modifiers, buf); - } - return buf; - -} - -MODULE_SCOPE void -TkMacOSXPrintPoint(char * tag, Point * p ) -{ - TkMacOSXDbgMsg("%s %4d %4d", tag,p->h,p->v ); -} - -MODULE_SCOPE void -TkMacOSXPrintRect(char * tag, Rect * r ) -{ - TkMacOSXDbgMsg("%s %4d %4d %4d %4d (%dx%d)", - tag, r->left, r->top, r->right, r->bottom, - r->right - r->left + 1, r->bottom - r->top + 1); -} - -MODULE_SCOPE void -TkMacOSXPrintRegion(char * tag, RgnHandle rgn ) -{ - Rect r; - GetRegionBounds(rgn,&r); - TkMacOSXPrintRect(tag,&r); -} - -MODULE_SCOPE void -TkMacOSXPrintWindowTitle(char * tag, WindowRef window ) -{ - Str255 title; - GetWTitle(window,title); - title [title[0] + 1] = 0; - TkMacOSXDbgMsg("%s %s", tag, title +1 ); -} - -typedef struct { - int msg; - char * name; -} MsgName; - -static MsgName msgNames [] = { - { kMenuDrawMsg, "Draw"}, - { kMenuSizeMsg, "Size"}, - { kMenuPopUpMsg, "PopUp"}, - { kMenuCalcItemMsg, "CalcItem" }, - { kMenuThemeSavvyMsg, "ThemeSavvy"}, - { kMenuInitMsg, "Init" }, - { kMenuDisposeMsg, "Dispose" }, - { kMenuFindItemMsg, "FindItem" }, - { kMenuHiliteItemMsg, "HiliteItem" }, - { kMenuDrawItemsMsg, "DrawItems" }, - { -1, NULL } -}; - -MODULE_SCOPE char * -TkMacOSXMenuMessageToAscii(int msg, char * s) -{ - MsgName * msgNamePtr; - for (msgNamePtr = msgNames;msgNamePtr->name;) { - if (msgNamePtr->msg == msg) { - strcpy(s,msgNamePtr->name); - return s; - } else { - msgNamePtr++; - } - } - sprintf(s,"unknown : %d", msg ); - return s; -} - -static MsgName trackingNames [] = { - { kMouseTrackingMousePressed , "MousePressed " }, - { kMouseTrackingMouseReleased , "MouseReleased " }, - { kMouseTrackingMouseExited , "MouseExited " }, - { kMouseTrackingMouseEntered , "MouseEntered " }, - { kMouseTrackingMouseMoved , "MouseMoved " }, - { kMouseTrackingKeyModifiersChanged, "KeyModifiersChanged" }, - { kMouseTrackingUserCancelled , "UserCancelled " }, - { kMouseTrackingTimedOut , "TimedOut " }, - { -1, NULL } -}; - -MODULE_SCOPE char * -TkMacOSXMouseTrackingResultToAscii(MouseTrackingResult r, char * buf) -{ - MsgName * namePtr; - for (namePtr = trackingNames; namePtr->name; namePtr++) { - if (namePtr->msg == r) { - strcpy(buf, namePtr->name); - return buf; - } - } - sprintf(buf, "Unknown mouse tracking result : %d", r); - return buf; -} -#endif /* TK_MACOSXDEBUG_UNUSED */ - -MODULE_SCOPE void -TkMacOSXDebugFlashRegion( - Drawable d, - HIShapeRef rgn) -{ - TkMacOSXInitNamedDebugSymbol(HIToolbox, int, QDDebugFlashRegion, - CGrafPtr port, RgnHandle region); - CFShow(rgn); - if (d && rgn && QDDebugFlashRegion && !HIShapeIsEmpty(rgn)) { - CGrafPtr port = TkMacOSXGetDrawablePort(d); - - if (port) { - static RgnHandle qdRgn = NULL; - - if (!qdRgn) { - qdRgn = NewRgn(); - } - ChkErr(HIShapeGetAsQDRgn, rgn, qdRgn); - - /* - * Carbon-internal region flashing SPI (c.f. Technote 2124) - */ - - QDDebugFlashRegion(port, qdRgn); - SetEmptyRgn(qdRgn); - } - } -} - #include <mach-o/dyld.h> #include <mach-o/nlist.h> @@ -485,19 +24,17 @@ TkMacOSXDebugFlashRegion( * * TkMacOSXGetNamedDebugSymbol -- * + * Dynamically acquire address of a named symbol from a loaded dynamic + * library, so that we can use API that may not be available on all OS + * versions. For debugging purposes, if we cannot find the symbol with + * the usual dynamic library APIs, we manually walk the symbol table of + * the loaded library. This allows access to unexported symbols such as + * private_extern internal debugging functions. If module is NULL or the + * empty string, search all loaded libraries (could be very expensive and + * should be avoided). * - * Dynamically acquire address of a named symbol from a loaded - * dynamic library, so that we can use API that may not be - * available on all OS versions. - * For debugging purposes, if we cannot find the symbol with the - * usual dynamic library APIs, we manually walk the symbol table - * of the loaded library. This allows access to unexported - * symbols such as private_extern internal debugging functions. - * If module is NULL or the empty string, search all loaded - * libraries (could be very expensive and should be avoided). - * - * THIS FUCTION IS ONLY TO BE USED FOR DEBUGGING PURPOSES, IT MAY - * BREAK UNEXPECTEDLY IN THE FUTURE ! + * THIS FUCTION IS ONLY TO BE USED FOR DEBUGGING PURPOSES, IT MAY BREAK + * UNEXPECTEDLY IN THE FUTURE! * * Results: * Address of given symbol or NULL if unavailable. @@ -510,10 +47,11 @@ TkMacOSXDebugFlashRegion( MODULE_SCOPE void * TkMacOSXGetNamedDebugSymbol( - const char* module, - const char* symbol) + const char *module, + const char *symbol) { - void* addr = TkMacOSXGetNamedSymbol(module, symbol); + void *addr = TkMacOSXGetNamedSymbol(module, symbol); + #ifndef __LP64__ if (!addr) { const struct mach_header *mh = NULL; @@ -572,7 +110,7 @@ TkMacOSXGetNamedDebugSymbol( nsect += ns; } } else if (!st && lc->cmd == LC_SYMTAB) { - st = (struct symtab_command*) lc; + st = (struct symtab_command *) lc; break; } lc = (struct load_command *)((char *) lc + lc->cmdsize); @@ -584,11 +122,14 @@ TkMacOSXGetNamedDebugSymbol( uint32_t strsize = st->strsize; int32_t strx; - /* Offset file positions by difference to actual position - in memory of last segment before symbol table: */ + /* + * Offset file positions by difference to actual position + * in memory of last segment before symbol table: + */ + base = (intptr_t) sg->vmaddr + slide - sg->fileoff; - strings = (char*)(base + st->stroff); - sym = (struct nlist*)(base + st->symoff); + strings = (char *) (base + st->stroff); + sym = (struct nlist *) (base + st->symoff); m = st->nsyms; for (j = 0; j < m; j++) { /* Find symbol with given name in __text section */ @@ -613,5 +154,13 @@ TkMacOSXGetNamedDebugSymbol( #endif /* __LP64__ */ return addr; } - #endif /* TK_MAC_DEBUG */ + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXDebug.h b/macosx/tkMacOSXDebug.h index 8dc8109..ab37187 100644 --- a/macosx/tkMacOSXDebug.h +++ b/macosx/tkMacOSXDebug.h @@ -4,55 +4,11 @@ * Declarations of Macintosh specific functions for debugging MacOS events, * regions, etc... * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TKMACDEBUG @@ -64,24 +20,6 @@ #ifdef TK_MAC_DEBUG -MODULE_SCOPE char* TkMacOSXCarbonEventToAscii(EventRef eventRef); - -#ifdef TK_MACOSXDEBUG_UNUSED -MODULE_SCOPE char* TkMacOSXCarbonEventKindToAscii(EventRef eventRef, char * buf ); -MODULE_SCOPE char* TkMacOSXClassicEventToAscii(EventRecord * eventPtr, char * buf ); - -MODULE_SCOPE void TkMacOSXPrintRect(char * tag, Rect * r ); -MODULE_SCOPE void TkMacOSXPrintPoint(char * tag, Point * p ); - -MODULE_SCOPE void TkMacOSXPrintRegion(char * tag, RgnHandle rgn ); -MODULE_SCOPE void TkMacOSXPrintWindowTitle(char * tag, WindowRef window ); -MODULE_SCOPE char* TkMacOSXMenuMessageToAscii(int msg, char * s); - -MODULE_SCOPE char* TkMacOSXMouseTrackingResultToAscii(MouseTrackingResult r, char * buf ); -#endif - -MODULE_SCOPE void TkMacOSXDebugFlashRegion(Drawable d, HIShapeRef rgn); - MODULE_SCOPE void* TkMacOSXGetNamedDebugSymbol(const char* module, const char* symbol); /* Macro to abstract common use of TkMacOSXGetNamedDebugSymbol to initialize named symbols */ diff --git a/macosx/tkMacOSXDefault.h b/macosx/tkMacOSXDefault.h index fba5a40..868144d 100644 --- a/macosx/tkMacOSXDefault.h +++ b/macosx/tkMacOSXDefault.h @@ -6,8 +6,8 @@ * * Copyright (c) 1991-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -16,6 +16,10 @@ #ifndef _TKMACDEFAULT #define _TKMACDEFAULT +#ifndef TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS +#define TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS 1 +#endif + /* * The definitions below provide symbolic names for the default colors. * NORMAL_BG - Normal background color. @@ -27,17 +31,17 @@ * DISABLED - Foreground color when widget is disabled. */ -#define BLACK "Black" -#define WHITE "White" -#define NORMAL_BG "systemWindowBody" -#define ACTIVE_BG "systemButtonFacePressed" -#define ACTIVE_FG "systemPushButtonPressedText" -#define SELECT_BG "systemHighlight" -#define SELECT_FG None -#define INACTIVE_SELECT_BG "systemHighlightSecondary" -#define TROUGH "#c3c3c3" -#define INDICATOR "#b03060" -#define DISABLED "#a3a3a3" +#define BLACK "Black" +#define WHITE "White" +#define NORMAL_BG "systemWindowBody" +#define ACTIVE_BG "systemButtonFacePressed" +#define ACTIVE_FG "systemPushButtonPressedText" +#define SELECT_BG "systemHighlight" +#define SELECT_FG None +#define INACTIVE_SELECT_BG "systemHighlightSecondary" +#define TROUGH "#c3c3c3" +#define INDICATOR "#b03060" +#define DISABLED "#a3a3a3" /* * Defaults for labels, buttons, checkbuttons, and radiobuttons: @@ -62,22 +66,38 @@ #define DEF_BUTTON_DISABLED_FG_MONO "" #define DEF_BUTTON_FG "systemButtonText" #define DEF_CHKRAD_FG DEF_BUTTON_FG -#define DEF_BUTTON_FONT "system" +#define DEF_BUTTON_FONT "TkDefaultFont" #define DEF_BUTTON_HEIGHT "0" #define DEF_BUTTON_HIGHLIGHT_BG_COLOR DEF_BUTTON_BG_COLOR #define DEF_BUTTON_HIGHLIGHT_BG_MONO DEF_BUTTON_BG_MONO #define DEF_BUTTON_HIGHLIGHT "systemButtonFrame" #define DEF_LABEL_HIGHLIGHT_WIDTH "0" +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS #define DEF_BUTTON_HIGHLIGHT_WIDTH "4" -#define DEF_BUTTON_IMAGE (char *) NULL +#define DEF_BUTTON_HIGHLIGHT_WIDTH_NOCM "1" +#else +#define DEF_BUTTON_HIGHLIGHT_WIDTH "1" +#endif +#define DEF_BUTTON_IMAGE ((char *) NULL) #define DEF_BUTTON_INDICATOR "1" #define DEF_BUTTON_JUSTIFY "center" #define DEF_BUTTON_OFF_VALUE "0" #define DEF_BUTTON_ON_VALUE "1" +#define DEF_BUTTON_TRISTATE_VALUE "" #define DEF_BUTTON_OVER_RELIEF "" +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS #define DEF_BUTTON_PADX "12" +#define DEF_BUTTON_PADX_NOCM "1" +#else +#define DEF_BUTTON_PADX "1" +#endif #define DEF_LABCHKRAD_PADX "1" +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS #define DEF_BUTTON_PADY "3" +#define DEF_BUTTON_PADY_NOCM "1" +#else +#define DEF_BUTTON_PADY "1" +#endif #define DEF_LABCHKRAD_PADY "1" #define DEF_BUTTON_RELIEF "flat" #define DEF_LABCHKRAD_RELIEF "flat" @@ -85,10 +105,10 @@ #define DEF_BUTTON_REPEAT_INTERVAL "0" #define DEF_BUTTON_SELECT_COLOR INDICATOR #define DEF_BUTTON_SELECT_MONO BLACK -#define DEF_BUTTON_SELECT_IMAGE (char *) NULL +#define DEF_BUTTON_SELECT_IMAGE ((char *) NULL) #define DEF_BUTTON_STATE "normal" #define DEF_LABEL_TAKE_FOCUS "0" -#define DEF_BUTTON_TAKE_FOCUS (char *) NULL +#define DEF_BUTTON_TAKE_FOCUS ((char *) NULL) #define DEF_BUTTON_TEXT "" #define DEF_BUTTON_TEXT_VARIABLE "" #define DEF_BUTTON_UNDERLINE "-1" @@ -126,7 +146,7 @@ #define DEF_CANVAS_SELECT_BD_MONO "0" #define DEF_CANVAS_SELECT_FG_COLOR SELECT_FG #define DEF_CANVAS_SELECT_FG_MONO WHITE -#define DEF_CANVAS_TAKE_FOCUS (char *) NULL +#define DEF_CANVAS_TAKE_FOCUS ((char *) NULL) #define DEF_CANVAS_WIDTH "10c" #define DEF_CANVAS_X_SCROLL_CMD "" #define DEF_CANVAS_X_SCROLL_INCREMENT "0" @@ -157,7 +177,7 @@ #define DEF_ENTRY_DISABLED_BG_MONO WHITE #define DEF_ENTRY_DISABLED_FG DISABLED #define DEF_ENTRY_EXPORT_SELECTION "1" -#define DEF_ENTRY_FONT "Helvetica 12" +#define DEF_ENTRY_FONT "TkTextFont" #define DEF_ENTRY_FG BLACK #define DEF_ENTRY_HIGHLIGHT_BG NORMAL_BG #define DEF_ENTRY_HIGHLIGHT BLACK @@ -182,9 +202,9 @@ #define DEF_ENTRY_SELECT_BD_MONO "0" #define DEF_ENTRY_SELECT_FG_COLOR SELECT_FG #define DEF_ENTRY_SELECT_FG_MONO WHITE -#define DEF_ENTRY_SHOW (char *) NULL +#define DEF_ENTRY_SHOW ((char *) NULL) #define DEF_ENTRY_STATE "normal" -#define DEF_ENTRY_TAKE_FOCUS (char *) NULL +#define DEF_ENTRY_TAKE_FOCUS ((char *) NULL) #define DEF_ENTRY_TEXT_VARIABLE "" #define DEF_ENTRY_WIDTH "20" @@ -218,7 +238,7 @@ #define DEF_LABELFRAME_CLASS "Labelframe" #define DEF_LABELFRAME_RELIEF "groove" #define DEF_LABELFRAME_FG "systemButtonText" -#define DEF_LABELFRAME_FONT "system" +#define DEF_LABELFRAME_FONT "TkDefaultFont" #define DEF_LABELFRAME_TEXT "" #define DEF_LABELFRAME_LABELANCHOR "nw" @@ -233,7 +253,7 @@ #define DEF_LISTBOX_CURSOR "" #define DEF_LISTBOX_DISABLED_FG DISABLED #define DEF_LISTBOX_EXPORT_SELECTION "1" -#define DEF_LISTBOX_FONT "application" +#define DEF_LISTBOX_FONT "TkTextFont" #define DEF_LISTBOX_FG BLACK #define DEF_LISTBOX_HEIGHT "10" #define DEF_LISTBOX_HIGHLIGHT_BG NORMAL_BG @@ -250,36 +270,36 @@ #define DEF_LISTBOX_SELECT_MODE "browse" #define DEF_LISTBOX_SET_GRID "0" #define DEF_LISTBOX_STATE "normal" -#define DEF_LISTBOX_TAKE_FOCUS (char *) NULL +#define DEF_LISTBOX_TAKE_FOCUS ((char *) NULL) #define DEF_LISTBOX_WIDTH "20" /* * Defaults for individual entries of menus: */ -#define DEF_MENU_ENTRY_ACTIVE_BG (char *) NULL -#define DEF_MENU_ENTRY_ACTIVE_FG (char *) NULL -#define DEF_MENU_ENTRY_ACCELERATOR (char *) NULL -#define DEF_MENU_ENTRY_BG (char *) NULL +#define DEF_MENU_ENTRY_ACTIVE_BG ((char *) NULL) +#define DEF_MENU_ENTRY_ACTIVE_FG ((char *) NULL) +#define DEF_MENU_ENTRY_ACCELERATOR ((char *) NULL) +#define DEF_MENU_ENTRY_BG ((char *) NULL) #define DEF_MENU_ENTRY_BITMAP None #define DEF_MENU_ENTRY_COLUMN_BREAK "0" -#define DEF_MENU_ENTRY_COMMAND (char *) NULL +#define DEF_MENU_ENTRY_COMMAND ((char *) NULL) #define DEF_MENU_ENTRY_COMPOUND "none" -#define DEF_MENU_ENTRY_FG (char *) NULL -#define DEF_MENU_ENTRY_FONT (char *) NULL +#define DEF_MENU_ENTRY_FG ((char *) NULL) +#define DEF_MENU_ENTRY_FONT ((char *) NULL) #define DEF_MENU_ENTRY_HIDE_MARGIN "0" -#define DEF_MENU_ENTRY_IMAGE (char *) NULL +#define DEF_MENU_ENTRY_IMAGE ((char *) NULL) #define DEF_MENU_ENTRY_INDICATOR "1" -#define DEF_MENU_ENTRY_LABEL (char *) NULL -#define DEF_MENU_ENTRY_MENU (char *) NULL +#define DEF_MENU_ENTRY_LABEL ((char *) NULL) +#define DEF_MENU_ENTRY_MENU ((char *) NULL) #define DEF_MENU_ENTRY_OFF_VALUE "0" #define DEF_MENU_ENTRY_ON_VALUE "1" -#define DEF_MENU_ENTRY_SELECT_IMAGE (char *) NULL +#define DEF_MENU_ENTRY_SELECT_IMAGE ((char *) NULL) #define DEF_MENU_ENTRY_STATE "normal" -#define DEF_MENU_ENTRY_VALUE (char *) NULL -#define DEF_MENU_ENTRY_CHECK_VARIABLE (char *) NULL +#define DEF_MENU_ENTRY_VALUE ((char *) NULL) +#define DEF_MENU_ENTRY_CHECK_VARIABLE ((char *) NULL) #define DEF_MENU_ENTRY_RADIO_VARIABLE "selectedButton" -#define DEF_MENU_ENTRY_SELECT (char *) NULL +#define DEF_MENU_ENTRY_SELECT ((char *) NULL) #define DEF_MENU_ENTRY_UNDERLINE "-1" /* @@ -310,7 +330,7 @@ */ #define DEF_MENU_TEAROFF "0" -#define DEF_MENU_TEAROFF_CMD (char *) NULL +#define DEF_MENU_TEAROFF_CMD ((char *) NULL) #define DEF_MENU_TITLE "" #define DEF_MENU_TYPE "normal" @@ -331,20 +351,19 @@ #define DEF_MENUBUTTON_DIRECTION "below" #define DEF_MENUBUTTON_DISABLED_FG_COLOR DISABLED #define DEF_MENUBUTTON_DISABLED_FG_MONO "" -#define DEF_MENUBUTTON_FONT "system" +#define DEF_MENUBUTTON_FONT "TkDefaultFont" #define DEF_MENUBUTTON_FG BLACK #define DEF_MENUBUTTON_HEIGHT "0" #define DEF_MENUBUTTON_HIGHLIGHT_BG_COLOR DEF_MENUBUTTON_BG_COLOR #define DEF_MENUBUTTON_HIGHLIGHT_BG_MONO DEF_MENUBUTTON_BG_MONO #define DEF_MENUBUTTON_HIGHLIGHT BLACK #define DEF_MENUBUTTON_HIGHLIGHT_WIDTH "0" -#define DEF_MENUBUTTON_IMAGE (char *) NULL -#define DEF_MENUBUTTON_INDICATOR "0" -/* #define DEF_MENUBUTTON_JUSTIFY "center" */ +#define DEF_MENUBUTTON_IMAGE ((char *) NULL) +#define DEF_MENUBUTTON_INDICATOR "1" #define DEF_MENUBUTTON_JUSTIFY "left" #define DEF_MENUBUTTON_MENU "" -#define DEF_MENUBUTTON_PADX "4p" -#define DEF_MENUBUTTON_PADY "3p" +#define DEF_MENUBUTTON_PADX "4" +#define DEF_MENUBUTTON_PADY "3" #define DEF_MENUBUTTON_RELIEF "flat" #define DEF_MENUBUTTON_STATE "normal" #define DEF_MENUBUTTON_TAKE_FOCUS "0" @@ -365,7 +384,7 @@ #define DEF_MESSAGE_BORDER_WIDTH "1" #define DEF_MESSAGE_CURSOR "" #define DEF_MESSAGE_FG BLACK -#define DEF_MESSAGE_FONT "system" +#define DEF_MESSAGE_FONT "TkDefaultFont" #define DEF_MESSAGE_HIGHLIGHT_BG NORMAL_BG #define DEF_MESSAGE_HIGHLIGHT BLACK #define DEF_MESSAGE_HIGHLIGHT_WIDTH "0" @@ -410,6 +429,8 @@ #define DEF_PANEDWINDOW_PANE_PADY "0" #define DEF_PANEDWINDOW_PANE_STICKY "nsew" #define DEF_PANEDWINDOW_PANE_WIDTH "" +#define DEF_PANEDWINDOW_PANE_HIDE "0" +#define DEF_PANEDWINDOW_PANE_STRETCH "last" /* * Defaults for scales: @@ -424,7 +445,7 @@ #define DEF_SCALE_COMMAND "" #define DEF_SCALE_CURSOR "" #define DEF_SCALE_DIGITS "0" -#define DEF_SCALE_FONT "system" +#define DEF_SCALE_FONT "TkDefaultFont" #define DEF_SCALE_FG_COLOR BLACK #define DEF_SCALE_FG_MONO BLACK #define DEF_SCALE_FROM "0" @@ -445,7 +466,7 @@ #define DEF_SCALE_SLIDER_LENGTH "30" #define DEF_SCALE_SLIDER_RELIEF "raised" #define DEF_SCALE_STATE "normal" -#define DEF_SCALE_TAKE_FOCUS (char *) NULL +#define DEF_SCALE_TAKE_FOCUS ((char *) NULL) #define DEF_SCALE_TICK_INTERVAL "0" #define DEF_SCALE_TO "100" #define DEF_SCALE_VARIABLE "" @@ -472,7 +493,7 @@ #define DEF_SCROLLBAR_RELIEF "flat" #define DEF_SCROLLBAR_REPEAT_DELAY "300" #define DEF_SCROLLBAR_REPEAT_INTERVAL "100" -#define DEF_SCROLLBAR_TAKE_FOCUS (char *) NULL +#define DEF_SCROLLBAR_TAKE_FOCUS ((char *) NULL) #define DEF_SCROLLBAR_TROUGH_COLOR TROUGH #define DEF_SCROLLBAR_TROUGH_MONO WHITE #define DEF_SCROLLBAR_WIDTH "15" @@ -484,11 +505,12 @@ #define DEF_TEXT_AUTO_SEPARATORS "1" #define DEF_TEXT_BG_COLOR NORMAL_BG #define DEF_TEXT_BG_MONO WHITE +#define DEF_TEXT_BLOCK_CURSOR "0" #define DEF_TEXT_BORDER_WIDTH "0" #define DEF_TEXT_CURSOR "xterm" #define DEF_TEXT_FG BLACK #define DEF_TEXT_EXPORT_SELECTION "1" -#define DEF_TEXT_FONT "Courier 12" +#define DEF_TEXT_FONT "TkFixedFont" #define DEF_TEXT_HEIGHT "24" #define DEF_TEXT_HIGHLIGHT_BG NORMAL_BG #define DEF_TEXT_HIGHLIGHT BLACK @@ -503,6 +525,7 @@ #define DEF_TEXT_PADX "1" #define DEF_TEXT_PADY "1" #define DEF_TEXT_RELIEF "flat" +#define DEF_TEXT_INACTIVE_SELECT_COLOR INACTIVE_SELECT_BG #define DEF_TEXT_SELECT_COLOR SELECT_BG #define DEF_TEXT_SELECT_MONO BLACK #define DEF_TEXT_SELECT_BD_COLOR "1" @@ -516,7 +539,8 @@ #define DEF_TEXT_SPACING3 "0" #define DEF_TEXT_STATE "normal" #define DEF_TEXT_TABS "" -#define DEF_TEXT_TAKE_FOCUS (char *) NULL +#define DEF_TEXT_TABSTYLE "tabular" +#define DEF_TEXT_TAKE_FOCUS ((char *) NULL) #define DEF_TEXT_UNDO "0" #define DEF_TEXT_WIDTH "80" #define DEF_TEXT_WRAP "char" @@ -527,7 +551,7 @@ * Defaults for canvas text: */ -#define DEF_CANVTEXT_FONT "Helvetica 12" +#define DEF_CANVTEXT_FONT "TkDefaultFont" /* * Defaults for toplevels (most of the defaults for frames also apply diff --git a/macosx/tkMacOSXDialog.c b/macosx/tkMacOSXDialog.c index 7776d0c..d9e824a 100644 --- a/macosx/tkMacOSXDialog.c +++ b/macosx/tkMacOSXDialog.c @@ -4,8 +4,8 @@ * Contains the Mac implementation of the common dialog boxes. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -14,104 +14,214 @@ #include "tkMacOSXPrivate.h" #include "tkFileFilter.h" -#ifndef StrLength -#define StrLength(s) (*((unsigned char *) (s))) -#endif -#ifndef StrBody -#define StrBody(s) ((char *) (s) + 1) -#endif - -#define OPEN_POPUP_ITEM 10 - -#define SAVE_FILE 0 -#define OPEN_FILE 1 -#define CHOOSE_FOLDER 2 - -#define MATCHED 0 -#define UNMATCHED 1 - -#define TK_DEFAULT_ABOUT 128 - -/* - * The following structures are used in the GetFileName() function. They store - * information about the file dialog and the file filters. - */ -typedef struct _OpenFileData { - FileFilterList fl; /* List of file filters. */ - SInt16 curType; /* The filetype currently being listed. */ - short initialType; /* Type to use initially */ - short popupItem; /* Item number of the popup in the dialog. */ - short usePopup; /* True if we show the popup menu (this */ - /* is an open operation and the */ - /* -filetypes option is set). */ -} OpenFileData; - -typedef struct NavHandlerUserData { - OpenFileData *ofdPtr; - NavReplyRecord reply; - OSStatus err; - CFStringRef saveNameRef; - int sheet; - WindowRef dialogWindow, origUnavailWindow; - WindowModality origModality; -} NavHandlerUserData; - -/* - * The following structure is used in the tk_messageBox implementation. - */ - +static const char *colorOptionStrings[] = { + "-initialcolor", "-parent", "-title", NULL +}; +enum colorOptions { + COLOR_INITIAL, COLOR_PARENT, COLOR_TITLE +}; + +static const char *openOptionStrings[] = { + "-defaultextension", "-filetypes", "-initialdir", "-initialfile", + "-message", "-multiple", "-parent", "-title", "-typevariable", + "-command", NULL +}; +enum openOptions { + OPEN_DEFAULT, OPEN_FILETYPES, OPEN_INITDIR, OPEN_INITFILE, + OPEN_MESSAGE, OPEN_MULTIPLE, OPEN_PARENT, OPEN_TITLE, + OPEN_TYPEVARIABLE, OPEN_COMMAND, +}; +static const char *saveOptionStrings[] = { + "-defaultextension", "-filetypes", "-initialdir", "-initialfile", + "-message", "-parent", "-title", "-typevariable", "-command", + "-confirmoverwrite", NULL +}; +enum saveOptions { + SAVE_DEFAULT, SAVE_FILETYPES, SAVE_INITDIR, SAVE_INITFILE, + SAVE_MESSAGE, SAVE_PARENT, SAVE_TITLE, SAVE_TYPEVARIABLE, SAVE_COMMAND, + SAVE_CONFIRMOW +}; +static const char *chooseOptionStrings[] = { + "-initialdir", "-message", "-mustexist", "-parent", "-title", "-command", + NULL +}; +enum chooseOptions { + CHOOSE_INITDIR, CHOOSE_MESSAGE, CHOOSE_MUSTEXIST, CHOOSE_PARENT, + CHOOSE_TITLE, CHOOSE_COMMAND, +}; typedef struct { - int buttonIndex; - WindowRef dialogWindow, origUnavailWindow; - WindowModality origModality; - EventHandlerRef handlerRef; -} AlertHandlerUserData; - - -static OSStatus AlertHandler(EventHandlerCallRef callRef, - EventRef eventRef, void *userData); -static Boolean MatchOneType(StringPtr fileNamePtr, OSType fileType, - OpenFileData *myofdPtr, FileFilter *filterPtr); -static pascal Boolean OpenFileFilterProc(AEDesc* theItem, void* info, - NavCallBackUserData callBackUD, - NavFilterModes filterMode); -static pascal void OpenEventProc(NavEventCallbackMessage callBackSelector, - NavCBRecPtr callBackParms, - NavCallBackUserData callBackUD); -static void InitFileDialogs(void); -static int NavServicesGetFile(Tcl_Interp *interp, - OpenFileData *ofd, AEDesc *initialDescPtr, - char *initialFile, AEDescList *selectDescPtr, - CFStringRef title, CFStringRef message, - const char *initialType, int multiple, int isOpen, - Tk_Window parent); -static int HandleInitialDirectory(Tcl_Interp *interp, - char *initialFile, char *initialDir, FSRef *dirRef, - AEDescList *selectDescPtr, AEDesc *dirDescPtr); + Tcl_Interp *interp; + Tcl_Obj *cmdObj; + int multiple; +} FilePanelCallbackInfo; + +static const char *alertOptionStrings[] = { + "-default", "-detail", "-icon", "-message", "-parent", "-title", + "-type", "-command", NULL +}; +enum alertOptions { + ALERT_DEFAULT, ALERT_DETAIL, ALERT_ICON, ALERT_MESSAGE, ALERT_PARENT, + ALERT_TITLE, ALERT_TYPE, ALERT_COMMAND, +}; +typedef struct { + Tcl_Interp *interp; + Tcl_Obj *cmdObj; + int typeIndex; +} AlertCallbackInfo; +static const char *alertTypeStrings[] = { + "abortretryignore", "ok", "okcancel", "retrycancel", "yesno", + "yesnocancel", NULL +}; +enum alertTypeOptions { + TYPE_ABORTRETRYIGNORE, TYPE_OK, TYPE_OKCANCEL, TYPE_RETRYCANCEL, + TYPE_YESNO, TYPE_YESNOCANCEL +}; +static const char *alertIconStrings[] = { + "error", "info", "question", "warning", NULL +}; +enum alertIconOptions { + ICON_ERROR, ICON_INFO, ICON_QUESTION, ICON_WARNING +}; +static const char *alertButtonStrings[] = { + "abort", "retry", "ignore", "ok", "cancel", "yes", "no", NULL +}; + +static const NSString *const alertButtonNames[][3] = { + [TYPE_ABORTRETRYIGNORE] = {@"Abort", @"Retry", @"Ignore"}, + [TYPE_OK] = {@"OK"}, + [TYPE_OKCANCEL] = {@"OK", @"Cancel"}, + [TYPE_RETRYCANCEL] = {@"Retry", @"Cancel"}, + [TYPE_YESNO] = {@"Yes", @"No"}, + [TYPE_YESNOCANCEL] = {@"Yes", @"No", @"Cancel"}, +}; +static const NSAlertStyle alertStyles[] = { + [ICON_ERROR] = NSWarningAlertStyle, + [ICON_INFO] = NSInformationalAlertStyle, + [ICON_QUESTION] = NSWarningAlertStyle, + [ICON_WARNING] = NSCriticalAlertStyle, +}; /* - * Have we initialized the file dialog subsystem + * Need to map from 'alertButtonStrings' and its corresponding integer, + * index to the native button index, which is 1, 2, 3, from right to left. + * This is necessary to do for each separate '-type' of button sets. */ -static int fileDlgInited = 0; +static const short alertButtonIndexAndTypeToNativeButtonIndex[][7] = { + /* abort retry ignore ok cancel yes no */ + [TYPE_ABORTRETRYIGNORE] = {1, 2, 3, 0, 0, 0, 0}, + [TYPE_OK] = {0, 0, 0, 1, 0, 0, 0}, + [TYPE_OKCANCEL] = {0, 0, 0, 1, 2, 0, 0}, + [TYPE_RETRYCANCEL] = {0, 1, 0, 0, 2, 0, 0}, + [TYPE_YESNO] = {0, 0, 0, 0, 0, 1, 2}, + [TYPE_YESNOCANCEL] = {0, 0, 0, 0, 3, 1, 2}, +}; /* - * Filter and hook functions used by the tk_getOpenFile and tk_getSaveFile - * commands. + * Need also the inverse mapping, from NSAlertFirstButtonReturn etc to the + * descriptive button text string index. */ -static NavObjectFilterUPP openFileFilterUPP; -static NavEventUPP openFileEventUPP; +static const short alertNativeButtonIndexAndTypeToButtonIndex[][3] = { + [TYPE_ABORTRETRYIGNORE] = {0, 1, 2}, + [TYPE_OK] = {3, 0, 0}, + [TYPE_OKCANCEL] = {3, 4, 0}, + [TYPE_RETRYCANCEL] = {1, 4, 0}, + [TYPE_YESNO] = {5, 6, 0}, + [TYPE_YESNOCANCEL] = {5, 6, 4}, +}; + +#pragma mark TKApplication(TKDialog) + +@interface NSColorPanel(TKDialog) +- (void)_setUseModalAppearance:(BOOL)flag; +@end + +@implementation TKApplication(TKDialog) +- (void)tkFilePanelDidEnd:(NSSavePanel *)panel returnCode:(NSInteger)returnCode + contextInfo:(void *)contextInfo { + FilePanelCallbackInfo *callbackInfo = contextInfo; + + if (returnCode == NSFileHandlingPanelOKButton) { + Tcl_Obj *resultObj; + if (callbackInfo->multiple) { + resultObj = Tcl_NewListObj(0, NULL); + for (NSString *name in [(NSOpenPanel*)panel filenames]) { + Tcl_ListObjAppendElement(callbackInfo->interp, resultObj, + Tcl_NewStringObj([name UTF8String], -1)); + } + } else { + resultObj = Tcl_NewStringObj([[panel filename] UTF8String], -1); + } + if (callbackInfo->cmdObj) { + Tcl_Obj **objv, **tmpv; + int objc, result = Tcl_ListObjGetElements(callbackInfo->interp, + callbackInfo->cmdObj, &objc, &objv); + if (result == TCL_OK && objc) { + tmpv = (Tcl_Obj **) ckalloc(sizeof(Tcl_Obj *) * (objc + 2)); + memcpy(tmpv, objv, sizeof(Tcl_Obj *) * objc); + tmpv[objc] = resultObj; + TkBackgroundEvalObjv(callbackInfo->interp, objc + 1, tmpv, + TCL_EVAL_GLOBAL); + ckfree((char *)tmpv); + } + } else { + Tcl_SetObjResult(callbackInfo->interp, resultObj); + } + } else if (returnCode == NSFileHandlingPanelCancelButton) { + Tcl_ResetResult(callbackInfo->interp); + } + if (panel == [NSApp modalWindow]) { + [NSApp stopModalWithCode:returnCode]; + } + if (callbackInfo->cmdObj) { + Tcl_DecrRefCount(callbackInfo->cmdObj); + ckfree((char*) callbackInfo); + } +} +- (void)tkAlertDidEnd:(NSAlert *)alert returnCode:(NSInteger)returnCode + contextInfo:(void *)contextInfo { + AlertCallbackInfo *callbackInfo = contextInfo; + + if (returnCode != NSAlertErrorReturn) { + Tcl_Obj *resultObj = Tcl_NewStringObj(alertButtonStrings[ + alertNativeButtonIndexAndTypeToButtonIndex[callbackInfo-> + typeIndex][returnCode - NSAlertFirstButtonReturn]], -1); + if (callbackInfo->cmdObj) { + Tcl_Obj **objv, **tmpv; + int objc, result = Tcl_ListObjGetElements(callbackInfo->interp, + callbackInfo->cmdObj, &objc, &objv); + if (result == TCL_OK && objc) { + tmpv = (Tcl_Obj **) ckalloc(sizeof(Tcl_Obj *) * (objc + 2)); + memcpy(tmpv, objv, sizeof(Tcl_Obj *) * objc); + tmpv[objc] = resultObj; + TkBackgroundEvalObjv(callbackInfo->interp, objc + 1, tmpv, + TCL_EVAL_GLOBAL); + ckfree((char *)tmpv); + } + } else { + Tcl_SetObjResult(callbackInfo->interp, resultObj); + } + } + if ([alert window] == [NSApp modalWindow]) { + [NSApp stopModalWithCode:returnCode]; + } + if (callbackInfo->cmdObj) { + Tcl_DecrRefCount(callbackInfo->cmdObj); + ckfree((char*) callbackInfo); + } +} +@end +#pragma mark - /* *---------------------------------------------------------------------- * * Tk_ChooseColorObjCmd -- * - * This procedure implements the color dialog box for the Mac - * platform. See the user documentation for details on what it - * does. + * This procedure implements the color dialog box for the Mac platform. + * See the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -127,35 +237,21 @@ Tk_ChooseColorObjCmd( ClientData clientData, /* Main window associated with interpreter. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *CONST objv[]) /* Argument objects. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - OSStatus err; int result = TCL_ERROR; - Tk_Window parent, tkwin = (Tk_Window) clientData; - const char *title; - int i, srcRead, dstWrote; - CMError cmerr; - CMProfileRef prof; - NColorPickerInfo cpinfo; - static RGBColor color = {0xffff, 0xffff, 0xffff}; - static const char *optionStrings[] = { - "-initialcolor", "-parent", "-title", NULL - }; - enum options { - COLOR_INITIAL, COLOR_PARENT, COLOR_TITLE - }; - - title = "Choose a color:"; - bzero(&cpinfo, sizeof(cpinfo)); - cpinfo.theColor.color.rgb.red = color.red; - cpinfo.theColor.color.rgb.green = color.green; - cpinfo.theColor.color.rgb.blue = color.blue; + Tk_Window parent, tkwin = clientData; + const char *title = NULL; + int i; + NSColor *color = nil, *initialColor = nil; + NSColorPanel *colorPanel; + NSInteger returnCode, numberOfComponents = 0; for (i = 1; i < objc; i += 2) { int index; const char *option, *value; - if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", + if (Tcl_GetIndexFromObj(interp, objv[i], colorOptionStrings, "option", TCL_EXACT, &index) != TCL_OK) { goto end; } @@ -167,7 +263,7 @@ Tk_ChooseColorObjCmd( } value = Tcl_GetString(objv[i + 1]); - switch ((enum options) index) { + switch (index) { case COLOR_INITIAL: { XColor *colorPtr; @@ -175,9 +271,7 @@ Tk_ChooseColorObjCmd( if (colorPtr == NULL) { goto end; } - cpinfo.theColor.color.rgb.red = colorPtr->red; - cpinfo.theColor.color.rgb.green = colorPtr->green; - cpinfo.theColor.color.rgb.blue = colorPtr->blue; + initialColor = TkMacOSXGetNSColor(NULL, colorPtr->pixel); Tk_FreeColor(colorPtr); break; } @@ -194,35 +288,40 @@ Tk_ChooseColorObjCmd( } } } - - cmerr = CMGetDefaultProfileBySpace(cmRGBData, &prof); - cpinfo.theColor.profile = prof; - cpinfo.dstProfile = prof; - cpinfo.flags = kColorPickerDialogIsMoveable | kColorPickerDialogIsModal; - cpinfo.placeWhere = kCenterOnMainScreen; - /* Currently, this does not actually change the colorpicker title */ - Tcl_UtfToExternal(NULL, TkMacOSXCarbonEncoding, title, -1, 0, NULL, - StrBody(cpinfo.prompt), 255, &srcRead, &dstWrote, NULL); - StrLength(cpinfo.prompt) = (unsigned char) dstWrote; - - TkMacOSXTrackingLoop(1); - err = ChkErr(NPickColor, &cpinfo); - TkMacOSXTrackingLoop(0); - cmerr = CMCloseProfile(prof); - if ((err == noErr) && (cpinfo.newColorChosen != 0)) { + colorPanel = [NSColorPanel sharedColorPanel]; + [colorPanel orderOut:NSApp]; + [colorPanel setContinuous:NO]; + [colorPanel setBecomesKeyOnlyIfNeeded:NO]; + [colorPanel setShowsAlpha: NO]; + [colorPanel _setUseModalAppearance:YES]; + if (title) { + NSString *s = [[NSString alloc] initWithUTF8String:title]; + [colorPanel setTitle:s]; + [s release]; + } + if (initialColor) { + [colorPanel setColor:initialColor]; + } + returnCode = [NSApp runModalForWindow:colorPanel]; + if (returnCode == NSOKButton) { + color = [[colorPanel color] colorUsingColorSpace: + [NSColorSpace genericRGBColorSpace]]; + numberOfComponents = [color numberOfComponents]; + } + if (color && numberOfComponents >= 3 && numberOfComponents <= 4) { + CGFloat components[4]; char colorstr[8]; - color.red = cpinfo.theColor.color.rgb.red; - color.green = cpinfo.theColor.color.rgb.green; - color.blue = cpinfo.theColor.color.rgb.blue; - snprintf(colorstr, 8, "#%02x%02x%02x", color.red >> 8, - color.green >> 8, color.blue >> 8); + [color getComponents:components]; + snprintf(colorstr, 8, "#%02x%02x%02x", + (short)(components[0] * 255), + (short)(components[1] * 255), + (short)(components[2] * 255)); Tcl_SetObjResult(interp, Tcl_NewStringObj(colorstr, 7)); } else { Tcl_ResetResult(interp); } result = TCL_OK; - end: return result; } @@ -232,9 +331,8 @@ end: * * Tk_GetOpenFileObjCmd -- * - * This procedure implements the "open file" dialog box for the - * Mac platform. See the user documentation for details on what - * it does. + * This procedure implements the "open file" dialog box for the Mac + * platform. See the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -249,156 +347,159 @@ Tk_GetOpenFileObjCmd( ClientData clientData, /* Main window associated with interpreter. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *CONST objv[]) /* Argument objects. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - int i, result = TCL_ERROR, multiple = 0; - OpenFileData ofd; - Tk_Window parent = NULL; - CFStringRef message = NULL, title = NULL; - AEDesc initialDesc = {typeNull, NULL}; - FSRef dirRef; - AEDesc *initialPtr = NULL; - AEDescList selectDesc = {typeNull, NULL}; - char *initialFile = NULL, *initialDir = NULL; -#if 0 - Tcl_Obj *typeVariablePtr = NULL; -#endif - const char *initialtype = NULL; - static const char *openOptionStrings[] = { - "-defaultextension", "-filetypes", "-initialdir", "-initialfile", - "-message", "-multiple", "-parent", "-title",/* "-typevariable",*/ NULL - }; - enum openOptions { - OPEN_DEFAULT, OPEN_FILETYPES, OPEN_INITDIR, OPEN_INITFILE, - OPEN_MESSAGE, OPEN_MULTIPLE, OPEN_PARENT, OPEN_TITLE, - /*OPEN_TYPEVARIABLE,*/ - }; - - if (!fileDlgInited) { - InitFileDialogs(); - } - TkInitFileFilters(&ofd.fl); - ofd.curType = 0; - ofd.initialType = -1; - ofd.popupItem = OPEN_POPUP_ITEM; - ofd.usePopup = 1; - + Tk_Window tkwin = clientData; + char *str; + int i, result = TCL_ERROR, haveParentOption = 0; + int index, len, multiple = 0; + FileFilterList fl; + Tcl_Obj *cmdObj = NULL, *typeVariablePtr = NULL; + FilePanelCallbackInfo callbackInfoStruct; + FilePanelCallbackInfo *callbackInfo = &callbackInfoStruct; + NSString *directory = nil, *filename = nil; + NSString *message, *title, *type; + NSWindow *parent; + NSMutableArray *fileTypes = nil; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + NSInteger returnCode = NSAlertErrorReturn; + + TkInitFileFilters(&fl); for (i = 1; i < objc; i += 2) { - char *choice; - int index, choiceLen; - char *string; - char *types; - if (Tcl_GetIndexFromObj(interp, objv[i], openOptionStrings, "option", TCL_EXACT, &index) != TCL_OK) { goto end; } if (i + 1 == objc) { - string = Tcl_GetString(objv[i]); - Tcl_AppendResult(interp, "value for \"", string, "\" missing", - NULL); + str = Tcl_GetString(objv[i]); + Tcl_AppendResult(interp, "value for \"", str, "\" missing", NULL); goto end; } - switch (index) { - case OPEN_DEFAULT: - break; - case OPEN_FILETYPES: - types = Tcl_GetString(objv[i + 1]); - if (TkGetFileFilters(interp, &ofd.fl, types, 0) != TCL_OK) { - goto end; - } - break; - case OPEN_INITDIR: - initialDir = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - /* empty strings should be like no selection given */ - if (choiceLen == 0) { initialDir = NULL; } - break; - case OPEN_INITFILE: - initialFile = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - /* empty strings should be like no selection given */ - if (choiceLen == 0) { initialFile = NULL; } - break; - case OPEN_MESSAGE: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - if (message) { - CFRelease(message); - } - message = CFStringCreateWithBytes(NULL, (unsigned char*) - choice, choiceLen, kCFStringEncodingUTF8, false); - break; - case OPEN_MULTIPLE: - if (Tcl_GetBooleanFromObj(interp, objv[i + 1], &multiple) - != TCL_OK) { - goto end; - } - break; - case OPEN_PARENT: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - parent = Tk_NameToWindow(interp, choice, - (Tk_Window) clientData); - if (parent == NULL) { - goto end; + case OPEN_DEFAULT: + break; + case OPEN_FILETYPES: + if (TkGetFileFilters(interp, &fl, objv[i + 1], 0) != TCL_OK) { + goto end; + } + break; + case OPEN_INITDIR: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + if (len) { + directory = [[[NSString alloc] initWithUTF8String:str] + autorelease]; + } + break; + case OPEN_INITFILE: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + if (len) { + filename = [[[NSString alloc] initWithUTF8String:str] + autorelease]; + } + break; + case OPEN_MESSAGE: + message = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [panel setMessage:message]; + [message release]; + break; + case OPEN_MULTIPLE: + if (Tcl_GetBooleanFromObj(interp, objv[i + 1], + &multiple) != TCL_OK) { + goto end; + } + break; + case OPEN_PARENT: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + tkwin = Tk_NameToWindow(interp, str, tkwin); + if (!tkwin) { + goto end; + } + haveParentOption = 1; + break; + case OPEN_TITLE: + title = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [panel setTitle:title]; + [title release]; + break; + case OPEN_TYPEVARIABLE: + typeVariablePtr = objv[i + 1]; + break; + case OPEN_COMMAND: + cmdObj = objv[i+1]; + break; + } + } + if (fl.filters) { + fileTypes = [NSMutableArray array]; + for (FileFilter *filterPtr = fl.filters; filterPtr; + filterPtr = filterPtr->next) { + for (FileFilterClause *clausePtr = filterPtr->clauses; clausePtr; + clausePtr = clausePtr->next) { + for (GlobPattern *globPtr = clausePtr->patterns; globPtr; + globPtr = globPtr->next) { + str = globPtr->pattern; + while (*str && (*str == '*' || *str == '.')) { + str++; + } + if (*str) { + type = [[NSString alloc] initWithUTF8String:str]; + if (![fileTypes containsObject:type]) { + [fileTypes addObject:type]; + } + [type release]; + } } - break; - case OPEN_TITLE: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - if (title) { - CFRelease(title); + for (MacFileType *mfPtr = clausePtr->macTypes; mfPtr; + mfPtr = mfPtr->next) { + if (mfPtr->type) { + type = NSFileTypeForHFSTypeCode(mfPtr->type); + if (![fileTypes containsObject:type]) { + [fileTypes addObject:type]; + } + } } - title = CFStringCreateWithBytes(NULL, (unsigned char*) - choice, choiceLen, kCFStringEncodingUTF8, false); - break; -#if 0 - case OPEN_TYPEVARIABLE: - typeVariablePtr = objv[i + 1]; - break; -#endif + } } } - - if (HandleInitialDirectory(interp, initialFile, initialDir, &dirRef, - &selectDesc, &initialDesc) != TCL_OK) { - goto end; - } - if (initialDesc.descriptorType == typeFSRef) { - initialPtr = &initialDesc; + [panel setAllowsMultipleSelection:multiple]; + if (cmdObj) { + callbackInfo = (FilePanelCallbackInfo *) + ckalloc(sizeof(FilePanelCallbackInfo)); + if (Tcl_IsShared(cmdObj)) { + cmdObj = Tcl_DuplicateObj(cmdObj); + } + Tcl_IncrRefCount(cmdObj); } -#if 0 - if (typeVariablePtr) { - initialtype = Tcl_GetVar(interp, Tcl_GetString(typeVariablePtr), 0); + callbackInfo->cmdObj = cmdObj; + callbackInfo->interp = interp; + callbackInfo->multiple = multiple; + parent = TkMacOSXDrawableWindow(((TkWindow *) tkwin)->window); + if (haveParentOption && parent && ![parent attachedSheet]) { + [panel beginSheetForDirectory:directory file:filename types:fileTypes + modalForWindow:parent modalDelegate:NSApp didEndSelector: + @selector(tkFilePanelDidEnd:returnCode:contextInfo:) + contextInfo:callbackInfo]; + returnCode = cmdObj ? NSAlertOtherReturn : + [NSApp runModalForWindow:panel]; + } else { + returnCode = [panel runModalForDirectory:directory file:filename + types:fileTypes]; + [NSApp tkFilePanelDidEnd:panel returnCode:returnCode + contextInfo:callbackInfo]; } -#endif - result = NavServicesGetFile(interp, &ofd, initialPtr, NULL, &selectDesc, - title, message, initialtype, multiple, OPEN_FILE, parent); - -#if 0 - if (typeVariablePtr) { - FileFilter *filterPtr = ofd.fl.filters; - int i = ofd.curType; + result = (returnCode != NSAlertErrorReturn) ? TCL_OK : TCL_ERROR; + if (typeVariablePtr && result == TCL_OK) { + /* + * The -typevariable option is not really supported. + */ - while (filterPtr && i-- > 0) { - filterPtr = filterPtr->next; - } - Tcl_SetVar(interp, Tcl_GetString(typeVariablePtr), filterPtr ? - filterPtr->name : "", 0); + Tcl_SetVar(interp, Tcl_GetString(typeVariablePtr), "", + TCL_GLOBAL_ONLY); } -#endif - end: - TkFreeFileFilters(&ofd.fl); - if (initialDesc.dataHandle) { - ChkErr(AEDisposeDesc, &initialDesc); - } - if (selectDesc.dataHandle) { - ChkErr(AEDisposeDesc, &selectDesc); - } - if (title) { - CFRelease(title); - } - if (message) { - CFRelease(message); - } + TkFreeFileFilters(&fl); return result; } @@ -407,8 +508,8 @@ end: * * Tk_GetSaveFileObjCmd -- * - * Same as Tk_GetOpenFileCmd but opens a "save file" dialog box - * instead + * This procedure implements the "save file" dialog box for the Mac + * platform. See the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -423,115 +524,154 @@ Tk_GetSaveFileObjCmd( ClientData clientData, /* Main window associated with interpreter. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *CONST objv[]) /* Argument objects. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - int i, result = TCL_ERROR; - char *initialFile = NULL; - Tk_Window parent = NULL; - AEDesc initialDesc = {typeNull, NULL}; - AEDesc *initialPtr = NULL; - FSRef dirRef; - CFStringRef title = NULL, message = NULL; - OpenFileData ofd; - static const char *saveOptionStrings[] = { - "-defaultextension", "-filetypes", "-initialdir", "-initialfile", - "-message", "-parent", "-title",/* "-typevariable",*/ NULL - }; - enum saveOptions { - SAVE_DEFAULT, SAVE_FILETYPES, SAVE_INITDIR, SAVE_INITFILE, - SAVE_MESSAGE, SAVE_PARENT, SAVE_TITLE,/* SAVE_TYPEVARIABLE,*/ - }; - - if (!fileDlgInited) { - InitFileDialogs(); - } - - TkInitFileFilters(&ofd.fl); - ofd.curType = 0; - ofd.usePopup = 0; - + Tk_Window tkwin = clientData; + char *str; + int i, result = TCL_ERROR, haveParentOption = 0; + int confirmOverwrite = 1; + int index, len; + FileFilterList fl; + Tcl_Obj *cmdObj = NULL; + FilePanelCallbackInfo callbackInfoStruct; + FilePanelCallbackInfo *callbackInfo = &callbackInfoStruct; + NSString *directory = nil, *filename = nil, *defaultType = nil; + NSString *message, *title, *type; + NSWindow *parent; + NSMutableArray *fileTypes = nil; + NSSavePanel *panel = [NSSavePanel savePanel]; + NSInteger returnCode = NSAlertErrorReturn; + + TkInitFileFilters(&fl); for (i = 1; i < objc; i += 2) { - char *choice, *string; - int index, choiceLen; - char *types; - if (Tcl_GetIndexFromObj(interp, objv[i], saveOptionStrings, "option", TCL_EXACT, &index) != TCL_OK) { goto end; } if (i + 1 == objc) { - string = Tcl_GetString(objv[i]); - Tcl_AppendResult(interp, "value for \"", string, "\" missing", + str = Tcl_GetString(objv[i]); + Tcl_AppendResult(interp, "value for \"", str, "\" missing", NULL); goto end; } switch (index) { - case SAVE_DEFAULT: - break; - case SAVE_FILETYPES: - types = Tcl_GetString(objv[i + 1]); - if (TkGetFileFilters(interp, &ofd.fl, types, 0) != TCL_OK) { - goto end; - } - break; - case SAVE_INITDIR: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - /* empty strings should be like no selection given */ - if (choiceLen && HandleInitialDirectory(interp, NULL, choice, - &dirRef, NULL, &initialDesc) != TCL_OK) { - goto end; - } - break; - case SAVE_INITFILE: - initialFile = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - /* empty strings should be like no selection given */ - if (choiceLen == 0) { - initialFile = NULL; - } - break; - case SAVE_MESSAGE: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - if (message) { - CFRelease(message); - } - message = CFStringCreateWithBytes(NULL, (unsigned char*) - choice, choiceLen, kCFStringEncodingUTF8, false); - break; - case SAVE_PARENT: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - parent = Tk_NameToWindow(interp, choice, - (Tk_Window) clientData); - if (parent == NULL) { - goto end; - } - break; - case SAVE_TITLE: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - if (title) { - CFRelease(title); - } - title = CFStringCreateWithBytes(NULL, (unsigned char*) - choice, choiceLen, kCFStringEncodingUTF8, false); - break; + case SAVE_DEFAULT: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + while (*str && (*str == '*' || *str == '.')) { + str++; + } + if (*str) { + defaultType = [[[NSString alloc] initWithUTF8String:str] + autorelease]; + } + break; + case SAVE_FILETYPES: + if (TkGetFileFilters(interp, &fl, objv[i + 1], 0) != TCL_OK) { + goto end; + } + break; + case SAVE_INITDIR: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + if (len) { + directory = [[[NSString alloc] initWithUTF8String:str] + autorelease]; + } + break; + case SAVE_INITFILE: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + if (len) { + filename = [[[NSString alloc] initWithUTF8String:str] + autorelease]; + } + break; + case SAVE_MESSAGE: + message = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [panel setMessage:message]; + [message release]; + break; + case SAVE_PARENT: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + tkwin = Tk_NameToWindow(interp, str, tkwin); + if (!tkwin) { + goto end; + } + haveParentOption = 1; + break; + case SAVE_TITLE: + title = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [panel setTitle:title]; + [title release]; + break; + case SAVE_TYPEVARIABLE: + break; + case SAVE_COMMAND: + cmdObj = objv[i+1]; + break; + case SAVE_CONFIRMOW: + if (Tcl_GetBooleanFromObj(interp, objv[i + 1], + &confirmOverwrite) != TCL_OK) { + goto end; + } + break; } } - - if (initialDesc.descriptorType == typeFSRef) { - initialPtr = &initialDesc; - } - result = NavServicesGetFile(interp, &ofd, initialPtr, initialFile, NULL, - title, message, NULL, false, SAVE_FILE, parent); - TkFreeFileFilters(&ofd.fl); -end: - if (initialDesc.dataHandle) { - ChkErr(AEDisposeDesc, &initialDesc); + if (fl.filters || defaultType) { + fileTypes = [NSMutableArray array]; + [fileTypes addObject:defaultType ? defaultType : (id)kUTTypeContent]; + for (FileFilter *filterPtr = fl.filters; filterPtr; + filterPtr = filterPtr->next) { + for (FileFilterClause *clausePtr = filterPtr->clauses; clausePtr; + clausePtr = clausePtr->next) { + for (GlobPattern *globPtr = clausePtr->patterns; globPtr; + globPtr = globPtr->next) { + str = globPtr->pattern; + while (*str && (*str == '*' || *str == '.')) { + str++; + } + if (*str) { + type = [[NSString alloc] initWithUTF8String:str]; + if (![fileTypes containsObject:type]) { + [fileTypes addObject:type]; + } + [type release]; + } + } + } + } + [panel setAllowedFileTypes:fileTypes]; + [panel setAllowsOtherFileTypes:YES]; } - if (title) { - CFRelease(title); + [panel setCanSelectHiddenExtension:YES]; + [panel setExtensionHidden:NO]; + if (cmdObj) { + callbackInfo = (FilePanelCallbackInfo *) + ckalloc(sizeof(FilePanelCallbackInfo)); + if (Tcl_IsShared(cmdObj)) { + cmdObj = Tcl_DuplicateObj(cmdObj); + } + Tcl_IncrRefCount(cmdObj); } - if (message) { - CFRelease(message); + callbackInfo->cmdObj = cmdObj; + callbackInfo->interp = interp; + callbackInfo->multiple = 0; + parent = TkMacOSXDrawableWindow(((TkWindow *) tkwin)->window); + if (haveParentOption && parent && ![parent attachedSheet]) { + [panel beginSheetForDirectory:directory file:filename + modalForWindow:parent modalDelegate:NSApp didEndSelector: + @selector(tkFilePanelDidEnd:returnCode:contextInfo:) + contextInfo:callbackInfo]; + returnCode = cmdObj ? NSAlertOtherReturn : + [NSApp runModalForWindow:panel]; + } else { + returnCode = [panel runModalForDirectory:directory file:filename]; + [NSApp tkFilePanelDidEnd:panel returnCode:returnCode + contextInfo:callbackInfo]; } + result = (returnCode != NSAlertErrorReturn) ? TCL_OK : TCL_ERROR; +end: + TkFreeFileFilters(&fl); return result; } @@ -540,9 +680,9 @@ end: * * Tk_ChooseDirectoryObjCmd -- * - * This procedure implements the "tk_chooseDirectory" dialog box - * for the Windows platform. See the user documentation for details - * on what it does. + * This procedure implements the "tk_chooseDirectory" dialog box for the + * MacOS X platform. See the user documentation for details on what it + * does. * * Results: * See user documentation. @@ -554,812 +694,192 @@ end: */ int -Tk_ChooseDirectoryObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* Main window associated with interpreter. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj *CONST objv[]; /* Argument objects. */ +Tk_ChooseDirectoryObjCmd( + ClientData clientData, /* Main window associated with interpreter. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - int i, result = TCL_ERROR; - Tk_Window parent = NULL; - AEDesc initialDesc = {typeNull, NULL}, *initialPtr = NULL; - FSRef dirRef; - CFStringRef message = NULL, title = NULL; - OpenFileData ofd; - static const char *chooseOptionStrings[] = { - "-initialdir", "-message", "-mustexist", "-parent", "-title", NULL - }; - enum chooseOptions { - CHOOSE_INITDIR, CHOOSE_MESSAGE, CHOOSE_MUSTEXIST, CHOOSE_PARENT, - CHOOSE_TITLE - }; - - if (!fileDlgInited) { - InitFileDialogs(); - } + Tk_Window tkwin = clientData; + char *str; + int i, result = TCL_ERROR, haveParentOption = 0; + int index, len, mustexist = 0; + Tcl_Obj *cmdObj = NULL; + FilePanelCallbackInfo callbackInfoStruct; + FilePanelCallbackInfo *callbackInfo = &callbackInfoStruct; + NSString *directory = nil, *filename = nil; + NSString *message, *title; + NSWindow *parent; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + NSInteger returnCode = NSAlertErrorReturn; for (i = 1; i < objc; i += 2) { - char *choice; - int index, choiceLen; - char *string; - if (Tcl_GetIndexFromObj(interp, objv[i], chooseOptionStrings, "option", TCL_EXACT, &index) != TCL_OK) { goto end; } if (i + 1 == objc) { - string = Tcl_GetString(objv[i]); - Tcl_AppendResult(interp, "value for \"", string, "\" missing", - NULL); + str = Tcl_GetString(objv[i]); + Tcl_AppendResult(interp, "value for \"", str, "\" missing", NULL); goto end; } switch (index) { - case CHOOSE_INITDIR: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - if (choiceLen && HandleInitialDirectory(interp, NULL, choice, - &dirRef, NULL, &initialDesc) != TCL_OK) { - goto end; - } - break; - case CHOOSE_MESSAGE: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - if (message) { - CFRelease(message); - } - message = CFStringCreateWithBytes(NULL, (unsigned char*) - choice, choiceLen, kCFStringEncodingUTF8, false); - break; - case CHOOSE_PARENT: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - parent = Tk_NameToWindow(interp, choice, - (Tk_Window) clientData); - if (parent == NULL) { - goto end; - } - break; - case CHOOSE_TITLE: - choice = Tcl_GetStringFromObj(objv[i + 1], &choiceLen); - if (title) { - CFRelease(title); - } - title = CFStringCreateWithBytes(NULL, (unsigned char*) choice, - choiceLen, kCFStringEncodingUTF8, false); - break; - } - } - - TkInitFileFilters(&ofd.fl); - ofd.usePopup = 0; - if (initialDesc.descriptorType == typeFSRef) { - initialPtr = &initialDesc; - } - result = NavServicesGetFile(interp, &ofd, initialPtr, NULL, NULL, title, - message, NULL, false, CHOOSE_FOLDER, parent); - TkFreeFileFilters(&ofd.fl); -end: - if (initialDesc.dataHandle) { - ChkErr(AEDisposeDesc, &initialDesc); - } - if (title) { - CFRelease(title); - } - if (message) { - CFRelease(message); - } - return result; -} - -/* - *---------------------------------------------------------------------- - * - * HandleInitialDirectory -- - * - * Helper for -initialdir setup. - * - * Results: - * Tcl result. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -int -HandleInitialDirectory( - Tcl_Interp *interp, - char *initialFile, - char *initialDir, - FSRef *dirRef, - AEDescList *selectDescPtr, - AEDesc *dirDescPtr) -{ - Tcl_DString ds; - OSStatus err; - Boolean isDirectory; - char *dirName = NULL; - int result = TCL_ERROR; - - if (initialDir) { - dirName = Tcl_TranslateFileName(interp, initialDir, &ds); - if (dirName == NULL) { - goto end; - } - err = ChkErr(FSPathMakeRef, (unsigned char*) dirName, - dirRef, &isDirectory); - if (err != noErr) { - Tcl_AppendResult(interp, "bad directory \"", initialDir, "\"", - NULL); - goto end; - } - if (!isDirectory) { - Tcl_AppendResult(interp, "-intialdir \"", - initialDir, " is a file, not a directory.\"", NULL); - goto end; - } - ChkErr(AECreateDesc, typeFSRef, dirRef, sizeof(*dirRef), dirDescPtr); - } - - if (initialFile && selectDescPtr) { - FSRef fileRef; - AEDesc fileDesc; - char *namePtr; - - if (initialDir) { - Tcl_DStringAppend(&ds, "/", 1); - Tcl_DStringAppend(&ds, initialFile, -1); - namePtr = Tcl_DStringValue(&ds); - } else { - namePtr = initialFile; - } - - ChkErr(AECreateList, NULL, 0, false, selectDescPtr); - - err = ChkErr(FSPathMakeRef, (unsigned char*) namePtr, &fileRef, - &isDirectory); - if (err != noErr) { - Tcl_AppendResult(interp, "bad initialfile \"", initialFile, - "\" file does not exist.", NULL); - goto end; - } - ChkErr(AECreateDesc, typeFSRef, &fileRef, sizeof(fileRef), &fileDesc); - ChkErr(AEPutDesc, selectDescPtr, 1, &fileDesc); - ChkErr(AEDisposeDesc, &fileDesc); - } - result = TCL_OK; -end: - if (dirName) { - Tcl_DStringFree(&ds); - } - return result; -} - -/* - *---------------------------------------------------------------------- - * - * InitFileDialogs -- - * - * Initialize file dialog subsystem. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -void -InitFileDialogs(void) -{ - fileDlgInited = 1; - openFileFilterUPP = NewNavObjectFilterUPP(OpenFileFilterProc); - openFileEventUPP = NewNavEventUPP(OpenEventProc); -} - -/* - *---------------------------------------------------------------------- - * - * NavServicesGetFile -- - * - * Common wrapper for NavServices API. - * - * Results: - * Tcl result. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -int -NavServicesGetFile( - Tcl_Interp *interp, - OpenFileData *ofdPtr, - AEDesc *initialDescPtr, - char *initialFile, - AEDescList *selectDescPtr, - CFStringRef title, - CFStringRef message, - const char *initialtype, - int multiple, - int isOpen, - Tk_Window parent) -{ - NavHandlerUserData data; - NavDialogCreationOptions options; - NavDialogRef dialogRef = NULL; - CFStringRef * menuItemNames = NULL; - OSStatus err; - Tcl_Obj *theResult = NULL; - int result = TCL_ERROR; - - bzero(&data, sizeof(data)); - err = NavGetDefaultDialogCreationOptions(&options); - if (err != noErr) { - return result; - } - options.optionFlags = kNavDontAutoTranslate | kNavDontAddTranslateItems - | kNavSupportPackages | kNavAllFilesInPopup; - if (multiple) { - options.optionFlags |= kNavAllowMultipleFiles; - } - options.modality = kWindowModalityAppModal; - if (parent && ((TkWindow*)parent)->window != None && - TkMacOSXHostToplevelExists(parent)) { - options.parentWindow = TkMacOSXDrawableWindow(Tk_WindowId(parent)); - TK_IF_HI_TOOLBOX (5, - /* - * Impossible to modify dialog modality with the Cocoa-based - * NavServices implementation. - */ - ) TK_ELSE_HI_TOOLBOX (5, - if (options.parentWindow) { - options.modality = kWindowModalityWindowModal; - data.sheet = 1; - } - ) TK_ENDIF - } - - /* - * Now process the selection list. We have to use the popupExtension - * to fill the menu. - */ - if (ofdPtr && ofdPtr->usePopup) { - FileFilter *filterPtr; - - filterPtr = ofdPtr->fl.filters; - if (filterPtr == NULL) { - ofdPtr->usePopup = 0; - } - } - if (ofdPtr && ofdPtr->usePopup) { - FileFilter *filterPtr; - int index = 0; - ofdPtr->curType = 0; - - menuItemNames = (CFStringRef *) ckalloc(ofdPtr->fl.numFilters - * sizeof(CFStringRef)); - - for (filterPtr = ofdPtr->fl.filters; filterPtr != NULL; - filterPtr = filterPtr->next, index++) { - menuItemNames[index] = CFStringCreateWithCString(NULL, - filterPtr->name, kCFStringEncodingUTF8); - if (initialtype && strcmp(filterPtr->name, initialtype) == 0) { - ofdPtr->initialType = index; - } - } - options.popupExtension = CFArrayCreate(NULL, - (const void **) menuItemNames, ofdPtr->fl.numFilters, NULL); - } else { - options.optionFlags |= kNavNoTypePopup; - options.popupExtension = NULL; - } - options.clientName = CFSTR("Wish"); - options.message = message; - options.windowTitle = title; - if (initialFile) { - options.saveFileName = CFStringCreateWithCString(NULL, - initialFile, kCFStringEncodingUTF8); - } else { - options.saveFileName = NULL; - } - if (isOpen == OPEN_FILE) { - data.ofdPtr = ofdPtr; - err = ChkErr(NavCreateGetFileDialog, &options, NULL, - openFileEventUPP, NULL, openFileFilterUPP, &data, &dialogRef); - } else if (isOpen == SAVE_FILE) { - err = ChkErr(NavCreatePutFileDialog, &options, 'TEXT', 'WIsH', - openFileEventUPP, &data, &dialogRef); - } else if (isOpen == CHOOSE_FOLDER) { - err = ChkErr(NavCreateChooseFolderDialog, &options, - openFileEventUPP, openFileFilterUPP, &data, &dialogRef); - } - if (err == noErr && dialogRef) { - if (initialDescPtr) { - ChkErr(NavCustomControl, dialogRef, kNavCtlSetLocation, - initialDescPtr); - } - if (selectDescPtr && selectDescPtr->descriptorType != typeNull) { - ChkErr(NavCustomControl, dialogRef, kNavCtlSetSelection, - selectDescPtr); - } - TkMacOSXTrackingLoop(1); - err = ChkErr(NavDialogRun, dialogRef); - if (err == noErr) { - if (data.sheet) { - data.dialogWindow = NavDialogGetWindow(dialogRef); - ChkErr(GetWindowModality, data.dialogWindow, - &data.origModality, &data.origUnavailWindow); - ChkErr(SetWindowModality, data.dialogWindow, - kWindowModalityAppModal, NULL); - ChkErr(RunAppModalLoopForWindow, data.dialogWindow); - } - err = data.err; - } - TkMacOSXTrackingLoop(0); - } - - /* - * Most commands assume that the file dialogs return a single - * item, not a list. So only build a list if multiple is true... - */ - if (err == noErr) { - if (multiple) { - theResult = Tcl_NewListObj(0, NULL); - } else { - theResult = Tcl_NewObj(); - } - if (!theResult) { - err = memFullErr; - } - } - if (err == noErr && data.reply.validRecord) { - AEDesc resultDesc; - long count; - FSRef fsRef; - char pathPtr[PATH_MAX + 1]; - - err = ChkErr(AECountItems, &data.reply.selection, &count); - if (err == noErr) { - long i; - - for (i = 1; i <= count; i++) { - err = ChkErr(AEGetNthDesc, &data.reply.selection, i, - typeFSRef, NULL, &resultDesc); - if (err == noErr) { - err = ChkErr(AEGetDescData, &resultDesc, &fsRef, - sizeof(fsRef)); - if (err == noErr) { - err = ChkErr(FSRefMakePath, &fsRef, (unsigned char*) - pathPtr, PATH_MAX + 1); - if (err == noErr) { - int pathValid = 0; - - if (isOpen == SAVE_FILE) { - if (data.saveNameRef) { - char saveName [PATH_MAX + 1]; - - if (CFStringGetCString(data.saveNameRef, - saveName, PATH_MAX + 1, - kCFStringEncodingUTF8)) { - if (strlen(pathPtr) + strlen(saveName) - < PATH_MAX) { - strcat(pathPtr, "/"); - strcat(pathPtr, saveName); - pathValid = 1; - } else { - TkMacOSXDbgMsg("Path name too " - "long"); - } - } else { - TkMacOSXDbgMsg("CFStringGetCString " - "failed"); - } - } else { - TkMacOSXDbgMsg("NavDialogGetSaveFileName " - "failed"); - } - } else { - pathValid = 1; - } - if (pathValid) { - if (multiple) { - Tcl_ListObjAppendElement(interp, theResult, - Tcl_NewStringObj(pathPtr, -1)); - } else { - Tcl_SetStringObj(theResult, pathPtr, -1); - } - } - } - } - ChkErr(AEDisposeDesc, &resultDesc); - } - } - } - Tcl_SetObjResult(interp, theResult); - result = TCL_OK; - } else if (err == userCanceledErr) { - Tcl_ResetResult(interp); - result = TCL_OK; - } - - /* - * Clean up any allocated memory. - */ - - if (data.reply.validRecord) { - ChkErr(NavDisposeReply, &data.reply); - } - if (data.saveNameRef) { - CFRelease(data.saveNameRef); - } - if (options.saveFileName) { - CFRelease(options.saveFileName); - } - if (options.clientName) { - CFRelease(options.clientName); - } - if (menuItemNames) { - int i; - for (i = 0; i < ofdPtr->fl.numFilters; i++) { - CFRelease(menuItemNames[i]); - } - ckfree((void *)menuItemNames); - } - if (options.popupExtension) { - CFRelease(options.popupExtension); - } - return result; -} - -/* - *---------------------------------------------------------------------- - * - * OpenEventProc -- - * - * NavServices event handling callback. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -pascal void -OpenEventProc( - NavEventCallbackMessage callBackSelector, - NavCBRecPtr callBackParams, - NavCallBackUserData callBackUD) -{ - NavHandlerUserData *data = (NavHandlerUserData*) callBackUD; - OpenFileData *ofd = data->ofdPtr; - - switch (callBackSelector) { - case kNavCBStart: - if (ofd && ofd->initialType >= 0) { - /* Select initial filter */ - FileFilter *filterPtr = ofd->fl.filters; - int i = ofd->initialType; - - while (filterPtr && i-- > 0) { - filterPtr = filterPtr->next; - } - if (filterPtr) { - NavMenuItemSpec selectItem; - - selectItem.version = kNavMenuItemSpecVersion; - selectItem.menuCreator = 0; - selectItem.menuType = ofd->initialType; - selectItem.menuItemName[0] = strlen(filterPtr->name); - strncpy((char*) &selectItem.menuItemName[1], - filterPtr->name, 255); - ChkErr(NavCustomControl, callBackParams->context, - kNavCtlSelectCustomType, &selectItem); - } + case CHOOSE_INITDIR: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + if (len) { + directory = [[[NSString alloc] initWithUTF8String:str] + autorelease]; } break; - case kNavCBPopupMenuSelect: - ofd->curType = ((NavMenuItemSpec *) - callBackParams->eventData.eventDataParms.param)->menuType; + case CHOOSE_MESSAGE: + message = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [panel setMessage:message]; + [message release]; break; - case kNavCBAccept: - case kNavCBCancel: - if (data->sheet) { - ChkErr(QuitAppModalLoopForWindow, data->dialogWindow); - ChkErr(SetWindowModality, data->dialogWindow, - data->origModality, data->origUnavailWindow); + case CHOOSE_MUSTEXIST: + if (Tcl_GetBooleanFromObj(interp, objv[i + 1], + &mustexist) != TCL_OK) { + goto end; } break; - case kNavCBUserAction: - if (data->reply.validRecord) { - ChkErr(NavDisposeReply, &data->reply); - data->reply.validRecord = 0; - } - data->err = NavDialogGetReply(callBackParams->context, - &data->reply); - if (callBackParams->userAction == kNavUserActionSaveAs) { - data->saveNameRef = NavDialogGetSaveFileName( - callBackParams->context); - if (data->saveNameRef) { - CFRetain(data->saveNameRef); - } + case CHOOSE_PARENT: + str = Tcl_GetStringFromObj(objv[i + 1], &len); + tkwin = Tk_NameToWindow(interp, str, tkwin); + if (!tkwin) { + goto end; } + haveParentOption = 1; break; - case kNavCBTerminate: - NavDialogDispose(callBackParams->context); + case CHOOSE_TITLE: + title = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [panel setTitle:title]; + [title release]; break; - case kNavCBEvent: - TkMacOSXRunTclEventLoop(); + case CHOOSE_COMMAND: + cmdObj = objv[i+1]; break; + } } -} - -/* - *---------------------------------------------------------------------- - * - * OpenFileFilterProc -- - * - * NavServices file filter callback. - * - * Results: - * Whether to use the file in question. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -pascal Boolean -OpenFileFilterProc( - AEDesc* theItem, void* info, - NavCallBackUserData callBackUD, - NavFilterModes filterMode) -{ - OpenFileData *ofdPtr = ((NavHandlerUserData*) callBackUD)->ofdPtr; - int result = MATCHED; - - if (ofdPtr && ofdPtr->usePopup) { - if (ofdPtr->fl.numFilters > 0) { - if ((theItem->descriptorType == typeFSS) - || (theItem->descriptorType == typeFSRef)) { - NavFileOrFolderInfo* theInfo = (NavFileOrFolderInfo *) info; - char fileName[256]; - - if (!theInfo->isFolder) { - OSType fileType; - StringPtr fileNamePtr = NULL; - Tcl_DString fileNameDString; - int i; - FileFilter *filterPtr; - - fileType = - theInfo->fileAndFolder.fileInfo.finderInfo.fdType; - Tcl_DStringInit (&fileNameDString); - - if (theItem->descriptorType == typeFSS) { - int len; - fileNamePtr = ((FSSpec *) *theItem->dataHandle)->name; - len = fileNamePtr[0]; - strncpy(fileName, (char*) fileNamePtr + 1, len); - fileName[len] = '\0'; - fileNamePtr = (unsigned char*) fileName; - } else if ((theItem->descriptorType == typeFSRef)) { - OSStatus err; - FSRef *theRef = (FSRef *) *theItem->dataHandle; - HFSUniStr255 uniFileName; - err = ChkErr(FSGetCatalogInfo, theRef, kFSCatInfoNone, - NULL, &uniFileName, NULL, NULL); - - if (err == noErr) { - Tcl_UniCharToUtfDString ( - (Tcl_UniChar *) uniFileName.unicode, - uniFileName.length, &fileNameDString); - fileNamePtr = (unsigned char*) - Tcl_DStringValue(&fileNameDString); - } - } - if (ofdPtr->usePopup) { - i = ofdPtr->curType; - for (filterPtr = ofdPtr->fl.filters; - filterPtr && i > 0; i--) { - filterPtr = filterPtr->next; - } - if (filterPtr) { - result = MatchOneType(fileNamePtr, fileType, - ofdPtr, filterPtr); - } else { - result = UNMATCHED; - } - } else { - /* - * We are not using the popup menu. In this case, the - * file is considered matched if it matches any of - * the file filters. - */ - - result = UNMATCHED; - for (filterPtr = ofdPtr->fl.filters; filterPtr; - filterPtr = filterPtr->next) { - if (MatchOneType(fileNamePtr, fileType, - ofdPtr, filterPtr) == MATCHED) { - result = MATCHED; - break; - } - } - } - Tcl_DStringFree (&fileNameDString); - } - } + [panel setPrompt:@"Choose"]; + [panel setCanChooseFiles:NO]; + [panel setCanChooseDirectories:YES]; + [panel setCanCreateDirectories:!mustexist]; + if (cmdObj) { + callbackInfo = (FilePanelCallbackInfo *) + ckalloc(sizeof(FilePanelCallbackInfo)); + if (Tcl_IsShared(cmdObj)) { + cmdObj = Tcl_DuplicateObj(cmdObj); } + Tcl_IncrRefCount(cmdObj); + } + callbackInfo->cmdObj = cmdObj; + callbackInfo->interp = interp; + callbackInfo->multiple = 0; + parent = TkMacOSXDrawableWindow(((TkWindow *) tkwin)->window); + if (haveParentOption && parent && ![parent attachedSheet]) { + [panel beginSheetForDirectory:directory file:filename + modalForWindow:parent modalDelegate:NSApp didEndSelector: + @selector(tkFilePanelDidEnd:returnCode:contextInfo:) + contextInfo:callbackInfo]; + returnCode = cmdObj ? NSAlertOtherReturn : + [NSApp runModalForWindow:panel]; + } else { + returnCode = [panel runModalForDirectory:directory file:filename]; + [NSApp tkFilePanelDidEnd:panel returnCode:returnCode + contextInfo:callbackInfo]; } - return (result == MATCHED); + result = (returnCode != NSAlertErrorReturn) ? TCL_OK : TCL_ERROR; +end: + return result; } /* *---------------------------------------------------------------------- * - * MatchOneType -- + * TkAboutDlg -- * - * Match a file with one file type in the list of file types. + * Displays the default Tk About box. * * Results: - * Returns MATCHED if the file matches with the file type; returns - * UNMATCHED otherwise. + * None. * * Side effects: - * None + * None. * *---------------------------------------------------------------------- */ -Boolean -MatchOneType( - StringPtr fileNamePtr, /* Name of the file */ - OSType fileType, /* Type of the file, 0 means there was no - * specified type. */ - OpenFileData *ofdPtr, /* Information about this file dialog */ - FileFilter *filterPtr) /* Match the file described by pb against this - * filter */ +void +TkAboutDlg(void) { - FileFilterClause *clausePtr; - - /* - * A file matches with a file type if it matches with at least one - * clause of the type. - * - * If the clause has both glob patterns and ostypes, the file must - * match with at least one pattern AND at least one ostype. - * - * If the clause has glob patterns only, the file must match with at least - * one pattern. - * - * If the clause has mac types only, the file must match with at least - * one mac type. - * - * If the clause has neither glob patterns nor mac types, it's - * considered an error. - */ - - for (clausePtr = filterPtr->clauses; clausePtr; - clausePtr = clausePtr->next) { - int macMatched = 0; - int globMatched = 0; - GlobPattern *globPtr; - MacFileType *mfPtr; - - if (clausePtr->patterns == NULL) { - globMatched = 1; - } - if (clausePtr->macTypes == NULL) { - macMatched = 1; - } - - for (globPtr = clausePtr->patterns; globPtr; - globPtr = globPtr->next) { - char *q, *ext; - - if (fileNamePtr == NULL) { - continue; - } - ext = globPtr->pattern; - - if (ext[0] == '\0') { - /* - * We don't want any extensions: OK if the filename doesn't - * have "." in it - */ - - for (q = (char*) fileNamePtr; *q; q++) { - if (*q == '.') { - goto glob_unmatched; - } - } - goto glob_matched; - } - - if (Tcl_StringMatch((char*) fileNamePtr, ext)) { - goto glob_matched; - } else { - goto glob_unmatched; - } - - glob_unmatched: - continue; - - glob_matched: - globMatched = 1; - break; - } - - for (mfPtr = clausePtr->macTypes; mfPtr; mfPtr = mfPtr->next) { - if (fileType == mfPtr->type) { - macMatched = 1; - break; - } - } - - /* - * On Mac OS X, it is not uncommon for files to have NO - * file type. But folks with Tcl code on Classic MacOS pretty - * much assume that a generic file will have type TEXT. So - * if we were strict about matching types when the source file - * had NO type set, they would have to add another rule always - * with no fileType. To avoid that, we pass the macMatch side - * of the test if no fileType is set. - */ - - if (globMatched && (macMatched || (fileType == 0))) { - return MATCHED; - } + NSImage *image; + NSString *path = [NSApp tkFrameworkImagePath:@"Tk.tiff"]; + if (path) { + image = [[[NSImage alloc] initWithContentsOfFile:path] autorelease]; + } else { + image = [NSApp applicationIconImage]; } - - return UNMATCHED; + NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; + [dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; + [dateFormatter setDateFormat:@"Y"]; + NSString *year = [dateFormatter stringFromDate:[NSDate date]]; + [dateFormatter release]; + NSMutableParagraphStyle *style = [[[NSParagraphStyle defaultParagraphStyle] + mutableCopy] autorelease]; + [style setAlignment:NSCenterTextAlignment]; + NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: + @"Tcl & Tk", @"ApplicationName", + @"Tcl " TCL_VERSION " & Tk " TK_VERSION, @"ApplicationVersion", + @TK_PATCH_LEVEL, @"Version", + image, @"ApplicationIcon", + [NSString stringWithFormat:@"Copyright %1$C 1987-%2$@.", 0xA9, + year], @"Copyright", + [[[NSAttributedString alloc] initWithString: + [NSString stringWithFormat: + @"%1$C 1987-%2$@ Tcl Core Team." "\n\n" + "%1$C 2002-%2$@ Daniel A. Steffen." "\n\n" + "%1$C 2001-2009 Apple Inc." "\n\n" + "%1$C 2001-2002 Jim Ingham & Ian Reid" "\n\n" + "%1$C 1998-2000 Jim Ingham & Ray Johnson" "\n\n" + "%1$C 1998-2000 Scriptics Inc." "\n\n" + "%1$C 1996-1997 Sun Microsystems Inc.", 0xA9, year] attributes: + [NSDictionary dictionaryWithObject:style + forKey:NSParagraphStyleAttributeName]] autorelease], @"Credits", + nil]; + [NSApp orderFrontStandardAboutPanelWithOptions:options]; } /* *---------------------------------------------------------------------- * - * TkAboutDlg -- + * TkMacOSXStandardAboutPanelObjCmd -- * - * Displays the default Tk About box. This code uses Macintosh - * resources to define the content of the About Box. + * Implements the ::tk::mac::standardAboutPanel command. * * Results: - * None. + * A standard Tcl result. * * Side effects: - * None. + * none * *---------------------------------------------------------------------- */ -void -TkAboutDlg(void) +int +TkMacOSXStandardAboutPanelObjCmd( + ClientData clientData, /* Unused. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - DialogPtr aboutDlog; - WindowRef windowRef; - short itemHit = -9; - - aboutDlog = GetNewDialog(TK_DEFAULT_ABOUT, NULL, (void *) (-1)); - if (!aboutDlog) { - return; + if (objc > 1) { + Tcl_WrongNumArgs(interp, 1, objv, NULL); + return TCL_ERROR; } - windowRef = GetDialogWindow(aboutDlog); - SelectWindow(windowRef); - TkMacOSXTrackingLoop(1); - while (itemHit != 1) { - ModalDialog(NULL, &itemHit); - } - TkMacOSXTrackingLoop(0); - DisposeDialog(aboutDlog); - SelectWindow(ActiveNonFloatingWindow()); + [NSApp orderFrontStandardAboutPanelWithOptions:nil]; + return TCL_OK; } /* @@ -1383,224 +903,99 @@ Tk_MessageBoxObjCmd( ClientData clientData, /* Main window associated with interpreter. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *CONST objv[]) /* Argument objects. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - Tk_Window tkwin = (Tk_Window) clientData; - AlertStdCFStringAlertParamRec paramCFStringRec; - AlertType alertType; - DialogRef dialogRef; - CFStringRef messageTextCF = NULL, finemessageTextCF = NULL; - OSStatus err; - SInt16 itemHit; - Boolean haveDefaultOption = false, haveParentOption = false; + Tk_Window tkwin = clientData; char *str; - int index, defaultButtonIndex; - int defaultNativeButtonIndex; /* 1, 2, 3: right to left */ - int typeIndex, i, indexDefaultOption = 0, result = TCL_ERROR; - - static const char *movableAlertStrings[] = { - "-default",/* "-detail",*/ "-icon", "-message", "-parent", "-title", - "-type", NULL - }; - static const char *movableTypeStrings[] = { - "abortretryignore", "ok", "okcancel", "retrycancel", "yesno", - "yesnocancel", NULL - }; - static const char *movableButtonStrings[] = { - "abort", "retry", "ignore", "ok", "cancel", "yes", "no", NULL - }; - static const char *movableIconStrings[] = { - "error", "info", "question", "warning", NULL - }; - enum movableAlertOptions { - ALERT_DEFAULT,/* ALERT_DETAIL,*/ ALERT_ICON, ALERT_MESSAGE, ALERT_PARENT, - ALERT_TITLE, ALERT_TYPE - }; - enum movableTypeOptions { - TYPE_ABORTRETRYIGNORE, TYPE_OK, TYPE_OKCANCEL, TYPE_RETRYCANCEL, - TYPE_YESNO, TYPE_YESNOCANCEL - }; - enum movableButtonOptions { - TEXT_ABORT, TEXT_RETRY, TEXT_IGNORE, TEXT_OK, TEXT_CANCEL, TEXT_YES, - TEXT_NO - }; - enum movableIconOptions { - ICON_ERROR, ICON_INFO, ICON_QUESTION, ICON_WARNING - }; - - /* - * Need to map from 'movableButtonStrings' and its corresponding integer, - * index to the native button index, which is 1, 2, 3, from right to left. - * This is necessary to do for each separate '-type' of button sets. - */ - - short buttonIndexAndTypeToNativeButtonIndex[][7] = { - /* abort retry ignore ok cancel yes no */ - {1, 2, 3, 0, 0, 0, 0}, /* abortretryignore */ - {0, 0, 0, 1, 0, 0, 0}, /* ok */ - {0, 0, 0, 1, 2, 0, 0}, /* okcancel */ - {0, 1, 0, 0, 2, 0, 0}, /* retrycancel */ - {0, 0, 0, 0, 0, 1, 2}, /* yesno */ - {0, 0, 0, 0, 3, 1, 2}, /* yesnocancel */ - }; - - /* - * Need also the inverse mapping, from native button (1, 2, 3) to the - * descriptive button text string index. - */ - - short nativeButtonIndexAndTypeToButtonIndex[][4] = { - {-1, 0, 1, 2}, /* abortretryignore */ - {-1, 3, 0, 0}, /* ok */ - {-1, 3, 4, 0}, /* okcancel */ - {-1, 1, 4, 0}, /* retrycancel */ - {-1, 5, 6, 0}, /* yesno */ - {-1, 5, 6, 4}, /* yesnocancel */ - }; - - alertType = kAlertPlainAlert; + int i, result = TCL_ERROR, haveParentOption = 0; + int index, typeIndex, iconIndex, indexDefaultOption = 0; + int defaultNativeButtonIndex = 1; /* 1, 2, 3: right to left */ + Tcl_Obj *cmdObj = NULL; + AlertCallbackInfo callbackInfoStruct, *callbackInfo = &callbackInfoStruct; + NSString *message, *title; + NSWindow *parent; + NSArray *buttons; + NSAlert *alert = [NSAlert new]; + NSInteger returnCode = NSAlertErrorReturn; + + iconIndex = ICON_INFO; typeIndex = TYPE_OK; - - ChkErr(GetStandardAlertDefaultParams, ¶mCFStringRec, - kStdCFStringAlertVersionOne); - paramCFStringRec.movable = true; - paramCFStringRec.helpButton = false; - paramCFStringRec.defaultButton = kAlertStdAlertOKButton; - paramCFStringRec.cancelButton = kAlertStdAlertCancelButton; - for (i = 1; i < objc; i += 2) { - int iconIndex; - char *string; - - if (Tcl_GetIndexFromObj(interp, objv[i], movableAlertStrings, "option", + if (Tcl_GetIndexFromObj(interp, objv[i], alertOptionStrings, "option", TCL_EXACT, &index) != TCL_OK) { goto end; } if (i + 1 == objc) { - string = Tcl_GetString(objv[i]); - Tcl_AppendResult(interp, "value for \"", string, "\" missing", - NULL); + str = Tcl_GetString(objv[i]); + Tcl_AppendResult(interp, "value for \"", str, "\" missing", NULL); goto end; } - switch (index) { - case ALERT_DEFAULT: - /* - * Need to postpone processing of this option until we are - * sure to know the '-type' as well. - */ - haveDefaultOption = true; - indexDefaultOption = i; - break; + case ALERT_DEFAULT: + /* + * Need to postpone processing of this option until we are sure to + * know the '-type' as well. + */ -#if 0 - case ALERT_DETAIL: - str = Tcl_GetString(objv[i + 1]); - if (finemessageTextCF) { - CFRelease(finemessageTextCF); - } - finemessageTextCF = CFStringCreateWithCString(NULL, str, - kCFStringEncodingUTF8); - break; -#endif + indexDefaultOption = i; + break; - case ALERT_ICON: - if (Tcl_GetIndexFromObj(interp, objv[i + 1], - movableIconStrings, "value", TCL_EXACT, &iconIndex) - != TCL_OK) { - goto end; - } - switch (iconIndex) { - case ICON_ERROR: - alertType = kAlertStopAlert; - break; - case ICON_INFO: - alertType = kAlertNoteAlert; - break; - case ICON_QUESTION: - alertType = kAlertCautionAlert; - break; - case ICON_WARNING: - alertType = kAlertCautionAlert; - break; - } - break; + case ALERT_DETAIL: + message = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [alert setInformativeText:message]; + [message release]; + break; - case ALERT_MESSAGE: - str = Tcl_GetString(objv[i + 1]); - if (messageTextCF) { - CFRelease(messageTextCF); - } - messageTextCF = CFStringCreateWithCString(NULL, str, - kCFStringEncodingUTF8); - break; + case ALERT_ICON: + if (Tcl_GetIndexFromObj(interp, objv[i + 1], alertIconStrings, + "value", TCL_EXACT, &iconIndex) != TCL_OK) { + goto end; + } + break; - case ALERT_PARENT: - str = Tcl_GetString(objv[i + 1]); - tkwin = Tk_NameToWindow(interp, str, tkwin); - if (tkwin == NULL) { - goto end; - } - if (((TkWindow*)tkwin)->window != None && - TkMacOSXHostToplevelExists(tkwin)) { - haveParentOption = true; - } - break; + case ALERT_MESSAGE: + message = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [alert setMessageText:message]; + [message release]; + break; - case ALERT_TITLE: - break; + case ALERT_PARENT: + str = Tcl_GetString(objv[i + 1]); + tkwin = Tk_NameToWindow(interp, str, tkwin); + if (!tkwin) { + goto end; + } + haveParentOption = 1; + break; - case ALERT_TYPE: - if (Tcl_GetIndexFromObj(interp, objv[i + 1],\ - movableTypeStrings, "value", TCL_EXACT, &typeIndex) - != TCL_OK) { - goto end; - } - switch (typeIndex) { - case TYPE_ABORTRETRYIGNORE: - paramCFStringRec.defaultText = CFSTR("Abort"); - paramCFStringRec.cancelText = CFSTR("Retry"); - paramCFStringRec.otherText = CFSTR("Ignore"); - paramCFStringRec.cancelButton = - kAlertStdAlertOtherButton; - break; - case TYPE_OK: - paramCFStringRec.defaultText = CFSTR("OK"); - break; - case TYPE_OKCANCEL: - paramCFStringRec.defaultText = CFSTR("OK"); - paramCFStringRec.cancelText = CFSTR("Cancel"); - break; - case TYPE_RETRYCANCEL: - paramCFStringRec.defaultText = CFSTR("Retry"); - paramCFStringRec.cancelText = CFSTR("Cancel"); - break; - case TYPE_YESNO: - paramCFStringRec.defaultText = CFSTR("Yes"); - paramCFStringRec.cancelText = CFSTR("No"); - break; - case TYPE_YESNOCANCEL: - paramCFStringRec.defaultText = CFSTR("Yes"); - paramCFStringRec.cancelText = CFSTR("No"); - paramCFStringRec.otherText = CFSTR("Cancel"); - paramCFStringRec.cancelButton = - kAlertStdAlertOtherButton; - break; - } - break; + case ALERT_TITLE: + title = [[NSString alloc] initWithUTF8String: + Tcl_GetString(objv[i + 1])]; + [[alert window] setTitle:title]; + [title release]; + break; + + case ALERT_TYPE: + if (Tcl_GetIndexFromObj(interp, objv[i + 1], alertTypeStrings, + "value", TCL_EXACT, &typeIndex) != TCL_OK) { + goto end; + } + break; + case ALERT_COMMAND: + cmdObj = objv[i+1]; + break; } } - - if (haveDefaultOption) { - + if (indexDefaultOption) { /* * Any '-default' option needs to know the '-type' option, which is why * we do this here. */ - str = Tcl_GetString(objv[indexDefaultOption + 1]); if (Tcl_GetIndexFromObj(interp, objv[indexDefaultOption + 1], - movableButtonStrings, "value", TCL_EXACT, &defaultButtonIndex) + alertButtonStrings, "value", TCL_EXACT, &index) != TCL_OK) { goto end; } @@ -1610,136 +1005,62 @@ Tk_MessageBoxObjCmd( */ defaultNativeButtonIndex = - buttonIndexAndTypeToNativeButtonIndex[typeIndex][defaultButtonIndex]; - if (defaultNativeButtonIndex == 0) { + alertButtonIndexAndTypeToNativeButtonIndex[typeIndex][index]; + if (!defaultNativeButtonIndex) { Tcl_SetObjResult(interp, Tcl_NewStringObj("Illegal default option", -1)); goto end; } - paramCFStringRec.defaultButton = defaultNativeButtonIndex; - if (paramCFStringRec.cancelButton == defaultNativeButtonIndex) { - paramCFStringRec.cancelButton = 0; - } } - ChkErr(SetThemeCursor, kThemeArrowCursor); - - if (haveParentOption) { - AlertHandlerUserData data; - static EventHandlerUPP handler = NULL; - WindowRef windowRef; - const EventTypeSpec kEvents[] = { - {kEventClassCommand, kEventProcessCommand} - }; - - bzero(&data, sizeof(data)); - if (!handler) { - handler = NewEventHandlerUPP(AlertHandler); - } - windowRef = TkMacOSXDrawableWindow(Tk_WindowId(tkwin)); - if (!windowRef) { - goto end; - } - err = ChkErr(CreateStandardSheet, alertType, messageTextCF, - finemessageTextCF, ¶mCFStringRec, NULL, &dialogRef); - if(err != noErr) { - goto end; - } - data.dialogWindow = GetDialogWindow(dialogRef); - err = ChkErr(ShowSheetWindow, data.dialogWindow, windowRef); - if(err != noErr) { - DisposeDialog(dialogRef); - goto end; - } - ChkErr(GetWindowModality, data.dialogWindow, &data.origModality, - &data.origUnavailWindow); - ChkErr(SetWindowModality, data.dialogWindow, kWindowModalityAppModal, - NULL); - ChkErr(InstallEventHandler, GetWindowEventTarget(data.dialogWindow), - handler, GetEventTypeCount(kEvents), kEvents, &data, - &data.handlerRef); - TkMacOSXTrackingLoop(1); - ChkErr(RunAppModalLoopForWindow, data.dialogWindow); - TkMacOSXTrackingLoop(0); - itemHit = data.buttonIndex; - } else { - err = ChkErr(CreateStandardAlert, alertType, messageTextCF, - finemessageTextCF, ¶mCFStringRec, &dialogRef); - if(err != noErr) { - goto end; + [alert setIcon:[NSApp applicationIconImage]]; + [alert setAlertStyle:alertStyles[iconIndex]]; + i = 0; + while (i < 3 && alertButtonNames[typeIndex][i]) { + [alert addButtonWithTitle:(NSString*)alertButtonNames[typeIndex][i++]]; + } + buttons = [alert buttons]; + for (NSButton *b in buttons) { + NSString *ke = [b keyEquivalent]; + if (([ke isEqualToString:@"\r"] || [ke isEqualToString:@"\033"]) && + ![b keyEquivalentModifierMask]) { + [b setKeyEquivalent:@""]; } - TkMacOSXTrackingLoop(1); - err = ChkErr(RunStandardAlert, dialogRef, NULL, &itemHit); - TkMacOSXTrackingLoop(0); - if (err != noErr) { - goto end; + } + [[buttons objectAtIndex:[buttons count]-1] setKeyEquivalent:@"\033"]; + [[buttons objectAtIndex:defaultNativeButtonIndex-1] setKeyEquivalent:@"\r"]; + if (cmdObj) { + callbackInfo = (AlertCallbackInfo *) ckalloc(sizeof(AlertCallbackInfo)); + if (Tcl_IsShared(cmdObj)) { + cmdObj = Tcl_DuplicateObj(cmdObj); } + Tcl_IncrRefCount(cmdObj); } - if (err == noErr) { - int ind; - - /* - * Map 'itemHit' (1, 2, 3) to descriptive text string. - */ - - ind = nativeButtonIndexAndTypeToButtonIndex[typeIndex][itemHit]; - Tcl_SetObjResult(interp, Tcl_NewStringObj(movableButtonStrings[ind], - -1)); - result = TCL_OK; + callbackInfo->cmdObj = cmdObj; + callbackInfo->interp = interp; + callbackInfo->typeIndex = typeIndex; + parent = TkMacOSXDrawableWindow(((TkWindow *) tkwin)->window); + if (haveParentOption && parent && ![parent attachedSheet]) { + [alert beginSheetModalForWindow:parent modalDelegate:NSApp + didEndSelector:@selector(tkAlertDidEnd:returnCode:contextInfo:) + contextInfo:callbackInfo]; + returnCode = cmdObj ? NSAlertOtherReturn : + [NSApp runModalForWindow:[alert window]]; + } else { + returnCode = [alert runModal]; + [NSApp tkAlertDidEnd:alert returnCode:returnCode + contextInfo:callbackInfo]; } - + result = (returnCode != NSAlertErrorReturn) ? TCL_OK : TCL_ERROR; end: - if (finemessageTextCF) { - CFRelease(finemessageTextCF); - } - if (messageTextCF) { - CFRelease(messageTextCF); - } + [alert release]; return result; } /* - *---------------------------------------------------------------------- - * - * AlertHandler -- - * - * Carbon event handler for the Standard Sheet dialog. - * - * Results: - * OSStatus if event handled or not. - * - * Side effects: - * May set userData. - * - *---------------------------------------------------------------------- + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: */ - -OSStatus -AlertHandler( - EventHandlerCallRef callRef, - EventRef eventRef, - void *userData) -{ - AlertHandlerUserData *data = (AlertHandlerUserData *) userData; - HICommand cmd; - - ChkErr(GetEventParameter,eventRef, kEventParamDirectObject, typeHICommand, - NULL, sizeof(cmd), NULL, &cmd); - switch (cmd.commandID) { - case kHICommandOK: - data->buttonIndex = 1; - break; - case kHICommandCancel: - data->buttonIndex = 2; - break; - case kHICommandOther: - data->buttonIndex = 3; - break; - } - if (data->buttonIndex) { - ChkErr(QuitAppModalLoopForWindow, data->dialogWindow); - ChkErr(RemoveEventHandler, data->handlerRef); - ChkErr(SetWindowModality, data->dialogWindow, - data->origModality, data->origUnavailWindow); - } - return eventNotHandledErr; -} diff --git a/macosx/tkMacOSXDraw.c b/macosx/tkMacOSXDraw.c index 5c36967..4eb4a88 100644 --- a/macosx/tkMacOSXDraw.c +++ b/macosx/tkMacOSXDraw.c @@ -6,8 +6,8 @@ * Xlib functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -17,11 +17,10 @@ #include "tkMacOSXDebug.h" #include "xbytes.h" -#include "tclInt.h" /* for Tcl_CreateNamespace() */ - /* #ifdef TK_MAC_DEBUG #define TK_MAC_DEBUG_DRAWING +#define TK_MAC_DEBUG_IMAGE_DRAWING #endif */ @@ -33,18 +32,6 @@ */ #define NON_AA_CG_OFFSET .999 -/* - * Temporary region that can be reused. - */ - -RgnHandle tkMacOSXtmpQdRgn = NULL; - -int tkMacOSXUseCGDrawing = 1; - -int tkPictureIsOpen; - -static PixPatHandle penPat = NULL, tmpPixPat = NULL; - static int cgAntiAliasLimit = 0; #define notAA(w) ((w) < cgAntiAliasLimit) @@ -56,7 +43,11 @@ static int useThemedFrame = 0; */ static void ClipToGC(Drawable d, GC gc, HIShapeRef *clipRgnPtr); -static void NoQDClip(CGrafPtr port); +static CGImageRef CreateCGImageWithXImage(XImage *ximage); +static CGContextRef GetCGContextForDrawable(Drawable d); +static void DrawCGImage(Drawable d, GC gc, CGContextRef context, CGImageRef image, + unsigned long imageForeground, unsigned long imageBackground, + CGRect imageBounds, CGRect srcBounds, CGRect dstBounds); /* @@ -89,11 +80,6 @@ TkMacOSXInitCGDrawing( if (Tcl_CreateNamespace(interp, "::tk::mac", NULL, NULL) == NULL) { Tcl_ResetResult(interp); } - if (Tcl_LinkVar(interp, "::tk::mac::useCGDrawing", - (char *) &tkMacOSXUseCGDrawing, TCL_LINK_BOOLEAN) != TCL_OK) { - Tcl_ResetResult(interp); - } - tkMacOSXUseCGDrawing = enable; if (Tcl_LinkVar(interp, "::tk::mac::CGAntialiasLimit", (char *) &cgAntiAliasLimit, TCL_LINK_INT) != TCL_OK) { @@ -113,17 +99,14 @@ TkMacOSXInitCGDrawing( (char *) &useThemedFrame, TCL_LINK_BOOLEAN) != TCL_OK) { Tcl_ResetResult(interp); } - - if (tkMacOSXtmpQdRgn == NULL) { - tkMacOSXtmpQdRgn = NewRgn(); +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (Tcl_LinkVar(interp, "::tk::mac::useCompatibilityMetrics", + (char *) &tkMacOSXUseCompatibilityMetrics, TCL_LINK_BOOLEAN) + != TCL_OK) { + Tcl_ResetResult(interp); } +#endif } -#ifdef TK_MAC_DEBUG_DRAWING - TkMacOSXInitNamedDebugSymbol(QD, void, QD_DebugPrint, char*); - if (QD_DebugPrint) { - ; /* gdb: b *QD_DebugPrint */ - } -#endif /* TK_MAC_DEBUG_WINDOWS */ return TCL_OK; } @@ -159,53 +142,76 @@ XCopyArea( int dest_y) { TkMacOSXDrawingContext dc; - MacDrawable *srcDraw = (MacDrawable *) src, *dstDraw = (MacDrawable *) dst; + MacDrawable *srcDraw = (MacDrawable *) src; display->request++; if (!width || !height) { /* TkMacOSXDbgMsg("Drawing of emtpy area requested"); */ return; } - { - CGrafPtr srcPort; - - srcPort = TkMacOSXGetDrawablePort(src); - if (srcPort) { - Rect srcRect, dstRect, *srcPtr = &srcRect, *dstPtr = &dstRect; - const BitMap *srcBit, *dstBit; - RGBColor black = {0, 0, 0}, white = {0xffff, 0xffff, 0xffff}; - - if (!TkMacOSXSetupDrawingContext(dst, gc, 0, &dc)) { - return; + if (srcDraw->flags & TK_IS_PIXMAP) { + if (!TkMacOSXSetupDrawingContext(dst, gc, 1, &dc)) { + return; + } + if (dc.context) { + CGImageRef img = TkMacOSXCreateCGImageWithDrawable(src); + + if (img) { + DrawCGImage(dst, gc, dc.context, img, gc->foreground, + gc->background, CGRectMake(0, 0, + srcDraw->size.width, srcDraw->size.height), + CGRectMake(src_x, src_y, width, height), + CGRectMake(dest_x, dest_y, width, height)); + CFRelease(img); + } else { + TkMacOSXDbgMsg("Invalid source drawable"); } - if (dc.context) { - TkMacOSXDbgMsg("Ignored CG drawing of QD drawable"); - goto end; + } else { + TkMacOSXDbgMsg("Invalid destination drawable"); + } + TkMacOSXRestoreDrawingContext(&dc); + } else if (TkMacOSXDrawableWindow(src)) { + NSView *view = TkMacOSXDrawableView(srcDraw); + NSWindow *w = [view window]; + NSInteger gs = [w windowNumber] > 0 ? [w gState] : 0; + /* // alternative using per-view gState: + NSInteger gs = [view gState]; + if (!gs) { + [view allocateGState]; + if ([view lockFocusIfCanDraw]) { + [view unlockFocus]; } - if (!dc.port) { - TkMacOSXDbgMsg("Invalid destination drawable"); - goto end; + gs = [view gState]; + } + */ + if (!gs || !TkMacOSXSetupDrawingContext(dst, gc, 1, &dc)) { + return; + } + if (dc.context) { + NSGraphicsContext *gc = nil; + CGFloat boundsH = [view bounds].size.height; + NSRect srcRect = NSMakeRect(srcDraw->xOff + src_x, boundsH - + height - (srcDraw->yOff + src_y), width, height); + + if (((MacDrawable *) dst)->flags & TK_IS_PIXMAP) { + gc = [NSGraphicsContext graphicsContextWithGraphicsPort: + dc.context flipped:NO]; + if (gc) { + [NSGraphicsContext saveGraphicsState]; + [NSGraphicsContext setCurrentContext:gc]; + } } - srcBit = GetPortBitMapForCopyBits(srcPort); - dstBit = GetPortBitMapForCopyBits(dc.port); - SetRect(srcPtr, srcDraw->xOff + src_x, srcDraw->yOff + src_y, - srcDraw->xOff + src_x + width, - srcDraw->yOff + src_y + height); - if (tkPictureIsOpen) { - dstPtr = srcPtr; - } else { - SetRect(dstPtr, dstDraw->xOff + dest_x, dstDraw->yOff + dest_y, - dstDraw->xOff + dest_x + width, - dstDraw->yOff + dest_y + height); + NSCopyBits(gs, srcRect, NSMakePoint(dest_x, + dc.portBounds.size.height - dest_y)); + if (gc) { + [NSGraphicsContext restoreGraphicsState]; } - RGBForeColor(&black); - RGBBackColor(&white); - CopyBits(srcBit, dstBit, srcPtr, dstPtr, srcCopy, NULL); -end: - TkMacOSXRestoreDrawingContext(&dc); } else { - TkMacOSXDbgMsg("Invalid source drawable"); + TkMacOSXDbgMsg("Invalid destination drawable"); } + TkMacOSXRestoreDrawingContext(&dc); + } else { + TkMacOSXDbgMsg("Invalid source drawable"); } } @@ -243,7 +249,7 @@ XCopyPlane( unsigned long plane) /* Which plane to copy. */ { TkMacOSXDrawingContext dc; - MacDrawable *srcDraw = (MacDrawable *) src, *dstDraw = (MacDrawable *) dst; + MacDrawable *srcDraw = (MacDrawable *) src; display->request++; if (!width || !height) { @@ -253,73 +259,37 @@ XCopyPlane( if (plane != 1) { Tcl_Panic("Unexpected plane specified for XCopyPlane"); } - { - CGrafPtr srcPort; + if (srcDraw->flags & TK_IS_PIXMAP) { + if (!TkMacOSXSetupDrawingContext(dst, gc, 1, &dc)) { + return; + } + if (dc.context) { + CGImageRef img = TkMacOSXCreateCGImageWithDrawable(src); - srcPort = TkMacOSXGetDrawablePort(src); - if (srcPort) { - Rect srcRect, dstRect, *srcPtr = &srcRect, *dstPtr = &dstRect; - const BitMap *srcBit, *dstBit; - TkpClipMask *clipPtr = (TkpClipMask *) gc->clip_mask; + if (img) { + TkpClipMask *clipPtr = (TkpClipMask *) gc->clip_mask; + unsigned long imageBackground = gc->background; - if (!TkMacOSXSetupDrawingContext(dst, gc, 0, &dc)) { - return; - } - if (dc.context) { - TkMacOSXDbgMsg("Ignored CG drawing of QD drawable"); - goto end; - } - if (!dc.port) { - TkMacOSXDbgMsg("Invalid destination drawable"); - goto end; - } - srcBit = GetPortBitMapForCopyBits(srcPort); - dstBit = GetPortBitMapForCopyBits(dc.port); - SetRect(srcPtr, srcDraw->xOff + src_x, srcDraw->yOff + src_y, - srcDraw->xOff + src_x + width, - srcDraw->yOff + src_y + height); - if (tkPictureIsOpen) { - dstPtr = srcPtr; - } else { - SetRect(dstPtr, dstDraw->xOff + dest_x, dstDraw->yOff + dest_y, - dstDraw->xOff + dest_x + width, - dstDraw->yOff + dest_y + height); - } - TkMacOSXSetColorInPort(gc->foreground, 1, NULL, dc.port); - if (!clipPtr || clipPtr->type == TKP_CLIP_REGION) { - /* - * Opaque bitmaps. - */ - - TkMacOSXSetColorInPort(gc->background, 0, NULL, dc.port); - CopyBits(srcBit, dstBit, srcPtr, dstPtr, srcCopy, NULL); - } else if (clipPtr->type == TKP_CLIP_PIXMAP) { - if (clipPtr->value.pixmap == src) { - /* - * Transparent bitmaps. If it's color ignore the forecolor. - */ - short tmode = GetPixDepth(GetPortPixMap(srcPort)) == 1 ? - srcOr : transparent; - - CopyBits(srcBit, dstBit, srcPtr, dstPtr, tmode, NULL); - } else { - /* - * Two arbitrary bitmaps. - */ - - CGrafPtr mskPort = TkMacOSXGetDrawablePort( - clipPtr->value.pixmap); - const BitMap *mskBit = GetPortBitMapForCopyBits(mskPort); - - CopyDeepMask(srcBit, mskBit, dstBit, srcPtr, srcPtr, - dstPtr, srcCopy, NULL); + if (clipPtr && clipPtr->type == TKP_CLIP_PIXMAP && + clipPtr->value.pixmap == src) { + imageBackground = TRANSPARENT_PIXEL << 24; } + DrawCGImage(dst, gc, dc.context, img, gc->foreground, + imageBackground, CGRectMake(0, 0, + srcDraw->size.width, srcDraw->size.height), + CGRectMake(src_x, src_y, width, height), + CGRectMake(dest_x, dest_y, width, height)); + CFRelease(img); + } else { + TkMacOSXDbgMsg("Invalid source drawable"); } -end: - TkMacOSXRestoreDrawingContext(&dc); } else { - TkMacOSXDbgMsg("Invalid source drawable"); + TkMacOSXDbgMsg("Invalid destination drawable"); } + TkMacOSXRestoreDrawingContext(&dc); + } else { + XCopyArea(display, src, dst, gc, src_x, src_y, width, height, dest_x, + dest_y); } } @@ -356,182 +326,424 @@ TkPutImage( unsigned int height) /* distination and source. */ { TkMacOSXDrawingContext dc; - MacDrawable *dstDraw = (MacDrawable *) d; display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, 0, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return BadDrawable; } if (dc.context) { - TkMacOSXDbgMsg("Ignored CG drawing of XImage"); - } else { - Rect srcRect, dstRect, *srcPtr = &srcRect, *dstPtr = &dstRect; - const BitMap *dstBit; - RGBColor black = {0, 0, 0}, white = {0xffff, 0xffff, 0xffff}; - int i, j; - char *newData = NULL; - char *dataPtr, *newPtr, *oldPtr; - int rowBytes = image->bytes_per_line, sliceRowBytes, lastSliceRowBytes; - int slices, sliceWidth, lastSliceWidth; - - dstBit = GetPortBitMapForCopyBits(dc.port); - SetRect(srcPtr, src_x, src_y, src_x + width, src_y + height); - if (tkPictureIsOpen) { - dstPtr = srcPtr; + CGImageRef img = CreateCGImageWithXImage(image); + + if (img) { + DrawCGImage(d, gc, dc.context, img, gc->foreground, gc->background, + CGRectMake(0, 0, image->width, image->height), + CGRectMake(src_x, src_y, width, height), + CGRectMake(dest_x, dest_y, width, height)); + CFRelease(img); } else { - SetRect(dstPtr, dstDraw->xOff + dest_x, dstDraw->yOff + dest_y, - dstDraw->xOff + dest_x + width, - dstDraw->yOff + dest_y + height); + TkMacOSXDbgMsg("Invalid source drawable"); } - RGBForeColor(&black); - RGBBackColor(&white); - if (image->obdata) { - /* - * Image from XGetImage, copy from containing GWorld directly. - */ + } else { + TkMacOSXDbgMsg("Invalid destination drawable"); + } + TkMacOSXRestoreDrawingContext(&dc); +} + +/* + *---------------------------------------------------------------------- + * + * CreateCGImageWithXImage -- + * + * Create CGImage from XImage, copying the image data. + * + * Results: + * CGImage, release after use. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ - CopyBits(GetPortBitMapForCopyBits(TkMacOSXGetDrawablePort( - (Drawable)image->obdata)), dstBit, - srcPtr, dstPtr, srcCopy, NULL); - } else if (image->depth == 1) { - /* - * BW image - */ - - const int maxRowBytes = 0x3ffe; - BitMap bitmap; - int odd; - - if (rowBytes > maxRowBytes) { - slices = rowBytes / maxRowBytes; - sliceRowBytes = maxRowBytes; - lastSliceRowBytes = rowBytes - (slices * maxRowBytes); - if (!lastSliceRowBytes) { - slices--; - lastSliceRowBytes = maxRowBytes; - } - sliceWidth = (long) image->width * maxRowBytes / rowBytes; - lastSliceWidth = image->width - (sliceWidth * slices); - } else { - slices = 0; - sliceRowBytes = lastSliceRowBytes = rowBytes; - sliceWidth = lastSliceWidth = image->width; +static void ReleaseData(void *info, const void *data, size_t size) { + ckfree(info); +} + +CGImageRef +CreateCGImageWithXImage( + XImage *image) +{ + CGImageRef img = NULL; + size_t bitsPerComponent, bitsPerPixel; + size_t len = image->bytes_per_line * image->height; + const CGFloat *decode = NULL; + CGBitmapInfo bitmapInfo; + CGDataProviderRef provider = NULL; + char *data = NULL; + CGDataProviderReleaseDataCallback releaseData = ReleaseData; + + if (image->obdata) { + /* + * Image from XGetImage + */ + + img = TkMacOSXCreateCGImageWithDrawable((Pixmap) image->obdata); + } else if (image->bits_per_pixel == 1) { + /* + * BW image + */ + + static const CGFloat decodeWB[2] = {1, 0}; + + bitsPerComponent = 1; + bitsPerPixel = 1; + decode = decodeWB; + if (image->bitmap_bit_order != MSBFirst) { + char *srcPtr = image->data + image->xoffset; + char *endPtr = srcPtr + len; + char *destPtr = (data = ckalloc(len)); + + while (srcPtr < endPtr) { + *destPtr++ = xBitReverseTable[(unsigned char)(*(srcPtr++))]; } - bitmap.bounds.top = bitmap.bounds.left = 0; - bitmap.bounds.bottom = (short) image->height; - dataPtr = image->data + image->xoffset; - do { - if (slices) { - bitmap.bounds.right = bitmap.bounds.left + sliceWidth; - } else { - sliceRowBytes = lastSliceRowBytes; - bitmap.bounds.right = bitmap.bounds.left + lastSliceWidth; - } - oldPtr = dataPtr; - odd = sliceRowBytes % 2; - if (!newData) { - newData = ckalloc(image->height * (sliceRowBytes+odd)); - } - newPtr = newData; - if (image->bitmap_bit_order != MSBFirst) { - for (i = 0; i < image->height; i++) { - for (j = 0; j < sliceRowBytes; j++) { - *newPtr = xBitReverseTable[(unsigned char)*oldPtr]; - newPtr++; oldPtr++; - } - if (odd) { - *newPtr++ = 0; - } - oldPtr += rowBytes - sliceRowBytes; - } - } else { - for (i = 0; i < image->height; i++) { - memcpy(newPtr, oldPtr, sliceRowBytes); - newPtr += sliceRowBytes; - if (odd) { - *newPtr++ = 0; - } - oldPtr += rowBytes; - } - } - bitmap.baseAddr = newData; - bitmap.rowBytes = sliceRowBytes + odd; - CopyBits(&bitmap, dstBit, srcPtr, dstPtr, srcCopy, NULL); - if (slices) { - bitmap.bounds.left = bitmap.bounds.right; - dataPtr += sliceRowBytes; - } - } while (slices--); - ckfree(newData); } else { - /* - * Color image - */ - - const int maxRowBytes = 0x3ffc; - PixMap pixmap; - - pixmap.bounds.left = 0; - pixmap.bounds.top = 0; - pixmap.bounds.bottom = (short) image->height; - pixmap.pixelType = RGBDirect; - pixmap.pmVersion = baseAddr32; /* 32bit clean */ - pixmap.packType = 0; - pixmap.packSize = 0; - pixmap.hRes = 0x00480000; - pixmap.vRes = 0x00480000; - pixmap.pixelSize = 32; - pixmap.cmpCount = 3; - pixmap.cmpSize = 8; - pixmap.pixelFormat = image->byte_order == MSBFirst ? - k32ARGBPixelFormat : k32BGRAPixelFormat; - pixmap.pmTable = NULL; - pixmap.pmExt = 0; - if (rowBytes > maxRowBytes) { - slices = rowBytes / maxRowBytes; - sliceRowBytes = maxRowBytes; - lastSliceRowBytes = rowBytes - (slices * maxRowBytes); - if (!lastSliceRowBytes) { - slices--; - lastSliceRowBytes = maxRowBytes; + data = memcpy(ckalloc(len), image->data + image->xoffset, + len); + } + if (data) { + provider = CGDataProviderCreateWithData(data, data, len, releaseData); + } + if (provider) { + img = CGImageMaskCreate(image->width, image->height, bitsPerComponent, + bitsPerPixel, image->bytes_per_line, + provider, decode, 0); + } + } else if (image->format == ZPixmap && image->bits_per_pixel == 32) { + /* + * Color image + */ + + CGColorSpaceRef colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); + + bitsPerComponent = 8; + bitsPerPixel = 32; + bitmapInfo = (image->byte_order == MSBFirst ? + kCGBitmapByteOrder32Big : kCGBitmapByteOrder32Little) | + kCGImageAlphaNoneSkipFirst; + data = memcpy(ckalloc(len), image->data + image->xoffset, len); + if (data) { + provider = CGDataProviderCreateWithData(data, data, len, releaseData); + } + if (provider) { + img = CGImageCreate(image->width, image->height, bitsPerComponent, + bitsPerPixel, image->bytes_per_line, colorspace, bitmapInfo, + provider, decode, 0, kCGRenderingIntentDefault); + } + if (colorspace) { + CFRelease(colorspace); + } + } else { + TkMacOSXDbgMsg("Unsupported image type"); + } + if (provider) { + CFRelease(provider); + } + + return img; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXCreateCGImageWithDrawable -- + * + * Create a CGImage from the given Drawable. + * + * Results: + * CGImage, release after use. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +CGImageRef +TkMacOSXCreateCGImageWithDrawable( + Drawable drawable) +{ + CGImageRef img = NULL; + CGContextRef context = GetCGContextForDrawable(drawable); + + if (context) { + img = CGBitmapContextCreateImage(context); + } + return img; +} + +/* + *---------------------------------------------------------------------- + * + * CreateNSImageWithPixmap -- + * + * Create NSImage for Pixmap. + * + * Results: + * NSImage. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +static NSImage* +CreateNSImageWithPixmap( + Pixmap pixmap, + int width, + int height) +{ + CGImageRef cgImage; + NSImage *nsImage; + NSBitmapImageRep *bitmapImageRep; + + cgImage = TkMacOSXCreateCGImageWithDrawable(pixmap); + nsImage = [[NSImage alloc] initWithSize:NSMakeSize(width, height)]; + bitmapImageRep = [[NSBitmapImageRep alloc] initWithCGImage:cgImage]; + [nsImage addRepresentation:bitmapImageRep]; + [bitmapImageRep release]; + CFRelease(cgImage); + + return nsImage; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXGetNSImageWithTkImage -- + * + * Get autoreleased NSImage for Tk_Image. + * + * Results: + * NSImage. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +NSImage* +TkMacOSXGetNSImageWithTkImage( + Display *display, + Tk_Image image, + int width, + int height) +{ + Pixmap pixmap = Tk_GetPixmap(display, None, width, height, 0); + NSImage *nsImage; + + Tk_RedrawImage(image, 0, 0, width, height, pixmap, 0, 0); + nsImage = CreateNSImageWithPixmap(pixmap, width, height); + Tk_FreePixmap(display, pixmap); + + return [nsImage autorelease]; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXGetNSImageWithBitmap -- + * + * Get autoreleased NSImage for Bitmap. + * + * Results: + * NSImage. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +NSImage* +TkMacOSXGetNSImageWithBitmap( + Display *display, + Pixmap bitmap, + GC gc, + int width, + int height) +{ + Pixmap pixmap = Tk_GetPixmap(display, None, width, height, 0); + NSImage *nsImage; + + unsigned long origBackground = gc->background; + + gc->background = TRANSPARENT_PIXEL << 24; + XSetClipOrigin(display, gc, 0, 0); + XCopyPlane(display, bitmap, pixmap, gc, 0, 0, width, height, 0, 0, 1); + gc->background = origBackground; + nsImage = CreateNSImageWithPixmap(pixmap, width, height); + Tk_FreePixmap(display, pixmap); + + return [nsImage autorelease]; +} + +/* + *---------------------------------------------------------------------- + * + * GetCGContextForDrawable -- + * + * Get CGContext for given Drawable, creating one if necessary. + * + * Results: + * CGContext. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +CGContextRef +GetCGContextForDrawable( + Drawable d) +{ + MacDrawable *macDraw = (MacDrawable *) d; + + if (macDraw && (macDraw->flags & TK_IS_PIXMAP) && !macDraw->context) { + const size_t bitsPerComponent = 8; + size_t bitsPerPixel, bytesPerRow, len; + CGColorSpaceRef colorspace = NULL; + CGBitmapInfo bitmapInfo = +#ifdef __LITTLE_ENDIAN__ + kCGBitmapByteOrder32Host; +#else + kCGBitmapByteOrderDefault; +#endif + char *data; + CGRect bounds = CGRectMake(0, 0, macDraw->size.width, + macDraw->size.height); + + if (macDraw->flags & TK_IS_BW_PIXMAP) { + bitsPerPixel = 8; + bitmapInfo = kCGImageAlphaOnly; + } else { + colorspace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); + bitsPerPixel = 32; + bitmapInfo |= kCGImageAlphaPremultipliedFirst; + } + bytesPerRow = ((size_t) macDraw->size.width * bitsPerPixel + 127) >> 3 + & ~15; + len = macDraw->size.height * bytesPerRow; + data = ckalloc(len); + bzero(data, len); + macDraw->context = CGBitmapContextCreate(data, macDraw->size.width, + macDraw->size.height, bitsPerComponent, bytesPerRow, + colorspace, bitmapInfo); + if (macDraw->context) { + CGContextClearRect(macDraw->context, bounds); + } + if (colorspace) { + CFRelease(colorspace); + } + } + + return (macDraw ? macDraw->context : NULL); +} + +/* + *---------------------------------------------------------------------- + * + * DrawCGImage -- + * + * Draw CG image into drawable. + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +void +DrawCGImage( + Drawable d, + GC gc, + CGContextRef context, + CGImageRef image, + unsigned long imageForeground, + unsigned long imageBackground, + CGRect imageBounds, + CGRect srcBounds, + CGRect dstBounds) +{ + MacDrawable *macDraw = (MacDrawable *) d; + + if (macDraw && context && image) { + CGImageRef subImage = NULL; + + if (!CGRectEqualToRect(imageBounds, srcBounds)) { + if (!CGRectContainsRect(imageBounds, srcBounds)) { + TkMacOSXDbgMsg("Mismatch of sub CGImage bounds"); + } + subImage = CGImageCreateWithImageInRect(image, CGRectOffset( + srcBounds, -imageBounds.origin.x, -imageBounds.origin.y)); + if (subImage) { + image = subImage; + } + } + dstBounds = CGRectOffset(dstBounds, macDraw->xOff, macDraw->yOff); + if (CGImageIsMask(image)) { + /*CGContextSaveGState(context);*/ + if (macDraw->flags & TK_IS_BW_PIXMAP) { + if (imageBackground != TRANSPARENT_PIXEL << 24) { + CGContextClearRect(context, dstBounds); } - sliceWidth = (long) image->width * maxRowBytes / rowBytes; - lastSliceWidth = image->width - (sliceWidth * slices); - dataPtr = image->data + image->xoffset; - newData = (char *) ckalloc(image->height * sliceRowBytes); - do { - if (slices) { - pixmap.bounds.right = pixmap.bounds.left + sliceWidth; - } else { - sliceRowBytes = lastSliceRowBytes; - pixmap.bounds.right = pixmap.bounds.left + lastSliceWidth; - } - oldPtr = dataPtr; - newPtr = newData; - for (i = 0; i < image->height; i++) { - memcpy(newPtr, oldPtr, sliceRowBytes); - oldPtr += rowBytes; - newPtr += sliceRowBytes; - } - pixmap.baseAddr = newData; - pixmap.rowBytes = sliceRowBytes | 0x8000; - CopyBits((BitMap*) &pixmap, dstBit, srcPtr, dstPtr, srcCopy, - NULL); - if (slices) { - pixmap.bounds.left = pixmap.bounds.right; - dataPtr += sliceRowBytes; - } - } while (slices--); - ckfree(newData); + CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0); } else { - pixmap.bounds.right = (short) image->width; - pixmap.baseAddr = image->data + image->xoffset; - pixmap.rowBytes = rowBytes | 0x8000; - CopyBits((BitMap*) &pixmap, dstBit, srcPtr, dstPtr, srcCopy, NULL); + if (imageBackground != TRANSPARENT_PIXEL << 24) { + TkMacOSXSetColorInContext(gc, imageBackground, context); + CGContextFillRect(context, dstBounds); + } + TkMacOSXSetColorInContext(gc, imageForeground, context); } } +#ifdef TK_MAC_DEBUG_IMAGE_DRAWING + CGContextSaveGState(context); + CGContextSetLineWidth(context, 1.0); + CGContextSetRGBStrokeColor(context, 0, 0, 0, 0.1); + CGContextSetRGBFillColor(context, 0, 1, 0, 0.1); + CGContextFillRect(context, dstBounds); + CGContextStrokeRect(context, dstBounds); + CGPoint p[4] = {dstBounds.origin, + CGPointMake(CGRectGetMaxX(dstBounds), CGRectGetMaxY(dstBounds)), + CGPointMake(CGRectGetMinX(dstBounds), CGRectGetMaxY(dstBounds)), + CGPointMake(CGRectGetMaxX(dstBounds), CGRectGetMinY(dstBounds)) + }; + CGContextStrokeLineSegments(context, p, 4); + CGContextRestoreGState(context); + TkMacOSXDbgMsg("Drawing CGImage at (x=%f, y=%f), (w=%f, h=%f)", + dstBounds.origin.x, dstBounds.origin.y, + dstBounds.size.width, dstBounds.size.height); +#else /* TK_MAC_DEBUG_IMAGE_DRAWING */ + CGContextSaveGState(context); + CGContextTranslateCTM(context, 0, dstBounds.origin.y + CGRectGetMaxY(dstBounds)); + CGContextScaleCTM(context, 1, -1); + CGContextDrawImage(context, dstBounds, image); + CGContextRestoreGState(context); +#endif /* TK_MAC_DEBUG_IMAGE_DRAWING */ + /*if (CGImageIsMask(image)) { + CGContextRestoreGState(context); + }*/ + if (subImage) { + CFRelease(subImage); + } + } else { + TkMacOSXDbgMsg("Drawing of empty CGImage requested"); } - TkMacOSXRestoreDrawingContext(&dc); return Success; } @@ -569,7 +781,7 @@ XDrawLines( } display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return BadDrawable; } if (dc.context) { @@ -592,23 +804,6 @@ XDrawLines( } } CGContextStrokePath(dc.context); - } else { - int o = -lw/2; - - /* This is broken for fat lines, it is not possible to correctly - * imitate X11 drawing of oblique fat lines with QD line drawing, - * we should draw a filled polygon instead. */ - - MoveTo((short) (macWin->xOff + points[0].x + o), - (short) (macWin->yOff + points[0].y + o)); - for (i = 1; i < npoints; i++) { - if (mode == CoordModeOrigin) { - LineTo((short) (macWin->xOff + points[i].x + o), - (short) (macWin->yOff + points[i].y + o)); - } else { - Line((short) points[i].x, (short) points[i].y); - } - } } TkMacOSXRestoreDrawingContext(&dc); return Success; @@ -643,7 +838,7 @@ XDrawSegments( int i, lw = gc->line_width; display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -659,19 +854,6 @@ XDrawSegments( macWin->yOff + segments[i].y2 + o); CGContextStrokePath(dc.context); } - } else { - int o = -lw/2; - - /* This is broken for fat lines, it is not possible to correctly - * imitate X11 drawing of oblique fat lines with QD line drawing, - * we should draw a filled polygon instead. */ - - for (i = 0; i < nsegments; i++) { - MoveTo((short) (macWin->xOff + segments[i].x1 + o), - (short) (macWin->yOff + segments[i].y1 + o)); - LineTo((short) (macWin->xOff + segments[i].x2 + o), - (short) (macWin->yOff + segments[i].y2 + o)); - } } TkMacOSXRestoreDrawingContext(&dc); } @@ -707,7 +889,7 @@ XFillPolygon( int i; display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -730,23 +912,6 @@ XFillPolygon( } } CGContextEOFillPath(dc.context); - } else { - PolyHandle polygon; - - polygon = OpenPoly(); - MoveTo((short) (macWin->xOff + points[0].x), - (short) (macWin->yOff + points[0].y)); - for (i = 1; i < npoints; i++) { - if (mode == CoordModeOrigin) { - LineTo((short) (macWin->xOff + points[i].x), - (short) (macWin->yOff + points[i].y)); - } else { - Line((short) points[i].x, (short) points[i].y); - } - } - ClosePoly(); - FillCPoly(polygon, dc.penPat); - KillPoly(polygon); } TkMacOSXRestoreDrawingContext(&dc); } @@ -785,7 +950,7 @@ XDrawRectangle( } display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -797,15 +962,6 @@ XDrawRectangle( macWin->yOff + y + o, width, height); CGContextStrokeRect(dc.context, rect); - } else { - Rect theRect; - int o = -lw/2; - - theRect.left = (short) (macWin->xOff + x + o); - theRect.top = (short) (macWin->yOff + y + o); - theRect.right = (short) (theRect.left + width + lw); - theRect.bottom = (short) (theRect.top + height + lw); - FrameRect(&theRect); } TkMacOSXRestoreDrawingContext(&dc); } @@ -851,7 +1007,7 @@ XDrawRectangles( int i, lw = gc->line_width; display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -868,17 +1024,6 @@ XDrawRectangles( rectPtr->width, rectPtr->height); CGContextStrokeRect(dc.context, rect); } - } else { - Rect theRect; - int o = -lw/2; - - for (i = 0, rectPtr = rectArr; i < nRects;i++, rectPtr++) { - theRect.left = (short) (macWin->xOff + rectPtr->x + o); - theRect.top = (short) (macWin->yOff + rectPtr->y + o); - theRect.right = (short) (theRect.left + rectPtr->width + lw); - theRect.bottom = (short) (theRect.top + rectPtr->height + lw); - FrameRect(&theRect); - } } TkMacOSXRestoreDrawingContext(&dc); } @@ -914,7 +1059,7 @@ XFillRectangles( int i; display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return BadDrawable; } if (dc.context) { @@ -930,16 +1075,6 @@ XFillRectangles( rectPtr->width, rectPtr->height); CGContextFillRect(dc.context, rect); } - } else { - Rect theRect; - - for (i = 0, rectPtr = rectangles; i < n_rectangles; i++, rectPtr++) { - theRect.left = (short) (macWin->xOff + rectPtr->x); - theRect.top = (short) (macWin->yOff + rectPtr->y); - theRect.right = (short) (theRect.left + rectPtr->width); - theRect.bottom = (short) (theRect.top + rectPtr->height); - FillCRect(&theRect, dc.penPat); - } } TkMacOSXRestoreDrawingContext(&dc); return Success; @@ -981,7 +1116,7 @@ XDrawArc( } display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -992,10 +1127,9 @@ XDrawArc( macWin->xOff + x + o, macWin->yOff + y + o, width, height); - TK_IF_MAC_OS_X_API_COND (4, CGContextStrokeEllipseInRect, - angle1 == 0 && angle2 == 23040, + if (angle1 == 0 && angle2 == 23040) { CGContextStrokeEllipseInRect(dc.context, rect); - ) TK_ELSE ( + } else { CGMutablePathRef p = CGPathCreateMutable(); CGAffineTransform t = CGAffineTransformIdentity; CGPoint c = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); @@ -1010,19 +1144,7 @@ XDrawArc( CGContextAddPath(dc.context, p); CGPathRelease(p); CGContextStrokePath(dc.context); - ) TK_ENDIF - } else { - Rect theRect; - short start, extent; - int o = -lw/2; - - theRect.left = (short) (macWin->xOff + x + o); - theRect.top = (short) (macWin->yOff + y + o); - theRect.right = (short) (theRect.left + width + lw); - theRect.bottom = (short) (theRect.top + height + lw); - start = (short) (90 - (angle1/64)); - extent = (short) (-(angle2/64)); - FrameArc(&theRect, start, extent); + } } TkMacOSXRestoreDrawingContext(&dc); } @@ -1066,7 +1188,7 @@ XDrawArcs( int i, lw = gc->line_width; display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -1083,10 +1205,9 @@ XDrawArcs( macWin->yOff + arcPtr->y + o, arcPtr->width, arcPtr->height); - TK_IF_MAC_OS_X_API_COND (4, CGContextStrokeEllipseInRect, - arcPtr->angle1 == 0 && arcPtr->angle2 == 23040, + if (arcPtr->angle1 == 0 && arcPtr->angle2 == 23040) { CGContextStrokeEllipseInRect(dc.context, rect); - ) TK_ELSE ( + } else { CGMutablePathRef p = CGPathCreateMutable(); CGAffineTransform t = CGAffineTransformIdentity; CGPoint c = CGPointMake(CGRectGetMidX(rect), @@ -1105,21 +1226,7 @@ XDrawArcs( CGContextAddPath(dc.context, p); CGPathRelease(p); CGContextStrokePath(dc.context); - ) TK_ENDIF - } - } else { - Rect theRect; - short start, extent; - int o = -lw/2; - - for (i = 0, arcPtr = arcArr;i < nArcs;i++, arcPtr++) { - theRect.left = (short) (macWin->xOff + arcPtr->x + o); - theRect.top = (short) (macWin->yOff + arcPtr->y + o); - theRect.right = (short) (theRect.left + arcPtr->width + lw); - theRect.bottom = (short) (theRect.top + arcPtr->height + lw); - start = (short) (90 - (arcPtr->angle1/64)); - extent = (short) (-(arcPtr->angle2/64)); - FrameArc(&theRect, start, extent); + } } } TkMacOSXRestoreDrawingContext(&dc); @@ -1162,7 +1269,7 @@ XFillArc( } display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -1178,10 +1285,9 @@ XFillArc( macWin->yOff + y + o, width - u, height - u); - TK_IF_MAC_OS_X_API_COND (4, CGContextFillEllipseInRect, - angle1 == 0 && angle2 == 23040, + if (angle1 == 0 && angle2 == 23040) { CGContextFillEllipseInRect(dc.context, rect); - ) TK_ELSE ( + } else { CGMutablePathRef p = CGPathCreateMutable(); CGAffineTransform t = CGAffineTransformIdentity; CGPoint c = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); @@ -1200,49 +1306,6 @@ XFillArc( CGContextAddPath(dc.context, p); CGPathRelease(p); CGContextFillPath(dc.context); - ) TK_ENDIF - } else { - Rect theRect; - short start, extent; - int o = -lw/2; - PolyHandle polygon; - double sin1, cos1, sin2, cos2, angle; - double boxWidth, boxHeight; - double vertex[2], center1[2], center2[2]; - - theRect.left = (short) (macWin->xOff + x + o); - theRect.top = (short) (macWin->yOff + y + o); - theRect.right = (short) (theRect.left + width + lw); - theRect.bottom = (short) (theRect.top + height + lw); - start = (short) (90 - (angle1/64)); - extent = (short) (-(angle2/64)); - if (gc->arc_mode == ArcChord) { - boxWidth = theRect.right - theRect.left; - boxHeight = theRect.bottom - theRect.top; - angle = radians(-angle1/64.0); - sin1 = sin(angle); - cos1 = cos(angle); - angle -= radians(angle2/64.0); - sin2 = sin(angle); - cos2 = cos(angle); - vertex[0] = (theRect.left + theRect.right)/2.0; - vertex[1] = (theRect.top + theRect.bottom)/2.0; - center1[0] = vertex[0] + cos1*boxWidth/2.0; - center1[1] = vertex[1] + sin1*boxHeight/2.0; - center2[0] = vertex[0] + cos2*boxWidth/2.0; - center2[1] = vertex[1] + sin2*boxHeight/2.0; - - polygon = OpenPoly(); - MoveTo((short) ((theRect.left + theRect.right)/2), - (short) ((theRect.top + theRect.bottom)/2)); - LineTo((short) (center1[0] + .5), (short) (center1[1] + .5)); - LineTo((short) (center2[0] + .5), (short) (center2[1] + .5)); - ClosePoly(); - FillCArc(&theRect, start, extent, dc.penPat); - FillCPoly(polygon, dc.penPat); - KillPoly(polygon); - } else { - FillCArc(&theRect, start, extent, dc.penPat); } } TkMacOSXRestoreDrawingContext(&dc); @@ -1279,7 +1342,7 @@ XFillArcs( int i, lw = gc->line_width; display->request++; - if (!TkMacOSXSetupDrawingContext(d, gc, tkMacOSXUseCGDrawing, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { return; } if (dc.context) { @@ -1299,10 +1362,9 @@ XFillArcs( macWin->xOff + arcPtr->x + o, macWin->yOff + arcPtr->y + o, arcPtr->width - u, arcPtr->height - u); - TK_IF_MAC_OS_X_API_COND (4, CGContextFillEllipseInRect, - arcPtr->angle1 == 0 && arcPtr->angle2 == 23040, + if (arcPtr->angle1 == 0 && arcPtr->angle2 == 23040) { CGContextFillEllipseInRect(dc.context, rect); - ) TK_ELSE ( + } else { CGMutablePathRef p = CGPathCreateMutable(); CGAffineTransform t = CGAffineTransformIdentity; CGPoint c = CGPointMake(CGRectGetMidX(rect), @@ -1325,52 +1387,6 @@ XFillArcs( CGContextAddPath(dc.context, p); CGPathRelease(p); CGContextFillPath(dc.context); - ) TK_ENDIF - } - } else { - Rect theRect; - short start, extent; - int o = -lw/2; - PolyHandle polygon; - double sin1, cos1, sin2, cos2, angle; - double boxWidth, boxHeight; - double vertex[2], center1[2], center2[2]; - - for (i = 0, arcPtr = arcArr;i<nArcs;i++, arcPtr++) { - theRect.left = (short) (macWin->xOff + arcPtr->x + o); - theRect.top = (short) (macWin->yOff + arcPtr->y + o); - theRect.right = (short) (theRect.left + arcPtr->width + lw); - theRect.bottom = (short) (theRect.top + arcPtr->height + lw); - start = (short) (90 - (arcPtr->angle1/64)); - extent = (short) (- (arcPtr->angle2/64)); - - if (gc->arc_mode == ArcChord) { - boxWidth = theRect.right - theRect.left; - boxHeight = theRect.bottom - theRect.top; - angle = radians(-arcPtr->angle1/64.0); - sin1 = sin(angle); - cos1 = cos(angle); - angle -= radians(arcPtr->angle2/64.0); - sin2 = sin(angle); - cos2 = cos(angle); - vertex[0] = (theRect.left + theRect.right)/2.0; - vertex[1] = (theRect.top + theRect.bottom)/2.0; - center1[0] = vertex[0] + cos1*boxWidth/2.0; - center1[1] = vertex[1] + sin1*boxHeight/2.0; - center2[0] = vertex[0] + cos2*boxWidth/2.0; - center2[1] = vertex[1] + sin2*boxHeight/2.0; - - polygon = OpenPoly(); - MoveTo((short) ((theRect.left + theRect.right)/2), - (short) ((theRect.top + theRect.bottom)/2)); - LineTo((short) (center1[0] + .5), (short) (center1[1] + .5)); - LineTo((short) (center2[0] + .5), (short) (center2[1] + .5)); - ClosePoly(); - FillCArc(&theRect, start, extent, dc.penPat); - FillCPoly(polygon, dc.penPat); - KillPoly(polygon); - } else { - FillCArc(&theRect, start, extent, dc.penPat); } } } @@ -1423,56 +1439,39 @@ TkScrollWindow( int dx, int dy, /* Distance rectangle should be moved. */ TkRegion damageRgn) /* Region to accumulate damage in. */ { - MacDrawable *destDraw = (MacDrawable *) Tk_WindowId(tkwin); - CGrafPtr destPort, savePort; - Boolean portChanged; - Rect scrollRect; + MacDrawable *macDraw = (MacDrawable *) Tk_WindowId(tkwin); + NSView *view = TkMacOSXDrawableView(macDraw); + CGRect visRect, srcRect, dstRect; + CGFloat boundsH; + HIShapeRef dmgRgn, dstRgn; int result; - HIShapeRef dmgRgn; - - /* - * Due to the implementation below the behavior may be differnt - * than X in certain cases that should never occur in Tk. The - * scrollRect is the source rect extended by the offset (the union - * of the source rect and the offset rect). Everything - * in the extended scrollRect is scrolled. On X, it's possible - * to "skip" over an area if the offset makes the source and - * destination rects disjoint and non-aligned. - */ - - scrollRect.left = destDraw->xOff + x; - scrollRect.top = destDraw->yOff + y; - scrollRect.right = scrollRect.left + width; - scrollRect.bottom = scrollRect.top + height; - if (dx < 0) { - scrollRect.left += dx; - } else { - scrollRect.right += dx; - } - if (dy < 0) { - scrollRect.top += dy; - } else { - scrollRect.bottom += dy; - } - destPort = TkMacOSXGetDrawablePort(Tk_WindowId(tkwin)); - TkMacOSXSetUpClippingRgn(Tk_WindowId(tkwin)); - TkMacOSXCheckTmpQdRgnEmpty(); - portChanged = QDSwapPort(destPort, &savePort); - ScrollRect(&scrollRect, dx, dy, tkMacOSXtmpQdRgn); - if (portChanged) { - QDSwapPort(savePort, NULL); + if (view && !CGRectIsEmpty(visRect = NSRectToCGRect([view visibleRect]))) { + boundsH = [view bounds].size.height; + srcRect = CGRectMake(macDraw->xOff + x, boundsH - height - + (macDraw->yOff + y), width, height); + dstRect = CGRectIntersection(CGRectOffset(srcRect, dx, -dy), visRect); + srcRect = CGRectIntersection(srcRect, visRect); + if (!CGRectIsEmpty(srcRect) && !CGRectIsEmpty(dstRect)) { + /* + CGRect sRect = CGRectIntersection(CGRectOffset(dstRect, -dx, dy), + srcRect); + NSCopyBits(0, NSRectFromCGRect(sRect), + NSPointFromCGPoint(CGRectOffset(sRect, dx, -dy).origin)); + */ + [view scrollRect:NSRectFromCGRect(srcRect) by:NSMakeSize(dx, -dy)]; + } + srcRect.origin.y = boundsH - srcRect.size.height - srcRect.origin.y; + dstRect.origin.y = boundsH - dstRect.size.height - dstRect.origin.y; + srcRect = CGRectUnion(srcRect, dstRect); + dmgRgn = HIShapeCreateMutableWithRect(&srcRect); + dstRgn = HIShapeCreateWithRect(&dstRect); + ChkErr(HIShapeDifference, dmgRgn, dstRgn, (HIMutableShapeRef) dmgRgn); + CFRelease(dstRgn); + TkMacOSXInvalidateViewRegion(view, dmgRgn); + } else { + dmgRgn = HIShapeCreateEmpty(); } - - /* - * Fortunately, the region returned by ScrollRect is semantically - * the same as what we need to return in this function. If the - * region is empty we return zero to denote that no damage was - * created. - */ - - dmgRgn = HIShapeCreateWithQDRgn(tkMacOSXtmpQdRgn); - SetEmptyRgn(tkMacOSXtmpQdRgn); TkMacOSXSetWithNativeRegion(damageRgn, dmgRgn); result = HIShapeIsEmpty(dmgRgn) ? 0 : 1; CFRelease(dmgRgn); @@ -1491,7 +1490,7 @@ TkScrollWindow( * None. * * Side effects: - * The current port is adjusted. + * None. * *---------------------------------------------------------------------- */ @@ -1499,42 +1498,12 @@ TkScrollWindow( void TkMacOSXSetUpGraphicsPort( GC gc, /* GC to apply to current port. */ - GWorldPtr destPort) + void *destPort) { - CGrafPtr savePort; - Boolean portChanged; - - portChanged = QDSwapPort(destPort, &savePort); - PenNormal(); - if (gc) { - if (!penPat) { - if (!tmpPixPat) { - penPat = NewPixPat(); - } else { - penPat = tmpPixPat; - tmpPixPat = NULL; - } - } - TkMacOSXSetColorInPort(gc->foreground, 1, penPat, destPort); - PenPixPat(penPat); - if(gc->function == GXxor) { - PenMode(patXor); - } - if (gc->line_width > 1) { - PenSize(gc->line_width, gc->line_width); - } - if (gc->line_style != LineSolid) { - /* - * FIXME: Here the dash pattern should be set in the drawing - * environment. This is not possible with QuickDraw line drawing. - */ - } - } - if (portChanged) { - QDSwapPort(savePort, NULL); - } + Tcl_Panic("TkMacOSXSetUpGraphicsPort: Obsolete, no more QD!"); } + /* *---------------------------------------------------------------------- * @@ -1561,101 +1530,98 @@ TkMacOSXSetupDrawingContext( TkMacOSXDrawingContext *dcPtr) { MacDrawable *macDraw = ((MacDrawable*)d); - int dontDraw = 0; - TkMacOSXDrawingContext dc = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, - {SHRT_MIN, SHRT_MIN, SHRT_MAX, SHRT_MAX}, false}; - - if (tkPictureIsOpen) { - if (useCG) { - TkMacOSXDbgMsg("Ignored CG Drawing with QD Picture open"); - dontDraw = 1; - } - } else { - dc.clipRgn = TkMacOSXGetClipRgn(d); - } + int dontDraw = 0, isWin = 0; + TkMacOSXDrawingContext dc = {}; + CGRect clipBounds; + + dc.clipRgn = TkMacOSXGetClipRgn(d); if (!dontDraw) { ClipToGC(d, gc, &dc.clipRgn); dontDraw = dc.clipRgn ? HIShapeIsEmpty(dc.clipRgn) : 0; } if (dontDraw) { - if (dc.clipRgn) { - CFRelease(dc.clipRgn); - dc.clipRgn = NULL; - } goto end; } if (useCG) { - dc.context = macDraw->context; + dc.context = GetCGContextForDrawable(d); } if (!dc.context || !(macDraw->flags & TK_IS_PIXMAP)) { - dc.port = TkMacOSXGetDrawablePort(d); - if (dc.port) { - GetPortBounds(dc.port, &dc.portBounds); - } + isWin = (TkMacOSXDrawableWindow(d) != nil); } if (dc.context) { - if (!dc.port) { - CGRect r; - - TK_IF_MAC_OS_X_API (3, CGContextGetClipBoundingBox, - r = CGContextGetClipBoundingBox(dc.context); - ) TK_ELSE_MAC_OS_X (3, - r.origin = CGPointZero; - r.size = macDraw->size; - ) TK_ENDIF - SetRect(&dc.portBounds, r.origin.x + macDraw->xOff, - r.origin.y + macDraw->yOff, - r.origin.x + r.size.width + macDraw->xOff, - r.origin.y + r.size.height + macDraw->yOff); - } - CGContextSaveGState(dc.context); - dc.saveState = (void*)1; - dc.port = NULL; - } else if (dc.port) { - dc.portChanged = QDSwapPort(dc.port, &dc.savePort); - if (useCG && ChkErr(QDBeginCGContext, dc.port, &dc.context) == noErr) { - SyncCGContextOriginWithPort(dc.context, dc.port); + dc.portBounds = clipBounds = CGContextGetClipBoundingBox(dc.context); + } else if (isWin) { + NSView *view = TkMacOSXDrawableView(macDraw); + if (view) { + if (view != [NSView focusView]) { + dc.focusLocked = [view lockFocusIfCanDraw]; + dontDraw = !dc.focusLocked; + } else { + dontDraw = ![view canDraw]; + } + if (dontDraw) { + goto end; + } + [[view window] disableFlushWindow]; + dc.view = view; + dc.context = [[NSGraphicsContext currentContext] graphicsPort]; + dc.portBounds = NSRectToCGRect([view bounds]); + if (dc.clipRgn) { + clipBounds = CGContextGetClipBoundingBox(dc.context); + } } else { - dc.context = NULL; + Tcl_Panic("TkMacOSXSetupDrawingContext(): " + "no NSView to draw into !"); } } else { Tcl_Panic("TkMacOSXSetupDrawingContext(): " - "no port or context to draw into !"); + "no context to draw into !"); } if (dc.context) { - CGContextConcatCTM(dc.context, CGAffineTransformMake(1.0, 0.0, 0.0, - -1.0, 0.0, dc.portBounds.bottom - dc.portBounds.top)); + CGAffineTransform t = { .a = 1, .b = 0, .c = 0, .d = -1, .tx = 0, + .ty = dc.portBounds.size.height}; + dc.portBounds.origin.x += macDraw->xOff; + dc.portBounds.origin.y += macDraw->yOff; + if (!dc.focusLocked) { + CGContextSaveGState(dc.context); + } + CGContextSetTextDrawingMode(dc.context, kCGTextFill); + CGContextConcatCTM(dc.context, t); if (dc.clipRgn) { #ifdef TK_MAC_DEBUG_DRAWING CGContextSaveGState(dc.context); ChkErr(HIShapeReplacePathInCGContext, dc.clipRgn, dc.context); - CGContextSetRGBFillColor(dc.context, 1.0, 0.0, 0.0, 0.2); + CGContextSetRGBFillColor(dc.context, 1.0, 0.0, 0.0, 0.1); CGContextEOFillPath(dc.context); CGContextRestoreGState(dc.context); #endif /* TK_MAC_DEBUG_DRAWING */ - ChkErr(HIShapeReplacePathInCGContext, dc.clipRgn, dc.context); - CGContextEOClip(dc.context); + CGRect r; + if (!HIShapeIsRectangular(dc.clipRgn) || !CGRectContainsRect( + *HIShapeGetBounds(dc.clipRgn, &r), + CGRectApplyAffineTransform(clipBounds, t))) { + ChkErr(HIShapeReplacePathInCGContext, dc.clipRgn, dc.context); + CGContextEOClip(dc.context); + } } if (gc) { static const CGLineCap cgCap[] = { - [CapNotLast] = kCGLineCapButt, - [CapButt] = kCGLineCapButt, - [CapRound] = kCGLineCapRound, - [CapProjecting] = kCGLineCapSquare, + [CapNotLast] = kCGLineCapButt, + [CapButt] = kCGLineCapButt, + [CapRound] = kCGLineCapRound, + [CapProjecting] = kCGLineCapSquare, }; static const CGLineJoin cgJoin[] = { - [JoinMiter] = kCGLineJoinMiter, - [JoinRound] = kCGLineJoinRound, - [JoinBevel] = kCGLineJoinBevel, + [JoinMiter] = kCGLineJoinMiter, + [JoinRound] = kCGLineJoinRound, + [JoinBevel] = kCGLineJoinBevel, }; bool shouldAntialias; double w = gc->line_width; - TkMacOSXSetColorInContext(gc->foreground, dc.context); - if (dc.port) { + TkMacOSXSetColorInContext(gc, gc->foreground, dc.context); + if (isWin) { CGContextSetPatternPhase(dc.context, CGSizeMake( - dc.portBounds.right - dc.portBounds.left, - dc.portBounds.bottom - dc.portBounds.top)); + dc.portBounds.size.width, dc.portBounds.size.height)); } if(gc->function != GXcopy) { TkMacOSXDbgMsg("Logical functions other than GXcopy are " @@ -1672,8 +1638,8 @@ TkMacOSXSetupDrawingContext( if (gc->line_style != LineSolid) { int num = 0; char *p = &(gc->dashes); - double dashOffset = gc->dash_offset; - float lengths[10]; + CGFloat dashOffset = gc->dash_offset; + CGFloat lengths[10]; while (p[num] != '\0' && num < 10) { lengths[num] = p[num]; @@ -1690,26 +1656,12 @@ TkMacOSXSetupDrawingContext( cgJoin[(unsigned)gc->join_style]); } } - } else if (dc.port) { - PixPatHandle savePat = penPat; - - ChkErr(GetThemeDrawingState, &dc.saveState); - penPat = NULL; - TkMacOSXSetUpGraphicsPort(gc, dc.port); - dc.penPat = penPat; - penPat = savePat; - dc.saveClip = NewRgn(); - GetPortClipRegion(dc.port, dc.saveClip); - if (dc.clipRgn) { - ChkErr(HIShapeSetQDClip, dc.clipRgn, dc.port); - } else { - NoQDClip(dc.port); - } - if (!tkPictureIsOpen) { - ShowPen(); - } } end: + if (dontDraw && dc.clipRgn) { + CFRelease(dc.clipRgn); + dc.clipRgn = NULL; + } *dcPtr = dc; return !dontDraw; } @@ -1736,38 +1688,16 @@ TkMacOSXRestoreDrawingContext( { if (dcPtr->context) { CGContextSynchronize(dcPtr->context); - if (dcPtr->saveState) { + [[dcPtr->view window] enableFlushWindow]; + if (dcPtr->focusLocked) { + [dcPtr->view unlockFocus]; + } else { CGContextRestoreGState(dcPtr->context); } - if (dcPtr->port) { - ChkErr(QDEndCGContext, dcPtr->port, &(dcPtr->context)); - } - } else if (dcPtr->port) { - if (!tkPictureIsOpen) { - HidePen(); - } - PenNormal(); - if (dcPtr->saveClip) { - SetPortClipRegion(dcPtr->port, dcPtr->saveClip); - DisposeRgn(dcPtr->saveClip); - } - if (dcPtr->penPat) { - if (!tmpPixPat) { - tmpPixPat = dcPtr->penPat; - } else { - DisposePixPat(dcPtr->penPat); - } - } - if (dcPtr->saveState) { - ChkErr(SetThemeDrawingState, dcPtr->saveState, true); - } } if (dcPtr->clipRgn) { CFRelease(dcPtr->clipRgn); } - if (dcPtr->portChanged) { - QDSwapPort(dcPtr->savePort, NULL); - } #ifdef TK_MAC_DEBUG bzero(dcPtr, sizeof(TkMacOSXDrawingContext)); #endif /* TK_MAC_DEBUG */ @@ -1796,35 +1726,31 @@ TkMacOSXGetClipRgn( { MacDrawable *macDraw = (MacDrawable *) drawable; HIShapeRef clipRgn = NULL; - CGRect r; if (macDraw->winPtr && macDraw->flags & TK_CLIP_INVALID) { TkMacOSXUpdateClipRgn(macDraw->winPtr); #ifdef TK_MAC_DEBUG_DRAWING - TkMacOSXDbgMsg("%s visRgn ", macDraw->winPtr->pathName); - TkMacOSXDebugFlashRegion(drawable, macDraw->visRgn); + TkMacOSXDbgMsg("%s", macDraw->winPtr->pathName); + NSView *view = TkMacOSXDrawableView(macDraw); + if ([view lockFocusIfCanDraw]) { + CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort]; + CGContextSaveGState(context); + CGContextConcatCTM(context, CGAffineTransformMake(1.0, 0.0, 0.0, + -1.0, 0.0, [view bounds].size.height)); + ChkErr(HIShapeReplacePathInCGContext, macDraw->visRgn, context); + CGContextSetRGBFillColor(context, 0.0, 1.0, 0.0, 0.1); + CGContextEOFillPath(context); + CGContextRestoreGState(context); + [view unlockFocus]; + } #endif /* TK_MAC_DEBUG_DRAWING */ } - if (macDraw->flags & TK_CLIPPED_DRAW) { - r = CGRectOffset(macDraw->drawRect, macDraw->xOff, macDraw->yOff); - } - if (macDraw->visRgn) { - if (macDraw->flags & TK_CLIPPED_DRAW) { - HIShapeRef rgn = HIShapeCreateWithRect(&r); - - clipRgn = HIShapeCreateIntersection(macDraw->visRgn, rgn); - CFRelease(rgn); - } else { - clipRgn = HIShapeCreateCopy(macDraw->visRgn); - } - } else if (macDraw->flags & TK_CLIPPED_DRAW) { - clipRgn = HIShapeCreateWithRect(&r); + if (macDraw->drawRgn) { + clipRgn = HIShapeCreateCopy(macDraw->drawRgn); + } else if (macDraw->visRgn) { + clipRgn = HIShapeCreateCopy(macDraw->visRgn); } -#ifdef TK_MAC_DEBUG_DRAWING - TkMacOSXDbgMsg("%s clipRgn ", macDraw->winPtr->pathName); - TkMacOSXDebugFlashRegion(drawable, clipRgn); -#endif /* TK_MAC_DEBUG_DRAWING */ return clipRgn; } @@ -1841,7 +1767,7 @@ TkMacOSXGetClipRgn( * None. * * Side effects: - * The clipping region in the current port is changed. + * None. * *---------------------------------------------------------------------- */ @@ -1850,16 +1776,6 @@ void TkMacOSXSetUpClippingRgn( Drawable drawable) /* Drawable to update. */ { - CGrafPtr port = TkMacOSXGetDrawablePort(drawable); - - if (port) { - HIShapeRef clipRgn = TkMacOSXGetClipRgn(drawable); - - if (clipRgn) { - ChkErr(HIShapeSetQDClip, clipRgn, port); - CFRelease(clipRgn); - } - } } /* @@ -1868,7 +1784,7 @@ TkMacOSXSetUpClippingRgn( * TkpClipDrawableToRect -- * * Clip all drawing into the drawable d to the given rectangle. - * If width and height are negative, reset to no clipping. + * If width or height are negative, reset to no clipping. * * Results: * None. @@ -1887,13 +1803,38 @@ TkpClipDrawableToRect( int width, int height) { MacDrawable *macDraw = (MacDrawable *) d; + NSView *view = TkMacOSXDrawableView(macDraw); - if (width < 0 && height < 0) { - macDraw->drawRect = CGRectNull; - macDraw->flags &= ~TK_CLIPPED_DRAW; + if (macDraw->drawRgn) { + CFRelease(macDraw->drawRgn); + macDraw->drawRgn = NULL; + } + if (width >= 0 && height >= 0) { + CGRect drawRect = CGRectMake(x + macDraw->xOff, y + macDraw->yOff, + width, height); + HIShapeRef drawRgn = HIShapeCreateWithRect(&drawRect); + + if (macDraw->winPtr && macDraw->flags & TK_CLIP_INVALID) { + TkMacOSXUpdateClipRgn(macDraw->winPtr); + } + if (macDraw->visRgn) { + macDraw->drawRgn = HIShapeCreateIntersection(macDraw->visRgn, + drawRgn); + CFRelease(drawRgn); + } else { + macDraw->drawRgn = drawRgn; + } + if (view && view != [NSView focusView] && [view lockFocusIfCanDraw]) { + drawRect.origin.y = [view bounds].size.height - + (drawRect.origin.y + drawRect.size.height); + NSRectClip(NSRectFromCGRect(drawRect)); + macDraw->flags |= TK_FOCUSED_VIEW; + } } else { - macDraw->drawRect = CGRectMake(x, y, width, height); - macDraw->flags |= TK_CLIPPED_DRAW; + if (view && (macDraw->flags & TK_FOCUSED_VIEW)) { + [view unlockFocus]; + macDraw->flags &= ~TK_FOCUSED_VIEW; + } } } @@ -1926,9 +1867,7 @@ ClipToGC( int yOffset = ((MacDrawable *) d)->yOff + gc->clip_y_origin; HIShapeRef clipRgn = *clipRgnPtr, gcClipRgn; - if (!tkPictureIsOpen) { - TkMacOSXOffsetRegion(gcClip, xOffset, yOffset); - } + TkMacOSXOffsetRegion(gcClip, xOffset, yOffset); gcClipRgn = TkMacOSXGetNativeRegion(gcClip); if (clipRgn) { *clipRgnPtr = HIShapeCreateIntersection(gcClipRgn, clipRgn); @@ -1937,39 +1876,8 @@ ClipToGC( *clipRgnPtr = HIShapeCreateCopy(gcClipRgn); } CFRelease(gcClipRgn); - if (!tkPictureIsOpen) { - TkMacOSXOffsetRegion(gcClip, -xOffset, -yOffset); - } - } -} - -/* - *---------------------------------------------------------------------- - * - * NoQDClip -- - * - * Helper function to setup a QD port to not clip anything. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -static void -NoQDClip( - CGrafPtr port) -{ - static RgnHandle noClipRgn = NULL; - - if (!noClipRgn) { - noClipRgn = NewRgn(); - SetRectRgn(noClipRgn, SHRT_MIN, SHRT_MIN, SHRT_MAX, SHRT_MAX); + TkMacOSXOffsetRegion(gcClip, -xOffset, -yOffset); } - SetPortClipRegion(port, noClipRgn); } /* @@ -1991,45 +1899,12 @@ NoQDClip( *---------------------------------------------------------------------- */ -BitMapPtr +void * TkMacOSXMakeStippleMap( Drawable drawable, /* Window to apply stipple. */ Drawable stipple) /* The stipple pattern. */ { - CGrafPtr stipplePort; - BitMapPtr bitmapPtr; - const BitMap *stippleBitmap; - Rect portRect; - int width, height, stippleHeight, stippleWidth, i, j; - Rect bounds; - - GetPortBounds(TkMacOSXGetDrawablePort(drawable), &portRect); - width = portRect.right - portRect.left; - height = portRect.bottom - portRect.top; - bitmapPtr = (BitMap *) ckalloc(sizeof(BitMap)); - bitmapPtr->bounds.top = bitmapPtr->bounds.left = 0; - bitmapPtr->bounds.right = (short) width; - bitmapPtr->bounds.bottom = (short) height; - bitmapPtr->rowBytes = (width / 8) + 1; - bitmapPtr->baseAddr = ckalloc(height * bitmapPtr->rowBytes); - - stipplePort = TkMacOSXGetDrawablePort(stipple); - stippleBitmap = GetPortBitMapForCopyBits(stipplePort); - GetPortBounds(stipplePort, &portRect); - stippleWidth = portRect.right - portRect.left; - stippleHeight = portRect.bottom - portRect.top; - - for (i = 0; i < height; i += stippleHeight) { - for (j = 0; j < width; j += stippleWidth) { - bounds.left = j; - bounds.top = i; - bounds.right = j + stippleWidth; - bounds.bottom = i + stippleHeight; - CopyBits(stippleBitmap, bitmapPtr, &portRect, &bounds, srcCopy, - NULL); - } - } - return bitmapPtr; + return NULL; } /* @@ -2117,3 +1992,12 @@ TkpDrawFrame( Tk_Height(tkwin) - 2 * highlightWidth, borderWidth, relief); } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXEmbed.c b/macosx/tkMacOSXEmbed.c index c5de78d..6a366db 100644 --- a/macosx/tkMacOSXEmbed.c +++ b/macosx/tkMacOSXEmbed.c @@ -3,50 +3,47 @@ * * This file contains platform-specific procedures for theMac to provide * basic operations needed for application embedding (where one - * application can use as its main window an internal window from - * some other application). - * Currently only Toplevel embedding within the same Tk application is - * allowed on the Macintosh. + * application can use as its main window an internal window from some + * other application). Currently only Toplevel embedding within the same + * Tk application is allowed on the Macintosh. * * Copyright (c) 1996-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2008 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#include "tkMacOSXInt.h" +#include "tkMacOSXPrivate.h" /* * One of the following structures exists for each container in this - * application. It keeps track of the container window and its - * associated embedded window. + * application. It keeps track of the container window and its associated + * embedded window. */ typedef struct Container { - Window parent; /* The Mac Drawable for the parent of - * the pair (the container). */ - TkWindow *parentPtr; /* Tk's information about the container, - * or NULL if the container isn't + Window parent; /* The Mac Drawable for the parent of the pair + * (the container). */ + TkWindow *parentPtr; /* Tk's information about the container, or + * NULL if the container isn't in this + * process. */ + Window embedded; /* The MacDrawable for the embedded window. + * Starts off as None, but gets filled in when + * the window is eventually created. */ + TkWindow *embeddedPtr; /* Tk's information about the embedded window, + * or NULL if the embedded application isn't * in this process. */ - Window embedded; /* The MacDrawable for the embedded - * window. Starts off as None, but - * gets filled in when the window is - * eventually created. */ - TkWindow *embeddedPtr; /* Tk's information about the embedded - * window, or NULL if the - * embedded application isn't in - * this process. */ - struct Container *nextPtr; /* Next in list of all containers in - * this process. */ + struct Container *nextPtr; /* Next in list of all containers in this + * process. */ } Container; static Container *firstContainerPtr = NULL; - /* First in list of all containers - * managed by this process. */ + /* First in list of all containers managed by + * this process. */ /* - * Globals defined in this file + * Globals defined in this file: */ TkMacOSXEmbedHandler *tkMacOSXEmbedHandler = NULL; @@ -55,25 +52,24 @@ TkMacOSXEmbedHandler *tkMacOSXEmbedHandler = NULL; * Prototypes for static procedures defined in this file: */ -static void ContainerEventProc(ClientData clientData, XEvent *eventPtr); -static void EmbeddedEventProc(ClientData clientData, XEvent *eventPtr); -static void EmbedActivateProc(ClientData clientData, XEvent *eventPtr); -static void EmbedFocusProc(ClientData clientData, XEvent *eventPtr); -static void EmbedGeometryRequest(Container * containerPtr, int width, - int height); -static void EmbedSendConfigure(Container *containerPtr); -static void EmbedStructureProc(ClientData clientData, XEvent *eventPtr); -static void EmbedWindowDeleted(TkWindow *winPtr); - +static void ContainerEventProc(ClientData clientData, XEvent *eventPtr); +static void EmbeddedEventProc(ClientData clientData, XEvent *eventPtr); +static void EmbedActivateProc(ClientData clientData, XEvent *eventPtr); +static void EmbedFocusProc(ClientData clientData, XEvent *eventPtr); +static void EmbedGeometryRequest(Container *containerPtr, int width, + int height); +static void EmbedSendConfigure(Container *containerPtr); +static void EmbedStructureProc(ClientData clientData, XEvent *eventPtr); +static void EmbedWindowDeleted(TkWindow *winPtr); /* *---------------------------------------------------------------------- * * Tk_MacOSXSetEmbedHandler -- * - * Registers a handler for an in process form of embedding, like - * Netscape plugins, where Tk is loaded into the process, but does - * not control the main window + * Registers a handler for an in process form of embedding, like Netscape + * plugins, where Tk is loaded into the process, but does not control the + * main window * * Results: * None @@ -93,7 +89,8 @@ Tk_MacOSXSetEmbedHandler( Tk_MacOSXEmbedGetOffsetInParentProc *getOffsetProc) { if (tkMacOSXEmbedHandler == NULL) { - tkMacOSXEmbedHandler = (TkMacOSXEmbedHandler *) ckalloc(sizeof(TkMacOSXEmbedHandler)); + tkMacOSXEmbedHandler = (TkMacOSXEmbedHandler *) + ckalloc(sizeof(TkMacOSXEmbedHandler)); } tkMacOSXEmbedHandler->registerWinProc = registerWinProc; tkMacOSXEmbedHandler->getPortProc = getPortProc; @@ -126,9 +123,8 @@ TkpMakeWindow( MacDrawable *macWin; /* - * If this window is marked as embedded then - * the window structure should have already been - * created in the TkpUseWindow function. + * If this window is marked as embedded then the window structure should + * have already been created in the TkpUseWindow function. */ if (Tk_IsEmbedded(winPtr)) { @@ -147,26 +143,27 @@ TkpMakeWindow( winPtr->privatePtr = macWin; macWin->visRgn = NULL; macWin->aboveVisRgn = NULL; - macWin->drawRect = CGRectNull; + macWin->drawRgn = NULL; macWin->referenceCount = 0; macWin->flags = TK_CLIP_INVALID; - macWin->grafPtr = NULL; + macWin->view = nil; macWin->context = NULL; macWin->size = CGSizeZero; if (Tk_IsTopLevel(macWin->winPtr)) { /* - *This will be set when we are mapped. + * This will be set when we are mapped. */ + macWin->xOff = 0; macWin->yOff = 0; macWin->toplevel = macWin; - } else { + } else if (winPtr->parentPtr) { macWin->xOff = winPtr->parentPtr->privatePtr->xOff + - winPtr->parentPtr->changes.border_width + - winPtr->changes.x; + winPtr->parentPtr->changes.border_width + + winPtr->changes.x; macWin->yOff = winPtr->parentPtr->privatePtr->yOff + - winPtr->parentPtr->changes.border_width + - winPtr->changes.y; + winPtr->parentPtr->changes.border_width + + winPtr->changes.y; macWin->toplevel = winPtr->parentPtr->privatePtr->toplevel; } macWin->toplevel->referenceCount++; @@ -179,15 +176,15 @@ TkpMakeWindow( * * TkpUseWindow -- * - * This procedure causes a Tk window to use a given X window as - * its parent window, rather than the root window for the screen. - * It is invoked by an embedded application to specify the window - * in which it is embedded. + * This procedure causes a Tk window to use a given X window as its + * parent window, rather than the root window for the screen. It is + * invoked by an embedded application to specify the window in which it + * is embedded. * * Results: - * The return value is normally TCL_OK. If an error occurs (such - * as string not being a valid window spec), then the return value - * is TCL_ERROR and an error message is left in the interp's result if + * The return value is normally TCL_OK. If an error occurs (such as + * string not being a valid window spec), then the return value is + * TCL_ERROR and an error message is left in the interp's result if * interp is non-NULL. * * Side effects: @@ -198,12 +195,12 @@ TkpMakeWindow( int TkpUseWindow( - Tcl_Interp *interp, /* If not NULL, used for error reporting - * if string is bogus. */ + Tcl_Interp *interp, /* If not NULL, used for error reporting if + * string is bogus. */ Tk_Window tkwin, /* Tk window that does not yet have an * associated X window. */ - CONST char *string) /* String identifying an X window to use - * for tkwin; must be an integer value. */ + const char *string) /* String identifying an X window to use for + * tkwin; must be an integer value. */ { TkWindow *winPtr = (TkWindow *) tkwin; TkWindow *usePtr; @@ -217,13 +214,12 @@ TkpUseWindow( } /* - * Decode the container pointer, and look for it among the - * list of available containers. + * Decode the container pointer, and look for it among the list of + * available containers. * * N.B. For now, we are limiting the containers to be in the same Tk - * application as tkwin, since otherwise they would not be in our list - * of containers. - * + * application as tkwin, since otherwise they would not be in our list of + * containers. */ if (Tcl_GetInt(interp, string, (int*) &parent) != TCL_OK) { @@ -245,8 +241,8 @@ TkpUseWindow( */ /* - * Save information about the container and the embedded window - * in a Container structure. Currently, there must already be an existing + * Save information about the container and the embedded window in a + * Container structure. Currently, there must already be an existing * Container structure, since we only allow the case where both container * and embedded app. are in the same process. */ @@ -274,19 +270,19 @@ TkpUseWindow( winPtr->privatePtr = macWin; /* - * The grafPtr will be NULL for a Tk in Tk embedded window. - * It is none of our business what it is for a Tk not in Tk embedded window, - * but we will initialize it to NULL, and let the registerWinProc - * set it. In any case, you must always use TkMacOSXGetDrawablePort - * to get the portPtr. It will correctly find the container's port. + * The grafPtr will be NULL for a Tk in Tk embedded window. It is none of + * our business what it is for a Tk not in Tk embedded window, but we will + * initialize it to NULL, and let the registerWinProc set it. In any case, + * you must always use TkMacOSXGetDrawablePort to get the portPtr. It will + * correctly find the container's port. */ - macWin->grafPtr = NULL; + macWin->view = nil; macWin->context = NULL; macWin->size = CGSizeZero; macWin->visRgn = NULL; macWin->aboveVisRgn = NULL; - macWin->drawRect = CGRectNull; + macWin->drawRgn = NULL; macWin->referenceCount = 0; macWin->flags = TK_CLIP_INVALID; macWin->toplevel = macWin; @@ -294,19 +290,17 @@ TkpUseWindow( winPtr->flags |= TK_EMBEDDED; - /* - * Make a copy of the TK_EMBEDDED flag, since sometimes - * we need this to get the port after the TkWindow structure - * has been freed. + * Make a copy of the TK_EMBEDDED flag, since sometimes we need this to + * get the port after the TkWindow structure has been freed. */ macWin->flags |= TK_EMBEDDED; /* - * Now check whether it is embedded in another Tk widget. If not (the first - * case below) we see if there is an in-process embedding handler registered, - * and if so, let that fill in the rest of the macWin. + * Now check whether it is embedded in another Tk widget. If not (the + * first case below) we see if there is an in-process embedding handler + * registered, and if so, let that fill in the rest of the macWin. */ if (containerPtr == NULL) { @@ -316,7 +310,7 @@ TkpUseWindow( */ if (tkMacOSXEmbedHandler == NULL || - tkMacOSXEmbedHandler->registerWinProc((int) parent, + tkMacOSXEmbedHandler->registerWinProc((long) parent, (Tk_Window) winPtr) != TCL_OK) { Tcl_AppendResult(interp, "The window ID ", string, " does not correspond to a valid Tk Window.", NULL); @@ -329,10 +323,8 @@ TkpUseWindow( containerPtr->embeddedPtr = macWin->winPtr; containerPtr->nextPtr = firstContainerPtr; firstContainerPtr = containerPtr; - } } else { - /* * The window is embedded in another Tk window. */ @@ -344,10 +336,9 @@ TkpUseWindow( parent->winPtr->changes.border_width + winPtr->changes.y; - /* - * Finish filling up the container structure with the embedded window's - * information. + * Finish filling up the container structure with the embedded + * window's information. */ containerPtr->embedded = (Window) macWin; @@ -359,8 +350,7 @@ TkpUseWindow( */ Tk_CreateEventHandler(tkwin, StructureNotifyMask, EmbeddedEventProc, - (ClientData) winPtr); - + winPtr); } return TCL_OK; @@ -371,10 +361,10 @@ TkpUseWindow( * * TkpMakeContainer -- * - * This procedure is called to indicate that a particular window - * will be a container for an embedded application. This changes - * certain aspects of the window's behavior, such as whether it - * will receive events anymore. + * This procedure is called to indicate that a particular window will be + * a container for an embedded application. This changes certain aspects + * of the window's behavior, such as whether it will receive events + * anymore. * * Results: * None. @@ -387,18 +377,17 @@ TkpUseWindow( void TkpMakeContainer( - Tk_Window tkwin) /* Token for a window that is about to - * become a container. */ + Tk_Window tkwin) /* Token for a window that is about to become + * a container. */ { TkWindow *winPtr = (TkWindow *) tkwin; Container *containerPtr; /* - * Register the window as a container so that, for example, we can - * make sure the argument to -use is valid. + * Register the window as a container so that, for example, we can make + * sure the argument to -use is valid. */ - Tk_MakeWindowExist(tkwin); containerPtr = (Container *) ckalloc(sizeof(Container)); containerPtr->parent = Tk_WindowId(tkwin); @@ -410,23 +399,22 @@ TkpMakeContainer( winPtr->flags |= TK_CONTAINER; /* - * Request SubstructureNotify events so that we can find out when - * the embedded application creates its window or attempts to - * resize it. Also watch Configure events on the container so that - * we can resize the child to match. Also, pass activate events from - * the container down to the embedded toplevel. + * Request SubstructureNotify events so that we can find out when the + * embedded application creates its window or attempts to resize it. Also + * watch Configure events on the container so that we can resize the child + * to match. Also, pass activate events from the container down to the + * embedded toplevel. */ Tk_CreateEventHandler(tkwin, SubstructureNotifyMask|SubstructureRedirectMask, - ContainerEventProc, (ClientData) winPtr); + ContainerEventProc, winPtr); Tk_CreateEventHandler(tkwin, StructureNotifyMask, EmbedStructureProc, - (ClientData) containerPtr); + containerPtr); Tk_CreateEventHandler(tkwin, ActivateMask, EmbedActivateProc, - (ClientData) containerPtr); + containerPtr); Tk_CreateEventHandler(tkwin, FocusChangeMask, EmbedFocusProc, - (ClientData) containerPtr); - + containerPtr); } /* @@ -438,8 +426,7 @@ TkpMakeContainer( * identifier for the associated container window. * * Results: - * The return value is the MacDrawable for winPtr's - * container window. + * The return value is the MacDrawable for winPtr's container window. * * Side effects: * None. @@ -448,8 +435,8 @@ TkpMakeContainer( */ MacDrawable * -TkMacOSXContainerId(winPtr) - TkWindow *winPtr; /* Tk's structure for an embedded window. */ +TkMacOSXContainerId( + TkWindow *winPtr) /* Tk's structure for an embedded window. */ { Container *containerPtr; @@ -468,8 +455,8 @@ TkMacOSXContainerId(winPtr) * * TkMacOSXGetHostToplevel -- * - * Given the TkWindow, return the MacDrawable for the outermost - * toplevel containing it. This will be a real Macintosh window. + * Given the TkWindow, return the MacDrawable for the outermost toplevel + * containing it. This will be a real Macintosh window. * * Results: * Returns a MacDrawable corresponding to a Macintosh Toplevel @@ -488,20 +475,18 @@ TkMacOSXGetHostToplevel( topWinPtr = winPtr->privatePtr->toplevel->winPtr; if (!Tk_IsEmbedded(topWinPtr)) { - return winPtr->privatePtr->toplevel; - } else { - contWinPtr = TkpGetOtherWindow(topWinPtr); + return winPtr->privatePtr->toplevel; + } + contWinPtr = TkpGetOtherWindow(topWinPtr); - /* - * TODO: Here we should handle out of process embedding. - */ + /* + * TODO: Here we should handle out of process embedding. + */ - if (contWinPtr != NULL) { - return TkMacOSXGetHostToplevel(contWinPtr); - } else { - return None; - } + if (contWinPtr == NULL) { + return None; } + return TkMacOSXGetHostToplevel(contWinPtr); } /* @@ -509,10 +494,10 @@ TkMacOSXGetHostToplevel( * * TkpClaimFocus -- * - * This procedure is invoked when someone asks for the input focus - * to be put on a window in an embedded application, but the - * application doesn't currently have the focus. It requests the - * input focus from the container application. + * This procedure is invoked when someone asks for the input focus to be + * put on a window in an embedded application, but the application + * doesn't currently have the focus. It requests the input focus from the + * container application. * * Results: * None. @@ -525,11 +510,11 @@ TkMacOSXGetHostToplevel( void TkpClaimFocus( - TkWindow *topLevelPtr, /* Top-level window containing desired - * focus window; should be embedded. */ - int force) /* One means that the container should - * claim the focus if it doesn't - * currently have it. */ + TkWindow *topLevelPtr, /* Top-level window containing desired focus + * window; should be embedded. */ + int force) /* One means that the container should claim + * the focus if it doesn't currently have + * it. */ { XEvent event; Container *containerPtr; @@ -544,7 +529,6 @@ TkpClaimFocus( /* Empty loop body. */ } - event.xfocus.type = FocusIn; event.xfocus.serial = LastKnownRequestProcessed(topLevelPtr->display); event.xfocus.send_event = 1; @@ -560,9 +544,8 @@ TkpClaimFocus( * * TkpTestembedCmd -- * - * This procedure implements the "testembed" command. It returns - * some or all of the information in the list pointed to by - * firstContainerPtr. + * This procedure implements the "testembed" command. It returns some or + * all of the information in the list pointed to by firstContainerPtr. * * Results: * A standard Tcl result. @@ -578,7 +561,7 @@ TkpTestembedCmd( ClientData clientData, /* Main window for application. */ Tcl_Interp *interp, /* Current interpreter. */ int argc, /* Number of arguments. */ - CONST char **argv) /* Argument strings. */ + const char **argv) /* Argument strings. */ { int all; Container *containerPtr; @@ -596,13 +579,11 @@ TkpTestembedCmd( Tcl_DStringStartSublist(&dString); if (containerPtr->parent == None) { Tcl_DStringAppendElement(&dString, ""); + } else if (all) { + sprintf(buffer, "0x%x", (int) containerPtr->parent); + Tcl_DStringAppendElement(&dString, buffer); } else { - if (all) { - sprintf(buffer, "0x%x", (int) containerPtr->parent); - Tcl_DStringAppendElement(&dString, buffer); - } else { - Tcl_DStringAppendElement(&dString, "XXX"); - } + Tcl_DStringAppendElement(&dString, "XXX"); } if (containerPtr->parentPtr == NULL) { Tcl_DStringAppendElement(&dString, ""); @@ -612,13 +593,11 @@ TkpTestembedCmd( } if (containerPtr->embedded == None) { Tcl_DStringAppendElement(&dString, ""); + } else if (all) { + sprintf(buffer, "0x%x", (int) containerPtr->embedded); + Tcl_DStringAppendElement(&dString, buffer); } else { - if (all) { - sprintf(buffer, "0x%x", (int) containerPtr->embedded); - Tcl_DStringAppendElement(&dString, buffer); - } else { - Tcl_DStringAppendElement(&dString, "XXX"); - } + Tcl_DStringAppendElement(&dString, "XXX"); } if (containerPtr->embeddedPtr == NULL) { Tcl_DStringAppendElement(&dString, ""); @@ -637,13 +616,13 @@ TkpTestembedCmd( * * TkpRedirectKeyEvent -- * - * This procedure is invoked when a key press or release event - * arrives for an application that does not believe it owns the - * input focus. This can happen because of embedding; for example, - * X can send an event to an embedded application when the real - * focus window is in the container application and is an ancestor - * of the container. This procedure's job is to forward the event - * back to the application where it really belongs. + * This procedure is invoked when a key press or release event arrives + * for an application that does not believe it owns the input focus. This + * can happen because of embedding; for example, X can send an event to + * an embedded application when the real focus window is in the container + * application and is an ancestor of the container. This procedure's job + * is to forward the event back to the application where it really + * belongs. * * Results: * None. @@ -658,9 +637,10 @@ void TkpRedirectKeyEvent( TkWindow *winPtr, /* Window to which the event was originally * reported. */ - XEvent *eventPtr) /* X event to redirect (should be KeyPress - * or KeyRelease). */ + XEvent *eventPtr) /* X event to redirect (should be KeyPress or + * KeyRelease). */ { + /* TODO: Implement this or decide it definitely needs no implementation */ } /* @@ -668,13 +648,13 @@ TkpRedirectKeyEvent( * * TkpGetOtherWindow -- * - * If both the container and embedded window are in the same - * process, this procedure will return either one, given the other. + * If both the container and embedded window are in the same process, + * this procedure will return either one, given the other. * * Results: * If winPtr is a container, the return value is the token for the - * embedded window, and vice versa. If the "other" window isn't in - * this process, NULL is returned. + * embedded window, and vice versa. If the "other" window isn't in this + * process, NULL is returned. * * Side effects: * None. @@ -684,14 +664,14 @@ TkpRedirectKeyEvent( TkWindow * TkpGetOtherWindow( - TkWindow *winPtr) /* Tk's structure for a container or - * embedded window. */ + TkWindow *winPtr) /* Tk's structure for a container or embedded + * window. */ { Container *containerPtr; /* - * TkpGetOtherWindow returns NULL if both windows are not - * in the same process... + * TkpGetOtherWindow returns NULL if both windows are not in the same + * process... */ if (!(winPtr->flags & TK_BOTH_HALVES)) { @@ -733,7 +713,7 @@ EmbeddedEventProc( ClientData clientData, /* Token for container window. */ XEvent *eventPtr) /* ResizeRequest event. */ { - TkWindow *winPtr = (TkWindow *) clientData; + TkWindow *winPtr = clientData; if (eventPtr->type == DestroyNotify) { EmbedWindowDeleted(winPtr); @@ -746,19 +726,19 @@ EmbeddedEventProc( * ContainerEventProc -- * * This procedure is invoked by the Tk event dispatcher when various - * useful events are received for the children of a container - * window. It forwards relevant information, such as geometry - * requests, from the events into the container's application. + * useful events are received for the children of a container window. It + * forwards relevant information, such as geometry requests, from the + * events into the container's application. * - * NOTE: on the Mac, only the DestroyNotify branch is ever taken. - * We don't synthesize the other events. + * NOTE: on the Mac, only the DestroyNotify branch is ever taken. We + * don't synthesize the other events. * * Results: * None. * * Side effects: - * Depends on the event. For example, when ConfigureRequest events - * occur, geometry information gets set for the container window. + * Depends on the event. For example, when ConfigureRequest events occur, + * geometry information gets set for the container window. * *---------------------------------------------------------------------- */ @@ -768,18 +748,18 @@ ContainerEventProc( ClientData clientData, /* Token for container window. */ XEvent *eventPtr) /* ResizeRequest event. */ { - TkWindow *winPtr = (TkWindow *) clientData; + TkWindow *winPtr = clientData; Container *containerPtr; Tk_ErrorHandler errHandler; /* - * Ignore any X protocol errors that happen in this procedure - * (almost any operation could fail, for example, if the embedded - * application has deleted its window). + * Ignore any X protocol errors that happen in this procedure (almost any + * operation could fail, for example, if the embedded application has + * deleted its window). */ errHandler = Tk_CreateErrorHandler(eventPtr->xfocus.display, -1, - -1, -1, (Tk_ErrorProc *) NULL, (ClientData) NULL); + -1, -1, NULL, NULL); /* * Find the Container structure associated with the parent window. @@ -795,10 +775,9 @@ ContainerEventProc( if (eventPtr->type == CreateNotify) { /* - * A new child window has been created in the container. Record - * its id in the Container structure (if more than one child is - * created, just remember the last one and ignore the earlier - * ones). + * A new child window has been created in the container. Record its id + * in the Container structure (if more than one child is created, just + * remember the last one and ignore the earlier ones). */ containerPtr->embedded = eventPtr->xcreatewindow.window; @@ -806,14 +785,13 @@ ContainerEventProc( if ((eventPtr->xconfigurerequest.x != 0) || (eventPtr->xconfigurerequest.y != 0)) { /* - * The embedded application is trying to move itself, which - * isn't legal. At this point, the window hasn't actually - * moved, but we need to send it a ConfigureNotify event to - * let it know that its request has been denied. If the - * embedded application was also trying to resize itself, a - * ConfigureNotify will be sent by the geometry management - * code below, so we don't need to do anything. Otherwise, - * generate a synthetic event. + * The embedded application is trying to move itself, which isn't + * legal. At this point, the window hasn't actually moved, but we + * need to send it a ConfigureNotify event to let it know that its + * request has been denied. If the embedded application was also + * trying to resize itself, a ConfigureNotify will be sent by the + * geometry management code below, so we don't need to do + * anything. Otherwise, generate a synthetic event. */ if ((eventPtr->xconfigurerequest.width == winPtr->changes.width) @@ -828,8 +806,8 @@ ContainerEventProc( } else if (eventPtr->type == MapRequest) { /* * The embedded application's map request was ignored and simply - * passed on to us, so we have to map the window for it to appear - * on the screen. + * passed on to us, so we have to map the window for it to appear on + * the screen. */ XMapWindow(eventPtr->xmaprequest.display, @@ -849,11 +827,10 @@ ContainerEventProc( * * EmbedStructureProc -- * - * This procedure is invoked by the Tk event dispatcher when - * a container window owned by this application gets resized - * (and also at several other times that we don't care about). - * This procedure reflects the size change in the embedded - * window that corresponds to the container. + * This procedure is invoked by the Tk event dispatcher when a container + * window owned by this application gets resized (and also at several + * other times that we don't care about). This procedure reflects the + * size change in the embedded window that corresponds to the container. * * Results: * None. @@ -869,7 +846,7 @@ EmbedStructureProc( ClientData clientData, /* Token for container window. */ XEvent *eventPtr) /* ResizeRequest event. */ { - Container *containerPtr = (Container *) clientData; + Container *containerPtr = clientData; Tk_ErrorHandler errHandler; if (eventPtr->type == ConfigureNotify) { @@ -880,12 +857,10 @@ EmbedStructureProc( */ errHandler = Tk_CreateErrorHandler(eventPtr->xfocus.display, -1, - -1, -1, (Tk_ErrorProc *) NULL, (ClientData) NULL); + -1, -1, NULL, NULL); Tk_MoveResizeWindow((Tk_Window) containerPtr->embeddedPtr, 0, 0, - (unsigned int) Tk_Width( - (Tk_Window) containerPtr->parentPtr), - (unsigned int) Tk_Height( - (Tk_Window) containerPtr->parentPtr)); + (unsigned) Tk_Width((Tk_Window) containerPtr->parentPtr), + (unsigned) Tk_Height((Tk_Window)containerPtr->parentPtr)); Tk_DeleteErrorHandler(errHandler); } } else if (eventPtr->type == DestroyNotify) { @@ -898,10 +873,10 @@ EmbedStructureProc( * * EmbedActivateProc -- * - * This procedure is invoked by the Tk event dispatcher when - * Activate and Deactivate events occur for a container window owned - * by this application. It is responsible for forwarding an activate - * event down into the embedded toplevel. + * This procedure is invoked by the Tk event dispatcher when Activate and + * Deactivate events occur for a container window owned by this + * application. It is responsible for forwarding an activate event down + * into the embedded toplevel. * * Results: * None. @@ -917,7 +892,7 @@ EmbedActivateProc( ClientData clientData, /* Token for container window. */ XEvent *eventPtr) /* ResizeRequest event. */ { - Container *containerPtr = (Container *) clientData; + Container *containerPtr = clientData; if (containerPtr->embeddedPtr != NULL) { if (eventPtr->type == ActivateNotify) { @@ -933,11 +908,10 @@ EmbedActivateProc( * * EmbedFocusProc -- * - * This procedure is invoked by the Tk event dispatcher when - * FocusIn and FocusOut events occur for a container window owned - * by this application. It is responsible for moving the focus - * back and forth between a container application and an embedded - * application. + * This procedure is invoked by the Tk event dispatcher when FocusIn and + * FocusOut events occur for a container window owned by this + * application. It is responsible for moving the focus back and forth + * between a container application and an embedded application. * * Results: * None. @@ -953,37 +927,37 @@ EmbedFocusProc( ClientData clientData, /* Token for container window. */ XEvent *eventPtr) /* ResizeRequest event. */ { - Container *containerPtr = (Container *) clientData; + Container *containerPtr = clientData; Display *display; XEvent event; if (containerPtr->embeddedPtr != NULL) { - display = Tk_Display(containerPtr->parentPtr); + display = Tk_Display(containerPtr->parentPtr); event.xfocus.serial = LastKnownRequestProcessed(display); event.xfocus.send_event = false; event.xfocus.display = display; event.xfocus.mode = NotifyNormal; event.xfocus.window = containerPtr->embedded; - if (eventPtr->type == FocusIn) { - /* - * The focus just arrived at the container. Change the X focus - * to move it to the embedded application, if there is one. - * Ignore X errors that occur during this operation (it's - * possible that the new focus window isn't mapped). - */ + if (eventPtr->type == FocusIn) { + /* + * The focus just arrived at the container. Change the X focus to + * move it to the embedded application, if there is one. Ignore X + * errors that occur during this operation (it's possible that the + * new focus window isn't mapped). + */ event.xfocus.detail = NotifyNonlinear; event.xfocus.type = FocusIn; - } else if (eventPtr->type == FocusOut) { - /* When the container gets a FocusOut event, it has to tell the embedded app - * that it has lost the focus. - */ + /* + * When the container gets a FocusOut event, it has to tell the + * embedded app that it has lost the focus. + */ event.xfocus.type = FocusOut; event.xfocus.detail = NotifyNonlinear; - } + } Tk_QueueWindowEvent(&event, TCL_QUEUE_MARK); } @@ -994,10 +968,10 @@ EmbedFocusProc( * * EmbedGeometryRequest -- * - * This procedure is invoked when an embedded application requests - * a particular size. It processes the request (which may or may - * not actually honor the request) and reflects the results back - * to the embedded application. + * This procedure is invoked when an embedded application requests a + * particular size. It processes the request (which may or may not + * actually honor the request) and reflects the results back to the + * embedded application. * * NOTE: On the Mac, this is a stub, since we don't synthesize * ConfigureRequest events. @@ -1006,10 +980,10 @@ EmbedFocusProc( * None. * * Side effects: - * If we deny the child's size change request, a Configure event - * is synthesized to let the child know how big it ought to be. - * Events get processed while we're waiting for the geometry - * managers to do their thing. + * If we deny the child's size change request, a Configure event is + * synthesized to let the child know how big it ought to be. Events get + * processed while we're waiting for the geometry managers to do their + * thing. * *---------------------------------------------------------------------- */ @@ -1022,13 +996,13 @@ EmbedGeometryRequest( TkWindow *winPtr = containerPtr->parentPtr; /* - * Forward the requested size into our geometry management hierarchy - * via the container window. We need to send a Configure event back - * to the embedded application if we decide not to honor its - * request; to make this happen, process all idle event handlers - * synchronously here (so that the geometry managers have had a - * chance to do whatever they want to do), and if the window's size - * didn't change then generate a configure event. + * Forward the requested size into our geometry management hierarchy via + * the container window. We need to send a Configure event back to the + * embedded application if we decide not to honor its request; to make + * this happen, process all idle event handlers synchronously here (so + * that the geometry managers have had a chance to do whatever they want + * to do), and if the window's size didn't change then generate a + * configure event. */ Tk_GeometryRequest((Tk_Window) winPtr, width, height); @@ -1046,13 +1020,12 @@ EmbedGeometryRequest( * * EmbedSendConfigure -- * - * This is currently a stub. It is called to notify an - * embedded application of its current size and location. This - * procedure is called when the embedded application made a - * geometry request that we did not grant, so that the embedded - * application knows that its geometry didn't change after all. - * It is a response to ConfigureRequest events, which we do not - * currently synthesize on the Mac + * This is currently a stub. It is called to notify an embedded + * application of its current size and location. This procedure is called + * when the embedded application made a geometry request that we did not + * grant, so that the embedded application knows that its geometry didn't + * change after all. It is a response to ConfigureRequest events, which + * we do not currently synthesize on the Mac * * Results: * None. @@ -1074,9 +1047,9 @@ EmbedSendConfigure( * * EmbedWindowDeleted -- * - * This procedure is invoked when a window involved in embedding - * (as either the container or the embedded application) is - * destroyed. It cleans up the Container structure for the window. + * This procedure is invoked when a window involved in embedding (as + * either the container or the embedded application) is destroyed. It + * cleans up the Container structure for the window. * * Results: * None. @@ -1095,16 +1068,14 @@ EmbedWindowDeleted( Container *containerPtr, *prevPtr; /* - * Find the Container structure for this window. Delete the - * information about the embedded application and free the container's - * record. + * Find the Container structure for this window. Delete the information + * about the embedded application and free the container's record. */ prevPtr = NULL; containerPtr = firstContainerPtr; while (1) { if (containerPtr->embeddedPtr == winPtr) { - /* * We also have to destroy our parent, to clean up the container. * Fabricate an event to do this. @@ -1115,20 +1086,18 @@ EmbedWindowDeleted( XEvent event; event.xany.serial = - Tk_Display(containerPtr->parentPtr)->request; - event.xany.send_event = False; - event.xany.display = Tk_Display(containerPtr->parentPtr); - - event.xany.type = DestroyNotify; - event.xany.window = containerPtr->parent; - event.xdestroywindow.event = containerPtr->parent; - Tk_QueueWindowEvent(&event, TCL_QUEUE_HEAD); - + LastKnownRequestProcessed(Tk_Display(containerPtr->parentPtr)); + event.xany.send_event = False; + event.xany.display = Tk_Display(containerPtr->parentPtr); + + event.xany.type = DestroyNotify; + event.xany.window = containerPtr->parent; + event.xdestroywindow.event = containerPtr->parent; + Tk_QueueWindowEvent(&event, TCL_QUEUE_HEAD); } containerPtr->embedded = None; containerPtr->embeddedPtr = NULL; - break; } if (containerPtr->parentPtr == winPtr) { @@ -1148,3 +1117,12 @@ EmbedWindowDeleted( ckfree((char *) containerPtr); } } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXEntry.c b/macosx/tkMacOSXEntry.c index 64b8f3a..ab236c6 100644 --- a/macosx/tkMacOSXEntry.c +++ b/macosx/tkMacOSXEntry.c @@ -4,70 +4,27 @@ * This file implements the native aqua entry widget. * * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2008-2009, Apple Inc. * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tkMacOSXPrivate.h" -#include "tkMacOSXDefault.h" #include "tkEntry.h" -static ThemeButtonKind ComputeIncDecParameters (int height, int *width); +static ThemeButtonKind ComputeIncDecParameters(int height, int *width); +#define HIOrientation kHIThemeOrientationNormal + /* *-------------------------------------------------------------- * * ComputeIncDecParameters -- * - * This procedure figures out which of the kThemeIncDec - * buttons to use. It also sets width to the width of the - * IncDec button. + * This procedure figures out which of the kThemeIncDec buttons to use. + * It also sets width to the width of the IncDec button. * * Results: * The ThemeButtonKind of the button we should use. @@ -77,51 +34,43 @@ static ThemeButtonKind ComputeIncDecParameters (int height, int *width); * *-------------------------------------------------------------- */ + static ThemeButtonKind -ComputeIncDecParameters(int height, int *width) +ComputeIncDecParameters( + int height, + int *width) { ThemeButtonKind kind; - TK_IF_HI_TOOLBOX (3, - if (height < 11 || height > 28) { - *width = 0; - kind = (ThemeButtonKind) 0; - } else { - if (height >= 21) { - *width = 13; - kind = kThemeIncDecButton; - } else if (height >= 18) { - *width = 12; - kind = kThemeIncDecButtonSmall; - } else { - *width = 11; - kind = kThemeIncDecButtonMini; - } - } - ) TK_ELSE_HI_TOOLBOX (3, - if (height < 21 || height > 28) { - *width = 0; - kind = (ThemeButtonKind) 0; - } else { + if (height < 11 || height > 28) { + *width = 0; + kind = (ThemeButtonKind) 0; + } else { + if (height >= 21) { *width = 13; kind = kThemeIncDecButton; + } else if (height >= 18) { + *width = 12; + kind = kThemeIncDecButtonSmall; + } else { + *width = 11; + kind = kThemeIncDecButtonMini; } - ) TK_ENDIF + } return kind; } - + /* *-------------------------------------------------------------- * * TkpDrawEntryBorderAndFocus -- * - * This procedure redraws the border of an entry window. - * It overrides the generic border drawing code if the - * entry widget parameters are such that the native widget - * drawing is a good fit. - * This version just returns 1, so platforms that don't - * do special native drawing don't have to implement it. + * This procedure redraws the border of an entry window. It overrides the + * generic border drawing code if the entry widget parameters are such + * that the native widget drawing is a good fit. This version just + * returns 1, so platforms that don't do special native drawing don't + * have to implement it. * * Results: * 1 if it has drawn the border, 0 if not. @@ -131,21 +80,31 @@ ComputeIncDecParameters(int height, int *width) * *-------------------------------------------------------------- */ + int -TkpDrawEntryBorderAndFocus(Entry *entryPtr, Drawable d, int isSpinbox) +TkpDrawEntryBorderAndFocus( + Entry *entryPtr, + Drawable d, + int isSpinbox) { - Rect bounds; + CGRect bounds; TkMacOSXDrawingContext dc; GC bgGC; Tk_Window tkwin = entryPtr->tkwin; - ThemeDrawState drawState; int oldWidth = 0; MacDrawable *macDraw = (MacDrawable *) d; + const HIThemeFrameDrawInfo info = { + .version = 0, + .kind = kHIThemeFrameTextFieldSquare, + .state = (entryPtr->state == STATE_DISABLED ? kThemeStateInactive : + kThemeStateActive), + .isFocused = (entryPtr->flags & GOT_FOCUS ? 1 : 0), + }; /* - * I use 6 as the borderwidth. 2 of the 5 go into the actual frame the - * 3 are because the Mac OS Entry widgets leave more space around the - * Text than Tk does on X11. + * I use 6 as the borderwidth. 2 of the 5 go into the actual frame the 3 + * are because the Mac OS Entry widgets leave more space around the Text + * than Tk does on X11. */ if (entryPtr->borderWidth != MAC_OSX_ENTRY_BORDER @@ -155,76 +114,61 @@ TkpDrawEntryBorderAndFocus(Entry *entryPtr, Drawable d, int isSpinbox) } /* - * For the spinbox, we have to make the entry part smaller by the size - * of the buttons. We also leave 2 pixels to the left (as per the HIG) - * and space for one pixel to the right, 'cause it makes the buttons look + * For the spinbox, we have to make the entry part smaller by the size of + * the buttons. We also leave 2 pixels to the left (as per the HIG) and + * space for one pixel to the right, 'cause it makes the buttons look * nicer. */ if (isSpinbox) { - ThemeButtonKind buttonKind; int incDecWidth; oldWidth = Tk_Width(tkwin); - buttonKind = ComputeIncDecParameters(Tk_Height(tkwin) - - 2 * MAC_OSX_FOCUS_WIDTH, &incDecWidth); + ComputeIncDecParameters(Tk_Height(tkwin) - 2 * MAC_OSX_FOCUS_WIDTH, + &incDecWidth); Tk_Width(tkwin) -= incDecWidth + 1; } /* - * The focus ring is drawn with an Alpha at the outside - * part of the ring, so we have to draw over the edges of the - * ring before drawing the focus or the text will peep through. + * The focus ring is drawn with an Alpha at the outside part of the ring, + * so we have to draw over the edges of the ring before drawing the focus + * or the text will peep through. */ bgGC = Tk_GCForColor(entryPtr->highlightBgColorPtr, d); TkDrawInsetFocusHighlight(entryPtr->tkwin, bgGC, MAC_OSX_FOCUS_WIDTH, d, 0); /* - * Inset the entry Frame by the maximum width of the focus rect, - * which is 3 according to the Carbon docs. + * Inset the entry Frame by the maximum width of the focus rect, which is + * 3 according to the Carbon docs. */ - bounds.left = macDraw->xOff + MAC_OSX_FOCUS_WIDTH; - bounds.top = macDraw->yOff + MAC_OSX_FOCUS_WIDTH; - bounds.right = macDraw->xOff + Tk_Width(tkwin) - MAC_OSX_FOCUS_WIDTH; - bounds.bottom = macDraw->yOff + Tk_Height(tkwin) - MAC_OSX_FOCUS_WIDTH; - if (entryPtr->state == STATE_DISABLED) { - drawState = kThemeStateInactive; - } else { - drawState = kThemeStateActive; - } - if (!TkMacOSXSetupDrawingContext(d, NULL, 0, &dc)) { + bounds.origin.x = macDraw->xOff + MAC_OSX_FOCUS_WIDTH; + bounds.origin.y = macDraw->yOff + MAC_OSX_FOCUS_WIDTH; + bounds.size.width = Tk_Width(tkwin) - 2*MAC_OSX_FOCUS_WIDTH; + bounds.size.height = Tk_Height(tkwin) - 2*MAC_OSX_FOCUS_WIDTH; + if (!TkMacOSXSetupDrawingContext(d, NULL, 1, &dc)) { return 0; } - DrawThemeEditTextFrame(&bounds, drawState); - if (entryPtr->flags & GOT_FOCUS) { - /* - * Don't call this if we don't have the focus, because then it - * erases the focus rect to white, but we've already drawn the - * highlightbackground above. - */ - - DrawThemeFocusRect(&bounds, (entryPtr->flags & GOT_FOCUS) != 0); - } + ChkErr(HIThemeDrawFrame, &bounds, &info, dc.context, HIOrientation); + TkMacOSXRestoreDrawingContext(&dc); if (isSpinbox) { Tk_Width(tkwin) = oldWidth; } - TkMacOSXRestoreDrawingContext(&dc); return 1; } + /* *-------------------------------------------------------------- * * TkpDrawSpinboxButtons -- * - * This procedure redraws the buttons of an spinbox widget. - * It overrides the generic button drawing code if the - * spinbox widget parameters are such that the native widget - * drawing is a good fit. - * This version just returns 0, so platforms that don't - * do special native drawing don't have to implement it. + * This procedure redraws the buttons of an spinbox widget. It overrides + * the generic button drawing code if the spinbox widget parameters are + * such that the native widget drawing is a good fit. This version just + * returns 0, so platforms that don't do special native drawing don't + * have to implement it. * * Results: * 1 if it has drawn the border, 0 if not. @@ -236,15 +180,11 @@ TkpDrawEntryBorderAndFocus(Entry *entryPtr, Drawable d, int isSpinbox) */ int -TkpDrawSpinboxButtons(Spinbox *sbPtr, Drawable d) +TkpDrawSpinboxButtons( + Spinbox *sbPtr, + Drawable d) { - Rect inBounds; - ThemeButtonKind inKind; - ThemeButtonDrawInfo inNewInfo; - ThemeButtonDrawInfo * inPrevInfo = NULL; - ThemeEraseUPP inEraseProc = NULL; - ThemeButtonDrawUPP inLabelProc = NULL; - UInt32 inUserData = 0; + CGRect bounds; Tk_Window tkwin = sbPtr->entry.tkwin; int height = Tk_Height(tkwin); int buttonHeight = height - 2 * MAC_OSX_FOCUS_WIDTH; @@ -253,6 +193,10 @@ TkpDrawSpinboxButtons(Spinbox *sbPtr, Drawable d) XRectangle rects[1]; GC bgGC; MacDrawable *macDraw = (MacDrawable *) d; + HIThemeButtonDrawInfo info = { + .version = 0, + .adornment = kThemeAdornmentNone, + }; /* * FIXME: RAISED really makes more sense @@ -263,56 +207,61 @@ TkpDrawSpinboxButtons(Spinbox *sbPtr, Drawable d) } /* - * The actual sizes of the IncDec button are 21 for the normal, - * 18 for the small and 15 for the mini. But the spinbox still - * looks okay if the entry is a little bigger than this, so we - * give it a little slop. + * The actual sizes of the IncDec button are 21 for the normal, 18 for the + * small and 15 for the mini. But the spinbox still looks okay if the + * entry is a little bigger than this, so we give it a little slop. */ - inKind = ComputeIncDecParameters(buttonHeight, &incDecWidth); - if (inKind == (ThemeButtonKind) 0) { + info.kind = ComputeIncDecParameters(buttonHeight, &incDecWidth); + if (info.kind == (ThemeButtonKind) 0) { return 0; } if (sbPtr->entry.state == STATE_DISABLED) { - inNewInfo.state = kThemeStateInactive; - inNewInfo.value = kThemeButtonOff; + info.state = kThemeStateInactive; + info.value = kThemeButtonOff; } else if (sbPtr->selElement == SEL_BUTTONUP) { - inNewInfo.state = kThemeStatePressedUp; - inNewInfo.value = kThemeButtonOn; + info.state = kThemeStatePressedUp; + info.value = kThemeButtonOn; } else if (sbPtr->selElement == SEL_BUTTONDOWN) { - inNewInfo.state = kThemeStatePressedDown; - inNewInfo.value = kThemeButtonOn; + info.state = kThemeStatePressedDown; + info.value = kThemeButtonOn; } else { - inNewInfo.state = kThemeStateActive; - inNewInfo.value = kThemeButtonOff; + info.state = kThemeStateActive; + info.value = kThemeButtonOff; } - inNewInfo.adornment = kThemeAdornmentNone; - - inBounds.left = macDraw->xOff + Tk_Width(tkwin) - incDecWidth - 1; - inBounds.right = macDraw->xOff + Tk_Width(tkwin) - 1; - inBounds.top = macDraw->yOff + MAC_OSX_FOCUS_WIDTH; - inBounds.bottom = macDraw->yOff + Tk_Height(tkwin) - MAC_OSX_FOCUS_WIDTH; + bounds.origin.x = macDraw->xOff + Tk_Width(tkwin) - incDecWidth - 1; + bounds.origin.y = macDraw->yOff + MAC_OSX_FOCUS_WIDTH; + bounds.size.width = incDecWidth; + bounds.size.height = Tk_Height(tkwin) - 2*MAC_OSX_FOCUS_WIDTH; - /* We had to make the entry part of the window smaller so that we - * wouldn't overdraw the spin buttons with the focus highlight. So - * now we have to draw the highlightbackground. + /* + * We had to make the entry part of the window smaller so that we wouldn't + * overdraw the spin buttons with the focus highlight. So now we have to + * draw the highlightbackground. */ bgGC = Tk_GCForColor(sbPtr->entry.highlightBgColorPtr, d); - rects[0].x = inBounds.left; + rects[0].x = bounds.origin.x; rects[0].y = 0; rects[0].width = Tk_Width(tkwin); rects[0].height = Tk_Height(tkwin); XFillRectangles(Tk_Display(tkwin), d, bgGC, rects, 1); - if (!TkMacOSXSetupDrawingContext(d, NULL, 0, &dc)) { + if (!TkMacOSXSetupDrawingContext(d, NULL, 1, &dc)) { return 0; } - ChkErr(DrawThemeButton, &inBounds, inKind, &inNewInfo, inPrevInfo, - inEraseProc, inLabelProc, inUserData); + ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL); TkMacOSXRestoreDrawingContext(&dc); return 1; } - + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXEvent.c b/macosx/tkMacOSXEvent.c index 5da46a9..73a67ad 100644 --- a/macosx/tkMacOSXEvent.c +++ b/macosx/tkMacOSXEvent.c @@ -4,8 +4,8 @@ * This file contains the basic Mac OS X Event handling routines. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -15,256 +15,140 @@ #include "tkMacOSXEvent.h" #include "tkMacOSXDebug.h" - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXFlushWindows -- - * - * This routine flushes all the Carbon windows of the application. It - * is called by XSync(). - * - * Results: - * None. - * - * Side effects: - * Flushes all Carbon windows - * - *---------------------------------------------------------------------- - */ +#pragma mark TKApplication(TKEvent) -MODULE_SCOPE void -TkMacOSXFlushWindows(void) -{ - WindowRef wRef = GetWindowList(); +enum { + NSWindowWillMoveEventType = 20 +}; - while (wRef) { - TK_IF_MAC_OS_X_API (3, HIWindowFlush, - ChkErr(HIWindowFlush, wRef); - ) TK_ELSE_MAC_OS_X (3, - CGrafPtr portPtr = GetWindowPort(wRef); +@implementation TKApplication(TKEvent) +/* TODO: replace by +[addLocalMonitorForEventsMatchingMask ? */ +- (NSEvent *)tkProcessEvent:(NSEvent *)theEvent { +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, theEvent); +#endif + NSEvent *processedEvent = theEvent; + NSEventType type = [theEvent type]; + NSInteger subtype; + NSUInteger flags; - if (QDIsPortBuffered(portPtr)) { - QDFlushPortBuffer(portPtr, NULL); - } - ) TK_ENDIF - wRef = GetNextWindow(wRef); - } -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXProcessEvent -- - * - * This dispatches a filtered Carbon event to the appropriate handler - * - * Note on MacEventStatus.stopProcessing: Please be conservative in the - * individual handlers and don't assume the event is fully handled - * unless you *really* need to ensure that other handlers don't see the - * event anymore. Some OS manager or library might be interested in - * events even after they are already handled on the Tk level. - * - * Results: - * 0 on success - * -1 on failure - * - * Side effects: - * Converts a Carbon event to a Tk event - * - *---------------------------------------------------------------------- - */ + switch ((NSInteger)type) { + case NSAppKitDefined: + subtype = [theEvent subtype]; -MODULE_SCOPE int -TkMacOSXProcessEvent( - TkMacOSXEvent *eventPtr, - MacEventStatus *statusPtr) -{ - switch (eventPtr->eClass) { - case kEventClassMouse: - TkMacOSXProcessMouseEvent(eventPtr, statusPtr); - break; - case kEventClassWindow: - TkMacOSXProcessWindowEvent(eventPtr, statusPtr); - break; - case kEventClassKeyboard: - TkMacOSXProcessKeyboardEvent(eventPtr, statusPtr); - break; - case kEventClassApplication: - TkMacOSXProcessApplicationEvent(eventPtr, statusPtr); + switch (subtype) { + case NSApplicationActivatedEventType: break; - case kEventClassAppearance: - TkMacOSXProcessAppearanceEvent(eventPtr, statusPtr); + case NSApplicationDeactivatedEventType: break; - case kEventClassMenu: - TkMacOSXProcessMenuEvent(eventPtr, statusPtr); + case NSWindowExposedEventType: + case NSScreenChangedEventType: break; - case kEventClassCommand: - TkMacOSXProcessCommandEvent(eventPtr, statusPtr); - break; - default: { - TkMacOSXDbgMsg("Unrecognised event: %s", - TkMacOSXCarbonEventToAscii(eventPtr->eventRef)); + case NSWindowMovedEventType: break; + case NSWindowWillMoveEventType: + break; + + default: + break; + } + break; + case NSKeyUp: + case NSKeyDown: + case NSFlagsChanged: + flags = [theEvent modifierFlags]; + processedEvent = [self tkProcessKeyEvent:theEvent]; + break; + case NSLeftMouseDown: + case NSLeftMouseUp: + case NSRightMouseDown: + case NSRightMouseUp: + case NSLeftMouseDragged: + case NSRightMouseDragged: + case NSMouseMoved: + case NSMouseEntered: + case NSMouseExited: + case NSScrollWheel: + case NSOtherMouseDown: + case NSOtherMouseUp: + case NSOtherMouseDragged: + case NSTabletPoint: + case NSTabletProximity: + processedEvent = [self tkProcessMouseEvent:theEvent]; + break; +#if 0 + case NSSystemDefined: + subtype = [theEvent subtype]; + break; + case NSApplicationDefined: { + id win; + win = [theEvent window]; + break; } + case NSCursorUpdate: + break; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 + case NSEventTypeGesture: + case NSEventTypeMagnify: + case NSEventTypeRotate: + case NSEventTypeSwipe: + case NSEventTypeBeginGesture: + case NSEventTypeEndGesture: + break; +#endif +#endif + + default: + break; } - return 0; + return processedEvent; } +@end + +#pragma mark - /* *---------------------------------------------------------------------- * - * TkMacOSXProcessMenuEvent -- + * TkMacOSXFlushWindows -- * - * This routine processes the event in eventPtr, and - * generates the appropriate Tk events from it. + * This routine flushes all the windows of the application. It is + * called by XSync(). * * Results: - * True if event(s) are generated - false otherwise. + * None. * * Side effects: - * Additional events may be place on the Tk event queue. + * Flushes all Carbon windows * *---------------------------------------------------------------------- */ -MODULE_SCOPE int -TkMacOSXProcessMenuEvent( - TkMacOSXEvent *eventPtr, - MacEventStatus *statusPtr) +MODULE_SCOPE void +TkMacOSXFlushWindows(void) { - int menuContext; - OSStatus err; + NSInteger windowCount; + NSInteger *windowNumbers; - switch (eventPtr->eKind) { - case kEventMenuBeginTracking: - case kEventMenuEndTracking: - case kEventMenuOpening: - case kEventMenuTargetItem: - break; - default: - return 0; - break; - } - err = ChkErr(GetEventParameter, eventPtr->eventRef, kEventParamMenuContext, - typeUInt32, NULL, sizeof(menuContext), NULL, &menuContext); - if (err == noErr && ((menuContext & kMenuContextMenuBarTracking) || - (menuContext & kMenuContextPopUpTracking))) { - switch (eventPtr->eKind) { - MenuRef menu; - - case kEventMenuBeginTracking: - TkMacOSXClearMenubarActive(); - - /* - * Handle -postcommand - */ - - TkMacOSXPreprocessMenu(); - TkMacOSXTrackingLoop(1); - break; - case kEventMenuEndTracking: - TkMacOSXTrackingLoop(0); - break; - case kEventMenuOpening: - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamDirectObject, typeMenuRef, NULL, - sizeof(menu), NULL, &menu); - if (err == noErr) { - TkMacOSXClearActiveMenu(menu); - return TkMacOSXGenerateParentMenuSelectEvent(menu); - } - break; - case kEventMenuTargetItem: - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamDirectObject, typeMenuRef, NULL, - sizeof(menu), NULL, &menu); - if (err == noErr) { - MenuItemIndex index; - - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamMenuItemIndex, typeMenuItemIndex, NULL, - sizeof(index), NULL, &index); - if (err == noErr) { - return TkMacOSXGenerateMenuSelectEvent(menu, index); - } - } - break; + NSCountWindows(&windowCount); + if(windowCount) { + windowNumbers = (NSInteger *) ckalloc(windowCount * sizeof(NSInteger)); + NSWindowList(windowCount, windowNumbers); + for (NSInteger index = 0; index < windowCount; index++) { + NSWindow *w = [NSApp windowWithWindowNumber:windowNumbers[index]]; + if (TkMacOSXGetXWindow(w)) { + [w flushWindow]; + } } + ckfree((char*) windowNumbers); } - return 0; } /* - *---------------------------------------------------------------------- - * - * TkMacOSXProcessCommandEvent -- - * - * This routine processes the event in eventPtr, and - * generates the appropriate Tk events from it. - * - * Results: - * True if event(s) are generated - false otherwise. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * - *---------------------------------------------------------------------- + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: */ - -MODULE_SCOPE int -TkMacOSXProcessCommandEvent( - TkMacOSXEvent *eventPtr, - MacEventStatus * statusPtr) -{ - HICommand command; - int menuContext; - OSStatus err; - - switch (eventPtr->eKind) { - case kEventCommandProcess: - case kEventCommandUpdateStatus: - break; - default: - return 0; - break; - } - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamDirectObject, typeHICommand, NULL, sizeof(command), - NULL, &command); - if (err == noErr && (command.attributes & kHICommandFromMenu)) { - if (eventPtr->eKind == kEventCommandProcess) { - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamMenuContext, typeUInt32, NULL, - sizeof(menuContext), NULL, &menuContext); - if (err == noErr && (menuContext & kMenuContextMenuBar) && - (menuContext & kMenuContextMenuBarTracking)) { - TkMacOSXHandleMenuSelect(GetMenuID(command.menu.menuRef), - command.menu.menuItemIndex, - (GetCurrentEventKeyModifiers() & optionKey) != 0); - return 1; - } - } else { - Tcl_CmdInfo dummy; - if (command.commandID == kHICommandPreferences && eventPtr->interp) { - if (Tcl_GetCommandInfo(eventPtr->interp, - "::tk::mac::ShowPreferences", &dummy)) { - if (!IsMenuItemEnabled(command.menu.menuRef, - command.menu.menuItemIndex)) { - EnableMenuItem(command.menu.menuRef, - command.menu.menuItemIndex); - } - } else { - if (IsMenuItemEnabled(command.menu.menuRef, - command.menu.menuItemIndex)) { - DisableMenuItem(command.menu.menuRef, - command.menu.menuItemIndex); - } - } - statusPtr->stopProcessing = 1; - return 1; - } - } - } - return 0; -} diff --git a/macosx/tkMacOSXEvent.h b/macosx/tkMacOSXEvent.h index 19b44f1..46d1585 100644 --- a/macosx/tkMacOSXEvent.h +++ b/macosx/tkMacOSXEvent.h @@ -4,55 +4,11 @@ * Declarations of Macintosh specific functions for implementing the * Mac OS X Notifier. * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TKMACEVENT @@ -62,44 +18,6 @@ #include "tkMacOSXInt.h" #endif -typedef struct { - int stopProcessing; - int err; - char errMsg[1024]; -} MacEventStatus; - -/* - * The event information in passed in the following structures - */ -typedef struct { - EventRef eventRef; - UInt32 eClass; /* Defines the class of event : see CarbonEvents.h */ - UInt32 eKind; /* Defines the kind of the event : see CarbonEvents.h */ - Tcl_Interp *interp; /* Interp to handle events in */ - EventHandlerCallRef callRef; -} TkMacOSXEvent; - MODULE_SCOPE void TkMacOSXFlushWindows(void); -MODULE_SCOPE int TkMacOSXProcessEvent(TkMacOSXEvent *eventPtr, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXProcessMouseEvent(TkMacOSXEvent *e, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXProcessWindowEvent(TkMacOSXEvent *e, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXProcessKeyboardEvent(TkMacOSXEvent *e, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXProcessApplicationEvent(TkMacOSXEvent *e, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXProcessAppearanceEvent(TkMacOSXEvent *e, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXProcessMenuEvent(TkMacOSXEvent *e, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXProcessCommandEvent(TkMacOSXEvent *e, - MacEventStatus *statusPtr); -MODULE_SCOPE int TkMacOSXKeycodeToUnicode( - UniChar * uniChars, int maxChars, - EventKind eKind, - UInt32 keycode, UInt32 modifiers, - UInt32 * deadKeyStatePtr); #endif diff --git a/macosx/tkMacOSXFont.c b/macosx/tkMacOSXFont.c index b09e62e..ae3be92 100644 --- a/macosx/tkMacOSXFont.c +++ b/macosx/tkMacOSXFont.c @@ -4,10 +4,9 @@ * Contains the Macintosh implementation of the platform-independant * font package interface. * - * Copyright (c) 1990-1994 The Regents of the University of California. - * Copyright (c) 1994-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2002-2004 Benjamin Riefenstahl, Benjamin.Riefenstahl@epost.de + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2008-2009, Apple Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -16,248 +15,319 @@ #include "tkMacOSXPrivate.h" #include "tkMacOSXFont.h" -#include "tclInt.h" /* for Tcl_CreateNamespace() */ - /* - * Dealing with pascal strings. - */ - -#ifndef StrLength -#define StrLength(s) (*((unsigned char *) (s))) -#endif -#ifndef StrBody -#define StrBody(s) ((char *) (s) + 1) +#ifdef TK_MAC_DEBUG +#define TK_MAC_DEBUG_FONTS #endif -#define pstrcmp(s1, s2) RelString((s1), (s2), 1, 1) -#define pstrcasecmp(s1, s2) RelString((s1), (s2), 0, 1) +*/ /* - * The preferred font encodings. + * The following structure represents our Macintosh-specific implementation + * of a font object. */ -static const char *encodingList[] = { - "macRoman", "macJapan", NULL -}; - -/* - * The following structures are used to map the script/language codes of a - * font to the name that should be passed to Tcl_GetTextEncoding() to obtain - * the encoding for that font. The set of numeric constants is fixed and - * defined by Apple. - */ - -static TkStateMap scriptMap[] = { - {smRoman, "macRoman"}, - {smJapanese, "macJapan"}, - {smTradChinese, "macChinese"}, - {smKorean, "macKorean"}, - {smArabic, "macArabic"}, - {smHebrew, "macHebrew"}, - {smGreek, "macGreek"}, - {smCyrillic, "macCyrillic"}, - {smRSymbol, "macRSymbol"}, - {smDevanagari, "macDevanagari"}, - {smGurmukhi, "macGurmukhi"}, - {smGujarati, "macGujarati"}, - {smOriya, "macOriya"}, - {smBengali, "macBengali"}, - {smTamil, "macTamil"}, - {smTelugu, "macTelugu"}, - {smKannada, "macKannada"}, - {smMalayalam, "macMalayalam"}, - {smSinhalese, "macSinhalese"}, - {smBurmese, "macBurmese"}, - {smKhmer, "macKhmer"}, - {smThai, "macThailand"}, - {smLaotian, "macLaos"}, - {smGeorgian, "macGeorgia"}, - {smArmenian, "macArmenia"}, - {smSimpChinese, "macSimpChinese"}, - {smTibetan, "macTIbet"}, - {smMongolian, "macMongolia"}, - {smGeez, "macEthiopia"}, - {smEastEurRoman, "macCentEuro"}, - {smVietnamese, "macVietnam"}, - {smExtArabic, "macSindhi"}, - {0, NULL} -}; - -static TkStateMap romanMap[] = { - {langCroatian, "macCroatian"}, - {langSlovenian, "macCroatian"}, - {langIcelandic, "macIceland"}, - {langRomanian, "macRomania"}, - {langTurkish, "macTurkish"}, - {langGreek, "macGreek"}, - {0, NULL} -}; - -static TkStateMap cyrillicMap[] = { - {langUkrainian, "macUkraine"}, - {langBulgarian, "macBulgaria"}, - {0, NULL} -}; - -/* - * The following structure represents a font family. It is assumed that - * all screen fonts constructed from the same "font family" share certain - * properties; all screen fonts with the same "font family" point to a - * shared instance of this structure. The most important shared property - * is the character existence metrics, used to determine if a screen font - * can display a given Unicode character. - * - * Under Macintosh, a "font family" is uniquely identified by its face number. - */ - - -#define FONTMAP_SHIFT 10 - -#define FONTMAP_PAGES (1 << (sizeof(Tcl_UniChar) * 8 - FONTMAP_SHIFT)) -#define FONTMAP_BITSPERPAGE (1 << FONTMAP_SHIFT) - -typedef struct FontFamily { - struct FontFamily *nextPtr; /* Next in list of all known font families. */ - int refCount; /* How many SubFonts are referring to this - * FontFamily. When the refCount drops to - * zero, this FontFamily may be freed. */ - /* - * Key. - */ - - FMFontFamily faceNum; /* Unique face number key for this FontFamily. */ - - /* - * Derived properties. - */ - - Tcl_Encoding encoding; /* Encoding for this font family. */ - int isSymbolFont; /* Non-zero if this is a symbol family. */ - int isMultiByteFont; /* Non-zero if this is a multi-byte family. */ - char typeTable[256]; /* Table that identfies all lead bytes for a - * multi-byte family, used when measuring chars. - * If a byte is a lead byte, the value at the - * corresponding position in the typeTable is 1, - * otherwise 0. If this is a single-byte font, - * all entries are 0. */ - char *fontMap[FONTMAP_PAGES]; - /* Two-level sparse table used to determine - * quickly if the specified character exists. - * As characters are encountered, more pages - * in this table are dynamically added. The - * contents of each page is a bitmask - * consisting of FONTMAP_BITSPERPAGE bits, - * representing whether this font can be used - * to display the given character at the - * corresponding bit position. The high bits - * of the character are used to pick which - * page of the table is used. */ -} FontFamily; - -/* - * The following structure encapsulates an individual screen font. A font - * object is made up of however many SubFonts are necessary to display a - * stream of multilingual characters. - */ - -typedef struct SubFont { - char **fontMap; /* Pointer to font map from the FontFamily, - * cached here to save a dereference. */ - FontFamily *familyPtr; /* The FontFamily for this SubFont. */ -} SubFont; - -/* - * The following structure represents Macintosh's implementation of a font - * object. - */ - -#define SUBFONT_SPACE 3 - -typedef struct MacFont { +typedef struct { TkFont font; /* Stuff used by generic font package. Must * be first in structure. */ - SubFont staticSubFonts[SUBFONT_SPACE]; - /* Builtin space for a limited number of - * SubFonts. */ - int numSubFonts; /* Length of following array. */ - SubFont *subFontArray; /* Array of SubFonts that have been loaded - * in order to draw/measure all the characters - * encountered by this font so far. All fonts - * start off with one SubFont initialized by - * AllocFont() from the original set of font - * attributes. Usually points to - * staticSubFonts, but may point to malloced - * space if there are lots of SubFonts. */ - short size; /* Font size in pixels, constructed from - * font attributes. */ - short style; /* Style bits, constructed from font - * attributes. */ + NSFont *nsFont; + NSDictionary *nsAttributes; } MacFont; /* - * The following structure is used to map between the UTF-8 name for a font and - * the name that the Macintosh uses to refer to the font, in order to determine - * if a font exists. The Macintosh names for fonts are stored in the encoding - * of the font itself. + * The names for our "native" fonts. */ -typedef struct FontNameMap { - Tk_Uid utfName; /* The name of the font in UTF-8. */ - StringPtr nativeName; /* The name of the font in the font's encoding. */ - FMFontFamily faceNum; /* Unique face number for this font. */ -} FontNameMap; +#define SYSTEMFONT_NAME "system" +#define APPLFONT_NAME "application" +#define MENUITEMFONT_NAME "menu" + +struct SystemFontMapEntry { + const ThemeFontID id; + const char *systemName; + const char *tkName; + const char *tkName1; +}; +#define ThemeFont(n, ...) { kTheme##n##Font, "system" #n "Font", ##__VA_ARGS__ } +static const struct SystemFontMapEntry systemFontMap[] = { + ThemeFont(System, "TkDefaultFont", "TkIconFont"), + ThemeFont(EmphasizedSystem, "TkCaptionFont"), + ThemeFont(SmallSystem, "TkHeadingFont", "TkTooltipFont"), + ThemeFont(SmallEmphasizedSystem), + ThemeFont(Application, "TkTextFont"), + ThemeFont(Label, "TkSmallCaptionFont"), + ThemeFont(Views), + ThemeFont(MenuTitle), + ThemeFont(MenuItem, "TkMenuFont"), + ThemeFont(MenuItemMark), + ThemeFont(MenuItemCmdKey), + ThemeFont(WindowTitle), + ThemeFont(PushButton), + ThemeFont(UtilityWindowTitle), + ThemeFont(AlertHeader), + ThemeFont(Toolbar), + ThemeFont(MiniSystem), + { kThemeSystemFontDetail, "systemDetailSystemFont" }, + { kThemeSystemFontDetailEmphasized, "systemDetailEmphasizedSystemFont" }, + { -1, NULL } +}; +#undef ThemeFont + +static int antialiasedTextEnabled = -1; +static NSCharacterSet *whitespaceCharacterSet = nil; +static NSCharacterSet *lineendingCharacterSet = nil; + +static void GetTkFontAttributesForNSFont(NSFont *nsFont, + TkFontAttributes *faPtr); +static NSFont *FindNSFont(const char *familyName, NSFontTraitMask traits, + NSInteger weight, CGFloat size, int fallbackToDefault); +static void InitFont(NSFont *nsFont, const TkFontAttributes *reqFaPtr, + MacFont * fontPtr); +static int CreateNamedSystemFont(Tcl_Interp *interp, Tk_Window tkwin, + const char* name, TkFontAttributes *faPtr); +static void DrawCharsInContext(Display *display, Drawable drawable, GC gc, + Tk_Font tkfont, const char *source, int numBytes, int rangeStart, + int rangeLength, int x, int y, double angle); + +@interface NSFont(TKFont) +- (NSFont *)bestMatchingFontForCharacters:(const UTF16Char *)characters + length:(NSUInteger)length attributes:(NSDictionary *)attributes + actualCoveredLength:(NSUInteger *)coveredLength; +@end + +#pragma mark - +#pragma mark Font Helpers: + +#define GetNSFontTraitsFromTkFontAttributes(faPtr) \ + ((faPtr)->weight == TK_FW_BOLD ? NSBoldFontMask : NSUnboldFontMask) | \ + ((faPtr)->slant == TK_FS_ITALIC ? NSItalicFontMask : NSUnitalicFontMask) + /* - * The list of font families that are currently loaded. As screen fonts - * are loaded, this list grows to hold information about what characters - * exist in each font family. + *--------------------------------------------------------------------------- + * + * GetTkFontAttributesForNSFont -- + * + * Fill in TkFontAttributes for given NSFont. + * + * Results: + * None. + * + * Side effects: + * None. + * + *--------------------------------------------------------------------------- */ -static FontFamily *fontFamilyList = NULL; +static void +GetTkFontAttributesForNSFont( + NSFont *nsFont, + TkFontAttributes *faPtr) +{ + NSFontTraitMask traits = [[NSFontManager sharedFontManager] + traitsOfFont:nsFont]; + faPtr->family = Tk_GetUid([[nsFont familyName] UTF8String]); + faPtr->size = [nsFont pointSize]; + faPtr->weight = (traits & NSBoldFontMask ? TK_FW_BOLD : TK_FW_NORMAL); + faPtr->slant = (traits & NSItalicFontMask ? TK_FS_ITALIC : TK_FS_ROMAN); +} + /* - * Information cached about the system at startup time. + *--------------------------------------------------------------------------- + * + * FindNSFont -- + * + * Find NSFont for given attributes. Use default values for missing + * attributes, and do a case-insensitive search for font family names + * if necessary. If fallbackToDefault flag is set, use the system font + * as a last resort. + * + * Results: + * None. + * + * Side effects: + * None. + * + *--------------------------------------------------------------------------- */ -static FontNameMap *gFontNameMap = NULL; -static GWorldPtr gWorld = NULL; +static NSFont * +FindNSFont( + const char *familyName, + NSFontTraitMask traits, + NSInteger weight, + CGFloat size, + int fallbackToDefault) +{ + NSFontManager *fm = [NSFontManager sharedFontManager]; + NSFont *nsFont, *dflt = nil; + #define defaultFont (dflt ? dflt : (dflt = [NSFont systemFontOfSize:0])) + NSString *family; + if (familyName) { + family = [[[NSString alloc] initWithUTF8String:familyName] autorelease]; + } else { + family = [defaultFont familyName]; + } + if (size == 0.0) { + size = [defaultFont pointSize]; + } + nsFont = [fm fontWithFamily:family traits:traits weight:weight size:size]; + if (!nsFont) { + NSArray *availableFamilies = [fm availableFontFamilies]; + NSString *caseFamily = nil; + + for (NSString *f in availableFamilies) { + if ([family caseInsensitiveCompare:f] == NSOrderedSame) { + caseFamily = f; + break; + } + } + if (caseFamily) { + nsFont = [fm fontWithFamily:caseFamily traits:traits weight:weight + size:size]; + } + } + if (!nsFont) { + nsFont = [NSFont fontWithName:family size:size]; + } + if (!nsFont && fallbackToDefault) { + nsFont = [fm convertFont:defaultFont toFamily:family]; + nsFont = [fm convertFont:nsFont toSize:size]; + nsFont = [fm convertFont:nsFont toHaveTrait:traits]; + } + #undef defaultFont + return nsFont; +} + /* - * The names for our "native" fonts. + *--------------------------------------------------------------------------- + * + * InitFont -- + * + * Helper for TkpGetNativeFont() and TkpGetFontFromAttributes(). + * + * Results: + * Fills the MacFont structure. + * + * Side effects: + * Memory allocated. + * + *--------------------------------------------------------------------------- */ -#define SYSTEMFONT_NAME "system" -#define APPLFONT_NAME "application" -#define MENUITEMFONT_NAME "menu" +static void +InitFont( + NSFont *nsFont, + const TkFontAttributes *reqFaPtr, /* Can be NULL */ + MacFont *fontPtr) +{ + TkFontAttributes *faPtr; + TkFontMetrics *fmPtr; + NSDictionary *nsAttributes; + NSRect bounds; + CGFloat kern = 0.0; + NSFontRenderingMode renderingMode = NSFontDefaultRenderingMode; + int ascent, descent/*, dontAA*/; + static const UniChar ch[] = {'.', 'W', ' ', 0xc4, 0xc1, 0xc2, 0xc3, 0xc7}; + /* ., W, Space, Auml, Aacute, Acirc, Atilde, Ccedilla */ + #define nCh (sizeof(ch) / sizeof(UniChar)) + CGGlyph glyphs[nCh]; + CGRect boundingRects[nCh]; + + fontPtr->font.fid = (Font) fontPtr; + faPtr = &fontPtr->font.fa; + if (reqFaPtr) { + *faPtr = *reqFaPtr; + } else { + TkInitFontAttributes(faPtr); + } + fontPtr->nsFont = nsFont; + // some don't like antialiasing on fixed-width even if bigger than limit +// dontAA = [nsFont isFixedPitch] && fontPtr->font.fa.size <= 10; + if (antialiasedTextEnabled >= 0/* || dontAA*/) { + renderingMode = (antialiasedTextEnabled == 0/* || dontAA*/) ? + NSFontIntegerAdvancementsRenderingMode : + NSFontAntialiasedRenderingMode; + } + nsFont = [nsFont screenFontWithRenderingMode:renderingMode]; + GetTkFontAttributesForNSFont(nsFont, faPtr); + fmPtr = &fontPtr->font.fm; + fmPtr->ascent = floor([nsFont ascender] + [nsFont leading] + 0.5); + fmPtr->descent = floor(-[nsFont descender] + 0.5); + fmPtr->maxWidth = [nsFont maximumAdvancement].width; + fmPtr->fixed = [nsFont isFixedPitch]; /* Does not work for all fonts */ + + /* + * The ascent, descent and fixed fields are not correct for all fonts, as + * a workaround deduce that info from the metrics of some typical glyphs, + * along with screenfont kerning (space advance difference to printer font) + */ + bounds = [nsFont boundingRectForFont]; + if (CTFontGetGlyphsForCharacters((CTFontRef) nsFont, ch, glyphs, nCh)) { + fmPtr->fixed = [nsFont advancementForGlyph:glyphs[0]].width == + [nsFont advancementForGlyph:glyphs[1]].width; + bounds = NSRectFromCGRect(CTFontGetBoundingRectsForGlyphs((CTFontRef) + nsFont, kCTFontDefaultOrientation, ch, boundingRects, nCh)); + kern = [nsFont advancementForGlyph:glyphs[2]].width - + [fontPtr->nsFont advancementForGlyph:glyphs[2]].width; + } + descent = floor(-bounds.origin.y + 0.5); + ascent = floor(bounds.size.height + bounds.origin.y + 0.5); + if (ascent > fmPtr->ascent) { + fmPtr->ascent = ascent; + } + if (descent > fmPtr->descent) { + fmPtr->descent = descent; + } + nsAttributes = [NSDictionary dictionaryWithObjectsAndKeys: + nsFont, NSFontAttributeName, + [NSNumber numberWithInt:faPtr->underline ? + NSUnderlineStyleSingle|NSUnderlinePatternSolid : + NSUnderlineStyleNone], NSUnderlineStyleAttributeName, + [NSNumber numberWithInt:faPtr->overstrike ? + NSUnderlineStyleSingle|NSUnderlinePatternSolid : + NSUnderlineStyleNone], NSStrikethroughStyleAttributeName, + [NSNumber numberWithInt:fmPtr->fixed ? 0 : 1], + NSLigatureAttributeName, + [NSNumber numberWithDouble:kern], NSKernAttributeName, nil]; + fontPtr->nsAttributes = TkMacOSXMakeUncollectableAndRetain(nsAttributes); + #undef nCh +} + /* - * Procedures used only in this file. + *------------------------------------------------------------------------- + * + * CreateNamedSystemFont -- + * + * Register a system font with the Tk named font mechanism. + * + * Results: + * + * Result from TkCreateNamedFont(). + * + * Side effects: + * + * A new named font is added to the Tk font registry. + * + *------------------------------------------------------------------------- */ -static FontFamily * AllocFontFamily(const MacFont *fontPtr, int family); -static SubFont * CanUseFallback(MacFont *fontPtr, const char *fallbackName, int ch, SubFont **fixSubFontPtrPtr); -static SubFont * CanUseFallbackWithAliases(MacFont *fontPtr, const char *faceName, int ch, Tcl_DString *nameTriedPtr, SubFont **fixSubFontPtrPtr); -static SubFont * FindSubFontForChar(MacFont *fontPtr, int ch, SubFont **fixSubFontPtrPtr); -static void FontMapInsert(SubFont *subFontPtr, int ch); -static void FontMapLoadPage(SubFont *subFontPtr, int row); -static int FontMapLookup(SubFont *subFontPtr, int ch); -static void FreeFontFamily(FontFamily *familyPtr); -static void InitFont(Tk_Window tkwin, int family, unsigned char *familyName, int size, int style, MacFont *fontPtr); -static void InitSubFont(const MacFont *fontPtr, int family, SubFont *subFontPtr); -static void MultiFontDrawText(MacFont *fontPtr, const char *source, int numBytes, int x, int y); -static void ReleaseFont(MacFont *fontPtr); -static void ReleaseSubFont(SubFont *subFontPtr); -static int SeenName(const char *name, Tcl_DString *dsPtr); - -static const char * BreakLine(FontFamily *familyPtr, int flags, const char *source, int numBytes, int *widthPtr); -static int GetFamilyNum(const char *faceName, short *familyPtr); -static int GetFamilyOrAliasNum(const char *faceName, short *familyPtr); -static Tcl_Encoding GetFontEncoding(int faceNum, int allowSymbol, int *isSymbolPtr); -static Tk_Uid GetUtfFaceName(StringPtr faceNameStr); -static OSStatus GetThemeFontAndFamily(const ThemeFontID themeFontId, - FMFontFamily *fontFamily, unsigned char *fontName, SInt16 *fontSize, - Style *fontStyle); +static int +CreateNamedSystemFont( + Tcl_Interp *interp, + Tk_Window tkwin, + const char* name, + TkFontAttributes *faPtr) +{ + TkDeleteNamedFont(NULL, tkwin, name); + return TkCreateNamedFont(interp, tkwin, name, faPtr); +} +#pragma mark - +#pragma mark Font handling: /* *------------------------------------------------------------------------- @@ -267,12 +337,13 @@ static OSStatus GetThemeFontAndFamily(const ThemeFontID themeFontId, * This procedure is called when an application is created. It * initializes all the structures that are used by the * platform-dependant code on a per application basis. + * Note that this is called before TkpInit() ! * * Results: * None. * * Side effects: - * See comments below. + * Initialize named system fonts. * *------------------------------------------------------------------------- */ @@ -281,139 +352,57 @@ void TkpFontPkgInit( TkMainInfo *mainPtr) /* The application being created. */ { - FMFontFamilyIterator fontFamilyIterator; - FMFontFamily fontFamily; - FontNameMap *tmpFontNameMap, *newFontNameMap, *mapPtr; - int i, j, numFonts, fontMapOffset, isSymbol; - Str255 nativeName; - Tcl_DString ds; - Tcl_Encoding encoding; - Tcl_Encoding *encodings; - - if (gWorld == NULL) { - Rect rect = {0, 0, 1, 1}; - - SetFractEnable(0); - /* - * Used for saving and restoring state while drawing and measuring. - */ - if (ChkErr(NewGWorld, &gWorld, 32, &rect, NULL, NULL, 0 -#ifdef __LITTLE_ENDIAN__ - | kNativeEndianPixMap -#endif - ) != noErr) { - Tcl_Panic("TkpFontPkgInit: NewGWorld failed"); - } - /* - * The name of each font is stored in the encoding of that font. - * How would we translate a name from UTF-8 into the native encoding - * of the font unless we knew the encoding of that font? We can't. - * So, precompute the UTF-8 and native names of all fonts on the - * system. The when the user asks for font by its UTF-8 name, we - * lookup the name in that table and really ask for the font by its - * native name. Any unknown UTF-8 names will be mapped to the system - * font. - */ - FMCreateFontFamilyIterator(NULL, NULL, kFMDefaultOptions, &fontFamilyIterator); - numFonts = 0; - while (FMGetNextFontFamily(&fontFamilyIterator, &fontFamily) != kFMIterationCompleted) { - numFonts++; - } - tmpFontNameMap = (FontNameMap *) ckalloc(sizeof(FontNameMap) * numFonts); - encodings = (Tcl_Encoding *) ckalloc(sizeof(Tcl_Encoding) * numFonts); - mapPtr = tmpFontNameMap; - FMResetFontFamilyIterator(NULL, NULL, kFMDefaultOptions, &fontFamilyIterator); - i = 0; - while (FMGetNextFontFamily(&fontFamilyIterator, &fontFamily) != kFMIterationCompleted) { - mapPtr->faceNum = fontFamily; - encodings[i] = GetFontEncoding(mapPtr->faceNum, 0, &isSymbol); - FMGetFontFamilyName(fontFamily, nativeName ); - Tcl_ExternalToUtfDString(encodings[i], StrBody(nativeName), StrLength(nativeName), &ds); - mapPtr->utfName = Tk_GetUid(Tcl_DStringValue(&ds)); - mapPtr->nativeName = (StringPtr) ckalloc(StrLength(nativeName) + 1); - memcpy(mapPtr->nativeName, nativeName, StrLength(nativeName) + 1); - Tcl_DStringFree(&ds); - mapPtr++; - i++; - } - FMDisposeFontFamilyIterator(&fontFamilyIterator); - - /* - * Reorder FontNameMap so fonts with the preferred encodings are at - * the front of the list. The relative order of fonts that all have - * the same encoding is preserved. Fonts with unknown encodings get - * stuck at the end. - */ - newFontNameMap = (FontNameMap *) ckalloc(sizeof(FontNameMap) * (numFonts + 1)); - fontMapOffset = 0; - for (i = 0; encodingList[i] != NULL; i++) { - encoding = Tcl_GetEncoding(NULL, encodingList[i]); - if (encoding == NULL) { - continue; - } - for (j = 0; j < numFonts; j++) { - if (encodings[j] == encoding) { - newFontNameMap[fontMapOffset] = tmpFontNameMap[j]; - fontMapOffset++; - Tcl_FreeEncoding(encodings[j]); - tmpFontNameMap[j].utfName = NULL; - } + Tcl_Interp *interp = mainPtr->interp; + Tk_Window tkwin = (Tk_Window) mainPtr->winPtr; + const struct SystemFontMapEntry *systemFont = systemFontMap; + NSFont *nsFont; + TkFontAttributes fa; + NSMutableCharacterSet *cs; + NSAutoreleasePool *pool = [NSAutoreleasePool new]; + + /* force this for now */ + if (!mainPtr->winPtr->mainPtr) { + mainPtr->winPtr->mainPtr = mainPtr; + } + while (systemFont->systemName) { + nsFont = (NSFont*) CTFontCreateUIFontForLanguage( + HIThemeGetUIFontType(systemFont->id), 0, NULL); + if (nsFont) { + TkInitFontAttributes(&fa); + GetTkFontAttributesForNSFont(nsFont, &fa); + CreateNamedSystemFont(interp, tkwin, systemFont->systemName, &fa); + if (systemFont->tkName) { + CreateNamedSystemFont(interp, tkwin, systemFont->tkName, &fa); } - Tcl_FreeEncoding(encoding); - } - for (i = 0; i < numFonts; i++) { - if (tmpFontNameMap[i].utfName != NULL) { - newFontNameMap[fontMapOffset] = tmpFontNameMap[i]; - fontMapOffset++; - Tcl_FreeEncoding(encodings[i]); + if (systemFont->tkName1) { + CreateNamedSystemFont(interp, tkwin, systemFont->tkName1, &fa); } + CFRelease(nsFont); } - if (fontMapOffset != numFonts) { - Tcl_Panic("TkpFontPkgInit: unexpected number of fonts"); - } - - mapPtr = &newFontNameMap[numFonts]; - mapPtr->utfName = NULL; - mapPtr->nativeName = NULL; - mapPtr->faceNum = 0; - - ckfree((char *) tmpFontNameMap); - ckfree((char *) encodings); - - gFontNameMap = newFontNameMap; + systemFont++; } -} - -/* - *--------------------------------------------------------------------------- - * - * GetThemeFontAndFamily -- - * - * Wrapper around the GetThemeFont and FMGetFontFamilyFromName APIs. - * - *--------------------------------------------------------------------------- - */ - -OSStatus -GetThemeFontAndFamily( - const ThemeFontID themeFontId, - FMFontFamily* fontFamily, - unsigned char *fontName, - SInt16 *fontSize, - Style *fontStyle) -{ - OSStatus err = ChkErr(GetThemeFont, themeFontId, smSystemScript, fontName, - fontSize, fontStyle); - - if (err == noErr) { - *fontFamily = FMGetFontFamilyFromName(fontName); - if (*fontFamily == kInvalidFontFamily) { - err = kFMInvalidFontFamilyErr; - TkMacOSXDbgMsg("FMGetFontFamilyFromName failed."); - } + TkInitFontAttributes(&fa); + nsFont = (NSFont*) CTFontCreateUIFontForLanguage( + kCTFontUserFixedPitchFontType, 11, NULL); + if (nsFont) { + GetTkFontAttributesForNSFont(nsFont, &fa); + CFRelease(nsFont); + } else { + fa.family = Tk_GetUid("Monaco"); + fa.size = 11; + fa.weight = TK_FW_NORMAL; + fa.slant = TK_FS_ROMAN; } - - return err; + CreateNamedSystemFont(interp, tkwin, "TkFixedFont", &fa); + if (!whitespaceCharacterSet) { + whitespaceCharacterSet = [[NSCharacterSet + whitespaceAndNewlineCharacterSet] retain]; + cs = [whitespaceCharacterSet mutableCopy]; + [cs removeCharactersInString:@" "]; + lineendingCharacterSet = [cs copy]; + [cs release]; + } + [pool drain]; } /* @@ -445,14 +434,11 @@ GetThemeFontAndFamily( TkFont * TkpGetNativeFont( Tk_Window tkwin, /* For display where font will be used. */ - CONST char *name) /* Platform-specific font name. */ + const char *name) /* Platform-specific font name. */ { + MacFont *fontPtr = NULL; ThemeFontID themeFontId; - FMFontFamily fontFamily; - Str255 fontName; - SInt16 fontSize; - Style fontStyle; - MacFont * fontPtr; + CTFontRef ctFont; if (strcmp(name, SYSTEMFONT_NAME) == 0) { themeFontId = kThemeSystemFont; @@ -463,14 +449,13 @@ TkpGetNativeFont( } else { return NULL; } - if (GetThemeFontAndFamily(themeFontId, &fontFamily, fontName, &fontSize, - &fontStyle) != noErr) { - return NULL; + ctFont = CTFontCreateUIFontForLanguage(HIThemeGetUIFontType( + themeFontId), 0, NULL); + if (ctFont) { + fontPtr = (MacFont *) ckalloc(sizeof(MacFont)); + InitFont((NSFont*) ctFont, NULL, fontPtr); } - fontPtr = (MacFont *) ckalloc(sizeof(MacFont)); - InitFont(tkwin, fontFamily, fontName, fontSize, fontStyle, fontPtr); - return (TkFont *) fontPtr; } @@ -512,64 +497,37 @@ TkpGetFontFromAttributes( * will be released. If NULL, a new TkFont * structure is allocated. */ Tk_Window tkwin, /* For display where font will be used. */ - CONST TkFontAttributes *faPtr) + const TkFontAttributes *faPtr) /* Set of attributes to match. */ { - short faceNum, style; - int i, j; - const char *faceName, *fallback; - char ***fallbacks; MacFont *fontPtr; + int points = TkFontGetPoints(tkwin, faPtr->size); + NSFontTraitMask traits = GetNSFontTraitsFromTkFontAttributes(faPtr); + NSInteger weight = (faPtr->weight == TK_FW_BOLD ? 9 : 5); + NSFont *nsFont; - /* - * Algorithm to get the closest font to the one requested. - * - * try fontname - * try all aliases for fontname - * foreach fallback for fontname - * try the fallback - * try all aliases for the fallback - */ + nsFont = FindNSFont(faPtr->family, traits, weight, points, 0); + if (!nsFont) { + char *const *aliases = TkFontGetAliasList(faPtr->family); - faceNum = 0; - faceName = faPtr->family; - if (faceName != NULL) { - if (GetFamilyOrAliasNum(faceName, &faceNum) != 0) { - goto found; - } - fallbacks = TkFontGetFallbacks(); - for (i = 0; fallbacks[i] != NULL; i++) { - for (j = 0; (fallback = fallbacks[i][j]) != NULL; j++) { - if (strcasecmp(faceName, fallback) == 0) { - for (j = 0; (fallback = fallbacks[i][j]) != NULL; j++) { - if (GetFamilyOrAliasNum(fallback, &faceNum)) { - goto found; - } - } - } - break; - } + while (aliases && !nsFont) { + nsFont = FindNSFont(*aliases++, traits, weight, points, 0); } } - -found: - style = 0; - if (faPtr->weight != TK_FW_NORMAL) { - style |= bold; - } - if (faPtr->slant != TK_FS_ROMAN) { - style |= italic; + if (!nsFont) { + nsFont = FindNSFont(faPtr->family, traits, weight, points, 1); } - if (faPtr->underline) { - style |= underline; + if (!nsFont) { + Tcl_Panic("Could not deternmine NSFont from TkFontAttributes"); } if (tkFontPtr == NULL) { fontPtr = (MacFont *) ckalloc(sizeof(MacFont)); } else { fontPtr = (MacFont *) tkFontPtr; - ReleaseFont(fontPtr); + TkpDeleteFont(tkFontPtr); } - InitFont(tkwin, faceNum, NULL, faPtr->size, style, fontPtr); + CFRetain(nsFont); /* Always needed to allow unconditional CFRelease below */ + InitFont(nsFont, faPtr, fontPtr); return (TkFont *) fontPtr; } @@ -597,7 +555,10 @@ void TkpDeleteFont( TkFont *tkFontPtr) /* Token of font to be deleted. */ { - ReleaseFont((MacFont *) tkFontPtr); + MacFont *fontPtr = (MacFont *) tkFontPtr; + + TkMacOSXMakeCollectableAndRelease(fontPtr->nsAttributes); + CFRelease(fontPtr->nsFont); /* Either a CTFontRef or a CFRetained NSFont */ } /* @@ -623,14 +584,14 @@ TkpGetFontFamilies( Tcl_Interp *interp, /* Interp to hold result. */ Tk_Window tkwin) /* For display to query. */ { - FontNameMap *mapPtr; - Tcl_Obj *resultPtr, *strPtr; + Tcl_Obj *resultPtr = Tcl_NewListObj(0, NULL); + NSArray *list = [[NSFontManager sharedFontManager] availableFontFamilies]; - resultPtr = Tcl_GetObjResult(interp); - for (mapPtr = gFontNameMap; mapPtr->utfName != NULL; mapPtr++) { - strPtr = Tcl_NewStringObj(mapPtr->utfName, -1); - Tcl_ListObjAppendElement(NULL, resultPtr, strPtr); + for (NSString *family in list) { + Tcl_ListObjAppendElement(NULL, resultPtr, + Tcl_NewStringObj([family UTF8String], -1)); } + Tcl_SetObjResult(interp, resultPtr); } /* @@ -656,210 +617,138 @@ TkpGetSubFonts( Tcl_Interp *interp, /* Interp to hold result. */ Tk_Font tkfont) /* Font object to query. */ { - int i; - Tcl_Obj *resultPtr, *strPtr; - MacFont *fontPtr; - FontFamily *familyPtr; - Str255 nativeName; + MacFont *fontPtr = (MacFont *) tkfont; + Tcl_Obj *resultPtr = Tcl_NewListObj(0, NULL); + + if (fontPtr->nsFont) { + NSArray *list = [[fontPtr->nsFont fontDescriptor] + objectForKey:NSFontCascadeListAttribute]; + + for (NSFontDescriptor *subFontDesc in list) { + NSString *family = [subFontDesc objectForKey:NSFontFamilyAttribute]; + + if (family) { + Tcl_ListObjAppendElement(NULL, resultPtr, + Tcl_NewStringObj([family UTF8String], -1)); + } + } + } + Tcl_SetObjResult(interp, resultPtr); +} + +/* + *---------------------------------------------------------------------- + * + * TkpGetFontAttrsForChar -- + * + * Retrieve the font attributes of the actual font used to render a + * given character. + * + * Results: + * None. + * + * Side effects: + * The font attributes are stored in *faPtr. + * + *---------------------------------------------------------------------- + */ - resultPtr = Tcl_GetObjResult(interp); - fontPtr = (MacFont *) tkfont; - for (i = 0; i < fontPtr->numSubFonts; i++) { - familyPtr = fontPtr->subFontArray[i].familyPtr; - GetFontName(familyPtr->faceNum, nativeName); - strPtr = Tcl_NewStringObj(GetUtfFaceName(nativeName), -1); - Tcl_ListObjAppendElement(NULL, resultPtr, strPtr); +void +TkpGetFontAttrsForChar( + Tk_Window tkwin, /* Window on the font's display */ + Tk_Font tkfont, /* Font to query */ + Tcl_UniChar c, /* Character of interest */ + TkFontAttributes* faPtr) /* Output: Font attributes */ +{ + MacFont *fontPtr = (MacFont *) tkfont; + NSFont *nsFont = fontPtr->nsFont; + + *faPtr = fontPtr->font.fa; + if (nsFont && ![[nsFont coveredCharacterSet] characterIsMember:c]) { + UTF16Char ch = c; + + nsFont = [nsFont bestMatchingFontForCharacters:&ch + length:1 attributes:nil actualCoveredLength:NULL]; + if (nsFont) { + GetTkFontAttributesForNSFont(nsFont, faPtr); + } } } + +#pragma mark - +#pragma mark Measuring and drawing: /* *--------------------------------------------------------------------------- * - * Tk_MeasureChars -- + * Tk_MeasureChars -- * - * Determine the number of characters from the string that will fit - * in the given horizontal span. The measurement is done under the - * assumption that Tk_DrawChars() will be used to actually display - * the characters. + * Determine the number of characters from the string that will fit in + * the given horizontal span. The measurement is done under the + * assumption that Tk_DrawChars() will be used to actually display the + * characters. + * + * With ATSUI we need the line context to do this right, so we have the + * actual implementation in TkpMeasureCharsInContext(). * * Results: - * The return value is the number of bytes from source that - * fit into the span that extends from 0 to maxLength. *lengthPtr is - * filled with the x-coordinate of the right edge of the last - * character that did fit. + * The return value is the number of bytes from source that fit into the + * span that extends from 0 to maxLength. *lengthPtr is filled with the + * x-coordinate of the right edge of the last character that did fit. * * Side effects: * None. * + * Todo: + * Effects of the "flags" parameter are untested. + * *--------------------------------------------------------------------------- */ int Tk_MeasureChars( Tk_Font tkfont, /* Font in which characters will be drawn. */ - CONST char *source, /* UTF-8 string to be displayed. Need not be + const char *source, /* UTF-8 string to be displayed. Need not be * '\0' terminated. */ - int numBytes, /* Maximum number of bytes to consider - * from source string. */ + int numBytes, /* Maximum number of bytes to consider from + * source string. */ int maxLength, /* If >= 0, maxLength specifies the longest * permissible line length; don't consider any - * character that would cross this - * x-position. If < 0, then line length is - * unbounded and the flags argument is - * ignored. */ + * character that would cross this x-position. + * If < 0, then line length is unbounded and + * the flags argument is ignored. */ int flags, /* Various flag bits OR-ed together: * TK_PARTIAL_OK means include the last char * which only partially fit on this line. * TK_WHOLE_WORDS means stop on a word - * boundary, if possible. - * TK_AT_LEAST_ONE means return at least one - * character even if no characters fit. */ + * boundary, if possible. TK_AT_LEAST_ONE + * means return at least one character even if + * no characters fit. */ int *lengthPtr) /* Filled with x-location just after the * terminating character. */ { - MacFont *fontPtr; - SubFont *thisSubFontPtr, *lastSubFontPtr; - CGrafPtr savePort; - Boolean portChanged; - int curX, curByte; - - /* - * According to "Inside Macintosh: Text", the Macintosh may - * automatically substitute - * ligatures or context-sensitive presentation forms when - * measuring/displaying text within a font run. We cannot safely - * measure individual characters and add up the widths w/o errors. - * However, if we convert a range of text from UTF-8 to, say, - * Shift-JIS, and get the offset into the Shift-JIS string as to - * where a word or line break would occur, then can we map that - * number back to UTF-8? - */ - - fontPtr = (MacFont *) tkfont; - - portChanged = QDSwapPort(gWorld, &savePort); - - TextSize(fontPtr->size); - TextFace(fontPtr->style); - - lastSubFontPtr = &fontPtr->subFontArray[0]; - - if (numBytes == 0) { - curX = 0; - curByte = 0; - } else if (maxLength < 0) { - const char *p, *end, *next; - Tcl_UniChar ch; - FontFamily *familyPtr; - Tcl_DString runString; - - /* - * A three step process: - * 1. Find a contiguous range of characters that can all be - * represented by a single screen font. - * 2. Convert those chars to the encoding of that font. - * 3. Measure converted chars. - */ - - curX = 0; - end = source + numBytes; - for (p = source; p < end; ) { - next = p + Tcl_UtfToUniChar(p, &ch); - thisSubFontPtr = FindSubFontForChar(fontPtr, ch, &lastSubFontPtr); - if (thisSubFontPtr != lastSubFontPtr) { - familyPtr = lastSubFontPtr->familyPtr; - TextFont(familyPtr->faceNum); - Tcl_UtfToExternalDString(familyPtr->encoding, source, - p - source, &runString); - curX += TextWidth(Tcl_DStringValue(&runString), 0, - Tcl_DStringLength(&runString)); - Tcl_DStringFree(&runString); - lastSubFontPtr = thisSubFontPtr; - source = p; - } - p = next; - } - familyPtr = lastSubFontPtr->familyPtr; - TextFont(familyPtr->faceNum); - Tcl_UtfToExternalDString(familyPtr->encoding, source, p - source, - &runString); - curX += TextWidth(Tcl_DStringValue(&runString), 0, - Tcl_DStringLength(&runString)); - Tcl_DStringFree(&runString); - curByte = numBytes; - } else { - const char *p, *end, *next, *sourceOrig; - int widthLeft; - Tcl_UniChar ch; - const char *rest = NULL; - - /* - * How many chars will fit in the space allotted? - */ - - if (maxLength > 32767) { - maxLength = 32767; - } - - widthLeft = maxLength; - sourceOrig = source; - end = source + numBytes; - for (p = source; p < end; p = next) { - next = p + Tcl_UtfToUniChar(p, &ch); - thisSubFontPtr = FindSubFontForChar(fontPtr, ch, &lastSubFontPtr); - if (thisSubFontPtr != lastSubFontPtr) { - if (p > source) { - rest = BreakLine(lastSubFontPtr->familyPtr, flags, source, - p - source, &widthLeft); - flags &= ~TK_AT_LEAST_ONE; - if (rest != NULL) { - p = source; - break; - } - } - lastSubFontPtr = thisSubFontPtr; - source = p; - } - } - - if (p > source) { - rest = BreakLine(lastSubFontPtr->familyPtr, flags, source, p - source, - &widthLeft); - } - - if (rest == NULL) { - curByte = numBytes; - } else { - curByte = rest - sourceOrig; - } - curX = maxLength - widthLeft; - } - - if (portChanged) { - QDSwapPort(savePort, NULL); - } - - *lengthPtr = curX; - return curByte; + return TkpMeasureCharsInContext(tkfont, source, numBytes, 0, numBytes, + maxLength, flags, lengthPtr); } /* *--------------------------------------------------------------------------- * - * BreakLine -- + * TkpMeasureCharsInContext -- + * + * Determine the number of bytes from the string that will fit in the + * given horizontal span. The measurement is done under the assumption + * that TkpDrawCharsInContext() will be used to actually display the + * characters. * - * Determine where the given line of text should be broken so that it - * fits in the specified range. Before calling this function, the - * font values and graphics port must be set. + * This one is almost the same as Tk_MeasureChars(), but with access to + * all the characters on the line for context. * * Results: - * The return value is NULL if the specified range is larger that the - * space the text needs, and *widthLeftPtr is filled with how much - * space is left in the range after measuring the whole text buffer. - * Otherwise, the return value is a pointer into the text buffer that - * indicates where the line should be broken (up to, but not including - * that character), and *widthLeftPtr is filled with how much space is - * left in the range after measuring up to that character. + * The return value is the number of bytes from source that + * fit into the span that extends from 0 to maxLength. *lengthPtr is + * filled with the x-coordinate of the right edge of the last + * character that did fit. * * Side effects: * None. @@ -867,122 +756,160 @@ Tk_MeasureChars( *--------------------------------------------------------------------------- */ -static const char * -BreakLine( - FontFamily *familyPtr, /* FontFamily that describes the font values - * that are already selected into the graphics - * port. */ +int +TkpMeasureCharsInContext( + Tk_Font tkfont, /* Font in which characters will be drawn. */ + const char * source, /* UTF-8 string to be displayed. Need not be + * '\0' terminated. */ + int numBytes, /* Maximum number of bytes to consider from + * source string in all. */ + int rangeStart, /* Index of first byte to measure. */ + int rangeLength, /* Length of range to measure in bytes. */ + int maxLength, /* If >= 0, maxLength specifies the longest + * permissible line length; don't consider any + * character that would cross this x-position. + * If < 0, then line length is unbounded and + * the flags argument is ignored. */ int flags, /* Various flag bits OR-ed together: * TK_PARTIAL_OK means include the last char - * which only partially fit on this line. + * which only partially fits on this line. * TK_WHOLE_WORDS means stop on a word - * boundary, if possible. - * TK_AT_LEAST_ONE means return at least one - * character even if no characters fit. */ - const char *source, /* UTF-8 string to be displayed. Need not be - * '\0' terminated. */ - int numBytes, /* Maximum number of bytes to consider - * from source string. */ - int *widthLeftPtr) /* On input, specifies size of range into - * which characters from source buffer should - * be fit. On output, filled with how much - * space is left after fitting as many - * characters as possible into the range. - * Result may be negative if TK_AT_LEAST_ONE - * was specified in the flags argument. */ + * boundary, if possible. TK_AT_LEAST_ONE + * means return at least one character even + * if no characters fit. If TK_WHOLE_WORDS + * and TK_AT_LEAST_ONE are set and the first + * word doesn't fit, we return at least one + * character or whatever characters fit into + * maxLength. TK_ISOLATE_END means that the + * last character should not be considered in + * context with the rest of the string (used + * for breaking lines). */ + int *lengthPtr) /* Filled with x-location just after the + * terminating character. */ { - Fixed pixelWidth, widthLeft; - StyledLineBreakCode breakCode; - Tcl_DString runString; - long textOffset; - Boolean leadingEdge; - Point point; - int charOffset, thisCharWasDoubleByte; - char *p, *end, *typeTable; - - TextFont(familyPtr->faceNum); - Tcl_UtfToExternalDString(familyPtr->encoding, source, numBytes, - &runString); - pixelWidth = IntToFixed(*widthLeftPtr) + 1; - if (flags & TK_WHOLE_WORDS) { - textOffset = (flags & TK_AT_LEAST_ONE); - widthLeft = pixelWidth; - breakCode = StyledLineBreak(Tcl_DStringValue(&runString), - Tcl_DStringLength(&runString), 0, Tcl_DStringLength(&runString), - 0, &widthLeft, &textOffset); - if (breakCode != smBreakOverflow) { - /* - * StyledLineBreak includes all the space characters at the end of - * line that we want to suppress. - */ - - textOffset = VisibleLength(Tcl_DStringValue(&runString), textOffset); - goto getoffset; - } - } else { - point.v = 1; - point.h = 1; - textOffset = PixelToChar(Tcl_DStringValue(&runString), - Tcl_DStringLength(&runString), 0, pixelWidth, &leadingEdge, - &widthLeft, smOnlyStyleRun, point, point); - if (FixedToInt(widthLeft) < 0) { - goto getoffset; - } + const MacFont *fontPtr = (const MacFont *) tkfont; + NSString *string; + NSAttributedString *attributedString; + CTTypesetterRef typesetter; + CFIndex start, len; + CFRange range = {0, 0}; + CTLineRef line; + CGFloat offset = 0; + CFIndex index; + double width; + int length, fit; + + if (rangeStart < 0 || rangeLength <= 0 || + rangeStart + rangeLength > numBytes || + (maxLength == 0 && !(flags & TK_AT_LEAST_ONE))) { + *lengthPtr = 0; + return 0; } - *widthLeftPtr = FixedToInt(widthLeft); - Tcl_DStringFree(&runString); - return NULL; - - /* - * The conversion routine that converts UTF-8 to the target encoding - * must map one UTF-8 character to exactly one encoding-specific - * character, so that the following algorithm works: - * - * 1. Get byte offset of where line should be broken. - * 2. Get char offset corresponding to that byte offset. - * 3. Map that char offset to byte offset in UTF-8 string. - */ - - getoffset: - thisCharWasDoubleByte = 0; - if (familyPtr->isMultiByteFont == 0) { - charOffset = textOffset; +#if 0 + /* Back-compatibility with ATSUI renderer, appears not to be needed */ + if (rangeStart == 0 && maxLength == 1 && (flags & TK_ISOLATE_END) && + !(flags & TK_AT_LEAST_ONE)) { + length = 0; + fit = 0; + goto done; + } +#endif + if (maxLength > 32767) { + maxLength = 32767; + } + string = [[NSString alloc] initWithBytesNoCopy:(void*)source + length:numBytes encoding:NSUTF8StringEncoding freeWhenDone:NO]; + if (!string) { + length = 0; + fit = rangeLength; + goto done; + } + attributedString = [[NSAttributedString alloc] initWithString:string + attributes:fontPtr->nsAttributes]; + typesetter = CTTypesetterCreateWithAttributedString( + (CFAttributedStringRef)attributedString); + start = Tcl_NumUtfChars(source, rangeStart); + len = Tcl_NumUtfChars(source + rangeStart, rangeLength); + if (start > 0) { + range.length = start; + line = CTTypesetterCreateLine(typesetter, range); + offset = CTLineGetTypographicBounds(line, NULL, NULL, NULL); + CFRelease(line); + } + if (maxLength < 0) { + index = len; + range.length = len; + line = CTTypesetterCreateLine(typesetter, range); + width = CTLineGetTypographicBounds(line, NULL, NULL, NULL); + CFRelease(line); } else { - charOffset = 0; - typeTable = familyPtr->typeTable; - - p = Tcl_DStringValue(&runString); - end = p + textOffset; - thisCharWasDoubleByte = typeTable[*((unsigned char *) p)]; - for ( ; p < end; p++) { - thisCharWasDoubleByte = typeTable[*((unsigned char *) p)]; - p += thisCharWasDoubleByte; - charOffset++; + double maxWidth = maxLength + offset; + NSCharacterSet *cs; + + index = start; + if (flags & TK_WHOLE_WORDS) { + index = CTTypesetterSuggestLineBreak(typesetter, start, maxWidth); + if (index <= start && (flags & TK_AT_LEAST_ONE)) { + flags &= ~TK_WHOLE_WORDS; + } + } + if (index <= start && !(flags & TK_WHOLE_WORDS)) { + index = CTTypesetterSuggestClusterBreak(typesetter, start, maxWidth); + } + cs = (index < len || (flags & TK_WHOLE_WORDS)) ? + whitespaceCharacterSet : lineendingCharacterSet; + while (index > start && + [cs characterIsMember:[string characterAtIndex:(index - 1)]]) { + index--; + } + if (index <= start && (flags & TK_AT_LEAST_ONE)) { + index = start + 1; + } + if (index > 0) { + range.length = index; + line = CTTypesetterCreateLine(typesetter, range); + width = CTLineGetTypographicBounds(line, NULL, NULL, NULL); + CFRelease(line); + } else { + width = 0; + } + if (width < maxWidth && (flags & TK_PARTIAL_OK) && index < len) { + range.length = ++index; + line = CTTypesetterCreateLine(typesetter, range); + width = CTLineGetTypographicBounds(line, NULL, NULL, NULL); + CFRelease(line); } - } - if ((flags & TK_WHOLE_WORDS) == 0) { - if ((flags & TK_PARTIAL_OK) && (leadingEdge != 0)) { - textOffset += thisCharWasDoubleByte; - textOffset++; - charOffset++; - } else if (((flags & TK_PARTIAL_OK) == 0) && (leadingEdge == 0)) { - textOffset -= thisCharWasDoubleByte; - textOffset--; - charOffset--; + /* The call to CTTypesetterSuggestClusterBreak above will always + return at least one character regardless of whether it exceeded + it or not. Clean that up now. */ + while (width > maxWidth && !(flags & TK_PARTIAL_OK) && index > start+(flags & TK_AT_LEAST_ONE)) { + range.length = --index; + line = CTTypesetterCreateLine(typesetter, range); + width = CTLineGetTypographicBounds(line, NULL, NULL, NULL); + CFRelease(line); } + } - if ((textOffset == 0) && (Tcl_DStringLength(&runString) > 0) - && (flags & TK_AT_LEAST_ONE)) { - p = Tcl_DStringValue(&runString); - textOffset += familyPtr->typeTable[*((unsigned char *) p)]; - textOffset++; - charOffset++; - } - *widthLeftPtr = FixedToInt(pixelWidth) - - TextWidth(Tcl_DStringValue(&runString), 0, textOffset); - Tcl_DStringFree(&runString); - return Tcl_UtfAtIndex(source, charOffset); + CFRelease(typesetter); + [attributedString release]; + [string release]; + length = ceil(width - offset); + fit = (Tcl_UtfAtIndex(source, index) - source) - rangeStart; +done: +#ifdef TK_MAC_DEBUG_FONTS + TkMacOSXDbgMsg("measure: source=\"%s\" range=\"%.*s\" maxLength=%d " + "flags='%s%s%s%s' -> width=%d bytesFit=%d\n", source, rangeLength, + source+rangeStart, maxLength, + flags & TK_PARTIAL_OK ? "partialOk " : "", + flags & TK_WHOLE_WORDS ? "wholeWords " : "", + flags & TK_AT_LEAST_ONE ? "atLeastOne " : "", + flags & TK_ISOLATE_END ? "isolateEnd " : "", + length, fit); +//if (!(rangeLength==1 && rangeStart == 0)) fprintf(stderr, " measure len=%d (max=%d, w=%.0f) from %d (nb=%d): source=\"%s\": index=%d return %d\n",rangeLength,maxLength,width,rangeStart,numBytes, source+rangeStart, index, fit); +#endif + *lengthPtr = length; + return fit; } /* @@ -992,8 +919,11 @@ BreakLine( * * Draw a string of characters on the screen. * + * With ATSUI we need the line context to do this right, so we have the + * actual implementation in TkpDrawCharsInContext(). + * * Results: - * None. + * None. * * Side effects: * Information gets drawn on the screen. @@ -1008,7 +938,7 @@ Tk_DrawChars( GC gc, /* Graphics context for drawing characters. */ Tk_Font tkfont, /* Font in which characters will be drawn; must * be the same as font used in GC. */ - CONST char *source, /* UTF-8 string to be displayed. Need not be + const char *source, /* UTF-8 string to be displayed. Need not be * '\0' terminated. All Tk meta-characters * (tabs, control characters, and newlines) * should be stripped out of the string that @@ -1019,837 +949,181 @@ Tk_DrawChars( int x, int y) /* Coordinates at which to place origin of the * string when drawing. */ { - MacDrawable *macWin = (MacDrawable *) drawable; - MacFont *fontPtr = (MacFont *) tkfont; - TkMacOSXDrawingContext drawingContext; - - if (!TkMacOSXSetupDrawingContext(drawable, gc, 0, &drawingContext)) { - return; - } -#if 0 - /* - * Stippled QD text drawing only kind of works and is ugly, so disable it - * for now: - */ - if ((gc->fill_style == FillStippled - || gc->fill_style == FillOpaqueStippled) - && gc->stipple != None) { - TkMacOSXDrawingContext pixmapDrawingContext; - BitMapPtr stippleMap; - Pixmap pixmap; - Pattern white; - Rect bounds = drawingContext.portBounds; - - OffsetRect(&bounds, macWin->xOff + x, 0); - stippleMap = TkMacOSXMakeStippleMap(drawable, gc->stipple); - pixmap = Tk_GetPixmap(display, drawable, - stippleMap->bounds.right, stippleMap->bounds.bottom, 0); - if (!TkMacOSXSetupDrawingContext(pixmap, gc, 0, - &pixmapDrawingContext)) { - return; - } - GetQDGlobalsWhite(&white); - FillRect(&stippleMap->bounds, &white); - MultiFontDrawText(fontPtr, source, numBytes, 0, macWin->yOff + y); - TkMacOSXRestoreDrawingContext(&pixmapDrawingContext); - CopyDeepMask(GetPortBitMapForCopyBits(TkMacOSXGetDrawablePort(pixmap)), - stippleMap, GetPortBitMapForCopyBits( - TkMacOSXGetDrawablePort(drawable)), &stippleMap->bounds, - &stippleMap->bounds, &bounds, srcOr, NULL); - - /* TODO: this doesn't work quite right - it does a blend. You can't - * draw white text when you have a stipple. - */ - - Tk_FreePixmap(display, pixmap); - ckfree(stippleMap->baseAddr); - ckfree((char *)stippleMap); - } else -#endif - { - MultiFontDrawText(fontPtr, source, numBytes, macWin->xOff + x, - macWin->yOff + y); - } - TkMacOSXRestoreDrawingContext(&drawingContext); -} - -/* - *------------------------------------------------------------------------- - * - * MultiFontDrawText -- - * - * Helper function for Tk_DrawChars. Draws characters, using the - * various screen fonts in fontPtr to draw multilingual characters. - * Note: No bidirectional support. - * - * Results: - * None. - * - * Side effects: - * Information gets drawn on the screen. - * Contents of fontPtr may be modified if more subfonts were loaded - * in order to draw all the multilingual characters in the given - * string. - * - *------------------------------------------------------------------------- - */ - -static void -MultiFontDrawText( - MacFont *fontPtr, /* Contains set of fonts to use when drawing - * following string. */ - const char *source, /* Potentially multilingual UTF-8 string. */ - int numBytes, /* Length of string in bytes. */ - int x, int y) /* Coordinates at which to place origin * - * of string when drawing. */ -{ - SubFont *thisSubFontPtr, *lastSubFontPtr; - FontFamily *familyPtr; - Tcl_DString runString; - const char *p, *end, *next; - Tcl_UniChar ch; - - TextSize(fontPtr->size); - TextFace(fontPtr->style); - - lastSubFontPtr = &fontPtr->subFontArray[0]; - - end = source + numBytes; - for (p = source; p < end; ) { - next = p + Tcl_UtfToUniChar(p, &ch); - thisSubFontPtr = FindSubFontForChar(fontPtr, ch, &lastSubFontPtr); - if (thisSubFontPtr != lastSubFontPtr) { - if (p > source) { - familyPtr = lastSubFontPtr->familyPtr; - TextFont(familyPtr->faceNum); - Tcl_UtfToExternalDString(familyPtr->encoding, source, - p - source, &runString); - MoveTo((short) x, (short) y); - DrawText(Tcl_DStringValue(&runString), 0, - Tcl_DStringLength(&runString)); - x += TextWidth(Tcl_DStringValue(&runString), 0, - Tcl_DStringLength(&runString)); - Tcl_DStringFree(&runString); - source = p; - } - lastSubFontPtr = thisSubFontPtr; - } - p = next; - } - if (p > source) { - familyPtr = lastSubFontPtr->familyPtr; - TextFont(familyPtr->faceNum); - Tcl_UtfToExternalDString(familyPtr->encoding, source, - p - source, &runString); - MoveTo((short) x, (short) y); - DrawText(Tcl_DStringValue(&runString), 0, - Tcl_DStringLength(&runString)); - Tcl_DStringFree(&runString); - } + DrawCharsInContext(display, drawable, gc, tkfont, source, numBytes, + 0, numBytes, x, y, 0.0); } /* *--------------------------------------------------------------------------- * - * TkMacOSXIsCharacterMissing -- + * TkpDrawCharsInContext -- * - * Given a tkFont and a character determines whether the character has - * a glyph defined in the font or not. Note that this is potentially - * not compatible with Mac OS 8 as it looks at the font handle - * structure directly. Looks into the character array of the font - * handle to determine whether the glyph is defined or not. + * Draw a string of characters on the screen like Tk_DrawChars(), with + * access to all the characters on the line for context. * * Results: - * Returns a 1 if the character is missing, a 0 if it is not. - * - * Side effects: * None. * - *--------------------------------------------------------------------------- - */ - -int -TkMacOSXIsCharacterMissing( - Tk_Font tkfont, /* The font we are looking in. */ - unsigned int searchChar) /* The character we are looking for. */ -{ - /* - * For some reason, FMSwapFont always returns a NULL font handle under OS X - * Until we figure this one out, return 0; - */ - - return 0; -} - -/* - *--------------------------------------------------------------------------- - * - * InitFont -- - * - * Helper for TkpGetNativeFont() and TkpGetFontFromAttributes(). - * Initializes the memory for a MacFont that wraps the platform-specific - * data. - * - * The caller is responsible for initializing the fields of the - * TkFont that are used exclusively by the generic TkFont code, and - * for releasing those fields before calling TkpDeleteFont(). - * - * Results: - * Fills the MacFont structure. - * * Side effects: - * Memory allocated. - * - *--------------------------------------------------------------------------- - */ - -static void -InitFont( - Tk_Window tkwin, /* For display where font will be used. */ - int faceNum, /* Macintosh font number. */ - unsigned char *familyName, /* The font family name or NULL. */ - int size, /* Point size for Macintosh font. */ - int style, /* Macintosh style bits. */ - MacFont *fontPtr) /* Filled with information constructed from - * the above arguments. */ -{ - Str255 nativeName; - FontInfo fi; - TkFontAttributes *faPtr; - TkFontMetrics *fmPtr; - CGrafPtr savePort; - Boolean portChanged; - short pixels; - - if (size == 0) { - size = -GetDefFontSize(); - } - pixels = (short) TkFontGetPixels(tkwin, size); - - portChanged = QDSwapPort(gWorld, &savePort); - TextFont(faceNum); - TextSize(pixels); - TextFace(style); - - GetFontInfo(&fi); - if (!familyName) { - GetFontName(faceNum, nativeName); - familyName = nativeName; - } - fontPtr->font.fid = (Font) fontPtr; - - faPtr = &fontPtr->font.fa; - faPtr->family = GetUtfFaceName(familyName); - faPtr->size = TkFontGetPoints(tkwin, size); - faPtr->weight = (style & bold) ? TK_FW_BOLD : TK_FW_NORMAL; - faPtr->slant = (style & italic) ? TK_FS_ITALIC : TK_FS_ROMAN; - faPtr->underline = ((style & underline) != 0); - faPtr->overstrike = 0; - - fmPtr = &fontPtr->font.fm; - fmPtr->ascent = fi.ascent; - fmPtr->descent = fi.descent; - fmPtr->maxWidth = fi.widMax; - fmPtr->fixed = (CharWidth('i') == CharWidth('w')); - - fontPtr->size = pixels; - fontPtr->style = (short) style; - - fontPtr->numSubFonts = 1; - fontPtr->subFontArray = fontPtr->staticSubFonts; - InitSubFont(fontPtr, faceNum, &fontPtr->subFontArray[0]); - - if (portChanged) { - QDSwapPort(savePort, NULL); - } -} - -/* - *------------------------------------------------------------------------- - * - * ReleaseFont -- - * - * Called to release the Macintosh-specific contents of a TkFont. - * The caller is responsible for freeing the memory used by the - * font itself. - * - * Results: - * None. + * Information gets drawn on the screen. * - * Side effects: - * Memory is freed. + * Todo: + * Stippled text drawing. * *--------------------------------------------------------------------------- */ -static void -ReleaseFont( - MacFont *fontPtr) /* The font to delete. */ +void +TkpDrawCharsInContext( + Display *display, /* Display on which to draw. */ + Drawable drawable, /* Window or pixmap in which to draw. */ + GC gc, /* Graphics context for drawing characters. */ + Tk_Font tkfont, /* Font in which characters will be drawn; must + * be the same as font used in GC. */ + const char * source, /* UTF-8 string to be displayed. Need not be + * '\0' terminated. All Tk meta-characters + * (tabs, control characters, and newlines) + * should be stripped out of the string that + * is passed to this function. If they are not + * stripped out, they will be displayed as + * regular printing characters. */ + int numBytes, /* Number of bytes in string. */ + int rangeStart, /* Index of first byte to draw. */ + int rangeLength, /* Length of range to draw in bytes. */ + int x, int y) /* Coordinates at which to place origin of the + * whole (not just the range) string when + * drawing. */ { - int i; - - for (i = 0; i < fontPtr->numSubFonts; i++) { - ReleaseSubFont(&fontPtr->subFontArray[i]); - } - if (fontPtr->subFontArray != fontPtr->staticSubFonts) { - ckfree((char *) fontPtr->subFontArray); - } + DrawCharsInContext(display, drawable, gc, tkfont, source, numBytes, + rangeStart, rangeLength, x, y, 0.0); } -/* - *------------------------------------------------------------------------- - * - * InitSubFont -- - * - * Wrap a screen font and load the FontFamily that represents - * it. Used to prepare a SubFont so that characters can be mapped - * from UTF-8 to the charset of the font. - * - * Results: - * The subFontPtr is filled with information about the font. - * - * Side effects: - * None. - * - *------------------------------------------------------------------------- - */ - static void -InitSubFont( - const MacFont *fontPtr, /* Font object in which the SubFont will be - * used. */ - int faceNum, /* The font number. */ - SubFont *subFontPtr) /* Filled with SubFont constructed from - * above attributes. */ -{ - subFontPtr->familyPtr = AllocFontFamily(fontPtr, faceNum); - subFontPtr->fontMap = subFontPtr->familyPtr->fontMap; -} - -/* - *------------------------------------------------------------------------- - * - * ReleaseSubFont -- - * - * Called to release the contents of a SubFont. The caller is - * responsible for freeing the memory used by the SubFont itself. - * - * Results: - * None. - * - * Side effects: - * Memory and resources are freed. - * - *--------------------------------------------------------------------------- - */ - -static void -ReleaseSubFont( - SubFont *subFontPtr) /* The SubFont to delete. */ -{ - FreeFontFamily(subFontPtr->familyPtr); -} - -/* - *------------------------------------------------------------------------- - * - * AllocFontFamily -- - * - * Find the FontFamily structure associated with the given font - * family. The information should be stored by the caller in a - * SubFont and used when determining if that SubFont supports a - * character. - * - * Results: - * A pointer to a FontFamily. The reference count in the FontFamily - * is automatically incremented. When the SubFont is released, the - * reference count is decremented. When no SubFont is using this - * FontFamily, it may be deleted. - * - * Side effects: - * A new FontFamily structure will be allocated if this font family - * has not been seen. - * - *------------------------------------------------------------------------- - */ - -static FontFamily * -AllocFontFamily( - const MacFont *fontPtr, /* Font object in which the FontFamily will - * be used. */ - int faceNum) /* The font number. */ -{ - FontFamily *familyPtr; - int i; - - familyPtr = fontFamilyList; - for (; familyPtr != NULL; familyPtr = familyPtr->nextPtr) { - if (familyPtr->faceNum == faceNum) { - familyPtr->refCount++; - return familyPtr; - } - } - - familyPtr = (FontFamily *) ckalloc(sizeof(FontFamily)); - memset(familyPtr, 0, sizeof(FontFamily)); - familyPtr->nextPtr = fontFamilyList; - fontFamilyList = familyPtr; - - /* - * Set key for this FontFamily. - */ - - familyPtr->faceNum = faceNum; - - /* - * An initial refCount of 2 means that FontFamily information will - * persist even when the SubFont that loaded the FontFamily is released. - * Change it to 1 to cause FontFamilies to be unloaded when not in use. - */ - - familyPtr->refCount = 2; - familyPtr->encoding = GetFontEncoding(faceNum, 1, &familyPtr->isSymbolFont); - familyPtr->isMultiByteFont = 0; - FillParseTable(familyPtr->typeTable, FontToScript(faceNum)); - for (i = 0; i < 256; i++) { - if (familyPtr->typeTable[i] != 0) { - familyPtr->isMultiByteFont = 1; - break; - } - } - return familyPtr; -} - -/* - *------------------------------------------------------------------------- - * - * FreeFontFamily -- - * - * Called to free a FontFamily when the SubFont is finished using it. - * Frees the contents of the FontFamily and the memory used by the - * FontFamily itself. - * - * Results: - * None. - * - * Side effects: - * None. - * - *------------------------------------------------------------------------- - */ - -static void -FreeFontFamily( - FontFamily *familyPtr) /* The FontFamily to delete. */ +DrawCharsInContext( + Display *display, /* Display on which to draw. */ + Drawable drawable, /* Window or pixmap in which to draw. */ + GC gc, /* Graphics context for drawing characters. */ + Tk_Font tkfont, /* Font in which characters will be drawn; must + * be the same as font used in GC. */ + const char * source, /* UTF-8 string to be displayed. Need not be + * '\0' terminated. All Tk meta-characters + * (tabs, control characters, and newlines) + * should be stripped out of the string that + * is passed to this function. If they are not + * stripped out, they will be displayed as + * regular printing characters. */ + int numBytes, /* Number of bytes in string. */ + int rangeStart, /* Index of first byte to draw. */ + int rangeLength, /* Length of range to draw in bytes. */ + int x, int y, /* Coordinates at which to place origin of the + * whole (not just the range) string when + * drawing. */ + double angle) { - FontFamily **familyPtrPtr; - int i; - - if (familyPtr == NULL) { + const MacFont *fontPtr = (const MacFont *) tkfont; + NSString *string; + NSMutableDictionary *attributes; + NSAttributedString *attributedString; + CTTypesetterRef typesetter; + CFIndex start, len; + CTLineRef line; + MacDrawable *macWin = (MacDrawable *) drawable; + TkMacOSXDrawingContext drawingContext; + CGContextRef context; + CGColorRef fg; + NSFont *nsFont; + CGAffineTransform t; + int h; + + if (rangeStart < 0 || rangeLength <= 0 || + rangeStart + rangeLength > numBytes || + !TkMacOSXSetupDrawingContext(drawable, gc, 1, &drawingContext)) { return; } - familyPtr->refCount--; - if (familyPtr->refCount > 0) { - return; - } - Tcl_FreeEncoding(familyPtr->encoding); - for (i = 0; i < FONTMAP_PAGES; i++) { - if (familyPtr->fontMap[i] != NULL) { - ckfree((char *) familyPtr->fontMap[i]); - } - } - - /* - * Delete from list. - */ - - for (familyPtrPtr = &fontFamilyList; ; ) { - if (*familyPtrPtr == familyPtr) { - *familyPtrPtr = familyPtr->nextPtr; - break; - } - familyPtrPtr = &(*familyPtrPtr)->nextPtr; - } - - ckfree((char *) familyPtr); -} - -/* - *------------------------------------------------------------------------- - * - * FindSubFontForChar -- - * - * Determine which physical screen font is necessary to use to - * display the given character. If the font object does not have - * a screen font that can display the character, another screen font - * may be loaded into the font object, following a set of preferred - * fallback rules. - * - * Results: - * The return value is the SubFont to use to display the given - * character. - * - * Side effects: - * The contents of fontPtr are modified to cache the results - * of the lookup and remember any SubFonts that were dynamically - * loaded. The table of SubFonts might be extended, and if a non-NULL - * reference to a subfont pointer is available, it is updated if it - * previously pointed into the old subfont table. - * - *------------------------------------------------------------------------- - */ - -static SubFont * -FindSubFontForChar( - MacFont *fontPtr, /* The font object with which the character - * will be displayed. */ - int ch, /* The Unicode character to be displayed. */ - SubFont **fixSubFontPtrPtr) /* Subfont reference to fix up if we - * reallocate our subfont table. */ -{ - int i, j, k; - const char *fallbackName; - char **aliases; - SubFont *subFontPtr; - FontNameMap *mapPtr; - Tcl_DString faceNames; - char ***fontFallbacks; - char **anyFallbacks; - - if (FontMapLookup(&fontPtr->subFontArray[0], ch)) { - return &fontPtr->subFontArray[0]; - } - - for (i = 1; i < fontPtr->numSubFonts; i++) { - if (FontMapLookup(&fontPtr->subFontArray[i], ch)) { - return &fontPtr->subFontArray[i]; - } - } - - /* - * Keep track of all face names that we check, so we don't check some - * name multiple times if it can be reached by multiple paths. - */ - - Tcl_DStringInit(&faceNames); - - aliases = TkFontGetAliasList(fontPtr->font.fa.family); - - subFontPtr = NULL; - fontFallbacks = TkFontGetFallbacks(); - for (i = 0; fontFallbacks[i] != NULL; i++) { - for (j = 0; fontFallbacks[i][j] != NULL; j++) { - fallbackName = fontFallbacks[i][j]; - if (strcasecmp(fallbackName, fontPtr->font.fa.family) == 0) { - /* - * If the base font has a fallback... - */ - - goto tryfallbacks; - } else if (aliases != NULL) { - /* - * Or if an alias for the base font has a fallback... - */ - - for (k = 0; aliases[k] != NULL; k++) { - if (strcasecmp(aliases[k], fallbackName) == 0) { - goto tryfallbacks; - } - } - } - } - continue; - - /* - * ...then see if we can use one of the fallbacks, or an - * alias for one of the fallbacks. - */ - - tryfallbacks: - for (j = 0; fontFallbacks[i][j] != NULL; j++) { - fallbackName = fontFallbacks[i][j]; - subFontPtr = CanUseFallbackWithAliases(fontPtr, fallbackName, - ch, &faceNames, fixSubFontPtrPtr); - if (subFontPtr != NULL) { - goto end; - } - } - } - - /* - * See if we can use something from the global fallback list. - */ - - anyFallbacks = TkFontGetGlobalClass(); - for (i = 0; anyFallbacks[i] != NULL; i++) { - fallbackName = anyFallbacks[i]; - subFontPtr = CanUseFallbackWithAliases(fontPtr, fallbackName, ch, - &faceNames, fixSubFontPtrPtr); - if (subFontPtr != NULL) { - goto end; - } - } - - /* - * Try all face names available in the whole system until we - * find one that can be used. - */ - - for (mapPtr = gFontNameMap; mapPtr->utfName != NULL; mapPtr++) { - fallbackName = mapPtr->utfName; - if (SeenName(fallbackName, &faceNames) == 0) { - subFontPtr = CanUseFallback(fontPtr, fallbackName, ch, - fixSubFontPtrPtr); - if (subFontPtr != NULL) { - goto end; - } - } + string = [[NSString alloc] initWithBytesNoCopy:(void*)source + length:numBytes encoding:NSUTF8StringEncoding freeWhenDone:NO]; + if (!string) { + return; } - - end: - Tcl_DStringFree(&faceNames); - - if (subFontPtr == NULL) { - /* - * No font can display this character. We will use the base font - * and have it display the "unknown" character. - */ - - subFontPtr = &fontPtr->subFontArray[0]; - FontMapInsert(subFontPtr, ch); + context = drawingContext.context; + fg = TkMacOSXCreateCGColor(gc, gc->foreground); + attributes = [fontPtr->nsAttributes mutableCopy]; + [attributes setObject:(id)fg forKey:(id)kCTForegroundColorAttributeName]; + CFRelease(fg); + nsFont = [attributes objectForKey:NSFontAttributeName]; + [nsFont setInContext:[NSGraphicsContext graphicsContextWithGraphicsPort: + context flipped:NO]]; + CGContextSetTextMatrix(context, CGAffineTransformIdentity); + attributedString = [[NSAttributedString alloc] initWithString:string + attributes:attributes]; + typesetter = CTTypesetterCreateWithAttributedString( + (CFAttributedStringRef)attributedString); + x += macWin->xOff; + y += macWin->yOff; + h = drawingContext.portBounds.size.height; + y = h - y; + t = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, h); + if (angle != 0.0) { + t = CGAffineTransformTranslate(CGAffineTransformRotate( + CGAffineTransformTranslate(t, x, y), angle*M_PI/180.0), -x, -y); } - return subFontPtr; -} - -/* - *------------------------------------------------------------------------- - * - * FontMapLookup -- - * - * See if the screen font can display the given character. - * - * Results: - * The return value is 0 if the screen font cannot display the - * character, non-zero otherwise. - * - * Side effects: - * New pages are added to the font mapping cache whenever the - * character belongs to a page that hasn't been seen before. - * When a page is loaded, information about all the characters on - * that page is stored, not just for the single character in - * question. - * - *------------------------------------------------------------------------- - */ - -static int -FontMapLookup( - SubFont *subFontPtr, /* Contains font mapping cache to be queried - * and possibly updated. */ - int ch) /* Character to be tested. */ -{ - int row, bitOffset; - - row = ch >> FONTMAP_SHIFT; - if (subFontPtr->fontMap[row] == NULL) { - FontMapLoadPage(subFontPtr, row); + CGContextConcatCTM(context, t); + CGContextSetTextPosition(context, x, y); + start = Tcl_NumUtfChars(source, rangeStart); + len = Tcl_NumUtfChars(source, rangeStart + rangeLength); + if (start > 0) { + CGRect clipRect = CGRectInfinite, startBounds; + line = CTTypesetterCreateLine(typesetter, CFRangeMake(0, start)); + startBounds = CTLineGetImageBounds(line, context); + CFRelease(line); + clipRect.origin.x = startBounds.origin.x + startBounds.size.width; + CGContextClipToRect(context, clipRect); } - bitOffset = ch & (FONTMAP_BITSPERPAGE - 1); - return (subFontPtr->fontMap[row][bitOffset >> 3] >> (bitOffset & 7)) & 1; -} - -/* - *------------------------------------------------------------------------- - * - * FontMapInsert -- - * - * Tell the font mapping cache that the given screen font should be - * used to display the specified character. This is called when no - * font on the system can be be found that can display that - * character; we lie to the font and tell it that it can display - * the character, otherwise we would end up re-searching the entire - * fallback hierarchy every time that character was seen. - * - * Results: - * None. - * - * Side effects: - * New pages are added to the font mapping cache whenever the - * character belongs to a page that hasn't been seen before. - * When a page is loaded, information about all the characters on - * that page is stored, not just for the single character in - * question. - * - *------------------------------------------------------------------------- - */ - -static void -FontMapInsert( - SubFont *subFontPtr, /* Contains font mapping cache to be - * updated. */ - int ch) /* Character to be added to cache. */ -{ - int row, bitOffset; - - row = ch >> FONTMAP_SHIFT; - if (subFontPtr->fontMap[row] == NULL) { - FontMapLoadPage(subFontPtr, row); - } - bitOffset = ch & (FONTMAP_BITSPERPAGE - 1); - subFontPtr->fontMap[row][bitOffset >> 3] |= 1 << (bitOffset & 7); + line = CTTypesetterCreateLine(typesetter, CFRangeMake(0, len)); + CTLineDraw(line, context); + CFRelease(line); + CFRelease(typesetter); + [attributedString release]; + [string release]; + [attributes release]; + TkMacOSXRestoreDrawingContext(&drawingContext); } - -/* - *------------------------------------------------------------------------- - * - * FontMapLoadPage -- - * - * Load information about all the characters on a given page. - * This information consists of one bit per character that indicates - * whether the associated HFONT can (1) or cannot (0) display the - * characters on the page. - * - * Results: - * None. - * - * Side effects: - * Mempry allocated. - * - *------------------------------------------------------------------------- - */ -static void -FontMapLoadPage( - SubFont *subFontPtr, /* Contains font mapping cache to be - * updated. */ - int row) /* Index of the page to be loaded into - * the cache. */ -{ - FMInput fm; - FMOutPtr fmOut; - int i, end, bitOffset, isMultiByteFont; - char src[TCL_UTF_MAX]; - unsigned char buf[16]; - int srcRead, dstWrote; - Tcl_Encoding encoding; - Handle fHandle = NULL; - - subFontPtr->fontMap[row] = (char *) ckalloc(FONTMAP_BITSPERPAGE / 8); - memset(subFontPtr->fontMap[row], 0, FONTMAP_BITSPERPAGE / 8); - - encoding = subFontPtr->familyPtr->encoding; - - fm.family = subFontPtr->familyPtr->faceNum; - fm.size = 12; - fm.face = 0; - fm.needBits = 0; - fm.device = 0; - fm.numer.h = 1; - fm.numer.v = 1; - fm.denom.h = 1; - fm.denom.v = 1; -/* - * For some reason, FMSwapFont alywas returns a structure where the returned font handle - * is NULL. Until we figure this one out, assume all characters are allowed - */ - - fmOut = FMSwapFont(&fm); - fHandle = fmOut->fontHandle; - isMultiByteFont = subFontPtr->familyPtr->isMultiByteFont; - - /* - * Found an outline font which has very complex font record. - * Let's just assume *ALL* the characters are allowed. - */ - - end = (row + 1) << FONTMAP_SHIFT; - for (i = row << FONTMAP_SHIFT; i < end; i++) { - if (Tcl_UtfToExternal(NULL, encoding, src, Tcl_UniCharToUtf(i, - src), - TCL_ENCODING_STOPONERROR, NULL, (char *) buf, - sizeof(buf), - &srcRead, &dstWrote, NULL) == TCL_OK) { - bitOffset = i & (FONTMAP_BITSPERPAGE - 1); - subFontPtr->fontMap[row][bitOffset >> 3] |= 1 - << (bitOffset & 7); - } - } -} +#pragma mark - +#pragma mark Accessors: /* *--------------------------------------------------------------------------- * - * CanUseFallbackWithAliases -- + * TkMacOSXNSFontForFont -- * - * Helper function for FindSubFontForChar. Determine if the - * specified face name (or an alias of the specified face name) - * can be used to construct a screen font that can display the - * given character. + * Return an NSFont for the given Tk_Font. * * Results: - * See CanUseFallback(). + * NSFont*. * * Side effects: - * If the name and/or one of its aliases was rejected, the - * rejected string is recorded in nameTriedPtr so that it won't - * be tried again. The table of SubFonts might be extended, and if - * a non-NULL reference to a subfont pointer is available, it is - * updated if it previously pointed into the old subfont table. + * None. * *--------------------------------------------------------------------------- */ -static SubFont * -CanUseFallbackWithAliases( - MacFont *fontPtr, /* The font object that will own the new - * screen font. */ - const char *faceName, /* Desired face name for new screen font. */ - int ch, /* The Unicode character that the new - * screen font must be able to display. */ - Tcl_DString *nameTriedPtr, /* Records face names that have already - * been tried. It is possible for the same - * face name to be queried multiple times when - * trying to find a suitable screen font. */ - SubFont **fixSubFontPtrPtr) /* Subfont reference to fix up if we - * reallocate our subfont table. */ +MODULE_SCOPE NSFont* +TkMacOSXNSFontForFont( + Tk_Font tkfont) { - SubFont *subFontPtr; - char **aliases; - int i; - - if (SeenName(faceName, nameTriedPtr) == 0) { - subFontPtr = CanUseFallback(fontPtr, faceName, ch, fixSubFontPtrPtr); - if (subFontPtr != NULL) { - return subFontPtr; - } - } - aliases = TkFontGetAliasList(faceName); - if (aliases != NULL) { - for (i = 0; aliases[i] != NULL; i++) { - if (SeenName(aliases[i], nameTriedPtr) == 0) { - subFontPtr = CanUseFallback(fontPtr, aliases[i], ch, - fixSubFontPtrPtr); - if (subFontPtr != NULL) { - return subFontPtr; - } - } - } - } - return NULL; + return tkfont ? ((MacFont *)tkfont)->nsFont : nil; } /* *--------------------------------------------------------------------------- * - * SeenName -- + * TkMacOSXNSFontAttributesForFont -- * - * Used to determine we have already tried and rejected the given - * face name when looking for a screen font that can support some - * Unicode character. + * Return an NSDictionary of font attributes for the given Tk_Font. * * Results: - * The return value is 0 if this face name has not already been seen, - * non-zero otherwise. + * NSFont*. * * Side effects: * None. @@ -1857,388 +1131,92 @@ CanUseFallbackWithAliases( *--------------------------------------------------------------------------- */ -static int -SeenName( - const char *name, /* The name to check. */ - Tcl_DString *dsPtr) /* Contains names that have already been - * seen. */ -{ - const char *seen, *end; - - seen = Tcl_DStringValue(dsPtr); - end = seen + Tcl_DStringLength(dsPtr); - while (seen < end) { - if (strcasecmp(seen, name) == 0) { - return 1; - } - seen += strlen(seen) + 1; - } - Tcl_DStringAppend(dsPtr, (char *) name, (int) (strlen(name) + 1)); - return 0; -} - -/* - *------------------------------------------------------------------------- - * - * CanUseFallback -- - * - * If the specified physical screen font has not already been loaded - * into the font object, determine if the specified physical screen - * font can display the given character. - * - * Results: - * The return value is a pointer to a newly allocated SubFont, owned - * by the font object. This SubFont can be used to display the given - * character. The SubFont represents the screen font with the base set - * of font attributes from the font object, but using the specified - * font name. NULL is returned if the font object already holds - * a reference to the specified physical font or if the specified - * physical font cannot display the given character. - * - * Side effects: - * The font object's subFontArray is updated to contain a reference - * to the newly allocated SubFont. The table of SubFonts might be - * extended, and if a non-NULL reference to a subfont pointer is - * available, it is updated if it previously pointed into the old - * subfont table. - * - *------------------------------------------------------------------------- - */ - -static SubFont * -CanUseFallback( - MacFont *fontPtr, /* The font object that will own the new - * screen font. */ - const char *faceName, /* Desired face name for new screen font. */ - int ch, /* The Unicode character that the new - * screen font must be able to display. */ - SubFont **fixSubFontPtrPtr) /* Subfont reference to fix up if we - * reallocate our subfont table. */ +MODULE_SCOPE NSDictionary* +TkMacOSXNSFontAttributesForFont( + Tk_Font tkfont) { - int i; - SubFont subFont; - short faceNum; - - if (GetFamilyNum(faceName, &faceNum) == 0) { - return NULL; - } - - /* - * Skip all fonts we've already used. - */ - - for (i = 0; i < fontPtr->numSubFonts; i++) { - if (faceNum == fontPtr->subFontArray[i].familyPtr->faceNum) { - return NULL; - } - } - - /* - * Load this font and see if it has the desired character. - */ - - InitSubFont(fontPtr, faceNum, &subFont); - if (((ch < 256) && (subFont.familyPtr->isSymbolFont)) - || (FontMapLookup(&subFont, ch) == 0)) { - ReleaseSubFont(&subFont); - return NULL; - } - - if (fontPtr->numSubFonts >= SUBFONT_SPACE) { - SubFont *newPtr = (SubFont *) ckalloc(sizeof(SubFont) - * (fontPtr->numSubFonts + 1)); - memcpy((char *) newPtr, fontPtr->subFontArray, - fontPtr->numSubFonts * sizeof(SubFont)); - if (fixSubFontPtrPtr != NULL) { - /* - * Fix up the variable pointed to by fixSubFontPtrPtr so it - * still points into the live array. [Bug 618872] - */ - - *fixSubFontPtrPtr = - newPtr + (*fixSubFontPtrPtr - fontPtr->subFontArray); - } - if (fontPtr->subFontArray != fontPtr->staticSubFonts) { - ckfree((char *) fontPtr->subFontArray); - } - fontPtr->subFontArray = newPtr; - } - fontPtr->subFontArray[fontPtr->numSubFonts] = subFont; - fontPtr->numSubFonts++; - return &fontPtr->subFontArray[fontPtr->numSubFonts - 1]; + return tkfont ? ((MacFont *)tkfont)->nsAttributes : nil; } /* - *------------------------------------------------------------------------- + *--------------------------------------------------------------------------- * - * GetFamilyNum -- + * TkMacOSXIsCharacterMissing -- * - * Determines if any physical screen font exists on the system with - * the given family name. If the family exists, then it should be - * possible to construct some physical screen font with that family - * name. + * Given a tkFont and a character determine whether the character has + * a glyph defined in the font or not. * * Results: - * The return value is 0 if the specified font family does not exist, - * non-zero otherwise. *faceNumPtr is filled with the unique face - * number that identifies the screen font, or 0 if the font family - * did not exist. + * Returns a 1 if the character is missing, a 0 if it is not. * * Side effects: * None. * - *------------------------------------------------------------------------- + *--------------------------------------------------------------------------- */ -static int -GetFamilyNum( - const char *faceName, /* UTF-8 name of font family to query. */ - short *faceNumPtr) /* Filled with font number for above family. */ -{ - FontNameMap *mapPtr; - - if (faceName != NULL) { - for (mapPtr = gFontNameMap; mapPtr->utfName != NULL; mapPtr++) { - if (strcasecmp(faceName, mapPtr->utfName) == 0) { - *faceNumPtr = mapPtr->faceNum; - return 1; - } - } - } - *faceNumPtr = 0; - return 0; -} - -static int -GetFamilyOrAliasNum( - const char *faceName, /* UTF-8 name of font family to query. */ - short *faceNumPtr) /* Filled with font number for above family. */ +int +TkMacOSXIsCharacterMissing( + Tk_Font tkfont, /* The font we are looking in. */ + unsigned int searchChar) /* The character we are looking for. */ { - char **aliases; - int i; - - if (GetFamilyNum(faceName, faceNumPtr) != 0) { - return 1; - } - aliases = TkFontGetAliasList(faceName); - if (aliases != NULL) { - for (i = 0; aliases[i] != NULL; i++) { - if (GetFamilyNum(aliases[i], faceNumPtr) != 0) { - return 1; - } - } - } return 0; } /* - *------------------------------------------------------------------------- - * - * GetUtfFaceName -- - * - * Given the native name for a Macintosh font (in which the name of - * the font is in the encoding of the font itself), return the UTF-8 - * name that corresponds to that font. The specified font name must - * refer to a font that actually exists on the machine. - * - * This function is used to obtain the UTF-8 name when querying the - * properties of a Macintosh font object. - * - * Results: - * The return value is a pointer to the UTF-8 of the specified font. - * - * Side effects: - * None. - * - *------------------------------------------------------------------------ - */ - -static Tk_Uid -GetUtfFaceName( - StringPtr nativeName) /* Pascal name for font in native encoding. */ -{ - FontNameMap *mapPtr; - - for (mapPtr = gFontNameMap; mapPtr->utfName != NULL; mapPtr++) { - if (pstrcmp(nativeName, mapPtr->nativeName) == 0) { - return mapPtr->utfName; - } - } - Tcl_Panic("GetUtfFaceName: unexpected nativeName"); - return NULL; -} - -/* - *------------------------------------------------------------------------ + *---------------------------------------------------------------------- * - * GetFontEncoding -- + * TkMacOSXUseAntialiasedText -- * - * Return a string that can be passed to Tcl_GetTextEncoding() and - * used to convert bytes from UTF-8 into the encoding of the - * specified font. + * Enables or disables application-wide use of antialiased text (where + * available). Sets up a linked Tcl global variable to allow + * disabling of antialiased text from tcl. + * The possible values for this variable are: * - * The desired encoding to use to convert the name of a symbolic - * font into UTF-8 is macRoman, while the desired encoding to use - * to convert bytes in a symbolic font to UTF-8 is the corresponding - * symbolic encoding. Due to this dual interpretatation of symbolic - * fonts, the caller can specify what type of encoding to return - * should the specified font be symbolic. + * -1 - Use system default as configurable in "System Prefs" -> "General". + * 0 - Unconditionally disable antialiasing. + * 1 - Unconditionally enable antialiasing. * * Results: - * The return value is a string that specifies the font's encoding. - * If the font's encoding could not be identified, NULL is returned. - * - * Side effects: - * None. - * - *------------------------------------------------------------------------ - */ - -static Tcl_Encoding -GetFontEncoding( - int faceNum, /* Macintosh font number. */ - int allowSymbol, /* If non-zero, then the encoding string - * for symbol fonts will be the corresponding - * symbol encoding. Otherwise, the encoding - * string for symbol fonts will be - * "macRoman". */ - int *isSymbolPtr) /* Filled with non-zero if this font is a - * symbol font, 0 otherwise. */ -{ - Str255 faceName; - int script, lang; - char *name; - - if (allowSymbol != 0) { - GetFontName(faceNum, faceName); - if (pstrcasecmp(faceName, "\psymbol") == 0) { - *isSymbolPtr = 1; - return Tcl_GetEncoding(NULL, "symbol"); - } - if (pstrcasecmp(faceName, "\pzapf dingbats") == 0) { - *isSymbolPtr = 1; - return Tcl_GetEncoding(NULL, "macDingbats"); - } - } - *isSymbolPtr = 0; - script = FontToScript(faceNum); - lang = GetScriptVariable(script, smScriptLang); - name = NULL; - if (script == smRoman) { - name = TkFindStateString(romanMap, lang); - } else if (script == smCyrillic) { - name = TkFindStateString(cyrillicMap, lang); - } - if (name == NULL) { - name = TkFindStateString(scriptMap, script); - } - return Tcl_GetEncoding(NULL, name); -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXInitControlFontStyle -- * - * This procedure sets up the appropriate ControlFontStyleRec - * for a Mac control. - * - * Results: - * None. + * TCL_OK. * * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -void -TkMacOSXInitControlFontStyle( - Tk_Font tkfont, - ControlFontStylePtr fsPtr) -{ - MacFont *fontPtr = (MacFont *) tkfont; - FontFamily *lastFamilyPtr = fontPtr->subFontArray[0].familyPtr; - - fsPtr->flags = kControlUseFontMask | kControlUseSizeMask | - kControlUseFaceMask | kControlUseJustMask; - fsPtr->font = lastFamilyPtr->faceNum; - fsPtr->size = fontPtr->size; - fsPtr->style = fontPtr->style; - fsPtr->just = teCenter; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXUseAntialiasedText -- - * - * Enables or disables application-wide use of quickdraw - * antialiased text (where available). - * Sets up a linked tcl global boolean variable with write trace - * to allow disabling of antialiased text from tcl. * - * Results: - * TCL_OK if facility was sucessfully enabled/disabled. - * TCL_ERROR if an error occurred or if facility is not available. - * - * Side effects: * None. * *---------------------------------------------------------------------- */ -static int TkMacOSXAntialiasedTextEnabled = FALSE; - -static char * -TkMacOSXAntialiasedTextVariableProc( - ClientData clientData, - Tcl_Interp *interp, - const char *name1, - const char *name2, - int flags) -{ - TkMacOSXUseAntialiasedText(interp, TkMacOSXAntialiasedTextEnabled); - return (char *) NULL; -} - -int +MODULE_SCOPE int TkMacOSXUseAntialiasedText( - Tcl_Interp *interp, - int enable) + Tcl_Interp * interp, /* The Tcl interpreter to receive the + * variable.*/ + int enable) /* Initial value. */ { static Boolean initialized = FALSE; - static UInt32 (*swaptextflags)(UInt32) = NULL; - if(!initialized) { - swaptextflags = TkMacOSXGetNamedSymbol("QD", "_QDSwapTextFlags"); - if (!swaptextflags) { - swaptextflags = TkMacOSXGetNamedSymbol("QD", "_SwapQDTextFlags"); - } + if (!initialized) { initialized = TRUE; - TkMacOSXAntialiasedTextEnabled = (swaptextflags ? enable : FALSE); if (Tcl_CreateNamespace(interp, "::tk::mac", NULL, NULL) == NULL) { Tcl_ResetResult(interp); } - if (Tcl_TraceVar(interp, "::tk::mac::antialiasedtext", - TCL_GLOBAL_ONLY | TCL_TRACE_WRITES, - TkMacOSXAntialiasedTextVariableProc, NULL) != TCL_OK) { - Tcl_ResetResult(interp); - } if (Tcl_LinkVar(interp, "::tk::mac::antialiasedtext", - (char *) &TkMacOSXAntialiasedTextEnabled, - TCL_LINK_BOOLEAN) != TCL_OK) { + (char *) &antialiasedTextEnabled, + TCL_LINK_INT) != TCL_OK) { Tcl_ResetResult(interp); } } - if (swaptextflags) { - swaptextflags(enable ? kQDUseCGTextRendering | kQDUseCGTextMetrics - : kQDUseTrueTypeScalerGlyphs); - TkMacOSXAntialiasedTextEnabled = enable; - return TCL_OK; - } else { - TkMacOSXAntialiasedTextEnabled = FALSE; - return TCL_ERROR; - } + antialiasedTextEnabled = enable; + return TCL_OK; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXFont.h b/macosx/tkMacOSXFont.h index 6ce310d..c852e9c 100644 --- a/macosx/tkMacOSXFont.h +++ b/macosx/tkMacOSXFont.h @@ -6,8 +6,8 @@ * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -22,11 +22,4 @@ #include "tkMacOSXInt.h" #endif -/* - * Function prototypes - */ - -MODULE_SCOPE void TkMacOSXInitControlFontStyle(Tk_Font tkfont, - ControlFontStylePtr fsPtr); - #endif /*TKMACOSXFONT_H*/ diff --git a/macosx/tkMacOSXHLEvents.c b/macosx/tkMacOSXHLEvents.c index 3c6ffd0..9671ab9 100644 --- a/macosx/tkMacOSXHLEvents.c +++ b/macosx/tkMacOSXHLEvents.c @@ -1,11 +1,11 @@ /* * tkMacOSXHLEvents.c -- * - * Implements high level event support for the Macintosh. Currently, - * the only event that really does anything is the Quit event. + * Implements high level event support for the Macintosh. Currently, the + * only event that really does anything is the Quit event. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. + * Copyright 2001-2009, Apple Inc. * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution @@ -15,47 +15,62 @@ #include "tkMacOSXPrivate.h" /* - * This is a Tcl_Event structure that the Quit AppleEvent handler - * uses to schedule the ReallyKillMe function. + * This is a Tcl_Event structure that the Quit AppleEvent handler uses to + * schedule the ReallyKillMe function. */ typedef struct KillEvent { - Tcl_Event header; /* Information that is standard for - * all events. */ - Tcl_Interp *interp; /* Interp that was passed to the - * Quit AppleEvent */ + Tcl_Event header; /* Information that is standard for all + * events. */ + Tcl_Interp *interp; /* Interp that was passed to the Quit + * AppleEvent */ } KillEvent; /* * Static functions used only in this file. */ -static OSErr QuitHandler(const AppleEvent * event, AppleEvent * reply, - long handlerRefcon); -static OSErr OappHandler(const AppleEvent * event, AppleEvent * reply, - long handlerRefcon); -static OSErr RappHandler(const AppleEvent * event, AppleEvent * reply, - long handlerRefcon); -static OSErr OdocHandler(const AppleEvent * event, AppleEvent * reply, - long handlerRefcon); -static OSErr PrintHandler(const AppleEvent * event, AppleEvent * reply, - long handlerRefcon); -static OSErr ScriptHandler(const AppleEvent * event, AppleEvent * reply, - long handlerRefcon); -static OSErr PrefsHandler(const AppleEvent * event, AppleEvent * reply, - long handlerRefcon); - -static int MissedAnyParameters(const AppleEvent *theEvent); -static int ReallyKillMe(Tcl_Event *eventPtr, int flags); -static OSStatus FSRefToDString(const FSRef *fsref, Tcl_DString *ds); +static OSErr QuitHandler(const AppleEvent *event, + AppleEvent *reply, SRefCon handlerRefcon); +static OSErr OappHandler(const AppleEvent *event, + AppleEvent *reply, SRefCon handlerRefcon); +static OSErr RappHandler(const AppleEvent *event, + AppleEvent *reply, SRefCon handlerRefcon); +static OSErr OdocHandler(const AppleEvent *event, + AppleEvent *reply, SRefCon handlerRefcon); +static OSErr PrintHandler(const AppleEvent *event, + AppleEvent *reply, SRefCon handlerRefcon); +static OSErr ScriptHandler(const AppleEvent *event, + AppleEvent *reply, SRefCon handlerRefcon); +static OSErr PrefsHandler(const AppleEvent *event, + AppleEvent *reply, SRefCon handlerRefcon); +static int MissedAnyParameters(const AppleEvent *theEvent); +static int ReallyKillMe(Tcl_Event *eventPtr, int flags); +static OSStatus FSRefToDString(const FSRef *fsref, Tcl_DString *ds); + +#pragma mark TKApplication(TKHLEvents) + +@implementation TKApplication(TKHLEvents) + +- (void)terminate:(id)sender { + QuitHandler(NULL, NULL, (SRefCon) _eventInterp); +} + +- (void)preferences:(id)sender { + PrefsHandler(NULL, NULL, (SRefCon) _eventInterp); +} + +@end + +#pragma mark - /* *---------------------------------------------------------------------- * * TkMacOSXInitAppleEvents -- * - * Initilize the Apple Events on the Macintosh. This registers the - * core event handlers. + * Initilize the Apple Events on the Macintosh. This registers the core + * event handlers. * * Results: * None. @@ -68,10 +83,11 @@ static OSStatus FSRefToDString(const FSRef *fsref, Tcl_DString *ds); void TkMacOSXInitAppleEvents( - Tcl_Interp *interp) /* Interp to handle basic events. */ + Tcl_Interp *interp) /* Interp to handle basic events. */ { - AEEventHandlerUPP OappHandlerUPP, RappHandlerUPP, OdocHandlerUPP, - PrintHandlerUPP, QuitHandlerUPP, ScriptHandlerUPP, PrefsHandlerUPP; + AEEventHandlerUPP OappHandlerUPP, RappHandlerUPP, OdocHandlerUPP; + AEEventHandlerUPP PrintHandlerUPP, QuitHandlerUPP, ScriptHandlerUPP; + AEEventHandlerUPP PrefsHandlerUPP; static Boolean initialized = FALSE; if (!initialized) { @@ -80,34 +96,35 @@ TkMacOSXInitAppleEvents( /* * Install event handlers for the core apple events. */ + QuitHandlerUPP = NewAEEventHandlerUPP(QuitHandler); ChkErr(AEInstallEventHandler, kCoreEventClass, kAEQuitApplication, - QuitHandlerUPP, (long) interp, false); + QuitHandlerUPP, (SRefCon) interp, false); OappHandlerUPP = NewAEEventHandlerUPP(OappHandler); ChkErr(AEInstallEventHandler, kCoreEventClass, kAEOpenApplication, - OappHandlerUPP, (long) interp, false); + OappHandlerUPP, (SRefCon) interp, false); RappHandlerUPP = NewAEEventHandlerUPP(RappHandler); ChkErr(AEInstallEventHandler, kCoreEventClass, kAEReopenApplication, - RappHandlerUPP, (long) interp, false); + RappHandlerUPP, (SRefCon) interp, false); OdocHandlerUPP = NewAEEventHandlerUPP(OdocHandler); ChkErr(AEInstallEventHandler, kCoreEventClass, kAEOpenDocuments, - OdocHandlerUPP, (long) interp, false); + OdocHandlerUPP, (SRefCon) interp, false); PrintHandlerUPP = NewAEEventHandlerUPP(PrintHandler); ChkErr(AEInstallEventHandler, kCoreEventClass, kAEPrintDocuments, - PrintHandlerUPP, (long) interp, false); + PrintHandlerUPP, (SRefCon) interp, false); PrefsHandlerUPP = NewAEEventHandlerUPP(PrefsHandler); ChkErr(AEInstallEventHandler, kCoreEventClass, kAEShowPreferences, - PrefsHandlerUPP, (long) interp, false); + PrefsHandlerUPP, (SRefCon) interp, false); if (interp) { ScriptHandlerUPP = NewAEEventHandlerUPP(ScriptHandler); ChkErr(AEInstallEventHandler, kAEMiscStandards, kAEDoScript, - ScriptHandlerUPP, (long) interp, false); + ScriptHandlerUPP, (SRefCon) interp, false); } } } @@ -130,9 +147,9 @@ TkMacOSXInitAppleEvents( int TkMacOSXDoHLEvent( - EventRecord *theEvent) + void *theEvent) { - return AEProcessAppleEvent(theEvent); + return AEProcessAppleEvent((EventRecord *)theEvent); } /* @@ -151,21 +168,22 @@ TkMacOSXDoHLEvent( *---------------------------------------------------------------------- */ -OSErr +static OSErr QuitHandler( - const AppleEvent * event, - AppleEvent * reply, - long handlerRefcon) + const AppleEvent *event, + AppleEvent *reply, + SRefCon handlerRefcon) { Tcl_Interp *interp = (Tcl_Interp *) handlerRefcon; KillEvent *eventPtr; if (interp) { /* - * Call the exit command from the event loop, since you are not supposed - * to call ExitToShell in an Apple Event Handler. We put this at the head - * of Tcl's event queue because this message usually comes when the Mac is - * shutting down, and we want to kill the shell as quickly as possible. + * Call the exit command from the event loop, since you are not + * supposed to call ExitToShell in an Apple Event Handler. We put this + * at the head of Tcl's event queue because this message usually comes + * when the Mac is shutting down, and we want to kill the shell as + * quickly as possible. */ eventPtr = (KillEvent *) ckalloc(sizeof(KillEvent)); @@ -193,18 +211,21 @@ QuitHandler( *---------------------------------------------------------------------- */ -OSErr +static OSErr OappHandler( - const AppleEvent * event, - AppleEvent * reply, - long handlerRefcon) + const AppleEvent *event, + AppleEvent *reply, + SRefCon handlerRefcon) { Tcl_CmdInfo dummy; Tcl_Interp *interp = (Tcl_Interp *) handlerRefcon; if (interp && - Tcl_GetCommandInfo(interp, "::tk::mac::OpenApplication", &dummy)) { - Tcl_EvalEx(interp, "::tk::mac::OpenApplication", -1, TCL_EVAL_GLOBAL); + Tcl_GetCommandInfo(interp, "::tk::mac::OpenApplication", &dummy)){ + int code = Tcl_EvalEx(interp, "::tk::mac::OpenApplication", -1, TCL_EVAL_GLOBAL); + if (code != TCL_OK) { + Tcl_BackgroundError(interp); + } } return noErr; } @@ -225,20 +246,23 @@ OappHandler( *---------------------------------------------------------------------- */ -OSErr +static OSErr RappHandler( - const AppleEvent * event, - AppleEvent * reply, - long handlerRefcon) + const AppleEvent *event, + AppleEvent *reply, + SRefCon handlerRefcon) { Tcl_CmdInfo dummy; Tcl_Interp *interp = (Tcl_Interp *) handlerRefcon; ProcessSerialNumber thePSN = {0, kCurrentProcess}; OSStatus err = ChkErr(SetFrontProcess, &thePSN); - if (interp && - Tcl_GetCommandInfo(interp, "::tk::mac::ReopenApplication", &dummy)) { - Tcl_EvalEx(interp, "::tk::mac::ReopenApplication", -1, TCL_EVAL_GLOBAL); + if (interp && Tcl_GetCommandInfo(interp, + "::tk::mac::ReopenApplication", &dummy)) { + int code = Tcl_EvalEx(interp, "::tk::mac::ReopenApplication", -1, TCL_EVAL_GLOBAL); + if (code != TCL_OK){ + Tcl_BackgroundError(interp); + } } return err; } @@ -248,8 +272,8 @@ RappHandler( * * PrefsHandler -- * - * This is the 'pref' core Apple event handler. - * Called when the user selects 'Preferences...' in MacOS X + * This is the 'pref' core Apple event handler. Called when the user + * selects 'Preferences...' in MacOS X * * Results: * None. @@ -260,18 +284,21 @@ RappHandler( *---------------------------------------------------------------------- */ -OSErr +static OSErr PrefsHandler( - const AppleEvent * event, - AppleEvent * reply, - long handlerRefcon) + const AppleEvent *event, + AppleEvent *reply, + SRefCon handlerRefcon) { Tcl_CmdInfo dummy; Tcl_Interp *interp = (Tcl_Interp *) handlerRefcon; if (interp && - Tcl_GetCommandInfo(interp, "::tk::mac::ShowPreferences", &dummy)) { - Tcl_EvalEx(interp, "::tk::mac::ShowPreferences", -1, TCL_EVAL_GLOBAL); + Tcl_GetCommandInfo(interp, "::tk::mac::ShowPreferences", &dummy)){ + int code = Tcl_EvalEx(interp, "::tk::mac::ShowPreferences", -1, TCL_EVAL_GLOBAL); + if (code != TCL_OK) { + Tcl_BackgroundError(interp); + } } return noErr; } @@ -292,75 +319,77 @@ PrefsHandler( *---------------------------------------------------------------------- */ -OSErr +static OSErr OdocHandler( - const AppleEvent * event, - AppleEvent * reply, - long handlerRefcon) + const AppleEvent *event, + AppleEvent *reply, + SRefCon handlerRefcon) { Tcl_Interp *interp = (Tcl_Interp *) handlerRefcon; AEDescList fileSpecList; FSRef file; - OSStatus err; DescType type; Size actual; - long count; + long count, index; AEKeyword keyword; - long index; - Tcl_DString command; - Tcl_DString pathName; + Tcl_DString command, pathName; Tcl_CmdInfo dummy; + int code; /* - * Don't bother if we don't have an interp or - * the open document procedure doesn't exist. + * Don't bother if we don't have an interp or the open document procedure + * doesn't exist. */ - if ((interp == NULL) || - (Tcl_GetCommandInfo(interp, "::tk::mac::OpenDocument", &dummy)) == 0) { - return noErr; + if (!interp || + !Tcl_GetCommandInfo(interp, "::tk::mac::OpenDocument", &dummy)) { + return noErr; } /* - * If we get any errors wil retrieving our parameters - * we just return with no error. + * If we get any errors while retrieving our parameters we just return with + * no error. */ - err = ChkErr(AEGetParamDesc, event, keyDirectObject, typeAEList, - &fileSpecList); - if (err != noErr) { + if (ChkErr(AEGetParamDesc, event, keyDirectObject, typeAEList, + &fileSpecList) != noErr) { return noErr; } - - err = MissedAnyParameters(event); - if (err != noErr) { + if (MissedAnyParameters(event) != noErr) { return noErr; } - - err = ChkErr(AECountItems, &fileSpecList, &count); - if (err != noErr) { + if (ChkErr(AECountItems, &fileSpecList, &count) != noErr) { return noErr; } + /* + * Convert our parameters into a script to evaluate, skipping things that + * we can't handle right. + */ + Tcl_DStringInit(&command); Tcl_DStringAppend(&command, "::tk::mac::OpenDocument", -1); for (index = 1; index <= count; index++) { - err = ChkErr(AEGetNthPtr, &fileSpecList, index, typeFSRef, - &keyword, &type, (Ptr) &file, sizeof(FSRef), &actual); - if ( err != noErr ) { + if (ChkErr(AEGetNthPtr, &fileSpecList, index, typeFSRef, &keyword, + &type, (Ptr) &file, sizeof(FSRef), &actual) != noErr) { continue; } - err = ChkErr(FSRefToDString, &file, &pathName); - if (err == noErr) { + if (ChkErr(FSRefToDString, &file, &pathName) == noErr) { Tcl_DStringAppendElement(&command, Tcl_DStringValue(&pathName)); Tcl_DStringFree(&pathName); } } - Tcl_EvalEx(interp, Tcl_DStringValue(&command), Tcl_DStringLength(&command), - TCL_EVAL_GLOBAL); + /* + * Now handle the event by evaluating a script. + */ + code = Tcl_EvalEx(interp, Tcl_DStringValue(&command), + Tcl_DStringLength(&command), TCL_EVAL_GLOBAL); + if (code != TCL_OK) { + Tcl_BackgroundError(interp); + } Tcl_DStringFree(&command); return noErr; } @@ -381,75 +410,72 @@ OdocHandler( *---------------------------------------------------------------------- */ -OSErr +static OSErr PrintHandler( const AppleEvent * event, AppleEvent * reply, - long handlerRefcon) + SRefCon handlerRefcon) { Tcl_Interp *interp = (Tcl_Interp *) handlerRefcon; AEDescList fileSpecList; FSRef file; - OSStatus err; DescType type; Size actual; - long count; + long count, index; AEKeyword keyword; - long index; - Tcl_DString command; - Tcl_DString pathName; + Tcl_DString command, pathName; Tcl_CmdInfo dummy; + int code; /* - * Don't bother if we don't have an interp or - * the print document procedure doesn't exist. + * Don't bother if we don't have an interp or the print document procedure + * doesn't exist. */ - if ((interp == NULL) || - (Tcl_GetCommandInfo(interp, "::tk::mac::PrintDocument", &dummy)) == 0) { - return noErr; + if (!interp || + !Tcl_GetCommandInfo(interp, "::tk::mac::PrintDocument", &dummy)) { + return noErr; } /* - * If we get any errors wil retrieving our parameters - * we just return with no error. + * If we get any errors while retrieving our parameters we just return with + * no error. */ - err = ChkErr(AEGetParamDesc, event, keyDirectObject, typeAEList, - &fileSpecList); - if (err != noErr) { + if (ChkErr(AEGetParamDesc, event, keyDirectObject, typeAEList, + &fileSpecList) != noErr) { return noErr; } - - err = ChkErr(MissedAnyParameters, event); - if (err != noErr) { + if (ChkErr(MissedAnyParameters, event) != noErr) { return noErr; } - - err = ChkErr(AECountItems, &fileSpecList, &count); - if (err != noErr) { + if (ChkErr(AECountItems, &fileSpecList, &count) != noErr) { return noErr; } Tcl_DStringInit(&command); Tcl_DStringAppend(&command, "::tk::mac::PrintDocument", -1); for (index = 1; index <= count; index++) { - err = ChkErr(AEGetNthPtr, &fileSpecList, index, typeFSRef, &keyword, - &type, (Ptr) &file, sizeof(FSRef), &actual); - if ( err != noErr ) { + if (ChkErr(AEGetNthPtr, &fileSpecList, index, typeFSRef, &keyword, + &type, (Ptr) &file, sizeof(FSRef), &actual) != noErr) { continue; } - err = ChkErr(FSRefToDString, &file, &pathName); - if (err == noErr) { + if (ChkErr(FSRefToDString, &file, &pathName) == noErr) { Tcl_DStringAppendElement(&command, Tcl_DStringValue(&pathName)); Tcl_DStringFree(&pathName); } } - Tcl_EvalEx(interp, Tcl_DStringValue(&command), Tcl_DStringLength(&command), - TCL_EVAL_GLOBAL); + /* + * Now handle the event by evaluating a script. + */ + code = Tcl_EvalEx(interp, Tcl_DStringValue(&command), + Tcl_DStringLength(&command), TCL_EVAL_GLOBAL); + if (code != TCL_OK) { + Tcl_BackgroundError(interp); + } Tcl_DStringFree(&command); return noErr; } @@ -470,23 +496,24 @@ PrintHandler( *---------------------------------------------------------------------- */ -OSErr +static OSErr ScriptHandler( - const AppleEvent * event, - AppleEvent * reply, - long handlerRefcon) + const AppleEvent *event, + AppleEvent *reply, + SRefCon handlerRefcon) { OSStatus theErr; AEDescList theDesc; + Size size; int tclErr = -1; - Tcl_Interp *interp; + Tcl_Interp *interp = (Tcl_Interp *) handlerRefcon; char errString[128]; - interp = (Tcl_Interp *) handlerRefcon; - /* - * The do script event receives one parameter that should be data or a file. + * The do script event receives one parameter that should be data or a + * file. */ + theErr = AEGetParamDesc(event, keyDirectObject, typeWildCard, &theDesc); if (theErr != noErr) { @@ -495,73 +522,81 @@ ScriptHandler( theErr = AEPutParamPtr(reply, keyErrorString, typeChar, errString, strlen(errString)); } else if (MissedAnyParameters(event)) { + /* + * Return error if parameter is missing. + */ + sprintf(errString, "AEDoScriptHandler: extra parameters"); AEPutParamPtr(reply, keyErrorString, typeChar, errString, strlen(errString)); theErr = -1771; - } else { - Size size; + } else if (theDesc.descriptorType == (DescType) typeAlias && + AEGetParamPtr(event, keyDirectObject, typeFSRef, NULL, NULL, + 0, &size) == noErr && size == sizeof(FSRef)) { + /* + * We've had a file sent to us. Source it. + */ - if (theDesc.descriptorType == (DescType)typeAlias && - AEGetParamPtr(event, keyDirectObject, typeFSRef, NULL, NULL, - 0, &size) == noErr && size == sizeof(FSRef)) { - FSRef file; + FSRef file; + theErr = AEGetParamPtr(event, keyDirectObject, typeFSRef, NULL, &file, + size, NULL); + if (theErr == noErr) { + Tcl_DString scriptName; - theErr = AEGetParamPtr(event, keyDirectObject, typeFSRef, NULL, - &file, size, NULL); + theErr = FSRefToDString(&file, &scriptName); if (theErr == noErr) { - Tcl_DString scriptName; - - theErr = FSRefToDString(&file, &scriptName); - if (theErr == noErr) { - tclErr = Tcl_EvalFile(interp, - Tcl_DStringValue(&scriptName)); - Tcl_DStringFree(&scriptName); - } + tclErr = Tcl_EvalFile(interp, Tcl_DStringValue(&scriptName)); + Tcl_DStringFree(&scriptName); } else { sprintf(errString, "AEDoScriptHandler: file not found"); - AEPutParamPtr(reply, keyErrorString, typeChar, - errString, strlen(errString)); + AEPutParamPtr(reply, keyErrorString, typeChar, errString, + strlen(errString)); } - } else if (AEGetParamPtr(event, keyDirectObject, typeUTF8Text, NULL, - NULL, 0, &size) == noErr && size) { - char *data = ckalloc(size + 1); + } + } else if (AEGetParamPtr(event, keyDirectObject, typeUTF8Text, NULL, NULL, + 0, &size) == noErr && size) { + /* + * We've had some data sent to us. Evaluate it. + */ - theErr = AEGetParamPtr(event, keyDirectObject, typeUTF8Text, NULL, - data, size, NULL); - if (theErr == noErr) { - tclErr = Tcl_EvalEx(interp, data, size, TCL_EVAL_GLOBAL); - } - } else { - sprintf(errString, - "AEDoScriptHandler: invalid script type '%-4.4s', " - "must be 'alis' or coercable to 'utf8'", - (char *)(&theDesc.descriptorType)); - AEPutParamPtr(reply, keyErrorString, typeChar, - errString, strlen(errString)); - theErr = -1770; + char *data = ckalloc(size + 1); + theErr = AEGetParamPtr(event, keyDirectObject, typeUTF8Text, NULL, data, + size, NULL); + if (theErr == noErr) { + tclErr = Tcl_EvalEx(interp, data, size, TCL_EVAL_GLOBAL); } + } else { + /* + * Umm, don't recognize what we've got... + */ + + sprintf(errString, "AEDoScriptHandler: invalid script type '%-4.4s', " + "must be 'alis' or coercable to 'utf8'", + (char*) &theDesc.descriptorType); + AEPutParamPtr(reply, keyErrorString, typeChar, errString, + strlen(errString)); + theErr = -1770; } /* * If we actually go to run Tcl code - put the result in the reply. */ + if (tclErr >= 0) { - if (tclErr == TCL_OK) { - AEPutParamPtr(reply, keyDirectObject, typeChar, - Tcl_GetStringResult(interp), - strlen(Tcl_GetStringResult(interp))); + int reslen; + const char *result = + Tcl_GetStringFromObj(Tcl_GetObjResult(interp), &reslen); + + if (tclErr == TCL_OK) { + AEPutParamPtr(reply, keyDirectObject, typeChar, result, reslen); } else { - AEPutParamPtr(reply, keyErrorString, typeChar, - Tcl_GetStringResult(interp), - strlen(Tcl_GetStringResult(interp))); - AEPutParamPtr(reply, keyErrorNumber, typeSInt32, - (Ptr) &tclErr, sizeof(int)); + AEPutParamPtr(reply, keyErrorString, typeChar, result, reslen); + AEPutParamPtr(reply, keyErrorNumber, typeSInt32, (Ptr) &tclErr, + sizeof(int)); } } AEDisposeDesc(&theDesc); - return theErr; } @@ -570,8 +605,8 @@ ScriptHandler( * * ReallyKillMe -- * - * This proc tries to kill the shell by running exit, - * called from an event scheduled by the "Quit" AppleEvent handler. + * This proc tries to kill the shell by running exit, called from an + * event scheduled by the "Quit" AppleEvent handler. * * Results: * Runs the "exit" command which might kill the shell. @@ -589,10 +624,15 @@ ReallyKillMe( { Tcl_Interp *interp = ((KillEvent *) eventPtr)->interp; Tcl_CmdInfo dummy; - if (Tcl_GetCommandInfo(interp, "::tk::mac::Quit", &dummy)) { - Tcl_EvalEx(interp, "::tk::mac::Quit", -1, TCL_EVAL_GLOBAL); - } else { - Tcl_EvalEx(interp, "exit", -1, TCL_EVAL_GLOBAL); + int quit = Tcl_GetCommandInfo(interp, "::tk::mac::Quit", &dummy); + int code = Tcl_EvalEx(interp, quit ? "::tk::mac::Quit" : "exit", -1, TCL_EVAL_GLOBAL); + + if (code != TCL_OK) { + /* + * Should be never reached... + */ + + Tcl_BackgroundError(interp); } return 1; } @@ -613,7 +653,7 @@ ReallyKillMe( *---------------------------------------------------------------------- */ -int +static int MissedAnyParameters( const AppleEvent *theEvent) { @@ -643,7 +683,7 @@ MissedAnyParameters( *---------------------------------------------------------------------- */ -OSStatus +static OSStatus FSRefToDString( const FSRef *fsref, Tcl_DString *ds) @@ -657,3 +697,12 @@ FSRefToDString( } return err; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXInit.c b/macosx/tkMacOSXInit.c index 38471ad..2bf1962 100644 --- a/macosx/tkMacOSXInit.c +++ b/macosx/tkMacOSXInit.c @@ -5,95 +5,175 @@ * functions. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tkMacOSXPrivate.h" -#include "tclInt.h" /* for Tcl{G,S}etStartupScriptFileName() */ +#include "tclInt.h" /* for Tcl_GetStartupScript() & Tcl_SetStartupScript() */ #include <sys/stat.h> #include <sys/utsname.h> -#include <mach-o/dyld.h> -#include <mach-o/getsect.h> +#include <dlfcn.h> +#include <objc/objc-auto.h> -/* - * The Init script (common to Windows and Unix platforms) is - * defined in tkInitScript.h - */ -#include "tkInitScript.h" +static char tkLibPath[PATH_MAX + 1] = ""; /* - * Define the following to 0 to not attempt to use an undocumented SPI - * to notify the window server that an unbundled executable is a full - * GUI application after loading Tk. + * If the App is in an App package, then we want to add the Scripts directory + * to the auto_path. */ -#ifndef MAC_OSX_TK_USE_CPS_SPI -#define MAC_OSX_TK_USE_CPS_SPI 1 + +static char scriptPath[PATH_MAX + 1] = ""; + +int tkMacOSXGCEnabled = 0; +long tkMacOSXMacOSXVersion = 0; + +#pragma mark TKApplication(TKInit) + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +#define NSTextInputContextKeyboardSelectionDidChangeNotification @"NSTextInputContextKeyboardSelectionDidChangeNotification" +static void keyboardChanged(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) { + [[NSNotificationCenter defaultCenter] postNotificationName:NSTextInputContextKeyboardSelectionDidChangeNotification object:nil userInfo:nil]; +} #endif -/* - * The following structures are used to map the script/language codes of a - * font to the name that should be passed to Tcl_GetEncoding() to obtain - * the encoding for that font. The set of numeric constants is fixed and - * defined by Apple. - */ +@interface TKApplication(TKKeyboard) +- (void)keyboardChanged:(NSNotification *)notification; +@end + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 +#define TKApplication_NSApplicationDelegate <NSApplicationDelegate> +#else +#define TKApplication_NSApplicationDelegate +#endif +@interface TKApplication(TKWindowEvent) TKApplication_NSApplicationDelegate +- (void)_setupWindowNotifications; +@end -typedef struct Map { - CFStringEncoding numKey; - const char *strKey; -} Map; - -static Map scriptMap[] = { - {smRoman, "macRoman"}, - {smJapanese, "macJapan"}, - {smTradChinese, "macChinese"}, - {smKorean, "macKorean"}, - {smArabic, "macArabic"}, - {smHebrew, "macHebrew"}, - {smGreek, "macGreek"}, - {smCyrillic, "macCyrillic"}, - {smRSymbol, "macRSymbol"}, - {smDevanagari, "macDevanagari"}, - {smGurmukhi, "macGurmukhi"}, - {smGujarati, "macGujarati"}, - {smOriya, "macOriya"}, - {smBengali, "macBengali"}, - {smTamil, "macTamil"}, - {smTelugu, "macTelugu"}, - {smKannada, "macKannada"}, - {smMalayalam, "macMalayalam"}, - {smSinhalese, "macSinhalese"}, - {smBurmese, "macBurmese"}, - {smKhmer, "macKhmer"}, - {smThai, "macThailand"}, - {smLaotian, "macLaos"}, - {smGeorgian, "macGeorgia"}, - {smArmenian, "macArmenia"}, - {smSimpChinese, "macSimpChinese"}, - {smTibetan, "macTIbet"}, - {smMongolian, "macMongolia"}, - {smGeez, "macEthiopia"}, - {smEastEurRoman, "macCentEuro"}, - {smVietnamese, "macVietnam"}, - {smExtArabic, "macSindhi"}, - {0, NULL} -}; - -Tcl_Encoding TkMacOSXCarbonEncoding = NULL; +@interface TKApplication(TKScrlbr) +- (void)_setupScrollBarNotifications; +@end + +@interface TKApplication(TKMenus) +- (void)_setupMenus; +@end + +@implementation TKApplication +@end + +@implementation TKApplication(TKInit) +#ifdef TK_MAC_DEBUG_NOTIFICATIONS +- (void)_postedNotification:(NSNotification *)notification { + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +} +#endif +- (void)_setupApplicationNotifications { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; +#define observe(n, s) [nc addObserver:self selector:@selector(s) name:(n) object:nil] + observe(NSApplicationDidBecomeActiveNotification, applicationActivate:); + observe(NSApplicationDidResignActiveNotification, applicationDeactivate:); + observe(NSApplicationDidUnhideNotification, applicationShowHide:); + observe(NSApplicationDidHideNotification, applicationShowHide:); + observe(NSApplicationDidChangeScreenParametersNotification, displayChanged:); + observe(NSTextInputContextKeyboardSelectionDidChangeNotification, keyboardChanged:); +#undef observe +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + CFNotificationCenterAddObserver(CFNotificationCenterGetDistributedCenter(), NULL, &keyboardChanged, kTISNotifySelectedKeyboardInputSourceChanged, NULL, CFNotificationSuspensionBehaviorCoalesce); +#endif +} +- (void)_setupEventLoop { + _running = 1; + if (!_appFlags._hasBeenRun) { + _appFlags._hasBeenRun = YES; + [self finishLaunching]; + } + [self setWindowsNeedUpdate:YES]; +} +- (void)_setup:(Tcl_Interp *)interp { + _eventInterp = interp; + _defaultMainMenu = nil; + [self _setupMenus]; + [self setDelegate:self]; +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(_postedNotification:) name:nil object:nil]; +#endif + [self _setupWindowNotifications]; + [self _setupScrollBarNotifications]; + [self _setupApplicationNotifications]; +} +- (NSString *)tkFrameworkImagePath:(NSString*)image { + NSString *path = nil; + if (tkLibPath[0] != '\0') { + path = [[NSBundle bundleWithPath:[[NSString stringWithUTF8String: + tkLibPath] stringByAppendingString:@"/../.."]] + pathForImageResource:image]; + } + if (!path) { + const char *tk_library = Tcl_GetVar2(_eventInterp, "tk_library", NULL, + TCL_GLOBAL_ONLY); + if (tk_library) { + NSFileManager *fm = [NSFileManager defaultManager]; + path = [[NSString stringWithUTF8String:tk_library] + stringByAppendingFormat:@"/%@", image]; + if (![fm isReadableFileAtPath:path]) { + path = [[NSString stringWithUTF8String:tk_library] + stringByAppendingFormat:@"/../macosx/%@", image]; + if (![fm isReadableFileAtPath:path]) { + path = nil; + } + } + } + } +#ifdef TK_MAC_DEBUG + if (!path && getenv("TK_SRCROOT")) { + path = [[NSString stringWithUTF8String:getenv("TK_SRCROOT")] + stringByAppendingFormat:@"/macosx/%@", image]; + if (![[NSFileManager defaultManager] isReadableFileAtPath:path]) { + path = nil; + } + } +#endif + return path; +} +@end +#pragma mark - + /* - * If the App is in an App package, then we want to add the Scripts - * directory to the auto_path. + *---------------------------------------------------------------------- + * + * DoWindowActivate -- + * + * Idle handler that sets the application icon to the generic Tk icon. + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- */ -static char scriptPath[PATH_MAX + 1] = ""; - -float tkMacOSXToolboxVersionNumber = 0; +static void +SetApplicationIcon( + ClientData clientData) +{ + NSString *path = [NSApp tkFrameworkImagePath:@"Tk.icns"]; + if (path) { + NSImage *image = [[NSImage alloc] initWithContentsOfFile:path]; + if (image) { + [NSApp setApplicationIconImage:image]; + [image release]; + } + } +} /* *---------------------------------------------------------------------- @@ -104,8 +184,8 @@ float tkMacOSXToolboxVersionNumber = 0; * tk_library variable. * * Results: - * Returns a standard Tcl result. Leaves an error message or result - * in the interp's result. + * Returns a standard Tcl result. Leaves an error message or result in + * the interp's result. * * Side effects: * Sets "tk_library" Tcl variable, runs "tk.tcl" script. @@ -117,137 +197,68 @@ int TkpInit( Tcl_Interp *interp) { - static char tkLibPath[PATH_MAX + 1]; static int initialized = 0; - Tk_MacOSXSetupTkNotifier(); - /* - * Since it is possible for TkInit to be called multiple times - * and we don't want to do the following initialization multiple times - * we protect against doing it more than once. + * Since it is possible for TkInit to be called multiple times and we + * don't want to do the following initialization multiple times we protect + * against doing it more than once. */ if (!initialized) { int bundledExecutable = 0; CFBundleRef bundleRef; CFURLRef bundleUrl = NULL; - CFStringEncoding encoding; - const char *encodingStr = NULL; - int i; struct utsname name; - long osVersion = 0; + struct stat st; initialized = 1; - + /* * Initialize/check OS version variable for runtime checks. */ - + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050 +# error Mac OS X 10.5 required +#endif + if (!uname(&name)) { - osVersion = strtol(name.release, NULL, 10) - 4; + tkMacOSXMacOSXVersion = (strtod(name.release, NULL) + 96) * 10; } - if (osVersion && osVersion < (MAC_OS_X_VERSION_MIN_REQUIRED-1000)/10) { + if (tkMacOSXMacOSXVersion && + tkMacOSXMacOSXVersion/10 < MAC_OS_X_VERSION_MIN_REQUIRED/10) { Tcl_Panic("Mac OS X 10.%d or later required !", - (MAC_OS_X_VERSION_MIN_REQUIRED-1000)/10); + (MAC_OS_X_VERSION_MIN_REQUIRED/10)-100); } - TK_IF_MAC_OS_X_API (3, &kHIToolboxVersionNumber, - tkMacOSXToolboxVersionNumber = kHIToolboxVersionNumber; - ) TK_ELSE_MAC_OS_X (3, - if (osVersion > 5) { - tkMacOSXToolboxVersionNumber = INFINITY; - } else if (osVersion >= 3) { - static const float tbVersions[3] = { - kHIToolboxVersionNumber10_3, - kHIToolboxVersionNumber10_4, - kHIToolboxVersionNumber10_5, - }; - - tkMacOSXToolboxVersionNumber = tbVersions[osVersion-3]; - } - ) TK_ENDIF +#ifdef TK_FRAMEWORK /* * When Tk is in a framework, force tcl_findLibrary to look in the * framework scripts directory. * FIXME: Should we come up with a more generic way of doing this? */ -#ifdef TK_FRAMEWORK if (Tcl_MacOSXOpenVersionedBundleResources(interp, - "com.tcltk.tklibrary", TK_FRAMEWORK_VERSION, 1, PATH_MAX, - tkLibPath) != TCL_OK) -#endif - { - /* Tk.framework not found, check if resource file is open */ - Handle rsrc = Get1NamedResource('CURS', "\phand"); - if (rsrc) { - ReleaseResource(rsrc); - } else { -#ifndef __LP64__ - const struct mach_header *image; - char *data = NULL; - uint32_t size; - int fd = -1; - char fileName[L_tmpnam + 15]; - uint32_t i, n; - - /* Get resource data from __tk_rsrc section of tk dylib file*/ - n = _dyld_image_count(); - for (i = 0; i < n; i++) { - image = _dyld_get_image_header(i); - if (image) { - data = getsectdatafromheader(image, SEG_TEXT, - "__tk_rsrc", (void*)&size); - if (data) { - data += _dyld_get_image_vmaddr_slide(i); - break; - } - } - } - while (data) { - FSRef ref; - SInt16 refNum; - - /* - * Write resource data to temporary file and open it. - */ - - strcpy(fileName, P_tmpdir); - if (fileName[strlen(fileName) - 1] != '/') { - strcat(fileName, "/"); - } - strcat(fileName, "tkMacOSX_XXXXXX"); - fd = mkstemp(fileName); - if (fd == -1) { - break; - } - fcntl(fd, F_SETFD, FD_CLOEXEC); - if (write(fd, data, size) == -1) { - break; - } - if(ChkErr(FSPathMakeRef, (unsigned char*)fileName, &ref, - NULL) != noErr) { - break; - } - ChkErr(FSOpenResourceFile, &ref, 0, NULL, fsRdPerm, - &refNum); - break; - } - if (fd != -1) { - unlink(fileName); - close(fd); - } -#endif /* __LP64__ */ - } + "com.tcltk.tklibrary", TK_FRAMEWORK_VERSION, 0, PATH_MAX, + tkLibPath) != TCL_OK) { + TkMacOSXDbgMsg("Tcl_MacOSXOpenVersionedBundleResources failed"); } +#endif - /* - * 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, notify the window server that - * we are now a full GUI application. - */ + static NSAutoreleasePool *pool = nil; + if (!pool) { + pool = [NSAutoreleasePool new]; + } + tkMacOSXGCEnabled = ([NSGarbageCollector defaultCollector] != nil); + [[NSUserDefaults standardUserDefaults] registerDefaults: + [NSDictionary dictionaryWithObjectsAndKeys: + [NSNumber numberWithBool:YES], + @"_NSCanWrapButtonTitles", + [NSNumber numberWithInt:-1], + @"NSStringDrawingTypesetterBehavior", + nil]]; + [TKApplication sharedApplication]; + [NSApp _setup:interp]; /* Check whether we are a bundled executable: */ bundleRef = CFBundleGetMainBundle(); @@ -264,11 +275,14 @@ TkpInit( * executable's url and compare the resulting url with the main * bundle url. */ + int j = 3; CFURLRef url = CFBundleCopyExecutableURL(bundleRef); + while (url && j--) { - CFURLRef parent = CFURLCreateCopyDeletingLastPathComponent(NULL, - url); + CFURLRef parent = + CFURLCreateCopyDeletingLastPathComponent(NULL, url); + CFRelease(url); url = parent; } @@ -279,68 +293,44 @@ TkpInit( CFRelease(bundleUrl); } - /* If we are not a bundled executable, notify the window server that - * we are a foregroundable app. */ if (!bundledExecutable) { + /* + * 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, notify the window server + * that we are now a full GUI application. + */ + OSStatus err = procNotFound; ProcessSerialNumber psn = { 0, kCurrentProcess }; - TK_IF_MAC_OS_X_API (3, TransformProcessType, - err = ChkErr(TransformProcessType, &psn, - kProcessTransformToForegroundApplication); - ) TK_ENDIF -#if MAC_OSX_TK_USE_CPS_SPI - if (err != noErr) { - /* - * 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. - */ - TkMacOSXInitNamedSymbol(CoreGraphics, OSStatus, - CPSEnableForegroundOperation, ProcessSerialNumberPtr); - if (CPSEnableForegroundOperation) { - ChkErr(CPSEnableForegroundOperation, &psn); - } - } -#endif /* MAC_OSX_TK_USE_CPS_SPI */ - } + err = ChkErr(TransformProcessType, &psn, + kProcessTransformToForegroundApplication); - TkMacOSXInitAppleEvents(interp); - TkMacOSXInitCarbonEvents(interp); - TkMacOSXInitMenus(interp); - TkMacOSXUseAntialiasedText(interp, TRUE); - TkMacOSXInitCGDrawing(interp, TRUE, 0); - TkMacOSXInitKeyboard(interp); - - encoding = CFStringGetSystemEncoding(); + /* + * Set application icon to generic Tk icon, do it at idle time + * instead of now to ensure tk_library is setup. + */ - for (i = 0; scriptMap[i].strKey != NULL; i++) { - if (scriptMap[i].numKey == encoding) { - encodingStr = scriptMap[i].strKey; - break; - } - } - if (encodingStr == NULL) { - encodingStr = "macRoman"; + Tcl_DoWhenIdle(SetApplicationIcon, NULL); } - TkMacOSXCarbonEncoding = Tcl_GetEncoding(NULL, encodingStr); - if (TkMacOSXCarbonEncoding == NULL) { - TkMacOSXCarbonEncoding = Tcl_GetEncoding(NULL, NULL); - } + [NSApp _setupEventLoop]; + TkMacOSXInitAppleEvents(interp); + TkMacOSXUseAntialiasedText(interp, -1); + TkMacOSXInitCGDrawing(interp, TRUE, 0); + [pool drain]; + pool = [NSAutoreleasePool new]; -#if 0 /* - * FIXME: Close stdin & stdout for remote debugging otherwise we - * will fight with gdb for stdin & stdout + * FIXME: Close stdin & stdout for remote debugging otherwise we will + * fight with gdb for stdin & stdout */ if (getenv("XCNOSTDIN") != NULL) { close(0); close(1); } -#endif /* * If we don't have a TTY and stdin is a special character file of @@ -348,36 +338,36 @@ TkpInit( * clicking Wish) then use the Tk based console interpreter. */ - if (!isatty(0)) { - struct stat st; - - if (fstat(0, &st) || (S_ISCHR(st.st_mode) && st.st_blocks == 0)) { - Tk_InitConsoleChannels(interp); - Tcl_RegisterChannel(interp, Tcl_GetStdChannel(TCL_STDIN)); - Tcl_RegisterChannel(interp, Tcl_GetStdChannel(TCL_STDOUT)); - Tcl_RegisterChannel(interp, Tcl_GetStdChannel(TCL_STDERR)); + if (getenv("TK_CONSOLE") || + (!isatty(0) && (fstat(0, &st) || + (S_ISCHR(st.st_mode) && st.st_blocks == 0)))) { + Tk_InitConsoleChannels(interp); + Tcl_RegisterChannel(interp, Tcl_GetStdChannel(TCL_STDIN)); + Tcl_RegisterChannel(interp, Tcl_GetStdChannel(TCL_STDOUT)); + Tcl_RegisterChannel(interp, Tcl_GetStdChannel(TCL_STDERR)); - /* - * Only show the console if we don't have a startup script - * and tcl_interactive hasn't been set already. - */ + /* + * Only show the console if we don't have a startup script + * and tcl_interactive hasn't been set already. + */ - if (TclGetStartupScriptFileName() == NULL) { - const char *intvar = Tcl_GetVar(interp, - "tcl_interactive", TCL_GLOBAL_ONLY); + if (Tcl_GetStartupScript(NULL) == NULL) { + const char *intvar = Tcl_GetVar(interp, + "tcl_interactive", TCL_GLOBAL_ONLY); - if (intvar == NULL) { - Tcl_SetVar(interp, "tcl_interactive", "1", - TCL_GLOBAL_ONLY); - } - } - if (Tk_CreateConsoleWindow(interp) == TCL_ERROR) { - return TCL_ERROR; + if (intvar == NULL) { + Tcl_SetVar(interp, "tcl_interactive", "1", + TCL_GLOBAL_ONLY); } } + if (Tk_CreateConsoleWindow(interp) == TCL_ERROR) { + return TCL_ERROR; + } } } + Tk_MacOSXSetupTkNotifier(); + if (tkLibPath[0] != '\0') { Tcl_SetVar(interp, "tk_library", tkLibPath, TCL_GLOBAL_ONLY); } @@ -387,7 +377,12 @@ TkpInit( TCL_GLOBAL_ONLY|TCL_LIST_ELEMENT|TCL_APPEND_VALUE); } - return Tcl_EvalEx(interp, initScript, -1, TCL_EVAL_GLOBAL); + Tcl_CreateObjCommand(interp, "::tk::mac::standardAboutPanel", + TkMacOSXStandardAboutPanelObjCmd, NULL, NULL); + Tcl_CreateObjCommand(interp, "::tk::mac::iconBitmap", + TkMacOSXIconBitmapObjCmd, NULL, NULL); + + return TCL_OK; } /* @@ -395,9 +390,9 @@ TkpInit( * * TkpGetAppName -- * - * Retrieves the name of the current application from a platform - * specific location. For Unix, the application name is the tail - * of the path contained in the tcl variable argv0. + * Retrieves the name of the current application from a platform specific + * location. For Unix, the application name is the tail of the path + * contained in the tcl variable argv0. * * Results: * Returns the application name in the given Tcl_DString. @@ -432,8 +427,8 @@ TkpGetAppName( * * TkpDisplayWarning -- * - * This routines is called from Tk_Main to display warning - * messages that occur during startup. + * This routines is called from Tk_Main to display warning messages that + * occur during startup. * * Results: * None. @@ -446,10 +441,11 @@ TkpGetAppName( void TkpDisplayWarning( - CONST char *msg, /* Message to be displayed. */ - CONST char *title) /* Title of warning. */ + const char *msg, /* Message to be displayed. */ + const char *title) /* Title of warning. */ { Tcl_Channel errChannel = Tcl_GetStdChannel(TCL_STDERR); + if (errChannel) { Tcl_WriteChars(errChannel, title, -1); Tcl_WriteChars(errChannel, ": ", 2); @@ -463,19 +459,17 @@ TkpDisplayWarning( * * TkMacOSXDefaultStartupScript -- * - * - * On MacOS X, we look for a file in the Resources/Scripts - * directory called AppMain.tcl and if found, we set argv[1] to - * that, so that the rest of the code will find it, and add the - * Scripts folder to the auto_path. If we don't find the startup - * script, we just bag it, assuming the user is starting up some - * other way. + * On MacOS X, we look for a file in the Resources/Scripts directory + * called AppMain.tcl and if found, we set argv[1] to that, so that the + * rest of the code will find it, and add the Scripts folder to the + * auto_path. If we don't find the startup script, we just bag it, + * assuming the user is starting up some other way. * * Results: * None. * * Side effects: - * TclSetStartupScriptFileName() called when AppMain.tcl found. + * Tcl_SetStartupScript() called when AppMain.tcl found. * *---------------------------------------------------------------------- */ @@ -488,24 +482,21 @@ TkMacOSXDefaultStartupScript(void) bundleRef = CFBundleGetMainBundle(); if (bundleRef != NULL) { - CFURLRef appMainURL; - appMainURL = CFBundleCopyResourceURL(bundleRef, - CFSTR("AppMain"), - CFSTR("tcl"), - CFSTR("Scripts")); + CFURLRef appMainURL = CFBundleCopyResourceURL(bundleRef, + CFSTR("AppMain"), CFSTR("tcl"), CFSTR("Scripts")); if (appMainURL != NULL) { CFURLRef scriptFldrURL; char startupScript[PATH_MAX + 1]; if (CFURLGetFileSystemRepresentation (appMainURL, true, - (unsigned char*) startupScript, PATH_MAX)) { - TclSetStartupScriptFileName(startupScript); - scriptFldrURL = CFURLCreateCopyDeletingLastPathComponent( - NULL, appMainURL); + (unsigned char *) startupScript, PATH_MAX)) { + Tcl_SetStartupScript(Tcl_NewStringObj(startupScript,-1), NULL); + scriptFldrURL = CFURLCreateCopyDeletingLastPathComponent(NULL, + appMainURL); if (scriptFldrURL != NULL) { - CFURLGetFileSystemRepresentation(scriptFldrURL, - true, (unsigned char*) scriptPath, PATH_MAX); + CFURLGetFileSystemRepresentation(scriptFldrURL, true, + (unsigned char *) scriptPath, PATH_MAX); CFRelease(scriptFldrURL); } } @@ -519,12 +510,9 @@ TkMacOSXDefaultStartupScript(void) * * TkMacOSXGetNamedSymbol -- * - * - * Dynamically acquire address of a named symbol from a loaded - * dynamic library, so that we can use API that may not be - * available on all OS versions. - * If module is non-NULL and not the empty string, use twolevel - * namespace lookup. + * Dynamically acquire address of a named symbol from a loaded dynamic + * library, so that we can use API that may not be available on all OS + * versions. * * Results: * Address of given symbol or NULL if unavailable. @@ -540,19 +528,58 @@ TkMacOSXGetNamedSymbol( const char* module, const char* symbol) { - NSSymbol nsSymbol = NULL; - if (module && *module) { - if(NSIsSymbolNameDefinedWithHint(symbol, module)) { - nsSymbol = NSLookupAndBindSymbolWithHint(symbol, module); - } - } else { - if(NSIsSymbolNameDefined(symbol)) { - nsSymbol = NSLookupAndBindSymbol(symbol); - } + void *addr = dlsym(RTLD_NEXT, symbol); + if (!addr) { + (void) dlerror(); /* Clear dlfcn error state */ } - if (nsSymbol) { - return NSAddressOfSymbol(nsSymbol); + return addr; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXGetStringObjFromCFString -- + * + * Get a string object from a CFString as efficiently as possible. + * + * Results: + * New string object or NULL if conversion failed. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +MODULE_SCOPE Tcl_Obj* +TkMacOSXGetStringObjFromCFString( + CFStringRef str) +{ + Tcl_Obj *obj = NULL; + const char *c = CFStringGetCStringPtr(str, kCFStringEncodingUTF8); + + if (c) { + obj = Tcl_NewStringObj(c, -1); } else { - return NULL; + CFRange all = CFRangeMake(0, CFStringGetLength(str)); + CFIndex len; + + if (CFStringGetBytes(str, all, kCFStringEncodingUTF8, 0, false, NULL, + 0, &len) > 0 && len < INT_MAX) { + obj = Tcl_NewObj(); + Tcl_SetObjLength(obj, len); + CFStringGetBytes(str, all, kCFStringEncodingUTF8, 0, false, + (UInt8*) obj->bytes, len, NULL); + } } + return obj; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXInt.h b/macosx/tkMacOSXInt.h index eeb0b2f..813acce 100644 --- a/macosx/tkMacOSXInt.h +++ b/macosx/tkMacOSXInt.h @@ -4,8 +4,8 @@ * Declarations of Macintosh specific shared variables and procedures. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -18,10 +18,6 @@ #include "tkInt.h" #endif -#define TextStyle MacTextStyle -#include <Carbon/Carbon.h> -#undef TextStyle - /* * Include platform specific public interfaces. */ @@ -30,17 +26,46 @@ #include "tkMacOSX.h" #endif +/* + * Define compatibility platform types used in the structures below so that + * this header can be included without pulling in the platform headers. + */ + +#ifndef _TKMACPRIV +# ifndef CGGEOMETRY_H_ +# ifndef CGFLOAT_DEFINED +# if __LP64__ +# define CGFloat double +# else +# define CGFloat float +# endif +# endif +# define CGSize struct {CGFloat width; CGFloat height;} +# endif +# ifndef CGCONTEXT_H_ +# define CGContextRef void * +# endif +# ifndef CGCOLOR_H_ +# define CGColorRef void * +# endif +# ifndef __HISHAPE__ +# define HIShapeRef void * +# endif +# ifndef _APPKITDEFINES_H +# define NSView void * +# endif +#endif + struct TkWindowPrivate { TkWindow *winPtr; /* Ptr to tk window or NULL if Pixmap */ - CGrafPtr grafPtr; + NSView *view; CGContextRef context; - ControlRef rootControl; int xOff; /* X offset from toplevel window */ int yOff; /* Y offset from toplevel window */ CGSize size; HIShapeRef visRgn; /* Visible region of window */ HIShapeRef aboveVisRgn; /* Visible region of window & its children */ - CGRect drawRect; /* Clipped drawing rect */ + HIShapeRef drawRgn; /* Clipped drawing region */ int referenceCount; /* Don't delete toplevel until children are * gone. */ struct TkWindowPrivate *toplevel; @@ -50,18 +75,6 @@ struct TkWindowPrivate { typedef struct TkWindowPrivate MacDrawable; /* - * This list is used to keep track of toplevel windows that have a Mac - * window attached. This is useful for several things, not the least - * of which is maintaining floating windows. - */ - -typedef struct TkMacOSXWindowList { - struct TkMacOSXWindowList *nextPtr; - /* The next window in the list. */ - TkWindow *winPtr; /* This window */ -} TkMacOSXWindowList; - -/* * Defines use for the flags field of the MacDrawable data structure. */ @@ -69,7 +82,7 @@ typedef struct TkMacOSXWindowList { #define TK_CLIP_INVALID 0x02 #define TK_HOST_EXISTS 0x04 #define TK_DRAWN_UNDER_MENU 0x08 -#define TK_CLIPPED_DRAW 0x10 +#define TK_FOCUSED_VIEW 0x10 #define TK_IS_PIXMAP 0x20 #define TK_IS_BW_PIXMAP 0x40 @@ -101,6 +114,46 @@ typedef struct { MODULE_SCOPE TkMacOSXEmbedHandler *tkMacOSXEmbedHandler; /* + * GC CGColorRef cache for tkMacOSXColor.c + */ + +typedef struct { + unsigned long cachedForeground; + CGColorRef cachedForegroundColor; + unsigned long cachedBackground; + CGColorRef cachedBackgroundColor; +} TkpGCCache; + +MODULE_SCOPE TkpGCCache *TkpGetGCCache(GC gc); +MODULE_SCOPE void TkpInitGCCache(GC gc); +MODULE_SCOPE void TkpFreeGCCache(GC gc); + +/* + * Undef compatibility platform types defined above. + */ + +#ifndef _TKMACPRIV +# ifndef CGGEOMETRY_H_ +# ifndef CGFLOAT_DEFINED +# undef CGFloat +# endif +# undef CGSize +# endif +# ifndef CGCONTEXT_H_ +# undef CGContextRef +# endif +# ifndef CGCOLOR_H_ +# undef CGColorRef +# endif +# ifndef __HISHAPE__ +# undef HIShapeRef +# endif +# ifndef _APPKITDEFINES_H +# undef NSView +# endif +#endif + +/* * Defines used for TkMacOSXInvalidateWindow */ @@ -115,34 +168,20 @@ MODULE_SCOPE TkMacOSXEmbedHandler *tkMacOSXEmbedHandler; (((TkWindow *) (tkwin))->privatePtr->toplevel->flags & TK_HOST_EXISTS) /* - * Defines use for the flags argument to TkGenWMConfigureEvent. + * Defines used for the flags argument to TkGenWMConfigureEvent. */ #define TK_LOCATION_CHANGED 1 #define TK_SIZE_CHANGED 2 #define TK_BOTH_CHANGED 3 +#define TK_MACOSX_HANDLE_EVENT_IMMEDIATELY 1024 /* - * Globals shared among TkAqua. + * Defines for tkTextDisp.c */ -MODULE_SCOPE MenuHandle tkCurrentAppleMenu; /* Handle to current Apple Menu */ -MODULE_SCOPE MenuHandle tkAppleMenu; /* Handle to default Apple Menu */ -MODULE_SCOPE MenuHandle tkFileMenu; /* Handles to menus */ -MODULE_SCOPE MenuHandle tkEditMenu; /* Handles to menus */ -MODULE_SCOPE int tkPictureIsOpen; /* If this is 1, we are drawing to a - * picture The clipping should then be - * done relative to the bounds of the - * picture rather than the window. As - * of OS X.0.4, something is seriously - * wrong: The clipping bounds only - * seem to work if the top,left values - * are 0,0 The destination rectangle - * for CopyBits should also have - * top,left values of 0,0 - */ -MODULE_SCOPE TkMacOSXWindowList *tkMacOSXWindowListPtr; /* List of toplevels */ -MODULE_SCOPE Tcl_Encoding TkMacOSXCarbonEncoding; +#define TK_LAYOUT_WITH_BASE_CHUNKS 1 +#define TK_DRAW_IN_CONTEXT 1 /* * Prototypes of internal procs not in the stubs table. diff --git a/macosx/tkMacOSXKeyEvent.c b/macosx/tkMacOSXKeyEvent.c index 6fa14e5..1d24960 100644 --- a/macosx/tkMacOSXKeyEvent.c +++ b/macosx/tkMacOSXKeyEvent.c @@ -1,58 +1,15 @@ /* * tkMacOSXKeyEvent.c -- * - * This file implements functions that decode & handle keyboard events - * on MacOS X. + * This file implements functions that decode & handle keyboard events on + * MacOS X. * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright (c) 2012 Adrian Robert. * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. */ #include "tkMacOSXPrivate.h" @@ -63,953 +20,423 @@ #define TK_MAC_DEBUG_KEYBOARD #endif */ +#define NS_KEYLOG 0 -typedef struct { - WindowRef whichWindow; - int global_x, global_y; - int local_x, local_y; - unsigned int state; - UInt32 keyCode; - UInt32 keyModifiers; - UInt32 message; - unsigned char ch; -} KeyEventData; static Tk_Window grabWinPtr = NULL; /* Current grab window, NULL if no grab. */ static Tk_Window keyboardGrabWinPtr = NULL; /* Current keyboard grab window. */ -static UInt32 deadKeyStateUp = 0; - /* The deadkey state for the current sequence - * of keyup events or 0 if not in a deadkey - * sequence */ -static UInt32 deadKeyStateDown = 0; - /* Ditto for keydown */ - -/* - * Declarations for functions used only in this file. - */ - -static int InitKeyData(KeyEventData *keyEventDataPtr); -static int InitKeyEvent(XEvent *eventPtr, KeyEventData *e, UInt32 savedKeyCode, - UInt32 savedModifiers); -static int GenerateKeyEvent(UInt32 eKind, KeyEventData *e, UInt32 savedKeyCode, - UInt32 savedModifiers, const UniChar *chars, int numChars); -static int GetKeyboardLayout(Ptr *resourcePtr, TextEncoding *encodingPtr); -static TextEncoding GetKCHREncoding(ScriptCode script, SInt32 layoutid); -static int KeycodeToUnicodeViaUnicodeResource(UniChar *uniChars, int maxChars, - Ptr uchr, EventKind eKind, UInt32 keycode, UInt32 modifiers, - UInt32 *deadKeyStatePtr); -static int KeycodeToUnicodeViaKCHRResource(UniChar *uniChars, int maxChars, - Ptr kchr, TextEncoding encoding, EventKind eKind, UInt32 keycode, - UInt32 modifiers, UInt32 *deadKeyStatePtr); - - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXProcessKeyboardEvent -- - * - * This routine processes the event in eventPtr, and - * generates the appropriate Tk events from it. - * - * Results: - * True if event(s) are generated - false otherwise. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * - *---------------------------------------------------------------------- - */ - -MODULE_SCOPE int -TkMacOSXProcessKeyboardEvent( - TkMacOSXEvent *eventPtr, - MacEventStatus *statusPtr) -{ - static UInt32 savedKeyCode = 0; - static UInt32 savedModifiers = 0; - static UniChar savedChar = 0; - OSStatus err; - KeyEventData keyEventData; - MenuRef menuRef; - MenuItemIndex menuItemIndex; - int eventGenerated; - UniChar uniChars[5]; /* make this larger, if needed */ - UInt32 uniCharsLen = 0; - - if (!InitKeyData(&keyEventData)) { - statusPtr->err = 1; - return false; - } - - /* - * Because of the way that Tk operates, we can't in general funnel menu - * accelerators through IsMenuKeyEvent. Tk treats accelerators as mere - * decoration, and the user has to install bindings to get them to fire. - * - * However, the only way to trigger the Hide & Hide Others functions - * is by invoking the Menu command for Hide. So there is no nice way to - * provide a Tk command to hide the app which would be available for a - * binding. So I am going to hijack Command-H and Command-Shift-H - * here, and run the menu commands. Since the HI Guidelines explicitly - * reserve these for Hide, this isn't such a bad thing. Also, if you do - * rebind Command-H to another menu item, Hide will lose its binding. - * - * Note that I don't really do anything at this point, - * I just mark stopProcessing as 0 and return, and then the - * RecieveAndProcessEvent code will dispatch the event to the default - * handler. - */ - - if ((eventPtr->eKind == kEventRawKeyDown - || eventPtr->eKind == kEventRawKeyRepeat) - && IsMenuKeyEvent(tkCurrentAppleMenu, eventPtr->eventRef, - kMenuEventQueryOnly, &menuRef, &menuItemIndex)) { - MenuCommand menuCmd; - - GetMenuItemCommandID (menuRef, menuItemIndex, &menuCmd); - switch (menuCmd) { - case kHICommandHide: - case kHICommandHideOthers: - case kHICommandShowAll: - case kHICommandPreferences: - case kHICommandQuit: - statusPtr->stopProcessing = 0; - - /* - * TODO: may not be on event on queue. - */ - - return 0; - break; - default: - break; - } - } - - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamKeyMacCharCodes, typeChar, NULL, - sizeof(keyEventData.ch), NULL, &keyEventData.ch); - if (err != noErr) { - statusPtr->err = 1; - return false; - } - err = ChkErr(GetEventParameter, eventPtr->eventRef, kEventParamKeyCode, - typeUInt32, NULL, sizeof(keyEventData.keyCode), NULL, - &keyEventData.keyCode); - if (err != noErr) { - statusPtr->err = 1; - return false; - } - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamKeyModifiers, typeUInt32, NULL, - sizeof(keyEventData.keyModifiers), NULL, - &keyEventData.keyModifiers); - if (err != noErr) { - statusPtr->err = 1; - return false; - } - - switch (eventPtr->eKind) { - case kEventRawKeyUp: - case kEventRawKeyDown: - case kEventRawKeyRepeat: { - UInt32 *deadKeyStatePtr; - - if (kEventRawKeyDown == eventPtr->eKind) { - deadKeyStatePtr = &deadKeyStateDown; - } else { - deadKeyStatePtr = &deadKeyStateUp; - } +static NSModalSession modalSession = NULL; - uniCharsLen = TkMacOSXKeycodeToUnicode(uniChars, - sizeof(uniChars)/sizeof(*uniChars), eventPtr->eKind, - keyEventData.keyCode, keyEventData.keyModifiers, - deadKeyStatePtr); - break; - } - } - - if (kEventRawKeyUp == eventPtr->eKind) { - /* - * For some reason the deadkey processing for KeyUp doesn't work - * sometimes, so we fudge and use the last detected KeyDown. - */ - - if ((0 == uniCharsLen) && (0 != savedChar)) { - uniChars[0] = savedChar; - uniCharsLen = 1; - } +static BOOL processingCompose = NO; +static BOOL finishedCompose = NO; - /* - * Suppress keyup events while we have a deadkey sequence on keydown. - * We still *do* want to collect deadkey state in this situation if - * the system provides it, that's why we do this only after - * TkMacOSXKeycodeToUnicode(). - */ +static int caret_x = 0, caret_y = 0, caret_height = 0; - if (0 != deadKeyStateDown) { - uniCharsLen = 0; - } - } +static void setupXEvent(XEvent *xEvent, NSWindow *w, unsigned int state); +static unsigned isFunctionKey(unsigned int code); - keyEventData.message = keyEventData.ch|(keyEventData.keyCode << 8); - eventGenerated = GenerateKeyEvent(eventPtr->eKind, &keyEventData, - savedKeyCode, savedModifiers, uniChars, uniCharsLen); +#pragma mark TKApplication(TKKeyEvent) - savedModifiers = keyEventData.keyModifiers; +@implementation TKApplication(TKKeyEvent) - if ((kEventRawKeyDown == eventPtr->eKind) && (uniCharsLen > 0)) { - savedChar = uniChars[0]; - } else { - savedChar = 0; - } - - statusPtr->stopProcessing = 1; - - if (eventGenerated == 0) { - savedKeyCode = keyEventData.message; - return false; - } else if (eventGenerated == -1) { - savedKeyCode = 0; - statusPtr->stopProcessing = 0; - return false; - } else { - savedKeyCode = 0; - return true; - } -} - -/* - *---------------------------------------------------------------------- - * - * GenerateKeyEvent -- - * - * Given Macintosh keyUp, keyDown & autoKey events (in their "raw" - * form) and a list of unicode characters this function generates the - * appropriate X key events. - * - * Parameter eKind is a raw keyboard event. e contains the data sent - * with the event. savedKeyCode and savedModifiers contain the values - * from the last event that came before (see - * TkMacOSXProcessKeyboardEvent()). chars/numChars has the Unicode - * characters for which we want to create events. - * - * Results: - * 1 if an event was generated, -1 for any error. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * - *---------------------------------------------------------------------- - */ - -static int -GenerateKeyEvent( - UInt32 eKind, - KeyEventData * e, - UInt32 savedKeyCode, - UInt32 savedModifiers, - const UniChar * chars, - int numChars) +- (NSEvent *) tkProcessKeyEvent: (NSEvent *) theEvent { - XEvent event; - int i; - - if (-1 == InitKeyEvent(&event, e, savedKeyCode, savedModifiers)) { - return -1; - } - - if (kEventRawKeyModifiersChanged == eKind) { - if (savedModifiers > e->keyModifiers) { - event.xany.type = KeyRelease; - } else { - event.xany.type = KeyPress; - } - - /* - * Use special '-1' to signify a special keycode to our - * platform specific code in tkMacOSXKeyboard.c. This is - * rather like what happens on Windows. - */ - - event.xany.send_event = -1; - - /* - * Set keycode (which was zero) to the changed modifier - */ - - event.xkey.keycode = (e->keyModifiers ^ savedModifiers); - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); - - } else { - for (i = 0; i < numChars; ++i) { - /* - * Encode one char in the trans_chars array that was already - * introduced for MS Windows. Don't encode the string, if it is - * a control character but was not generated with a real control - * modifier. Such control characters get generated by KeyTrans() - * for special keys, but we rather want to identify those by - * their KeySyms. - */ - - event.xkey.trans_chars[0] = 0; - if ((controlKey & e->keyModifiers) || (chars[i] >= ' ')) { - int done; - done = Tcl_UniCharToUtf(chars[i],event.xkey.trans_chars); - event.xkey.trans_chars[done] = 0; - } +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, theEvent); +#endif + NSWindow* w; + NSEventType type = [theEvent type]; + NSUInteger modifiers, len = 0; + BOOL repeat = NO; + unsigned short keyCode; + NSString *characters = nil, *charactersIgnoringModifiers = nil; + static NSUInteger savedModifiers = 0; + static NSMutableArray *nsEvArray; + + if (nsEvArray == nil) + { + nsEvArray = [[NSMutableArray alloc] initWithCapacity: 1]; + processingCompose = NO; + } + + switch (type) { + case NSKeyUp: + if (finishedCompose) + { + // if we were composing, swallow the last release since we already sent + finishedCompose = NO; + return theEvent; + } + case NSKeyDown: + repeat = [theEvent isARepeat]; + characters = [theEvent characters]; + charactersIgnoringModifiers = [theEvent charactersIgnoringModifiers]; + len = [charactersIgnoringModifiers length]; + case NSFlagsChanged: + modifiers = [theEvent modifierFlags]; + keyCode = [theEvent keyCode]; + w = [self windowWithWindowNumber:[theEvent windowNumber]]; +#if defined(TK_MAC_DEBUG_EVENTS) || NS_KEYLOG == 1 + NSLog(@"-[%@(%p) %s] r=%d mods=%u '%@' '%@' code=%u c=%d %@ %d", [self class], self, _cmd, repeat, modifiers, characters, charactersIgnoringModifiers, keyCode,([charactersIgnoringModifiers length] == 0) ? 0 : [charactersIgnoringModifiers characterAtIndex: 0], w, type); +#endif + break; - switch(eKind) { - case kEventRawKeyDown: - event.xany.type = KeyPress; - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); - break; - case kEventRawKeyUp: - event.xany.type = KeyRelease; - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); - break; - case kEventRawKeyRepeat: - event.xany.type = KeyRelease; - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); - event.xany.type = KeyPress; - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); - break; - default: - TkMacOSXDbgMsg("Invalid parameter eKind %ld", eKind); - return -1; - } - } + default: + return theEvent; } - return 1; + if (!processingCompose) { + unsigned int state = 0; + + if (modifiers & NSAlphaShiftKeyMask) { + state |= LockMask; + } + if (modifiers & NSShiftKeyMask) { + state |= ShiftMask; + } + if (modifiers & NSControlKeyMask) { + state |= ControlMask; + } + if (modifiers & NSCommandKeyMask) { + state |= Mod1Mask; /* command key */ + } + if (modifiers & NSAlternateKeyMask) { + state |= Mod2Mask; /* option key */ + } + if (modifiers & NSNumericPadKeyMask) { + state |= Mod3Mask; + } + if (modifiers & NSFunctionKeyMask) { + state |= Mod4Mask; + } + + /* + * The focus must be in the FrontWindow on the Macintosh. We then query Tk + * to determine the exact Tk window that owns the focus. + */ + + TkWindow *winPtr = TkMacOSXGetTkWindow(w); + Tk_Window tkwin = (Tk_Window) winPtr; + + if (!tkwin) { + TkMacOSXDbgMsg("tkwin == NULL"); + return theEvent; + } + tkwin = (Tk_Window) winPtr->dispPtr->focusPtr; + if (!tkwin) { + TkMacOSXDbgMsg("tkwin == NULL"); + return theEvent; + } + + /* + * If it's a function key, or we have modifiers other than Shift or Alt, + * pass it straight to Tk. Otherwise we'll send for input processing. + */ + int code = (len == 0) ? + 0 : [charactersIgnoringModifiers characterAtIndex: 0]; + if (type != NSKeyDown || isFunctionKey(code) + || (len > 0 && state & (ControlMask | Mod1Mask | Mod3Mask | Mod4Mask))) { + + XEvent xEvent; + setupXEvent(&xEvent, w, state); + + if (type == NSFlagsChanged) { + if (savedModifiers > modifiers) { + xEvent.xany.type = KeyRelease; + } else { + xEvent.xany.type = KeyPress; + } + + /* + * Use special '-1' to signify a special keycode to our platform + * specific code in tkMacOSXKeyboard.c. This is rather like what + * happens on Windows. + */ + + xEvent.xany.send_event = -1; + + /* + * Set keycode (which was zero) to the changed modifier + */ + + xEvent.xkey.keycode = (modifiers ^ savedModifiers); + } else { + if (type == NSKeyUp || repeat) { + xEvent.xany.type = KeyRelease; + } else { + xEvent.xany.type = KeyPress; + } + + /* For command key, take input manager's word so things + like dvorak / qwerty layout work. */ + if ((modifiers & NSCommandKeyMask) == NSCommandKeyMask + && (modifiers & NSAlternateKeyMask) != NSAlternateKeyMask + && len > 0 && !isFunctionKey(code)) { + // head off keycode-based translation in tkMacOSXKeyboard.c + xEvent.xkey.nbytes = [characters length]; //len + } + + if ([characters length] > 0) { + xEvent.xkey.keycode = + (keyCode << 16) | (UInt16) [characters characterAtIndex:0]; + if (![characters getCString:xEvent.xkey.trans_chars + maxLength:XMaxTransChars encoding:NSUTF8StringEncoding]) { + /* prevent SF bug 2907388 (crash on some composite chars) */ + //PENDING: we might not need this anymore + TkMacOSXDbgMsg("characters too long"); + return theEvent; + } + } + + if (repeat) { + Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); + xEvent.xany.type = KeyPress; + xEvent.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); + } + } + Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); + savedModifiers = modifiers; + return theEvent; + } /* if send straight to TK */ + + } /* if not processing compose */ + + if (type == NSKeyDown) { + if (NS_KEYLOG) + fprintf (stderr, "keyDown: %s compose sequence.\n", + processingCompose == YES ? "Continue" : "Begin"); + processingCompose = YES; + [nsEvArray addObject: theEvent]; + [[w contentView] interpretKeyEvents: nsEvArray]; + [nsEvArray removeObject: theEvent]; + } + + savedModifiers = modifiers; + + return theEvent; } - -/* - *---------------------------------------------------------------------- - * - * InitKeyData -- - * - * This routine initializes a KeyEventData structure by asking the OS - * and Tk for all the global information needed here. - * - * Results: - * True if the current front window can be found in Tk data structures - * - false otherwise. - * - * Side Effects: - * None - * - *---------------------------------------------------------------------- - */ - -static int -InitKeyData( - KeyEventData *keyEventDataPtr) -{ - memset(keyEventDataPtr, 0, sizeof(*keyEventDataPtr)); +@end - keyEventDataPtr->whichWindow = ActiveNonFloatingWindow(); - if (keyEventDataPtr->whichWindow == NULL) { - return false; - } - XQueryPointer(NULL, None, NULL, NULL, &keyEventDataPtr->global_x, - &keyEventDataPtr->global_y, &keyEventDataPtr->local_x, - &keyEventDataPtr->local_y, &keyEventDataPtr->state); - - return true; -} -/* - *---------------------------------------------------------------------- - * - * InitKeyEvent -- - * - * Initialize an XEvent structure by asking Tk for global information. - * Also uses a KeyEventData structure and other current state. - * - * Results: - * 1 on success, -1 for any error. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * - *---------------------------------------------------------------------- - */ -/* - * We have a general problem here. How do we handle 'Option-char' - * keypresses? The problem is that we might want to bind to some of these - * (e.g. Cmd-Opt-d is 'uncomment' in Alpha). OTOH Option-d actually produces - * a real character on MacOS, namely a mathematical delta. - * - * The current behaviour is that a binding goes by the combinations of - * modifiers and base keysym, that is Option-d. The string value of the - * event is the mathematical delta character, so if no binding calls - * [break], the text widget will insert that character. - * - * Note that this is similar to control combinations on all platforms. They - * also generate events that have the base character as keysym and a real - * control character as character value. So Ctrl+C gets us the keysym XK_C, - * the modifier Control (so you can bind <Control-C>) and a string value as - * "\u0003". - * - * For a different solutions we may want for the event to contain keysyms for - * *both* the 'Opt-d' side of things and the mathematical delta. Then a - * binding on Opt-d will trigger, but a binding on mathematical delta would - * also trigger. This would require changes in the core, though. - */ +@implementation TKContentView(TKKeyEvent) +/* <NSTextInput> implementation (called through interpretKeyEvents:]). */ -static int -InitKeyEvent( - XEvent * eventPtr, - KeyEventData * e, - UInt32 savedKeyCode, - UInt32 savedModifiers) +/* <NSTextInput>: called when done composing; + NOTE: also called when we delete over working text, followed immed. + by doCommandBySelector: deleteBackward: */ +- (void)insertText: (id)aString { - Window window; - Tk_Window tkwin; - TkDisplay *dispPtr; + int i, len = [(NSString *)aString length]; + XEvent xEvent; + TkWindow *winPtr = TkMacOSXGetTkWindow([self window]); + Tk_Window tkwin = (Tk_Window) winPtr; - /* - * The focus must be in the FrontWindow on the Macintosh. - * We then query Tk to determine the exact Tk window - * that owns the focus. - */ + if (NS_KEYLOG) + NSLog (@"insertText '%@'\tlen = %d", aString, len); + processingCompose = NO; + finishedCompose = YES; - window = TkMacOSXGetXWindow(e->whichWindow); - dispPtr = TkGetDisplayList(); - tkwin = Tk_IdToWindow(dispPtr->display, window); + /* first, clear any working text */ + if (_workingText != nil) + [self deleteWorkingText]; - if (!tkwin) { - TkMacOSXDbgMsg("tkwin == NULL"); - return -1; - } + /* now insert the string as keystrokes */ + setupXEvent(&xEvent, [self window], 0); + xEvent.xany.type = KeyPress; - tkwin = (Tk_Window) ((TkWindow *) tkwin)->dispPtr->focusPtr; - if (!tkwin) { - TkMacOSXDbgMsg("tkwin == NULL"); - return -1; + for (i =0; i<len; i++) + { + xEvent.xkey.keycode = (UInt16) [aString characterAtIndex: i]; + [[aString substringWithRange: NSMakeRange(i,1)] + getCString: xEvent.xkey.trans_chars + maxLength: XMaxTransChars encoding: NSUTF8StringEncoding]; + xEvent.xkey.nbytes = strlen(xEvent.xkey.trans_chars); + xEvent.xany.type = KeyPress; + Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); + + xEvent.xany.type = KeyRelease; + xEvent.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); + Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); + xEvent.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); } - - eventPtr->xany.send_event = false; - eventPtr->xany.serial = Tk_Display(tkwin)->request; - - eventPtr->xkey.same_screen = true; - eventPtr->xkey.subwindow = None; - eventPtr->xkey.time = TkpGetMS(); - eventPtr->xkey.x_root = e->global_x; - eventPtr->xkey.y_root = e->global_y; - eventPtr->xkey.window = Tk_WindowId(tkwin); - eventPtr->xkey.display = Tk_Display(tkwin); - eventPtr->xkey.root = XRootWindow(Tk_Display(tkwin), 0); - eventPtr->xkey.state = e->state; - eventPtr->xkey.trans_chars[0] = 0; - - Tk_TopCoordsToWindow(tkwin, e->local_x, e->local_y, &eventPtr->xkey.x, - &eventPtr->xkey.y); - - eventPtr->xkey.keycode = e->ch | ((savedKeyCode & charCodeMask) << 8) | - ((e->message&keyCodeMask) << 8); - - return 1; } - -/* - *---------------------------------------------------------------------- - * - * GetKeyboardLayout -- - * - * Queries the OS for a pointer to a keyboard resource. - * - * This function works with the keyboard layout switch menu. It uses - * Keyboard Layout Services, where available. - * - * Results: - * 1 if there is returned a Unicode 'uchr' resource in *resourcePtr, 0 - * if it is a classic 'KCHR' resource. A pointer to the actual resource - * data goes into *resourcePtr. If the resource is a 'KCHR' resource, - * the corresponding Mac encoding goes into *encodingPtr. - * - * Side effects: - * Sets some internal static variables. - * - *---------------------------------------------------------------------- - */ -static int -GetKeyboardLayout( - Ptr *resourcePtr, - TextEncoding *encodingPtr) -{ - static KeyboardLayoutRef lastLayout = NULL; - static SInt32 lastLayoutId; - static TextEncoding lastEncoding = kTextEncodingMacRoman; - static Ptr uchr = NULL; - static Ptr KCHR = NULL; - int hasLayoutChanged = false; - KeyboardLayoutRef currentLayout = NULL; - SInt32 currentLayoutId = 0; - ScriptCode currentKeyScript; - - currentKeyScript = GetScriptManagerVariable(smKeyScript); - - /* - * Use the Keyboard Layout Services. - */ - KLGetCurrentKeyboardLayout(¤tLayout); +/* <NSTextInput>: inserts display of composing characters */ +- (void)setMarkedText: (id)aString selectedRange: (NSRange)selRange +{ + NSString *str = [aString respondsToSelector: @selector (string)] ? + [aString string] : aString; + if (NS_KEYLOG) + NSLog (@"setMarkedText '%@' len =%d range %d from %d", str, [str length], + selRange.length, selRange.location); - if (currentLayout != NULL) { + if (_workingText != nil) + [self deleteWorkingText]; + if ([str length] == 0) + return; - /* - * The layout pointer could in theory be the same for different - * layouts, only the id gives us the information that the - * keyboard has actually changed. OTOH the layout object can - * also change and it could still be the same layoutid. - */ + processingCompose = YES; + _workingText = [str copy]; - KLGetKeyboardLayoutProperty(currentLayout, kKLIdentifier, - (const void**)¤tLayoutId); + //PENDING: insert workingText underlined +} - if ((lastLayout != currentLayout) - || (lastLayoutId != currentLayoutId)) { -#ifdef TK_MAC_DEBUG_KEYBOARD - TkMacOSXDbgMsg("Use KLS"); -#endif +/* delete display of composing characters [not in <NSTextInput>] */ +- (void)deleteWorkingText +{ + if (_workingText == nil) + return; + if (NS_KEYLOG) + NSLog(@"deleteWorkingText len = %d\n", [_workingText length]); + [_workingText release]; + _workingText = nil; + processingCompose = NO; + + //PENDING: delete working text +} - hasLayoutChanged = true; - - /* - * Reinitialize all relevant variables. - */ - - lastLayout = currentLayout; - lastLayoutId = currentLayoutId; - uchr = NULL; - KCHR = NULL; - - if ((KLGetKeyboardLayoutProperty(currentLayout, - kKLuchrData, (const void**)&uchr) - == noErr) - && (uchr != NULL)) { - /* done */ - } else if ((KLGetKeyboardLayoutProperty(currentLayout, - kKLKCHRData, (const void**)&KCHR) - == noErr) - && (KCHR != NULL)) { - /* done */ - } - } - } - if (hasLayoutChanged) { -#ifdef TK_MAC_DEBUG_KEYBOARD - if (KCHR) { - TkMacOSXDbgMsg("New 'KCHR' layout %ld", currentLayoutId); - } else if (uchr) { - TkMacOSXDbgMsg("New 'uchr' layout %ld", currentLayoutId); - } else { - TkMacOSXDbgMsg("Use cached layout (should have been %ld)", - currentLayoutId); - } -#endif +- (BOOL)hasMarkedText +{ + return _workingText != nil; +} - deadKeyStateUp = deadKeyStateDown = 0; - - /* - * If we did get a new 'KCHR', compute its encoding and put it into - * lastEncoding. - * - * If we didn't get a new 'KCHR' and if we have no 'uchr' either, get - * some 'KCHR' from the OS cache and leave lastEncoding at its - * current value. This should better not happen, it doesn't really - * work. - */ - - if (KCHR) { - lastEncoding = GetKCHREncoding(currentKeyScript, currentLayoutId); -#ifdef TK_MAC_DEBUG_KEYBOARD - TkMacOSXDbgMsg("New 'KCHR' encoding %lu (%lu + 0x%lX)", - lastEncoding, lastEncoding & 0xFFFFL, - lastEncoding & ~0xFFFFL); -#endif - } else if (!uchr) { - KCHR = (Ptr)(intptr_t)GetScriptManagerVariable(smKCHRCache); - } - } - if (uchr) { - *resourcePtr = uchr; - return 1; - } else { - *resourcePtr = KCHR; - *encodingPtr = lastEncoding; - return 0; - } +- (NSRange)markedRange +{ + NSRange rng = _workingText != nil + ? NSMakeRange (0, [_workingText length]) : NSMakeRange (NSNotFound, 0); + if (NS_KEYLOG) + NSLog (@"markedRange request"); + return rng; } - -/* - *---------------------------------------------------------------------- - * - * GetKCHREncoding -- - * - * Upgrade a WorldScript code to a TEC encoding based on the keyboard - * layout id. - * - * Results: - * The TEC code that corresponds best to the combination of WorldScript - * code and 'KCHR' id. - * - * Side effects: - * None. - * - * Rationale and Notes: - * WorldScript codes are sometimes not unique encodings. E.g. Icelandic - * uses script smRoman (0), but the actual encoding is - * kTextEncodingMacIcelandic (37). ftp://ftp.unicode.org/Public - * /MAPPINGS/VENDORS/APPLE/README.TXT has a good summary of these - * variants. So we need to upgrade the script to an encoding with - * GetTextEncodingFromScriptInfo(). - * - * 'KCHR' ids are usually region codes (see the comments in Script.h). - * Where they are not, we get a paramErr from the OS function and have - * appropriate fallbacks. - * - *---------------------------------------------------------------------- - */ -static TextEncoding -GetKCHREncoding( - ScriptCode script, - SInt32 layoutid) -{ - RegionCode region = layoutid; - TextEncoding encoding = script; - if (GetTextEncodingFromScriptInfo(script, kTextLanguageDontCare, region, - &encoding) == noErr) { - return encoding; - } +- (void)unmarkText +{ + if (NS_KEYLOG) + NSLog (@"unmark (accept) text"); + [self deleteWorkingText]; + processingCompose = NO; +} - /* - * GetTextEncodingFromScriptInfo() doesn't know about more exotic - * layouts. This provides a fallback for good measure. In an ideal - * world, exotic layouts would always provide a 'uchr' resource anyway, - * so we wouldn't need this. - * - * We can add more keyboard layouts, if we get actual complaints. Farsi - * or other Celtic/Gaelic layouts would be candidates. - */ - switch (layoutid) { - /* - * Icelandic and Faroese (planned). These layouts are sold by Apple - * Iceland for legacy applications. - */ +/* used to position char selection windows, etc. */ +- (NSRect)firstRectForCharacterRange: (NSRange)theRange +{ + NSRect rect; + NSPoint pt; - case 1800: case 1821: - return kTextEncodingMacIcelandic; + pt.x = caret_x; + pt.y = caret_y; - /* - * Irish and Welsh. These layouts are mentioned in <Script.h>. - * - * FIXME: This may have to be kTextEncodingMacGaelic instead, but I - * can't locate layouts of this type for testing. - */ + pt = [self convertPoint: pt toView: nil]; + pt = [[self window] convertBaseToScreen: pt]; + pt.y -= caret_height; - case 581: case 779: - return kTextEncodingMacCeltic; - } + rect.origin = pt; + rect.size.width = caret_height; + rect.size.height = caret_height; + return rect; +} - /* - * The valid script codes are also the valid default encoding codes, so - * if nothing else helps, fall back on those. - */ - return script; +- (NSInteger)conversationIdentifier +{ + return (NSInteger)self; } - -/* - *---------------------------------------------------------------------- - * - * KeycodeToUnicodeViaUnicodeResource -- - * - * Given MacOS key event data this function generates the Unicode - * characters. It does this using a 'uchr' and the UCKeyTranslate - * API. - * - * The parameter deadKeyStatePtr can be NULL, if no deadkey handling - * is needed. - * - * Tested and known to work with US, Hebrew, Greek and Russian layouts - * as well as "Unicode Hex Input". - * - * Results: - * The number of characters generated if any, 0 if we are waiting for - * another byte of a dead-key sequence. Fills in the uniChars array - * with a Unicode string. - * - * Side Effects: - * None - * - *---------------------------------------------------------------------- - */ -static int -KeycodeToUnicodeViaUnicodeResource( - UniChar *uniChars, - int maxChars, - Ptr uchr, - EventKind eKind, - UInt32 keycode, - UInt32 modifiers, - UInt32 *deadKeyStatePtr) + +- (void)doCommandBySelector: (SEL)aSelector { - int action; - unsigned long keyboardType; - OptionBits options = 0; - UInt32 dummy_state; - UniCharCount actuallength; - OSStatus err; - - keycode &= 0xFF; - modifiers = (modifiers >> 8) & 0xFF; - keyboardType = LMGetKbdType(); - - if (NULL==deadKeyStatePtr) { - options = kUCKeyTranslateNoDeadKeysMask; - dummy_state = 0; - deadKeyStatePtr = &dummy_state; + if (NS_KEYLOG) + NSLog (@"doCommandBySelector: %@", NSStringFromSelector (aSelector)); + processingCompose = NO; + if (aSelector == @selector (deleteBackward:)) + { + /* happens when user backspaces over an ongoing composition: + throw a 'delete' into the event queue */ + XEvent xEvent; + setupXEvent(&xEvent, [self window], 0); + xEvent.xany.type = KeyPress; + xEvent.xkey.nbytes = 1; + xEvent.xkey.keycode = (0x33 << 16) | 0x7F; + xEvent.xkey.trans_chars[0] = 0x7F; + xEvent.xkey.trans_chars[1] = 0x0; + Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); } +} - switch(eKind) { - case kEventRawKeyDown: - action = kUCKeyActionDown; - break; - case kEventRawKeyUp: - action = kUCKeyActionUp; - break; - case kEventRawKeyRepeat: - action = kUCKeyActionAutoKey; - break; - default: - TkMacOSXDbgMsg("Invalid parameter eKind %d", eKind); - return 0; - } - err = ChkErr(UCKeyTranslate, (const UCKeyboardLayout *) uchr, keycode, - action, modifiers, keyboardType, options, deadKeyStatePtr, - maxChars, &actuallength, uniChars); +- (NSArray *)validAttributesForMarkedText +{ + static NSArray *arr = nil; + if (arr == nil) arr = [NSArray new]; + /* [[NSArray arrayWithObject: NSUnderlineStyleAttributeName] retain]; */ + return arr; +} - if ((0 == actuallength) && (0 != *deadKeyStatePtr)) { - /* - * More data later - */ - return 0; - } +- (NSRange)selectedRange +{ + if (NS_KEYLOG) + NSLog (@"selectedRange request"); + return NSMakeRange (NSNotFound, 0); +} - /* - * some IMEs leave residue :-( - */ - *deadKeyStatePtr = 0; +- (NSUInteger)characterIndexForPoint: (NSPoint)thePoint +{ + if (NS_KEYLOG) + NSLog (@"characterIndexForPoint request"); + return 0; +} - if (err != noErr) { - actuallength = 0; - } - return actuallength; +- (NSAttributedString *)attributedSubstringFromRange: (NSRange)theRange +{ + static NSAttributedString *str = nil; + if (str == nil) str = [NSAttributedString new]; + if (NS_KEYLOG) + NSLog (@"attributedSubstringFromRange request"); + return str; } +/* End <NSTextInput> impl. */ +@end -/* - *---------------------------------------------------------------------- - * - * KeycodeToUnicodeViaKCHRResource -- - * - * Given MacOS key event data this function generates the Unicode - * characters. It does this using a 'KCHR' and the KeyTranslate API. - * - * The parameter deadKeyStatePtr can be NULL, if no deadkey handling - * is needed. - * - * Results: - * The number of characters generated if any, 0 if we are waiting for - * another byte of a dead-key sequence. Fills in the uniChars array - * with a Unicode string. - * - * Side Effects: - * None - * - *---------------------------------------------------------------------- - */ - -static int -KeycodeToUnicodeViaKCHRResource( - UniChar *uniChars, - int maxChars, - Ptr kchr, - TextEncoding encoding, - EventKind eKind, - UInt32 keycode, - UInt32 modifiers, - UInt32 *deadKeyStatePtr) -{ - UInt32 result; - char macBuff[3]; - char *macStr; - int macStrLen; - UInt32 dummy_state = 0; - - if (NULL == deadKeyStatePtr) { - deadKeyStatePtr = &dummy_state; - } - - keycode |= modifiers; - result = KeyTranslate(kchr, keycode, deadKeyStatePtr); - - if ((0 == result) && (0 != dummy_state)) { - /* - * 'dummy_state' gets only filled if the caller did not want deadkey - * processing (deadKeyStatePtr was NULL originally), but we still - * have a deadkey. We just push the keycode for the space bar to get - * the real key value. - */ - - result = KeyTranslate(kchr, 0x31, deadKeyStatePtr); - *deadKeyStatePtr = 0; - } - if ((0 == result) && (0 != *deadKeyStatePtr)) { - /* - * More data later - */ - return 0; - } - - macBuff[0] = (char) (result >> 16); - macBuff[1] = (char) result; - macBuff[2] = 0; - - if (0 != macBuff[0]) { - /* - * If the first byte is valid, the second is too - */ - - macStr = macBuff; - macStrLen = 2; - } else if (0 != macBuff[1]) { - /* - * Only the second is valid - */ - - macStr = macBuff+1; - macStrLen = 1; - } else { - /* - * No valid bytes at all -- shouldn't happen - */ - - macStr = NULL; - macStrLen = 0; - } - - if (macStrLen <= 0) { - return 0; - } else { - - /* - * Use the CFString conversion routines. This is the easiest and - * most compatible way to get from an 8-bit string and a MacOS script - * code to a Unicode string. - * - * FIXME: The system ships with an Irish 'KCHR' but without the - * corresponding macCeltic encoding, which triggers the error below. - * Tcl doesn't have the macCeltic encoding either right now, so until - * we get that, we can just as well stick to this code. The right - * fix would be to use the Tcl encodings and add macCeltic and - * probably others there. Suitable Unicode data files for the - * missing encodings are available from www.evertype.com. - */ - - CFStringRef cfString; - int uniStrLen; - - cfString = CFStringCreateWithCStringNoCopy(NULL, macStr, encoding, - kCFAllocatorNull); - if (cfString == NULL) { - TkMacOSXDbgMsg("CFString: Can't convert with encoding %ld", - encoding); - return 0; - } - - uniStrLen = CFStringGetLength(cfString); - if (uniStrLen > maxChars) { - uniStrLen = maxChars; - } - CFStringGetCharacters(cfString, CFRangeMake(0,uniStrLen), uniChars); - CFRelease(cfString); - - return uniStrLen; - } -} - /* - *---------------------------------------------------------------------- - * - * TkMacOSXKeycodeToUnicode -- - * - * Given MacOS key event data this function generates the Unicode - * characters. It does this using OS resources and APIs. - * - * The parameter deadKeyStatePtr can be NULL, if no deadkey handling - * is needed. - * - * This function is called from XKeycodeToKeysym() in - * tkMacOSKeyboard.c. - * - * Results: - * The number of characters generated if any, 0 if we are waiting for - * another byte of a dead-key sequence. Fills in the uniChars array - * with a Unicode string. - * - * Side Effects: - * None - * - *---------------------------------------------------------------------- + * Set up basic fields in xevent for keyboard input. */ - -MODULE_SCOPE int -TkMacOSXKeycodeToUnicode( - UniChar *uniChars, - int maxChars, - EventKind eKind, - UInt32 keycode, - UInt32 modifiers, - UInt32 *deadKeyStatePtr) +static void +setupXEvent(XEvent *xEvent, NSWindow *w, unsigned int state) { - Ptr resource = NULL; - TextEncoding encoding; - int len; - - - if (GetKeyboardLayout(&resource,&encoding)) { - len = KeycodeToUnicodeViaUnicodeResource( - uniChars, maxChars, resource, eKind, - keycode, modifiers, deadKeyStatePtr); - } else { - len = KeycodeToUnicodeViaKCHRResource( - uniChars, maxChars, resource, encoding, eKind, - keycode, modifiers, deadKeyStatePtr); - } - - return len; + TkWindow *winPtr = TkMacOSXGetTkWindow(w); + Tk_Window tkwin = (Tk_Window) winPtr; + + memset(xEvent, 0, sizeof(XEvent)); + xEvent->xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); + xEvent->xany.send_event = false; + xEvent->xany.display = Tk_Display(tkwin); + xEvent->xany.window = Tk_WindowId(tkwin); + + xEvent->xkey.root = XRootWindow(Tk_Display(tkwin), 0); + xEvent->xkey.subwindow = None; + xEvent->xkey.time = TkpGetMS(); + xEvent->xkey.state = state; + xEvent->xkey.same_screen = true; + xEvent->xkey.trans_chars[0] = 0; + xEvent->xkey.nbytes = 0; } + +#pragma mark - /* *---------------------------------------------------------------------- @@ -1037,6 +464,17 @@ XGrabKeyboard( Time time) { keyboardGrabWinPtr = Tk_IdToWindow(display, grab_window); + if (keyboardGrabWinPtr && grabWinPtr) { + NSWindow *w = TkMacOSXDrawableWindow(grab_window); + MacDrawable *macWin = (MacDrawable *) grab_window; + + if (w && macWin->toplevel->winPtr == (TkWindow*) grabWinPtr) { + if (modalSession) { + Tcl_Panic("XGrabKeyboard: already grabbed"); + } + modalSession = [NSApp beginModalSessionForWindow:[w retain]]; + } + } return GrabSuccess; } @@ -1061,6 +499,13 @@ XUngrabKeyboard( Display* display, Time time) { + if (modalSession) { + NSWindow *w = keyboardGrabWinPtr ? TkMacOSXDrawableWindow( + ((TkWindow *) keyboardGrabWinPtr)->window) : nil; + [NSApp endModalSession:modalSession]; + [w release]; + modalSession = NULL; + } keyboardGrabWinPtr = NULL; } @@ -1071,9 +516,11 @@ XUngrabKeyboard( * * Results: * Returns the current grab window + * * Side effects: * None. * + *---------------------------------------------------------------------- */ Tk_Window @@ -1085,12 +532,31 @@ TkMacOSXGetCapture(void) /* *---------------------------------------------------------------------- * + * TkMacOSXGetModalSession -- + * + * Results: + * Returns the current modal session + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +MODULE_SCOPE NSModalSession +TkMacOSXGetModalSession(void) +{ + return modalSession; +} + +/* + *---------------------------------------------------------------------- + * * TkpSetCapture -- * - * This function captures the mouse so that all future events - * will be reported to this window, even if the mouse is outside - * the window. If the specified window is NULL, then the mouse - * is released. + * This function captures the mouse so that all future events will be + * reported to this window, even if the mouse is outside the window. If + * the specified window is NULL, then the mouse is released. * * Results: * None. @@ -1108,24 +574,6 @@ TkpSetCapture( while (winPtr && !Tk_IsTopLevel(winPtr)) { winPtr = winPtr->parentPtr; } -#if 0 - { - TkWindow *w = NULL; - WindowModality m; - - if (winPtr) { - w = winPtr; - m = kWindowModalityAppModal; - } else if (grabWinPtr) { - w = (TkWindow*)grabWinPtr; - m = kWindowModalityNone; - } - if (w && w->window != None && TkMacOSXHostToplevelExists(w)) { - ChkErr(SetWindowModality, TkMacOSXDrawableWindow(w->window), m, - NULL); - } - } -#endif grabWinPtr = (Tk_Window) winPtr; } @@ -1134,9 +582,9 @@ TkpSetCapture( * * Tk_SetCaretPos -- * - * This enables correct placement of the XIM caret. This is called - * by widgets to indicate their cursor placement, and the caret - * location is used by TkpGetString to place the XIM caret. + * This enables correct placement of the XIM caret. This is called by + * widgets to indicate their cursor placement, and the caret location is + * used by TkpGetString to place the XIM caret. * * Results: * None @@ -1153,31 +601,123 @@ Tk_SetCaretPos( int x, int y, int height) -{ + { + TkCaret *caretPtr = &(((TkWindow *) tkwin)->dispPtr->caret); + + /* + * Prevent processing anything if the values haven't changed. Windows only + * has one display, so we can do this with statics. + */ + + if ((caretPtr->winPtr == ((TkWindow *) tkwin)) + && (caretPtr->x == x) && (caretPtr->y == y)) { + return; + } + + caretPtr->winPtr = ((TkWindow *) tkwin); + caretPtr->x = x; + caretPtr->y = y; + caretPtr->height = height; + + /* + * As in Windows, adjust to the toplevel to get the coords right. + */ + + while (!Tk_IsTopLevel(tkwin)) { + x += Tk_X(tkwin); + y += Tk_Y(tkwin); + tkwin = Tk_Parent(tkwin); + if (tkwin == NULL) { + return; + } + } + + /* But adjust for fact that NS uses flipped view. */ + y = Tk_Height(tkwin) - y; + + caret_x = x; + caret_y = y; + caret_height = height; } -/* - *---------------------------------------------------------------------- - * - * TkMacOSXInitKeyboard -- - * - * This procedure initializes the keyboard layout. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -MODULE_SCOPE void -TkMacOSXInitKeyboard( - Tcl_Interp *interp) +static unsigned convert_ns_to_X_keysym[] = { - Ptr resource; - TextEncoding encoding; - - GetKeyboardLayout(&resource, &encoding); -} + NSHomeFunctionKey, 0x50, + NSLeftArrowFunctionKey, 0x51, + NSUpArrowFunctionKey, 0x52, + NSRightArrowFunctionKey, 0x53, + NSDownArrowFunctionKey, 0x54, + NSPageUpFunctionKey, 0x55, + NSPageDownFunctionKey, 0x56, + NSEndFunctionKey, 0x57, + NSBeginFunctionKey, 0x58, + NSSelectFunctionKey, 0x60, + NSPrintFunctionKey, 0x61, + NSExecuteFunctionKey, 0x62, + NSInsertFunctionKey, 0x63, + NSUndoFunctionKey, 0x65, + NSRedoFunctionKey, 0x66, + NSMenuFunctionKey, 0x67, + NSFindFunctionKey, 0x68, + NSHelpFunctionKey, 0x6A, + NSBreakFunctionKey, 0x6B, + + NSF1FunctionKey, 0xBE, + NSF2FunctionKey, 0xBF, + NSF3FunctionKey, 0xC0, + NSF4FunctionKey, 0xC1, + NSF5FunctionKey, 0xC2, + NSF6FunctionKey, 0xC3, + NSF7FunctionKey, 0xC4, + NSF8FunctionKey, 0xC5, + NSF9FunctionKey, 0xC6, + NSF10FunctionKey, 0xC7, + NSF11FunctionKey, 0xC8, + NSF12FunctionKey, 0xC9, + NSF13FunctionKey, 0xCA, + NSF14FunctionKey, 0xCB, + NSF15FunctionKey, 0xCC, + NSF16FunctionKey, 0xCD, + NSF17FunctionKey, 0xCE, + NSF18FunctionKey, 0xCF, + NSF19FunctionKey, 0xD0, + NSF20FunctionKey, 0xD1, + NSF21FunctionKey, 0xD2, + NSF22FunctionKey, 0xD3, + NSF23FunctionKey, 0xD4, + NSF24FunctionKey, 0xD5, + + NSBackspaceCharacter, 0x08, /* 8: Not on some KBs. */ + NSDeleteCharacter, 0xFF, /* 127: Big 'delete' key upper right. */ + NSDeleteFunctionKey, 0x9F, /* 63272: Del forw key off main array. */ + + NSTabCharacter, 0x09, + 0x19, 0x09, /* left tab->regular since pass shift */ + NSCarriageReturnCharacter, 0x0D, + NSNewlineCharacter, 0x0D, + NSEnterCharacter, 0x8D, + + 0x1B, 0x1B /* escape */ +}; + + +static unsigned isFunctionKey(unsigned code) +{ + const unsigned last_keysym = (sizeof (convert_ns_to_X_keysym) + / sizeof (convert_ns_to_X_keysym[0])); + unsigned keysym; + for (keysym = 0; keysym < last_keysym; keysym += 2) + if (code == convert_ns_to_X_keysym[keysym]) + return 0xFF00 | convert_ns_to_X_keysym[keysym+1]; + return 0; + } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXKeyboard.c b/macosx/tkMacOSXKeyboard.c index 6bf3643..f776562 100644 --- a/macosx/tkMacOSXKeyboard.c +++ b/macosx/tkMacOSXKeyboard.c @@ -4,17 +4,15 @@ * Routines to support keyboard events on the Macintosh. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#include "tkMacOSXInt.h" -#include "tkMacOSXEvent.h" /* for TkMacOSXKeycodeToUnicode() - * FIXME: That function should probably move - * here. */ +#include "tkMacOSXPrivate.h" +#include "tkMacOSXEvent.h" /* * A couple of simple definitions to make code a bit more self-explaining. @@ -106,6 +104,8 @@ static Tcl_HashTable vkeyTable; /* virtualkeyArray hashed by virtual static int latin1Table[LATIN1_MAX+1]; /* Reverse mapping table for * controls, ASCII and Latin-1. */ +static int keyboardChanged = 1; + /* * Prototypes for static functions used in this file. */ @@ -113,7 +113,23 @@ static int latin1Table[LATIN1_MAX+1]; /* Reverse mapping table for static void InitKeyMaps (void); static void InitLatin1Table(Display *display); static int XKeysymToMacKeycode(Display *display, KeySym keysym); +static int KeycodeToUnicode(UniChar * uniChars, int maxChars, + UInt16 keyaction, UInt32 keycode, UInt32 modifiers, + UInt32 * deadKeyStatePtr); + +#pragma mark TKApplication(TKKeyboard) + +@implementation TKApplication(TKKeyboard) +- (void) keyboardChanged: (NSNotification *) notification +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + keyboardChanged = 1; +} +@end +#pragma mark - /* *---------------------------------------------------------------------- @@ -144,13 +160,13 @@ InitKeyMaps(void) Tcl_InitHashTable(&keycodeTable, TCL_ONE_WORD_KEYS); for (kPtr = keyArray; kPtr->keycode != 0; kPtr++) { - hPtr = Tcl_CreateHashEntry(&keycodeTable, (char *) kPtr->keycode, + hPtr = Tcl_CreateHashEntry(&keycodeTable, INT2PTR(kPtr->keycode), &dummy); Tcl_SetHashValue(hPtr, kPtr->keysym); } Tcl_InitHashTable(&vkeyTable, TCL_ONE_WORD_KEYS); for (kPtr = virtualkeyArray; kPtr->keycode != 0; kPtr++) { - hPtr = Tcl_CreateHashEntry(&vkeyTable, (char *) kPtr->keycode, + hPtr = Tcl_CreateHashEntry(&vkeyTable, INT2PTR(kPtr->keycode), &dummy); Tcl_SetHashValue(hPtr, kPtr->keysym); } @@ -162,10 +178,10 @@ InitKeyMaps(void) * * InitLatin1Table -- * - * Creates a simple table to be used for mapping from keysyms to - * keycodes. Always needs to be called before using latin1Table, - * because the keyboard layout may have changed, and than the table must - * be re-computed. + * Creates a simple table to be used for mapping from keysyms to keycodes. + * Always needs to be called before using latin1Table, because the + * keyboard layout may have changed, and than the table must be + * re-computed. * * Results: * None. @@ -180,57 +196,128 @@ static void InitLatin1Table( Display *display) { - static Boolean latin1_initialized = false; - static SInt16 lastKeyLayoutID = -1; + int keycode; + KeySym keysym; + int state; + int modifiers; - SInt16 keyScript; - SInt16 keyLayoutID; + memset(latin1Table, 0, sizeof(latin1Table)); - keyScript = GetScriptManagerVariable(smKeyScript); - keyLayoutID = GetScriptVariable(keyScript,smScriptKeys); + /* + * In the common X11 implementations, a keymap has four columns + * "plain", "Shift", "Mode_switch" and "Mode_switch + Shift". We don't + * use "Mode_switch", but we use "Option" instead. (This is similar to + * Apple's X11 implementation, where "Mode_switch" is used as an alias + * for "Option".) + * + * So here we go through all 4 columns of the keymap and find all + * Latin-1 compatible keycodes. We go through the columns back-to-front + * from the more exotic columns to the more simple, so that simple + * keycode-modifier combinations are preferred in the resulting table. + */ + + for (state = 3; state >= 0; state--) { + modifiers = 0; + if (state & 1) { + modifiers |= shiftKey; + } + if (state & 2) { + modifiers |= optionKey; + } - if (!latin1_initialized || (lastKeyLayoutID != keyLayoutID)) { - int keycode; - KeySym keysym; - int state; - int modifiers; + for (keycode = 0; keycode <= MAC_KEYCODE_MAX; keycode++) { + keysym = XKeycodeToKeysym(display,keycode<<16,state); + if (keysym <= LATIN1_MAX) { + latin1Table[keysym] = keycode | modifiers; + } + } + } +} + +/* + *---------------------------------------------------------------------- + * + * KeycodeToUnicode -- + * + * Given MacOS key event data this function generates the Unicode + * characters. It does this using OS resources and APIs. + * + * The parameter deadKeyStatePtr can be NULL, if no deadkey handling is + * needed. + * + * This function is called from XKeycodeToKeysym() in tkMacOSKeyboard.c. + * + * Results: + * The number of characters generated if any, 0 if we are waiting for + * another byte of a dead-key sequence. Fills in the uniChars array with a + * Unicode string. + * + * Side Effects: + * None + * + *---------------------------------------------------------------------- + */ - latin1_initialized = true; - lastKeyLayoutID = keyLayoutID; +static int +KeycodeToUnicode( + UniChar *uniChars, + int maxChars, + UInt16 keyaction, + UInt32 keycode, + UInt32 modifiers, + UInt32 *deadKeyStatePtr) +{ + static const void *uchr = NULL; + static UInt32 keyboardType = 0; + UniCharCount actuallength = 0; - memset(latin1Table, 0, sizeof(latin1Table)); + if (keyboardChanged) { + TISInputSourceRef currentKeyboardLayout = + TISCopyCurrentKeyboardLayoutInputSource(); - /* - * In the common X11 implementations, a keymap has four columns - * "plain", "Shift", "Mode_switch" and "Mode_switch + Shift". We - * don't use "Mode_switch", but we use "Option" instead. (This is - * similar to Apple's X11 implementation, where "Mode_switch" is used - * as an alias for "Option".) - * - * So here we go through all 4 columns of the keymap and find all - * Latin-1 compatible keycodes. We go through the columns - * back-to-front from the more exotic columns to the more simple, so - * that simple keycode-modifier combinations are preferred in the - * resulting table. - */ + if (currentKeyboardLayout) { + CFDataRef keyLayoutData = (CFDataRef) TISGetInputSourceProperty( + currentKeyboardLayout, kTISPropertyUnicodeKeyLayoutData); - for (state = 3; state >= 0; state--) { - modifiers = 0; - if (state & 1) { - modifiers |= shiftKey; - } - if (state & 2) { - modifiers |= optionKey; + if (keyLayoutData) { + uchr = CFDataGetBytePtr(keyLayoutData); + keyboardType = LMGetKbdType(); } + CFRelease(currentKeyboardLayout); + } + keyboardChanged = 0; + } + if (uchr) { + OptionBits options = 0; + UInt32 dummyState; + OSStatus err; + + keycode &= 0xFF; + modifiers = (modifiers >> 8) & 0xFF; + + if (!deadKeyStatePtr) { + options = kUCKeyTranslateNoDeadKeysMask; + dummyState = 0; + deadKeyStatePtr = &dummyState; + } - for (keycode = 0; keycode <= MAC_KEYCODE_MAX; keycode++) { - keysym = XKeycodeToKeysym(display,keycode<<16,state); - if (keysym <= LATIN1_MAX) { - latin1Table[keysym] = keycode | modifiers; - } - } + err = ChkErr(UCKeyTranslate, uchr, keycode, keyaction, modifiers, + keyboardType, options, deadKeyStatePtr, maxChars, + &actuallength, uniChars); + + if (!actuallength && *deadKeyStatePtr) { + /* + * More data later + */ + + return 0; + } + *deadKeyStatePtr = 0; + if (err != noErr) { + actuallength = 0; } } + return actuallength; } /* @@ -267,21 +354,21 @@ XKeycodeToKeysym( } /* - * When determining what keysym to produce we first check to see if the - * key is a function key. We then check to see if the character is - * another non-printing key. Finally, we return the key syms for all - * ASCII and Latin-1 chars. + * When determining what keysym to produce we first check to see if the key + * is a function key. We then check to see if the character is another + * non-printing key. Finally, we return the key syms for all ASCII and + * Latin-1 chars. */ newKeycode = keycode >> 16; - if ((keycode & 0xFFFF) == 0x10) { - hPtr = Tcl_FindHashEntry(&vkeyTable, (char *) newKeycode); + if ((keycode & 0xFFFF) >= 0xF700) { /* NSEvent.h function key unicodes */ + hPtr = Tcl_FindHashEntry(&vkeyTable, INT2PTR(newKeycode)); if (hPtr != NULL) { return (KeySym) Tcl_GetHashValue(hPtr); } } - hPtr = Tcl_FindHashEntry(&keycodeTable, (char *) newKeycode); + hPtr = Tcl_FindHashEntry(&keycodeTable, INT2PTR(newKeycode)); if (hPtr != NULL) { return (KeySym) Tcl_GetHashValue(hPtr); } @@ -298,13 +385,12 @@ XKeycodeToKeysym( } newChar = 0; - TkMacOSXKeycodeToUnicode( - &newChar, 1, kEventRawKeyDown, - newKeycode & 0x00FF, newKeycode & 0xFF00, NULL); + KeycodeToUnicode(&newChar, 1, kUCKeyActionDown, newKeycode & 0x00FF, + newKeycode & 0xFF00, NULL); /* - * X11 keysyms are identical to Unicode for ASCII and Latin-1. Give up - * for other characters for now. + * X11 keysyms are identical to Unicode for ASCII and Latin-1. Give up for + * other characters for now. */ if ((newChar >= XK_space) && (newChar <= LATIN1_MAX)) { @@ -361,15 +447,15 @@ TkpGetString( XModifierKeymap * XGetModifierMapping( - Display* display) + Display *display) { - XModifierKeymap * modmap; + XModifierKeymap *modmap; (void) display; /*unused*/ /* - * MacOSX doesn't use the key codes for the modifiers for anything, and - * we don't generate them either. So there is no modifier map. + * MacOSX doesn't use the key codes for the modifiers for anything, and we + * don't generate them either. So there is no modifier map. */ modmap = (XModifierKeymap *) ckalloc(sizeof(XModifierKeymap)); @@ -411,9 +497,9 @@ XFreeModifiermap( * XKeysymToString, XStringToKeysym -- * * These X window functions map keysyms to strings & strings to keysyms. - * However, Tk already does this for the most common keysyms. - * Therefore, these functions only need to support keysyms that will be - * specific to the Macintosh. Currently, there are none. + * However, Tk already does this for the most common keysyms. Therefore, + * these functions only need to support keysyms that will be specific to + * the Macintosh. Currently, there are none. * * Results: * None. @@ -443,8 +529,8 @@ XStringToKeysym( * * XKeysymToMacKeycode -- * - * An internal function like XKeysymToKeycode but only generating the - * Mac specific keycode plus the modifiers Shift and Option. + * An internal function like XKeysymToKeycode but only generating the Mac + * specific keycode plus the modifiers Shift and Option. * * Results: * A Mac keycode with the actual keycode in the low byte and Mac-style @@ -461,45 +547,44 @@ XKeysymToMacKeycode( Display *display, KeySym keysym) { - if (keysym <= LATIN1_MAX) { + KeyInfo *kPtr; + if (keysym <= LATIN1_MAX) { /* * Handle keysyms in the Latin-1 range where keysym and Unicode * character code point are the same. */ - InitLatin1Table(display); + if (keyboardChanged) { + InitLatin1Table(display); + keyboardChanged = 0; + } return latin1Table[keysym]; + } - } else { - - /* - * Handle special keys from our exception tables. Don't mind if this - * is slow, neither the test suite nor [event generate] need to be - * optimized (we hope). - */ - - KeyInfo *kPtr; + /* + * Handle special keys from our exception tables. Don't mind if this is + * slow, neither the test suite nor [event generate] need to be optimized + * (we hope). + */ - for (kPtr = keyArray; kPtr->keycode != 0; kPtr++) { - if (kPtr->keysym == keysym) { - return kPtr->keycode; - } + for (kPtr = keyArray; kPtr->keycode != 0; kPtr++) { + if (kPtr->keysym == keysym) { + return kPtr->keycode; } - for (kPtr = virtualkeyArray; kPtr->keycode != 0; kPtr++) { - if (kPtr->keysym == keysym) { - return kPtr->keycode; - } + } + for (kPtr = virtualkeyArray; kPtr->keycode != 0; kPtr++) { + if (kPtr->keysym == keysym) { + return kPtr->keycode; } + } - /* - * For other keysyms (not Latin-1 and not special keys), we'd need a - * generic keysym-to-unicode table. We don't have that, so we give - * up here. - */ + /* + * For other keysyms (not Latin-1 and not special keys), we'd need a + * generic keysym-to-unicode table. We don't have that, so we give up here. + */ - return 0; - } + return 0; } /* @@ -507,9 +592,9 @@ XKeysymToMacKeycode( * * XKeysymToKeycode -- * - * The function XKeysymToKeycode takes an X11 keysym and converts it - * into a Mac keycode. It is in the stubs table for compatibility but - * not used anywhere in the core. + * The function XKeysymToKeycode takes an X11 keysym and converts it into + * a Mac keycode. It is in the stubs table for compatibility but not used + * anywhere in the core. * * Results: * A 32 bit keycode with the the mac keycode (without modifiers) in the @@ -545,32 +630,6 @@ XKeysymToKeycode( return result; } - -/* -NB: Keep this commented code for a moment for reference. - - if ((keysym >= XK_space) && (XK_asciitilde)) { - if (keysym == 'a') { - virtualKeyCode = 0x00; - } else if (keysym == 'b' || keysym == 'B') { - virtualKeyCode = 0x0B; - } else if (keysym == 'c') { - virtualKeyCode = 0x08; - } else if (keysym == 'x' || keysym == 'X') { - virtualKeyCode = 0x07; - } else if (keysym == 'z') { - virtualKeyCode = 0x06; - } else if (keysym == ' ') { - virtualKeyCode = 0x31; - } else if (keysym == XK_Return) { - virtualKeyCode = 0x24; - keysym = '\r'; - } - keycode = keysym + (virtualKeyCode <<16); - } - - return keycode; -*/ /* *---------------------------------------------------------------------- @@ -579,8 +638,8 @@ NB: Keep this commented code for a moment for reference. * * The function TkpSetKeycodeAndState takes a keysym and fills in the * appropriate members of an XEvent. It is similar to XKeysymToKeycode, - * but it also sets the modifier mask in the XEvent. It is used by - * [event generate] and it is in the stubs table. + * but it also sets the modifier mask in the XEvent. It is used by [event + * generate] and it is in the stubs table. * * Results: * Fills an XEvent, sets the member xkey.keycode with a keycode @@ -625,8 +684,8 @@ TkpSetKeycodeAndState( } if (keysym <= LATIN1_MAX) { - int done; - done = Tcl_UniCharToUtf(keysym,eventPtr->xkey.trans_chars); + int done = Tcl_UniCharToUtf(keysym, eventPtr->xkey.trans_chars); + eventPtr->xkey.trans_chars[done] = 0; } else { eventPtr->xkey.trans_chars[0] = 0; @@ -676,28 +735,30 @@ TkpGetKeySym( if (eventPtr->xany.send_event == -1) { int modifier = eventPtr->xkey.keycode; - if (modifier == cmdKey) { + + if (modifier == NSCommandKeyMask) { return XK_Meta_L; - } else if (modifier == shiftKey) { + } else if (modifier == NSShiftKeyMask) { return XK_Shift_L; - } else if (modifier == alphaLock) { + } else if (modifier == NSAlphaShiftKeyMask) { return XK_Caps_Lock; - } else if (modifier == optionKey) { + } else if (modifier == NSAlternateKeyMask) { return XK_Alt_L; - } else if (modifier == controlKey) { + } else if (modifier == NSControlKeyMask) { return XK_Control_L; - } else if (modifier == kEventKeyModifierNumLockMask) { + } else if (modifier == NSNumericPadKeyMask) { return XK_Num_Lock; - } else if (modifier == kEventKeyModifierFnMask) { + } else if (modifier == NSFunctionKeyMask) { return XK_Super_L; +/* } else if (modifier == rightShiftKey) { return XK_Shift_R; } else if (modifier == rightOptionKey) { return XK_Alt_R; } else if (modifier == rightControlKey) { return XK_Control_R; +*/ } else { - /* * If we get here, we probably need to implement something new. */ @@ -706,11 +767,17 @@ TkpGetKeySym( } } + /* If nbytes has been set, it's not a function key, but a regular key that + has been translated in tkMacOSXKeyEvent.c; just use that. */ + if (eventPtr->xkey.nbytes) { + return eventPtr->xkey.keycode & 0xFFFF; + } + /* - * Figure out which of the four slots in the keymap vector to use for - * this key. Refer to Xlib documentation for more info on how this - * computation works. (Note: We use "Option" in keymap columns 2 and 3 - * where other implementations have "Mode_switch".) + * Figure out which of the four slots in the keymap vector to use for this + * key. Refer to Xlib documentation for more info on how this computation + * works. (Note: We use "Option" in keymap columns 2 and 3 where other + * implementations have "Mode_switch".) */ index = 0; @@ -728,7 +795,7 @@ TkpGetKeySym( if ((eventPtr->xkey.state & ShiftMask) || (/* (dispPtr->lockUsage != LU_IGNORE) - && */ (eventPtr->xkey.state & LockMask))) { + && */ (eventPtr->xkey.state & LockMask))) { index |= 1; } @@ -740,17 +807,16 @@ TkpGetKeySym( /* * Special handling: If the key was shifted because of Lock, but lock is - * only caps lock, not shift lock, and the shifted keysym isn't - * upper-case alphabetic, then switch back to the unshifted keysym. + * only caps lock, not shift lock, and the shifted keysym isn't upper-case + * alphabetic, then switch back to the unshifted keysym. */ if ((index & 1) && !(eventPtr->xkey.state & ShiftMask) /*&& (dispPtr->lockUsage == LU_CAPS)*/ ) { - /* - * FIXME: Keysyms are only identical to Unicode for ASCII and - * Latin-1, so we can't use Tcl_UniCharIsUpper() for keysyms outside - * that range. This may be a serious problem here. + * FIXME: Keysyms are only identical to Unicode for ASCII and Latin-1, + * so we can't use Tcl_UniCharIsUpper() for keysyms outside that range. + * This may be a serious problem here. */ if ((sym == NoSymbol) || (sym > LATIN1_MAX) @@ -778,9 +844,9 @@ TkpGetKeySym( * * TkpInitKeymapInfo -- * - * This procedure is invoked to scan keymap information to recompute - * stuff that's important for binding, such as the modifier key (if any) - * that corresponds to the "Mode_switch" keysym. + * This procedure is invoked to scan keymap information to recompute stuff + * that's important for binding, such as the modifier key (if any) that + * corresponds to the "Mode_switch" keysym. * * Results: * None. @@ -800,8 +866,8 @@ TkpInitKeymapInfo( /* * Behaviours that are variable on X11 are defined constant on MacOSX. - * lockUsage is only used above in TkpGetKeySym(), nowhere else - * currently. There is no offical "Mode_switch" key. + * lockUsage is only used above in TkpGetKeySym(), nowhere else currently. + * There is no offical "Mode_switch" key. */ dispPtr->lockUsage = LU_CAPS; @@ -825,10 +891,10 @@ TkpInitKeymapInfo( /* * MacOSX doesn't use the keycodes for the modifiers for anything, and we - * don't generate them either (the keycodes actually given in the - * simulated modifier events are bogus). So there is no modifier map. - * If we ever want to simulate real modifier keycodes, the list will be - * constant in the Carbon implementation. + * don't generate them either (the keycodes actually given in the simulated + * modifier events are bogus). So there is no modifier map. If we ever want + * to simulate real modifier keycodes, the list will be constant in the + * Carbon implementation. */ if (dispPtr->modKeyCodes != NULL) { @@ -837,3 +903,12 @@ TkpInitKeymapInfo( dispPtr->numModKeyCodes = 0; dispPtr->modKeyCodes = NULL; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXMenu.c b/macosx/tkMacOSXMenu.c index 386fe50..2b4dbc8 100644 --- a/macosx/tkMacOSXMenu.c +++ b/macosx/tkMacOSXMenu.c @@ -4,8 +4,9 @@ * This module implements the Mac-platform specific features of menus. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright (c) 2012 Adrian Robert. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -16,6 +17,7 @@ #include "tkMenu.h" #include "tkColor.h" #include "tkFont.h" +#include "tkMacOSXWm.h" #include "tkMacOSXDebug.h" /* @@ -24,1564 +26,503 @@ #endif */ -#define USE_TK_MDEF - -typedef struct MacMenu { - MenuRef menuHdl; /* The Menu Manager data structure. */ -#ifdef USE_TK_MDEF - int useMDEF; /* true if this menu uses the MDEF */ -#endif -} MacMenu; - -typedef struct MenuEntryUserData { - Drawable mdefDrawable; - TkMenuEntry *mePtr; - Tk_Font tkfont; - Tk_FontMetrics *fmPtr; -} MenuEntryUserData; - -/* - * Platform specific flags for menu entries - * - * ENTRY_COMMAND_ACCEL Indicates the entry has the command key - * in its accelerator string. - * ENTRY_OPTION_ACCEL Indicates the entry has the option key - * in its accelerator string. - * ENTRY_SHIFT_ACCEL Indicates the entry has the shift key - * in its accelerator string. - * ENTRY_CONTROL_ACCEL Indicates the entry has the control key - * in its accelerator string. - */ - -#define ENTRY_COMMAND_ACCEL ENTRY_PLATFORM_FLAG1 -#define ENTRY_OPTION_ACCEL ENTRY_PLATFORM_FLAG2 -#define ENTRY_SHIFT_ACCEL ENTRY_PLATFORM_FLAG3 -#define ENTRY_CONTROL_ACCEL ENTRY_PLATFORM_FLAG4 -#define ENTRY_ACCEL_MASK (ENTRY_COMMAND_ACCEL | ENTRY_OPTION_ACCEL \ - | ENTRY_SHIFT_ACCEL | ENTRY_CONTROL_ACCEL) -#define MODIFIER_NUM 4 - -/* - * This structure is used to keep track of subfields within Macintosh menu - * items. - */ - -typedef struct EntryGeometry { - int accelTextStart; /* Offset into the accel string where - * the text starts. Everything before - * this is modifier key descriptions. - */ - int modifierWidth; /* Width of modifier symbols. */ - int accelTextWidth; /* Width of the text after the modifier - * keys. */ - int nonAccelMargin; /* The width of the margin for entries - * without accelerators. */ - int modifierNum; /* Number of modifiers */ - Tcl_UniChar modifierUniChars[MODIFIER_NUM]; - /* Modifiers in unicode */ - char accelGlyph; /* Accelerator glyph, if any */ -} EntryGeometry; - -/* - * Structure to keep track of toplevel windows and their menubars. - */ - -typedef struct TopLevelMenubarList { - struct TopLevelMenubarList *nextPtr; - /* The next window in the list. */ - Tk_Window tkwin; /* The toplevel window. */ - TkMenu *menuPtr; /* The menu associated with this - * toplevel. */ -} TopLevelMenubarList; - -/* - * Platform-specific flags for menus. - * - * MENU_APPLE_MENU 0 indicates a custom Apple menu has - * not been installed; 1 a custom Apple - * menu has been installed. - * MENU_HELP_MENU 0 indicates a custom Help menu has - * not been installed; 1 a custom Help - * menu has been installed. - * MENU_RECONFIGURE_PENDING 1 indicates that an idle handler has - * been scheduled to reconfigure the - * Macintosh MenuHandle. - */ - -#define MENU_APPLE_MENU MENU_PLATFORM_FLAG1 -#define MENU_HELP_MENU MENU_PLATFORM_FLAG2 -#define MENU_RECONFIGURE_PENDING MENU_PLATFORM_FLAG3 - -#define CASCADE_CMD (0x1b) /* The special command char for cascade - * menus. */ -#define MENUBAR_REDRAW_PENDING 1 - -static int gNoTkMenus = 0; /* This is used by Tk_MacOSXTurnOffMenus as the - * flag that Tk is not to draw any menus. */ - -static Tcl_HashTable commandTable; - /* The list of menuInstancePtrs associated with - * menu ids */ -static short currentAppleMenuID; - /* The id of the current Apple menu. 0 for - * none. */ -static short currentHelpMenuID; /* The id of the current Help menu. 0 for - * none. */ -static Tcl_Interp *currentMenuBarInterp; - /* The interpreter of the window that owns - * the current menubar. */ -static char *currentMenuBarName; - /* Malloced. Name of current menu in menu bar. - * NULL if no menu set. TO DO: make this a - * DString. */ -static Tk_Window currentMenuBarOwner; - /* Which window owns the current menu bar. */ -static int inPostMenu; /* We cannot be re-entrant like X - * windows. */ -static short lastMenuID; /* To pass to NewMenu; need to figure out - * a good way to do this. */ -static short lastCascadeID; - /* Cascades have to have ids that are - * less than 256. */ -static int menuBarFlags; /* Used for whether the menu bar needs - * redrawing or not. */ - -struct MenuCommandHandlerData { /* This is the ClientData we pass to */ - TkMenu *menuPtr; /* Tcl_DoWhenIdle to move handling */ - int index; /* menu commands to the event loop. */ +#define ENTRY_HELP_MENU ENTRY_PLATFORM_FLAG1 +#define ENTRY_APPLE_MENU ENTRY_PLATFORM_FLAG2 +#define ENTRY_WINDOWS_MENU ENTRY_PLATFORM_FLAG3 + +#define sl(s) ((int) (sizeof(s "") - 1)) + +#define SPECIALMENU(n, f) {.name = "." #n, .len = sl(#n) + 1, \ + .flag = ENTRY_##f##_MENU } +static const struct { + const char *name; const size_t len; const int flag; +} specialMenus[] = { + SPECIALMENU(help, HELP), + SPECIALMENU(apple, APPLE), + SPECIALMENU(window, WINDOWS), + {NULL} }; - -static TopLevelMenubarList *windowListPtr; - /* A list of windows that have menubars set. */ - -/* - * Array of unicode, charcode and utf representations of the most common - * special menu symbols. - */ -typedef struct MenuSymbol { - const Tcl_UniChar unicode; - const char charCode; - /* char padding; */ - int utfLen, width; - char utf[TCL_UTF_MAX + 1]; -} MenuSymbol; - -static MenuSymbol menuSymbols[] = { - {kCommandUnicode, kCommandCharCode}, - {kOptionUnicode, kMenuOptionGlyph}, - {kControlUnicode, kMenuControlGlyph}, - {kShiftUnicode, kMenuShiftGlyph}, - {kCheckUnicode, kCheckCharCode}, - {kDiamondUnicode, kDiamondCharCode}, - {kBulletUnicode, kBulletCharCode}, - {0x2026, kNullCharCode}, - {0, 0}, +#undef SPECIALMENU + +#define MODIFIER(n, f) {.name = #n, .len = sl(#n), .mask = f } +static const struct { + const char *name; const size_t len; const NSUInteger mask; +} modifiers[] = { + MODIFIER(Control, NSControlKeyMask), + MODIFIER(Ctrl, NSControlKeyMask), + MODIFIER(Option, NSAlternateKeyMask), + MODIFIER(Opt, NSAlternateKeyMask), + MODIFIER(Alt, NSAlternateKeyMask), + MODIFIER(Shift, NSShiftKeyMask), + MODIFIER(Command, NSCommandKeyMask), + MODIFIER(Cmd, NSCommandKeyMask), + MODIFIER(Meta, NSCommandKeyMask), + {NULL} }; - -enum MenuSymbolIdx { - COMMAND_SYMBOL, - OPTION_SYMBOL, - CONTROL_SYMBOL, - SHIFT_SYMBOL, - CHECK_SYMBOL, - DIAMDOND_SYMBOL, - BULLET_SYMBOL, - ELLIPSIS_SYMBOL, +#undef MODIFIER + +#define ACCEL(n, c) {.name = #n, .len = sl(#n), .ch = c } +static const struct { + const char *name; const size_t len; const UniChar ch; +} specialAccelerators[] = { + ACCEL(PageUp, NSPageUpFunctionKey), + ACCEL(PageDown, NSPageDownFunctionKey), + ACCEL(Left, NSLeftArrowFunctionKey), + ACCEL(Right, NSRightArrowFunctionKey), + ACCEL(Up, NSUpArrowFunctionKey), + ACCEL(Down, NSDownArrowFunctionKey), + ACCEL(Escape, 0x001b), + ACCEL(Clear, NSClearDisplayFunctionKey), + ACCEL(Enter, NSEnterCharacter), + ACCEL(Backspace, NSBackspaceCharacter), + ACCEL(Space, ' '), + ACCEL(Tab, NSTabCharacter), + ACCEL(BackTab, NSBackTabCharacter), + ACCEL(Delete, NSDeleteCharacter), + ACCEL(Home, NSHomeFunctionKey), + ACCEL(End, NSEndFunctionKey), + ACCEL(Return, NSCarriageReturnCharacter), + ACCEL(Help, NSHelpFunctionKey), + ACCEL(Power, 0x233d), + ACCEL(Eject, 0xf804), + {NULL} }; +#undef ACCEL +#undef sl -MenuRef tkCurrentAppleMenu = NULL; - -static SInt32 menuMarkColumnWidth = 0, menuMarkIndent = 0; +static int gNoTkMenus = 0; /* This is used by Tk_MacOSXTurnOffMenus as + * the flag that Tk is not to draw any + * menus. */ +static int inPostMenu = 0; +static unsigned long defaultBg = 0, defaultFg = 0; +static SInt32 menuMarkColumnWidth = 0, menuIconTrailingEdgeMargin = 0; static SInt32 menuTextLeadingEdgeMargin = 0, menuTextTrailingEdgeMargin = 0; static SInt16 menuItemExtraHeight = 0, menuItemExtraWidth = 0; static SInt16 menuSeparatorHeight = 0; -/* - * Forward declarations for procedures defined later in this file: - */ - -MODULE_SCOPE int TkMacOSXGetNewMenuID(Tcl_Interp *interp, TkMenu *menuInstPtr, - int cascade, short *menuIDPtr); -MODULE_SCOPE void TkMacOSXFreeMenuID(short menuID); - -static void CompleteIdlers(TkMenu *menuPtr); -static void DrawMenuBarWhenIdle(ClientData clientData); -static void DrawMenuEntryAccelerator(TkMenu *menuPtr, TkMenuEntry *mePtr, - Drawable d, GC gc, Tk_Font tkfont, const Tk_FontMetrics *fmPtr, - Tk_3DBorder activeBorder, int x, int y, int width, int height, - int drawArrow); -static void DrawMenuEntryBackground(TkMenu *menuPtr, TkMenuEntry *mePtr, - Drawable d, Tk_3DBorder activeBorder, Tk_3DBorder bgBorder, int x, - int y, int width, int heigth); -static void DrawMenuEntryIndicator(TkMenu *menuPtr, TkMenuEntry *mePtr, - Drawable d, GC gc, GC indicatorGC, Tk_Font tkfont, - const Tk_FontMetrics *fmPtr, int x, int y, int width, int height); -static void DrawMenuEntryLabel(TkMenu * menuPtr, TkMenuEntry *mePtr, - Drawable d, GC gc, Tk_Font tkfont, const Tk_FontMetrics *fmPtr, int x, - int y, int width, int height); -static void DrawMenuSeparator(TkMenu *menuPtr, TkMenuEntry *mePtr, Drawable d, - GC gc, Tk_Font tkfont, const Tk_FontMetrics *fmPtr, int x, int y, - int width, int height); -static void DrawTearoffEntry(TkMenu *menuPtr, TkMenuEntry *mePtr, Drawable d, - GC gc, Tk_Font tkfont, const Tk_FontMetrics *fmPtr, int x, int y, - int width, int height); -static void EventuallyInvokeMenu(ClientData data); -static void GetEntryText(TkMenuEntry *mePtr, Tcl_DString *dStringPtr); -static void GetMenuAccelGeometry(TkMenu *menuPtr, TkMenuEntry *mePtr, - Tk_Font tkfont, const Tk_FontMetrics *fmPtr, int *modWidthPtr, - int *textWidthPtr, int *heightPtr); -static void GetMenuLabelGeometry(TkMenuEntry *mePtr, Tk_Font tkfont, - const Tk_FontMetrics *fmPtr, int *widthPtr, int *heightPtr); -static void GetMenuIndicatorGeometry(TkMenu *menuPtr, TkMenuEntry *mePtr, - Tk_Font tkfont, const Tk_FontMetrics *fmPtr, int *widthPtr, - int *heightPtr); -static void GetMenuSeparatorGeometry(TkMenu *menuPtr, TkMenuEntry *mePtr, - Tk_Font tkfont, const Tk_FontMetrics *fmPtr, int *widthPtr, - int *heightPtr); -static TkMenuEntry* GetParentMenuEntry(TkMenu *menuPtr); -static void GetTearoffEntryGeometry(TkMenu *menuPtr, TkMenuEntry *mePtr, - Tk_Font tkfont, const Tk_FontMetrics *fmPtr, int *widthPtr, - int *heightPtr); -static char FindMarkCharacter(TkMenuEntry *mePtr); -static int GetUtfMarkCharacter(char markChar, const char **markUtfPtr); -static TkMenu* MenuPtrForMenuRef(MenuRef menu); -static int ParseAccelerators(const char **accelStringPtr, int *modifierNumPtr, - Tcl_UniChar *modifierUniChars, int *modifierWidth); -static void MenuSelectEvent(TkMenu *menuPtr); -static void ReconfigureIndividualMenu(TkMenu *menuPtr, MenuHandle macMenuHdl, - int base); -static void ReconfigureMacintoshMenu(ClientData clientData); -static void RecursivelyClearActiveMenu(TkMenu *menuPtr); -static void RecursivelyDeleteMenu(TkMenu *menuPtr); -static void RecursivelyInsertMenu(TkMenu *menuPtr); -static void SetDefaultMenubar(void); -static int SetMenuCascade(TkMenu *menuPtr); - -#ifdef USE_TK_MDEF -#define SCREEN_MARGIN 5 -static MacDrawable macMDEFDrawable; - /* Drawable for use by MDEF code */ -static int MDEFScrollFlag = 0; /* Used so that popups don't scroll too soon.*/ -static MenuItemDrawingUPP tkThemeMenuItemDrawingUPP; - /* Points to the UPP for theme Item drawing. */ -static Tcl_Obj *useMDEFVar; - -static void DrawMenuBackground(TkMenu *menuPtr, Rect *menuRectPtr, - Drawable d); -static void MenuDefProc(short message, MenuHandle menu, Rect *menuRectPtr, - Point hitPt, short *whichItem ); -static void HandleMenuHiliteMsg(MenuRef menu, Rect *menuRectPtr, Point hitPt, - SInt16 *whichItem, TkMenu *menuPtr); -static void HandleMenuDrawMsg(MenuRef menu, Rect *menuRectPtr, Point hitPt, - SInt16 *whichItem, TkMenu *menuPtr); -static void HandleMenuFindItemMsg(MenuRef menu, Rect *menuRectPtr, - Point hitPt, SInt16 *whichItem, TkMenu *menuPtr); -static void HandleMenuPopUpMsg(MenuRef menu, Rect *menuRectPtr, Point hitPt, - SInt16 *whichItem, TkMenu *menuPtr); -static void HandleMenuCalcItemMsg(MenuRef menu, Rect *menuRectPtr, Point hitPt, - SInt16 *whichItem, TkMenu *menuPtr); -static void AppearanceEntryDrawWrapper(TkMenuEntry *mePtr, Rect * menuRectPtr, - MenuTrackingData *mtdPtr, Drawable d, Tk_FontMetrics *fmPtr, - Tk_Font tkfont, int erase); -static pascal void ThemeMenuItemDrawingProc(const Rect *inBounds, - SInt16 inDepth, Boolean inIsColorDevice, SInt32 inUserData); -#else /* USE_TK_MDEF */ -# define useMDEF 0 -#endif /* USE_TK_MDEF */ - -#define IS_THEME_MENU_FONT(tkfont) (strcmp(Tk_NameOfFont(tkfont), "menu") == 0) - - -/* - *---------------------------------------------------------------------- - * - * DrawThemeText -- - * - * Wrapper for DrawThemeTextBox API. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ +static void CheckForSpecialMenu(TkMenu *menuPtr); +static NSString *ParseAccelerator(const char *accel, NSUInteger *maskPtr); +static int GenerateMenuSelectEvent(TKMenu *menu, NSMenuItem *menuItem); +static void MenuSelectEvent(TkMenu *menuPtr); +static void RecursivelyClearActiveMenu(TkMenu *menuPtr); +static int ModifierCharWidth(Tk_Font tkfont); + +#pragma mark TKMenu + +@interface TKMenu(TKMenuPrivate) +- (id) initWithTkMenu: (TkMenu *) tkMenu; +- (TkMenu *) tkMenu; +- (int) tkIndexOfItem: (NSMenuItem *) menuItem; +- (void) insertItem: (NSMenuItem *) newItem atTkIndex: (NSInteger) index; +@end + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 +#define TKMenu_NSMenuDelegate <NSMenuDelegate> +#else +#define TKMenu_NSMenuDelegate +#endif +@interface TKMenu(TKMenuDelegate) TKMenu_NSMenuDelegate +@end -static void -DrawThemeText( - Drawable d, - GC gc, - CFStringRef string, - ThemeFontID font, - ThemeDrawState drawState, - const Rect* bounds, - int baseline, - int just) +@implementation TKMenu +- (void) setSpecial: (NSUInteger) special { - TkMacOSXDrawingContext dc; - Rect adjustedBounds; - - /* - * Menu item text drawn with the .Keyboard font (used for - * kThemeMenuItemCmdKeyFont) won't always have the same ascent and - * baseline as text drawn with the regular menu item font, since the - * glyphs in the .Keyboard font may have a different height. Therefore, we - * first determine the baseline of the text and then adjust the bounds - * rect so the baseline aligns with the overall baseline of the menu item. - */ - if (font == kThemeMenuItemCmdKeyFont) { - Point size; - SInt16 cmdKeyBaseline; - - GetThemeTextDimensions(string, font, drawState, false, &size, - &cmdKeyBaseline); - adjustedBounds = *bounds; - OffsetRect(&adjustedBounds, 0, baseline - bounds->top - size.v - - cmdKeyBaseline); - bounds = &adjustedBounds; - } - if (TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { - ChkErr(DrawThemeTextBox, string, font, drawState, false, bounds, just, - dc.context); - TkMacOSXRestoreDrawingContext(&dc); - } + NSAssert(!_tkSpecial, @"Cannot change specialness of a special menu"); + _tkSpecial = special; } - -/* - *---------------------------------------------------------------------- - * - * MeasureThemeText -- - * - * Wrapper for GetThemeTextDimensions API. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -static int -MeasureThemeText( - CFStringRef string, - ThemeFontID font) +- (BOOL) isSpecial: (NSUInteger) special { - Point pt; - - ChkErr(GetThemeTextDimensions, string, font, kThemeStateActive, false, &pt, - NULL); - return pt.h; + return (_tkSpecial == special); } - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXUseID -- - * - * Take the ID out of the available list for new menus. Used by the - * default menu bar's menus so that they do not get created at the tk - * level. See TkMacOSXGetNewMenuID for more information. - * - * Results: - * Returns TCL_OK if the id was not in use. Returns TCL_ERROR if the - * id was in use. - * - * Side effects: - * A hash table entry in the command table is created with a NULL - * value. - * - *---------------------------------------------------------------------- - */ +@end -int -TkMacOSXUseMenuID( - short macID) /* The id to take out of the table */ +@implementation TKMenu(TKMenuPrivate) + +- (id) initWithTitle: (NSString *) aTitle { - Tcl_HashEntry *commandEntryPtr; - int newEntry; - int iMacID = macID; /* Do this to remove compiler warning */ - - TkMenuInit(); - commandEntryPtr = Tcl_CreateHashEntry(&commandTable, (char *) iMacID, - &newEntry); - if (!newEntry) { - return TCL_ERROR; + self = [super initWithTitle:aTitle]; + if (self) { + _tkMenu = NULL; + _tkOffset = 0; + _tkItemCount = 0; + _tkSpecial = 0; + [self setDelegate:self]; } - Tcl_SetHashValue(commandEntryPtr, NULL); - return TCL_OK; + return self; } - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXGetNewMenuID -- - * - * Allocates a new menu id and marks it in use. Each menu on the - * mac must be designated by a unique id, which is a short. In - * addition, some ids are reserved by the system. Since Tk uses - * mostly dynamic menus, we must allocate and free these ids on - * the fly. We use the id as a key into a hash table; if there - * is no hash entry, we know that we can use the id. - * - * Carbon allows a much larger number of menus than the old APIs. - * I believe this is 32768, but am not sure. This code just uses - * 2000 as the upper limit. Unfortunately tk leaks menus when - * cloning, under some circumstances (see bug on sourceforge). - * - * Results: - * Returns TCL_OK if succesful; TCL_ERROR if there are no more - * ids of the appropriate type to allocate. menuIDPtr contains - * the new id if succesful. - * - * Side effects: - * An entry is created for the menu in the command hash table, - * and the hash entry is stored in the appropriate field in the - * menu data structure. - * - *---------------------------------------------------------------------- - */ -int -TkMacOSXGetNewMenuID( - Tcl_Interp *interp, /* Used for error reporting */ - TkMenu *menuPtr, /* The menu we are working with */ - int cascade, /* 0 if we are working with a normal menu; - * 1 if we are working with a cascade */ - short *menuIDPtr) /* The resulting id */ +- (id) initWithTkMenu: (TkMenu *) tkMenu { - int found = 0; - int newEntry; - Tcl_HashEntry *commandEntryPtr = NULL; - short returnID = *menuIDPtr; + NSString *title = [[NSString alloc] initWithUTF8String: + Tk_PathName(tkMenu->tkwin)]; - /* - * The following code relies on shorts and unsigned chars wrapping - * when the highest value is incremented. Also, the values between - * 236 and 255 inclusive are reserved for DA's by the Mac OS. - */ + self = [self initWithTitle:title]; + [title release]; + if (self) { + _tkMenu = tkMenu; + } + return self; +} - if (!cascade) { - short curID = lastMenuID + 1; +- (id) copyWithZone: (NSZone *) zone +{ + TKMenu *copy = [super copyWithZone:zone]; - if (curID == 236) { - curID = 256; - } + NSAssert(_tkMenu == nil, @"Cannot copy tkMenu"); + copy->_tkMenu = _tkMenu; + copy->_tkOffset = _tkOffset; + copy->_tkItemCount = _tkItemCount; + copy->_tkSpecial = _tkSpecial; + return copy; +} - while (curID != lastMenuID) { - int iCurID = curID; - commandEntryPtr = Tcl_CreateHashEntry(&commandTable, - (char *) iCurID, &newEntry); - if (newEntry == 1) { - found = 1; - lastMenuID = returnID = curID; - break; - } - curID++; - if (curID == 236) { - curID = 256; - } - } - } else { - /* - * Cascade ids must be between 0 and 235 only, so they must be - * dealt with separately. - */ +- (TkMenu *) tkMenu +{ + return _tkMenu; +} - short curID = lastCascadeID + 1; +- (int) tkIndexOfItem: (NSMenuItem *) menuItem +{ + return [self indexOfItem:menuItem] - _tkOffset; +} - if (curID == 2000) { - curID = 0; - } +- (void) insertItem: (NSMenuItem *) newItem atTkIndex: (NSInteger) index +{ + [super insertItem:newItem atIndex:index + _tkOffset]; + _tkItemCount++; +} - while (curID != lastCascadeID) { - int iCurID = curID; - commandEntryPtr = Tcl_CreateHashEntry(&commandTable, - (char *) iCurID, &newEntry); - if (newEntry == 1) { - found = 1; - lastCascadeID = returnID = curID; - break; - } - curID++; - if (curID == 2000) { - curID = 0; - } +- (void) insertItem: (NSMenuItem *) newItem atIndex: (NSInteger) index +{ + if (_tkMenu && index >= 0) { + if ((NSUInteger)index <= _tkOffset) { + _tkOffset++; + } else { + NSAssert((NSUInteger)index >= _tkItemCount + _tkOffset, + @"Cannot insert in the middle of Tk menu"); } } - - if (!found) { - Tcl_ResetResult(interp); - Tcl_AppendResult(interp, "No more menus can be allocated.", NULL); - return TCL_ERROR; - } - Tcl_SetHashValue(commandEntryPtr, (char *) menuPtr); - *menuIDPtr = returnID; - return TCL_OK; + [super insertItem:newItem atIndex:index]; } - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXFreeMenuID -- - * - * Marks the id as free. - * - * Results: - * None. - * - * Side effects: - * The hash table entry for the ID is cleared. - * - *---------------------------------------------------------------------- - */ -void -TkMacOSXFreeMenuID( - short menuID) /* The id to free */ +- (void) removeItemAtIndex: (NSInteger) index { - Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&commandTable, - (char*)(intptr_t)menuID); - - if (entryPtr != NULL) { - Tcl_DeleteHashEntry(entryPtr); - } - if (menuID == currentAppleMenuID) { - currentAppleMenuID = 0; - } - if (menuID == currentHelpMenuID) { - currentHelpMenuID = 0; + if (_tkMenu && index >= 0) { + if ((NSUInteger)index < _tkOffset) { + _tkOffset--; + } else if ((NSUInteger)index < _tkItemCount + _tkOffset) { + _tkItemCount--; + } } + [super removeItemAtIndex:index]; } - -/* - *---------------------------------------------------------------------- - * - * MenuPtrForMenuRef -- - * - * Returns a pointer to the TkMenu corresponding to a given - * Carbon MenuRef. - * - * Results: - * Returns a pointer to a TkMenu or NULL. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -TkMenu* -MenuPtrForMenuRef( - MenuRef menu) +- (NSMenuItem *) newTkMenuItem: (TkMenuEntry *) mePtr { - TkMenu *menuPtr = NULL; - MenuID menuID = GetMenuID(menu); - Tcl_HashEntry *commandEntryPtr = Tcl_FindHashEntry(&commandTable, - (char*)(intptr_t)menuID); + NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"" + action:@selector(tkMenuItemInvoke:) keyEquivalent:@""]; - if (commandEntryPtr) { - menuPtr = (TkMenu *) Tcl_GetHashValue(commandEntryPtr); - } - return menuPtr; + [menuItem setTarget:self]; + [menuItem setTag:(NSInteger)mePtr]; + return menuItem; } - -/* - *---------------------------------------------------------------------- - * - * GetParentMenuEntry -- - * - * Returns a pointer to the parent's TkMenuEntry of a given TkMenu. - * - * Results: - * Returns a pointer to a TkMenuEntry or NULL. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -TkMenuEntry* -GetParentMenuEntry( - TkMenu *menuPtr) -{ - TkMenuEntry *cascadeEntryPtr; +@end - for (cascadeEntryPtr = menuPtr->menuRefPtr->parentEntryPtr; - cascadeEntryPtr != NULL; - cascadeEntryPtr = cascadeEntryPtr->nextCascadePtr) { - const char *name = (cascadeEntryPtr->namePtr == NULL) ? "" - : Tcl_GetString(cascadeEntryPtr->namePtr); +@implementation TKMenu(TKMenuActions) +// target methods - if (strcmp(name, Tk_PathName(menuPtr->tkwin)) == 0) { - break; - } - } - return cascadeEntryPtr; +- (BOOL) validateMenuItem: (NSMenuItem *) menuItem +{ + return [menuItem isEnabled]; } - -/* - *---------------------------------------------------------------------- - * - * TkpNewMenu -- - * - * Gets a new blank menu. Only the platform specific options are filled - * in. - * - * Results: - * Returns a standard TCL error. - * - * Side effects: - * Allocates a Macintosh menu handle and puts in the platformData - * field of the menuPtr. - * - *---------------------------------------------------------------------- - */ -int -TkpNewMenu( - TkMenu *menuPtr) /* The common structure we are making the - * platform structure for. */ +// Workaround for bug 3572016; leaves menu items enabled during modal dialog. +- (BOOL)worksWhenModal { - short menuID; - MenuRef macMenuHdl; -#ifdef USE_TK_MDEF - MenuDefSpec menuDefSpec; - Tcl_Obj *useMDEFObjPtr; - int useMDEF = 1; -#endif - int error = TCL_OK; - OSStatus err; - CFStringRef cfStr; - - error = TkMacOSXGetNewMenuID(menuPtr->interp, menuPtr, 0, &menuID); - if (error != TCL_OK) { - return error; - } - err = ChkErr(CreateNewMenu, menuID, kMenuAttrDoNotUseUserCommandKeys, - &macMenuHdl); - if (err != noErr) { - Tcl_AppendResult(menuPtr->interp, "CreateNewMenu failed.", NULL); - return TCL_ERROR; - } - cfStr = CFStringCreateWithCString(NULL, Tk_PathName(menuPtr->tkwin), - kCFStringEncodingUTF8); - if (!cfStr) { - Tcl_AppendResult(menuPtr->interp, "CFStringCreateWithCString failed.", - NULL); - return TCL_ERROR; - } - err = ChkErr(SetMenuTitleWithCFString, macMenuHdl, cfStr); - CFRelease(cfStr); - if (err != noErr) { - Tcl_AppendResult(menuPtr->interp, "SetMenuTitleWithCFString failed.", - NULL); - return TCL_ERROR; - } - - menuPtr->platformData = (TkMenuPlatformData) ckalloc(sizeof(MacMenu)); - ((MacMenu *) menuPtr->platformData)->menuHdl = macMenuHdl; + return YES; +} -#ifdef USE_TK_MDEF +- (void) tkMenuItemInvoke: (id) sender +{ /* - * Check whether we want to use the custom mdef or not. For now - * the default is to use it unless the variable is explicitly - * set to no. + * With the delegate matching key equivalents, when a menu action is sent + * in response to a key equivalent, sender is the whole menu and not the + * the specific menu item, use this to ignore key equivalents for our + * menus (as Tk handles them directly via bindings). */ - useMDEFObjPtr = Tcl_ObjGetVar2(menuPtr->interp, useMDEFVar, NULL, - TCL_GLOBAL_ONLY); - if (useMDEFObjPtr == NULL || Tcl_GetBooleanFromObj(NULL, useMDEFObjPtr, - &useMDEF) == TCL_ERROR || useMDEF) { - menuDefSpec.defType = kMenuDefProcPtr; - menuDefSpec.u.defProc = MenuDefProc; - ChkErr(SetMenuDefinition, macMenuHdl, &menuDefSpec); - } - ((MacMenu *) menuPtr->platformData)->useMDEF = useMDEF; -#endif /* USE_TK_MDEF */ - - if ((currentMenuBarInterp == menuPtr->interp) - && (currentMenuBarName != NULL)) { - Tk_Window parentWin = Tk_Parent(menuPtr->tkwin); - - if (strcmp(currentMenuBarName, Tk_PathName(parentWin)) == 0) { - if ((strcmp(Tk_PathName(menuPtr->tkwin) - + strlen(Tk_PathName(parentWin)), ".apple") == 0) - || (strcmp(Tk_PathName(menuPtr->tkwin) - + strlen(Tk_PathName(parentWin)), ".help") == 0)) { - if (!(menuBarFlags & MENUBAR_REDRAW_PENDING)) { - Tcl_DoWhenIdle(DrawMenuBarWhenIdle, NULL); - menuBarFlags |= MENUBAR_REDRAW_PENDING; - } - } - } - } - - menuPtr->menuFlags |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, (ClientData) menuPtr); - return TCL_OK; -} - -/* - *---------------------------------------------------------------------- - * - * TkpDestroyMenu -- - * - * Destroys platform-specific menu structures. - * - * Results: - * None. - * - * Side effects: - * All platform-specific allocations are freed up. - * - *---------------------------------------------------------------------- - */ + if ([sender isKindOfClass:[NSMenuItem class]]) { + NSMenuItem *menuItem = (NSMenuItem *)sender; + TkMenu *menuPtr = (TkMenu *)_tkMenu; + TkMenuEntry *mePtr = (TkMenuEntry *)[menuItem tag]; -void -TkpDestroyMenu( - TkMenu *menuPtr) /* The common menu structure */ -{ - MenuRef macMenuHdl = ((MacMenu *) menuPtr->platformData)->menuHdl; + if (menuPtr && mePtr) { + Tcl_Interp *interp = menuPtr->interp; + /*Add time for errors to fire if necessary. This is sub-optimal but avoids issues with Tcl/Cocoa event loop integration.*/ + Tcl_Sleep(100); - if (menuPtr->menuFlags & MENU_RECONFIGURE_PENDING) { - Tcl_CancelIdleCall(ReconfigureMacintoshMenu, (ClientData) menuPtr); - menuPtr->menuFlags &= ~MENU_RECONFIGURE_PENDING; - } - if (GetMenuID(macMenuHdl) == currentHelpMenuID) { - MenuRef helpMenuHdl; - MenuItemIndex helpIndex; + Tcl_Preserve(interp); + Tcl_Preserve(menuPtr); - if ((HMGetHelpMenu(&helpMenuHdl,&helpIndex) == noErr) - && (helpMenuHdl != NULL)) { - int i, count = CountMenuItems(helpMenuHdl); + int result = TkInvokeMenu(interp, menuPtr, mePtr->index); - for (i = helpIndex; i <= count; i++) { - DeleteMenuItem(helpMenuHdl, helpIndex); + if (result != TCL_OK && result != TCL_CONTINUE && + result != TCL_BREAK) { + Tcl_AddErrorInfo(interp, "\n (menu invoke)"); + Tcl_BackgroundError(interp); } + Tcl_Release(menuPtr); + Tcl_Release(interp); } - currentHelpMenuID = 0; - } - if (menuPtr->platformData != NULL) { - MenuID menuID = GetMenuID(macMenuHdl); - - DeleteMenu(menuID); - TkMacOSXFreeMenuID(menuID); - DisposeMenu(macMenuHdl); - ckfree((char *) menuPtr->platformData); - menuPtr->platformData = NULL; } } - -/* - *---------------------------------------------------------------------- - * - * SetMenuCascade -- - * - * Does any cleanup to change a menu from a normal to a cascade. - * - * Results: - * Standard Tcl error. - * - * Side effects: - * The mac menu id is reset. - * - *---------------------------------------------------------------------- - */ +@end -int -SetMenuCascade( - TkMenu* menuPtr) /* The menu we are setting up to be a - * cascade. */ -{ - MenuHandle macMenuHdl = ((MacMenu *) menuPtr->platformData)->menuHdl; - MenuID newMenuID, menuID = GetMenuID(macMenuHdl); - int error = TCL_OK; - - if (menuID >= 256) { - error = TkMacOSXGetNewMenuID(menuPtr->interp, menuPtr, 1, &newMenuID); - if (error == TCL_OK) { - TkMacOSXFreeMenuID(menuID); - SetMenuID(macMenuHdl,newMenuID); - } - } - return error; -} - -/* - *---------------------------------------------------------------------- - * - * TkpDestroyMenuEntry -- - * - * Cleans up platform-specific menu entry items. - * - * Results: - * None - * - * Side effects: - * All platform-specific allocations are freed up. - * - *---------------------------------------------------------------------- - */ +@implementation TKMenu(TKMenuDelegate) +#define keyEquivModifiersMatch(km, m) (( \ + ((km) & NSCommandKeyMask) != ((m) & NSCommandKeyMask) || \ + ((km) & NSAlternateKeyMask) != ((m) & NSAlternateKeyMask) || \ + ((km) & NSControlKeyMask) != ((m) & NSControlKeyMask) || \ + (((km) & NSShiftKeyMask) != ((m) & NSShiftKeyMask) && \ + ((m) & NSFunctionKeyMask))) ? NO : YES) -void -TkpDestroyMenuEntry( - TkMenuEntry *mePtr) /* The common structure for the menu entry. */ +- (BOOL) menuHasKeyEquivalent: (NSMenu *) menu forEvent: (NSEvent *) event + target: (id *) target action: (SEL *) action { - TkMenu *menuPtr = mePtr->menuPtr; + /*Use lowercaseString to keep "shift" from firing twice if bound to different procedure.*/ + NSString *key = [[event charactersIgnoringModifiers] lowercaseString]; + NSUInteger modifiers = [event modifierFlags] & + NSDeviceIndependentModifierFlagsMask; - ckfree((char *) mePtr->platformEntryData); - if ((menuPtr->platformData != NULL) - && !(menuPtr->menuFlags & MENU_RECONFIGURE_PENDING)) { - menuPtr->menuFlags |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, (ClientData) menuPtr); + if (modifiers == (NSCommandKeyMask | NSShiftKeyMask) && + [key compare:@"?"] == NSOrderedSame) { + return NO; } -} - -/* - *---------------------------------------------------------------------- - * - * GetEntryText -- - * - * Given a menu entry, gives back the text that should go in it. - * Separators should be done by the caller, as they have to be - * handled specially. This is primarily used to do a substitution - * between "..." and the ellipsis character which looks nicer. - * - * Results: - * itemText points to the new text for the item. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -void -GetEntryText( - TkMenuEntry *mePtr, /* A pointer to the menu entry. */ - Tcl_DString *dStringPtr) /* The DString to put the text into. This - * will be initialized by this routine. */ -{ -#ifdef USE_TK_MDEF - const int useMDEF = ((MacMenu *) mePtr->menuPtr->platformData)->useMDEF; -#endif - int noLabel = (mePtr->labelPtr == NULL || mePtr->labelLength == 0); - - Tcl_DStringInit(dStringPtr); - if (mePtr->type == TEAROFF_ENTRY && (useMDEF || noLabel)) { - Tcl_DStringAppend(dStringPtr, "(Tear-off)", -1); - } else if (mePtr->imagePtr != NULL && (useMDEF || noLabel) && - mePtr->compound == COMPOUND_NONE) { - Tcl_DStringAppend(dStringPtr, "(Image)", -1); - } else if (mePtr->bitmapPtr != NULL && (useMDEF || noLabel) && - mePtr->compound == COMPOUND_NONE) { - Tcl_DStringAppend(dStringPtr, "(Pixmap)", -1); - } else if (noLabel) { - /* - * The Mac menu manager does not like null strings. - */ - - Tcl_DStringAppend(dStringPtr, " ", -1); - } else { - int length; - char *text = Tcl_GetStringFromObj(mePtr->labelPtr, &length); - char *dStringText; - int i; - - for (i = 0; *text; text++, i++) { - if ((*text == '.') && (*(text+1) == '.') && (*(text+2) == '.')) { - Tcl_DStringAppend(dStringPtr, menuSymbols[ELLIPSIS_SYMBOL].utf, - menuSymbols[ELLIPSIS_SYMBOL].utfLen); - i += menuSymbols[ELLIPSIS_SYMBOL].utfLen - 1; - text += 2; - } else { - Tcl_DStringSetLength(dStringPtr, - Tcl_DStringLength(dStringPtr) + 1); - dStringText = Tcl_DStringValue(dStringPtr); - dStringText[i] = *text; + // For command key, take input manager's word so things + // like dvorak / qwerty layout work. + if (([event modifierFlags] & NSCommandKeyMask) == NSCommandKeyMask) { + key = [event characters]; + } + + NSArray *itemArray = [self itemArray]; + + for (NSMenuItem *item in itemArray) { + if ([item isEnabled] && [[item keyEquivalent] compare:key] == + NSOrderedSame) { + NSUInteger keyEquivModifiers = [item keyEquivalentModifierMask]; + + if (keyEquivModifiersMatch(keyEquivModifiers, modifiers)) { + *target = [item target]; + *action = [item action]; + return YES; } } } + return NO; } - -/* - *---------------------------------------------------------------------- - * - * FindMarkCharacter -- - * - * Finds the Macintosh mark character based on the font of the - * item. We calculate a good mark character based on the font - * that this item is rendered in. - * - * Results: - * Mark char. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -char -FindMarkCharacter( - TkMenuEntry *mePtr) /* The entry we are finding the character - * for. */ +- (void) menuWillOpen: (NSMenu *) menu { - static const char markChars[] = {kCheckCharCode, kDiamondCharCode, - kBulletCharCode, '-', kCheckCharCode}; - const char *markChar = markChars; - int i = sizeof(markChars); - Tk_Font tkfont; - - tkfont = Tk_GetFontFromObj(mePtr->menuPtr->tkwin, - (mePtr->fontPtr == NULL) ? mePtr->menuPtr->fontPtr - : mePtr->fontPtr); - - while (--i) { - if (!TkMacOSXIsCharacterMissing(tkfont, *markChar)) { - break; - } - markChar++; + if (_tkMenu) { + //RecursivelyClearActiveMenu(_tkMenu); + GenerateMenuSelectEvent((TKMenu *)[self supermenu], + [self itemInSupermenu]); } - return *markChar; } - -/* - *---------------------------------------------------------------------- - * - * GetUtfMarkCharacter -- - * - * Get the utf8 string for the given mark character, taking into - * account the special menu font char codes. - * - * Results: - * Length of returned utf8 string. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -int -GetUtfMarkCharacter( - char markChar, - const char **markUtfPtr) +- (void) menuDidClose: (NSMenu *) menu { - const MenuSymbol *ms = menuSymbols; - int len = 0; - - while (ms->unicode) { - if (ms->charCode && ms->charCode == markChar) { - *markUtfPtr = ms->utf; - len = ms->utfLen; - break; - } - ms++; + if (_tkMenu) { + RecursivelyClearActiveMenu(_tkMenu); } - if (!len) { - static char markUtf[TCL_UTF_MAX + 1]; - - Tcl_ExternalToUtf(NULL, TkMacOSXCarbonEncoding, &markChar, 1, 0, NULL, - markUtf, TCL_UTF_MAX + 1, NULL, &len, NULL); - *markUtfPtr = markUtf; - } - return len; } - -/* - *---------------------------------------------------------------------- - * - * ParseAccelerators -- - * - * Parse menu accelerator string. - * - * Results: - * Accelerator flags. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -int -ParseAccelerators( - const char **accelStringPtr, - int *modifierNumPtr, - Tcl_UniChar *modifierUniChars, - int *modifierWidth) +- (void) menu: (NSMenu *) menu willHighlightItem: (NSMenuItem *) item { - struct Modif { - const char *name; - const size_t len; - const int flag, symbol; - }; -#define MODIF(n, f) { #n, sizeof(#n)-1, ENTRY_##f##_ACCEL, f##_SYMBOL } - static const struct Modif modifs[] = { - MODIF(Control, CONTROL), - MODIF(Ctrl, CONTROL), - MODIF(Option, OPTION), - MODIF(Opt, OPTION), - MODIF(Alt, OPTION), - MODIF(Shift, SHIFT), - MODIF(Command, COMMAND), - MODIF(Cmd, COMMAND), - MODIF(Meta, COMMAND), - { NULL, 0, 0, 0} - }; -#undef MODIF - const char *accelString = *accelStringPtr; - int flags = 0, num = 0, seen = 0, width = 0; - const struct Modif *m; - - while (1) { - m = modifs; - while (m->name) { - int l = m->len; - - if (!strncasecmp(accelString, m->name, l) && - (accelString[l] == '-' || accelString[l] == '+')) { - flags |= m->flag; - accelString += l+1; - break; - } - m++; - } - if (!m->name || !*accelString) { - break; - } - } - m = modifs; - while (m->name && num < MODIFIER_NUM) { - if (flags & m->flag && !(seen & m->flag)) { - modifierUniChars[num++] = menuSymbols[m->symbol].unicode; - width += menuSymbols[m->symbol].width; - seen |= m->flag; - } - m++; + if (_tkMenu) { + GenerateMenuSelectEvent(self, item); } - *accelStringPtr = accelString; - *modifierNumPtr = num; - *modifierWidth = width; - return flags; } - -/* - *---------------------------------------------------------------------- - * - * TkpConfigureMenuEntry -- - * - * Processes configurations for menu entries. - * - * Results: - * Returns standard TCL result. If TCL_ERROR is returned, then - * the interp's result contains an error message. - * - * Side effects: - * Configuration information get set for mePtr; old resources - * get freed, if any need it. - * - *---------------------------------------------------------------------- - */ -int -TkpConfigureMenuEntry( - TkMenuEntry *mePtr) /* Information about menu entry; may - * or may not already have values for - * some fields. */ +- (void) menuNeedsUpdate: (NSMenu *) menu { - TkMenu *menuPtr = mePtr->menuPtr; - EntryGeometry *geometryPtr = (EntryGeometry *) mePtr->platformEntryData; - - /* - * Cascade menus have to have menu IDs of less than 256. So - * we need to change the child menu if this has been configured - * for a cascade item. - */ - - if (mePtr->type == CASCADE_ENTRY) { - if ((mePtr->childMenuRefPtr != NULL) - && (mePtr->childMenuRefPtr->menuPtr != NULL)) { - MenuHandle childMenuHdl = ((MacMenu *) mePtr - ->childMenuRefPtr->menuPtr->platformData)->menuHdl; + TkMenu *menuPtr = (TkMenu *) _tkMenu; - if (childMenuHdl != NULL) { - int error = SetMenuCascade(mePtr->childMenuRefPtr->menuPtr); + if (menuPtr) { + Tcl_Interp *interp = menuPtr->interp; - if (error != TCL_OK) { - return error; - } + Tcl_Preserve(interp); + Tcl_Preserve(menuPtr); - if (menuPtr->menuType == MENUBAR) { - CFStringRef cfStr = CFStringCreateWithCString(NULL, - (!(mePtr->labelPtr) ? "" : - Tcl_GetString(mePtr->labelPtr)), - kCFStringEncodingUTF8); + int result = TkPostCommand(_tkMenu); - if (cfStr) { - SetMenuTitleWithCFString(childMenuHdl, cfStr); - CFRelease(cfStr); - } - } - } + if (result!=TCL_OK && result!=TCL_CONTINUE && result!=TCL_BREAK) { + Tcl_AddErrorInfo(interp, "\n (menu preprocess)"); + Tcl_BackgroundError(interp); } + Tcl_Release(menuPtr); + Tcl_Release(interp); } +} +@end - /* - * We need to parse the accelerator string. If it has the strings - * for Command, Control, Shift or Option, we need to flag it - * so we can draw the symbols for it. We also need to precalcuate - * the position of the first real character we are drawing. - */ +#pragma mark TKApplication(TKMenu) - if (0 == mePtr->accelLength) { - geometryPtr->accelTextStart = -1; - } else { - const char *accelString = (mePtr->accelPtr == NULL) ? "" - : Tcl_GetString(mePtr->accelPtr); - const char *accelStart = accelString; - - mePtr->entryFlags &= ~ENTRY_ACCEL_MASK; - mePtr->entryFlags |= ParseAccelerators(&accelString, - &geometryPtr->modifierNum, geometryPtr->modifierUniChars, - &geometryPtr->modifierWidth); - geometryPtr->accelTextStart = (ptrdiff_t)(accelString - accelStart); - } +@interface NSApplication(TKMenu) +- (void) setAppleMenu: (NSMenu *) menu; +@end - if (!(menuPtr->menuFlags & MENU_RECONFIGURE_PENDING)) { - menuPtr->menuFlags |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, (ClientData) menuPtr); - } +@implementation TKApplication(TKMenu) - return TCL_OK; +- (void) menuBeginTracking: (NSNotification *) notification +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + //TkMacOSXClearMenubarActive(); + //TkMacOSXPreprocessMenu(); } - -/* - *---------------------------------------------------------------------- - * - * ReconfigureIndividualMenu -- - * - * This routine redoes the guts of the menu. It works from - * a base item and offset, so that a regular menu will - * just have all of its items added, but the help menu will - * have all of its items appended after the apple-defined - * items. - * - * Results: - * None. - * - * Side effects: - * The Macintosh menu handle is updated - * - *---------------------------------------------------------------------- - */ -void -ReconfigureIndividualMenu( - TkMenu *menuPtr, /* The menu we are affecting. */ - MenuHandle macMenuHdl, /* The macintosh menu we are affecting. - * Will not necessarily be - * menuPtr->platformData because this could - * be the help menu. */ - int base) /* The last index that we do not want - * touched. 0 for normal menus; - * # of system help menu items - * for help menus. */ +- (void) menuEndTracking: (NSNotification *) notification { - int count; - int index; - TkMenuEntry *mePtr; - int parentDisabled = 0; - -#ifdef TK_MAC_DEBUG_MENUS - /* - * Carbon-internal menu debugging (c.f. Technote 2124) - */ - - TkMacOSXInitNamedDebugSymbol(HIToolbox, void, DebugPrintMenu, - MenuRef menu); - if (DebugPrintMenu) { - DebugPrintMenu(macMenuHdl); - } +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); #endif - - mePtr = GetParentMenuEntry(menuPtr); - if (mePtr && mePtr->state == ENTRY_DISABLED) { - parentDisabled = 1; + if (!inPostMenu) { + TkMacOSXClearMenubarActive(); } +} - /* - * First, we get rid of all of the old items. - */ - - count = CountMenuItems(macMenuHdl); - for (index = base; index < count; index++) { - DeleteMenuItem(macMenuHdl, base + 1); +- (void) tkSetMainMenu: (TKMenu *) menu +{ + if (gNoTkMenus) { + return; } - count = menuPtr->numEntries; + TKMenu *applicationMenu = nil; - for (index = 1; index <= count; index++) { - mePtr = menuPtr->entries[index - 1]; + if (menu) { + NSMenuItem *applicationMenuItem = [menu numberOfItems] ? + [menu itemAtIndex:0] : nil; - /* - * We have to do separators separately because SetMenuItemText - * does not parse meta-characters. - */ + if (![menu isSpecial:tkMainMenu]) { + TkMenuEntry *mePtr = (TkMenuEntry *)[applicationMenuItem tag]; - if (mePtr->type == SEPARATOR_ENTRY) { - AppendMenuItemTextWithCFString(macMenuHdl, NULL, - kMenuItemAttrSeparator | kMenuItemAttrDisabled, 0, NULL); - } else { - Tcl_DString itemTextDString; - CFStringRef cfStr; - - GetEntryText(mePtr, &itemTextDString); - cfStr = CFStringCreateWithCString(NULL, - Tcl_DStringValue(&itemTextDString), kCFStringEncodingUTF8); - if (cfStr) { - AppendMenuItemTextWithCFString(macMenuHdl, cfStr, 0, 0, NULL); - CFRelease(cfStr); - } else { - AppendMenuItemTextWithCFString(macMenuHdl, CFSTR ("<Error>"), - 0, 0, NULL); + if (!mePtr || !(mePtr->entryFlags & ENTRY_APPLE_MENU)) { + applicationMenuItem = [NSMenuItem itemWithSubmenu: + [[_defaultApplicationMenu copy] autorelease]]; + [menu insertItem:applicationMenuItem atIndex:0]; } - Tcl_DStringFree(&itemTextDString); - - /* - * Set enabling and disabling correctly. - */ - - if (parentDisabled || (mePtr->state == ENTRY_DISABLED)) { - DisableMenuItem(macMenuHdl, base + index); - } else { - EnableMenuItem(macMenuHdl, base + index); + [menu setSpecial:tkMainMenu]; + } + applicationMenu = (TKMenu *)[applicationMenuItem submenu]; + if (![applicationMenu isSpecial:tkApplicationMenu]) { + for (NSMenuItem *item in _defaultApplicationMenuItems) { + [applicationMenu addItem:[[item copy] autorelease]]; } + [applicationMenu setSpecial:tkApplicationMenu]; + } - /* - * Set the check mark for check entries and radio entries. - */ + NSArray *itemArray = [menu itemArray]; - SetItemMark(macMenuHdl, base + index, 0); - if ((mePtr->type == CHECK_BUTTON_ENTRY) - || (mePtr->type == RADIO_BUTTON_ENTRY)) { - CheckMenuItem(macMenuHdl, base + index, (mePtr->entryFlags - & ENTRY_SELECTED) && mePtr->indicatorOn); - if (mePtr->indicatorOn - && (mePtr->entryFlags & ENTRY_SELECTED)) { - SetItemMark(macMenuHdl, base + index, - FindMarkCharacter(mePtr)); - } - } + for (NSMenuItem *item in itemArray) { + TkMenuEntry *mePtr = (TkMenuEntry *)[item tag]; + TKMenu *submenu = (TKMenu *)[item submenu]; - if (mePtr->type == CASCADE_ENTRY) { - if ((mePtr->childMenuRefPtr != NULL) - && (mePtr->childMenuRefPtr->menuPtr != NULL)) { - MenuHandle childMenuHdl = - ((MacMenu *) mePtr->childMenuRefPtr - ->menuPtr->platformData)->menuHdl; - - if (childMenuHdl != NULL) { - ChkErr(SetMenuItemHierarchicalID, macMenuHdl, - base + index, GetMenuID(childMenuHdl)); - } - /* - * If we changed the highligthing of this menu, its - * children all have to be reconfigured so that - * their state will be reflected in the menubar. - */ - - if (!(mePtr->childMenuRefPtr->menuPtr->menuFlags - & MENU_RECONFIGURE_PENDING)) { - mePtr->childMenuRefPtr->menuPtr->menuFlags - |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, - (ClientData) mePtr->childMenuRefPtr->menuPtr); - } - } - } + if (mePtr && submenu) { + if ((mePtr->entryFlags & ENTRY_WINDOWS_MENU) && + ![submenu isSpecial:tkWindowsMenu]) { + NSInteger index = 0; - if ((mePtr->type != CASCADE_ENTRY) && (mePtr->accelPtr != NULL)) { - int accelLen, modifiers = 0, hasCmd = 0; - EntryGeometry *geometryPtr = - (EntryGeometry*)mePtr->platformEntryData; - int offset = geometryPtr->accelTextStart; - char *accel = Tcl_GetStringFromObj(mePtr->accelPtr, &accelLen); - - accelLen -= offset; - accel += offset; - if (mePtr->entryFlags & ENTRY_OPTION_ACCEL) { - modifiers |= kMenuOptionModifier; - } - if (mePtr->entryFlags & ENTRY_SHIFT_ACCEL) { - modifiers |= kMenuShiftModifier; - } - if (mePtr->entryFlags & ENTRY_CONTROL_ACCEL) { - modifiers |= kMenuControlModifier; - } - if (mePtr->entryFlags & ENTRY_COMMAND_ACCEL) { - hasCmd = 1; - } - if (accelLen == 1) { - if (hasCmd || (modifiers != 0 && modifiers != - kMenuShiftModifier)) { - SetItemCmd(macMenuHdl, base + index, accel[0]); - if (!hasCmd) { - modifiers |= kMenuNoCommandModifier; - } - } - } else { - /* - * Convert from accelerator names to Carbon menu glyphs. - */ - struct Glyph { - const char *name; - const size_t len; - const char glyph; - }; -#define GLYPH(n, g) { #n, sizeof(#n)-1, kMenu##g##Glyph } - static const struct Glyph glyphs[] = { - GLYPH(PageUp, PageUp), - GLYPH(PageDown, PageDown), - GLYPH(Left, LeftArrow), - GLYPH(Right, RightArrow), - GLYPH(Up, UpArrow), - GLYPH(Down, DownArrow), - GLYPH(Escape, Escape), - GLYPH(Clear, Clear), - GLYPH(Enter, Enter), - GLYPH(Backspace,DeleteLeft), - GLYPH(Space, Space), - GLYPH(Tab, TabRight), - GLYPH(Delete, DeleteRight), - GLYPH(Home, NorthwestArrow), - GLYPH(End, SoutheastArrow), - GLYPH(Return, Return), - GLYPH(Help, Help), - GLYPH(Power, Power), - { NULL, 0, 0} - }; -#undef GLYPH - const struct Glyph *g = glyphs; - char glyph = 0; - - if (accel[0] == 'F' && accelLen < 4 && - (accel[1] > '0' && accel[1] <= '9')) { - int fkey = accel[1] - '0'; - - if (accelLen == 3) { - if (accel[2] >= '0' && accel[2] <= '9') { - fkey = 10 * fkey + (accel[2] - '0'); - } else { - fkey = 0; - } - } - if (fkey >= 1 && fkey <= 12) { - glyph = kMenuF1Glyph + fkey - 1; - } else if (fkey >= 13 && fkey <= 15) { - glyph = kMenuF13Glyph + fkey - 13; - } - } else while (g->name) { - if (accel[0] == g->name[0] && - (size_t)accelLen == g->len && - !strncasecmp(accel, g->name, g->len)) { - glyph = g->glyph; - break; - } - g++; + for (NSMenuItem *i in _defaultWindowsMenuItems) { + [submenu insertItem:[[i copy] autorelease] atIndex: + index++]; } - if (glyph) { - ChkErr(SetMenuItemKeyGlyph, macMenuHdl, base + index, - glyph); - if (!hasCmd) { - modifiers |= kMenuNoCommandModifier; - } - geometryPtr->accelGlyph = glyph; + [self setWindowsMenu:submenu]; + [submenu setSpecial:tkWindowsMenu]; + } else if ((mePtr->entryFlags & ENTRY_HELP_MENU) && + ![submenu isSpecial:tkHelpMenu]) { + NSInteger index = 0; + + for (NSMenuItem *i in _defaultHelpMenuItems) { + [submenu insertItem:[[i copy] autorelease] atIndex: + index++]; } + [submenu setSpecial:tkHelpMenu]; } - ChkErr(SetMenuItemModifiers, macMenuHdl, base + index, - modifiers); } } + } else { + menu = _defaultMainMenu; + applicationMenu = _defaultApplicationMenu; } -} - -/* - *---------------------------------------------------------------------- - * - * ReconfigureMacintoshMenu -- - * - * Rebuilds the Macintosh MenuHandle items from the menu. Called - * usually as an idle handler, but can be called synchronously - * if the menu is about to be posted. - * - * Results: - * None. - * - * Side effects: - * Configuration information get set for mePtr; old resources - * get freed, if any need it. - * - *---------------------------------------------------------------------- - */ - -void -ReconfigureMacintoshMenu( - ClientData clientData) /* Information about menu entry; may - * or may not already have values for - * some fields. */ -{ - TkMenu *menuPtr = (TkMenu *) clientData; - MenuHandle macMenuHdl = ((MacMenu *) menuPtr->platformData)->menuHdl; - MenuHandle helpMenuHdl = NULL; - - menuPtr->menuFlags &= ~MENU_RECONFIGURE_PENDING; - - if (NULL == macMenuHdl) { - return; - } - - ReconfigureIndividualMenu(menuPtr, macMenuHdl, 0); - if (GetMenuID(macMenuHdl) == currentHelpMenuID) { - MenuItemIndex helpIndex; - HMGetHelpMenu(&helpMenuHdl,&helpIndex); - if (helpMenuHdl != NULL) { - ReconfigureIndividualMenu(menuPtr, helpMenuHdl, helpIndex - 1); - } - } + NSMenuItem *servicesMenuItem = + [applicationMenu itemWithTitle:@"Services"]; - if (menuPtr->menuType == MENUBAR) { - if (!(menuBarFlags & MENUBAR_REDRAW_PENDING)) { - Tcl_DoWhenIdle(DrawMenuBarWhenIdle, NULL); - menuBarFlags |= MENUBAR_REDRAW_PENDING; - } + if (servicesMenuItem && [servicesMenuItem submenu] != _servicesMenu) { + [[_servicesMenu itemInSupermenu] setSubmenu:nil]; + [servicesMenuItem setSubmenu:_servicesMenu]; } + [self setAppleMenu:applicationMenu]; + [self setMainMenu:menu]; } +@end + +#pragma mark - /* *---------------------------------------------------------------------- * - * CompleteIdlers -- + * TkpNewMenu -- * - * Completes all idle handling so that the menus are in sync when - * the user invokes them with the mouse. + * Gets a new blank menu. Only the platform specific options are filled + * in. * * Results: - * None. + * Returns a standard Tcl error. * * Side effects: - * The Macintosh menu handles are flushed out. + * Allocates a NSMenu and puts it into the platformData field of the + * menuPtr. * *---------------------------------------------------------------------- */ -void -CompleteIdlers( - TkMenu *menuPtr) /* The menu we are completing. */ +int +TkpNewMenu( + TkMenu *menuPtr) /* The common structure we are making the + * platform structure for. */ { - int i; - - if (menuPtr->menuFlags & MENU_RECONFIGURE_PENDING) { - Tcl_CancelIdleCall(ReconfigureMacintoshMenu, (ClientData) menuPtr); - ReconfigureMacintoshMenu((ClientData) menuPtr); - } - - for (i = 0; i < menuPtr->numEntries; i++) { - if ((menuPtr->entries[i]->type == CASCADE_ENTRY) && - (menuPtr->entries[i]->childMenuRefPtr != NULL) && - (menuPtr->entries[i]->childMenuRefPtr->menuPtr != NULL)) { - CompleteIdlers(menuPtr->entries[i]->childMenuRefPtr->menuPtr); - } - } + TKMenu *menu = [[TKMenu alloc] initWithTkMenu:menuPtr]; + menuPtr->platformData = (TkMenuPlatformData) + TkMacOSXMakeUncollectable(menu); + CheckForSpecialMenu(menuPtr); + return TCL_OK; } /* *---------------------------------------------------------------------- * - * TkpPostMenu -- + * TkpDestroyMenu -- * - * Posts a menu on the screen + * Destroys platform-specific menu structures. * * Results: * None. * * Side effects: - * The menu is posted and handled. + * All platform-specific allocations are freed up. * *---------------------------------------------------------------------- */ -int -TkpPostMenu( - Tcl_Interp *interp, /* The interpreter this menu lives in */ - TkMenu *menuPtr, /* The menu we are posting */ - int x, /* The global x-coordinate of the top, left- - * hand corner of where the menu is supposed - * to be posted. */ - int y) /* The global y-coordinate */ +void +TkpDestroyMenu( + TkMenu *menuPtr) /* The common menu structure */ { - MenuHandle macMenuHdl = ((MacMenu *) menuPtr->platformData)->menuHdl; - long popUpResult; - int result; - - if (inPostMenu > 0) { - Tcl_AppendResult(interp, - "Cannot call post menu while already posting menu", NULL); - result = TCL_ERROR; - } else { - short menuID; - Window window; - int oldWidth = menuPtr->totalWidth; - - inPostMenu++; - result = TkPreprocessMenu(menuPtr); - /* - * The post commands could have deleted the menu, which means - * we are dead and should go away. - */ - - if (result != TCL_OK || !menuPtr->tkwin) { - goto endPostMenu; - } - - CompleteIdlers(menuPtr); - if (menuBarFlags & MENUBAR_REDRAW_PENDING) { - Tcl_CancelIdleCall(DrawMenuBarWhenIdle, NULL); - DrawMenuBarWhenIdle(NULL); - } - RecursivelyInsertMenu(menuPtr); - - TkMacOSXTrackingLoop(1); - popUpResult = PopUpMenuSelect(macMenuHdl, y, x, menuPtr->active); - TkMacOSXTrackingLoop(0); - menuPtr->totalWidth = oldWidth; - - /* - * Simulate the mouse up. - */ - - window = Tk_WindowId(menuPtr->tkwin); - TkGenerateButtonEventForXPointer(window); - - /* - * Dispatch the command. - */ - - menuID = HiWord(popUpResult); - if (menuID != 0) { - result = TkMacOSXDispatchMenuEvent(menuID, LoWord(popUpResult)); - } - -endPostMenu: - inPostMenu--; - } - return result; + TkMacOSXMakeCollectableAndRelease(menuPtr->platformData); } /* @@ -1590,9 +531,8 @@ endPostMenu: * TkpMenuNewEntry -- * * Adds a pointer to a new menu entry structure with the platform- - * specific fields filled in. The Macintosh uses the - * platformEntryData field of the TkMenuEntry record to store - * geometry information. + * specific fields filled in. The Macintosh uses the platformEntryData + * field of the TkMenuEntry record. * * Results: * Standard TCL error. @@ -1608,490 +548,238 @@ int TkpMenuNewEntry( TkMenuEntry *mePtr) /* The menu we are adding an entry to */ { - EntryGeometry *geometryPtr = - (EntryGeometry *) ckalloc(sizeof(EntryGeometry)); - TkMenu *menuPtr = mePtr->menuPtr; - - geometryPtr->accelTextStart = 0; - geometryPtr->accelTextWidth = 0; - geometryPtr->nonAccelMargin = 0; - geometryPtr->modifierWidth = 0; - geometryPtr->modifierNum = 0; - geometryPtr->accelGlyph = 0; - mePtr->platformEntryData = (TkMenuPlatformEntryData) geometryPtr; - if (!(menuPtr->menuFlags & MENU_RECONFIGURE_PENDING)) { - menuPtr->menuFlags |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, (ClientData) menuPtr); + TKMenu *menu = (TKMenu *) mePtr->menuPtr->platformData; + NSMenuItem *menuItem; + if (mePtr->type == SEPARATOR_ENTRY || mePtr->type == TEAROFF_ENTRY) { + menuItem = [[NSMenuItem separatorItem] retain]; + } else { + menuItem = [menu newTkMenuItem:mePtr]; } - return TCL_OK; -} - -/* - *---------------------------------------------------------------------- - * - * Tk_MacOSXTurnOffMenus -- - * - * Turns off all the menu drawing code. This is more than just disabling - * the "menu" command, this means that Tk will NEVER touch the menubar. - * It is needed in the Plugin, where Tk does not own the menubar. - * - * Results: - * None. - * - * Side effects: - * A flag is set which will disable all menu drawing. - * - *---------------------------------------------------------------------- - */ + mePtr->platformEntryData = (TkMenuPlatformEntryData) + TkMacOSXMakeUncollectable(menuItem); -void -Tk_MacOSXTurnOffMenus(void) -{ - gNoTkMenus = 1; + /* + * Caller TkMenuEntry() already did this same insertion into the generic + * TkMenu so we just match it for the platform menu. + */ + + [menu insertItem:menuItem atTkIndex:mePtr->index]; + return TCL_OK; } /* *---------------------------------------------------------------------- * - * DrawMenuBarWhenIdle -- + * TkpConfigureMenuEntry -- * - * Update the menu bar next time there is an idle event. + * Processes configurations for menu entries. * * Results: - * None. + * Returns standard TCL result. If TCL_ERROR is returned, then the + * interp's result contains an error message. * * Side effects: - * Menu bar is redrawn. + * Configuration information get set for mePtr; old resources get freed, + * if any need it. * *---------------------------------------------------------------------- */ -void -DrawMenuBarWhenIdle( - ClientData clientData) /* ignored here */ -{ - TkMenuReferences *menuRefPtr; - TkMenu *appleMenuPtr, *helpMenuPtr, *menuBarPtr = NULL; - MenuHandle macMenuHdl; - Tcl_HashEntry *hashEntryPtr; - - /* - * If we have been turned off, exit. - */ - - if (gNoTkMenus) { - return; - } - - /* - * We need to clear the apple and help menus of any extra items. - */ - - if (currentAppleMenuID != 0) { - hashEntryPtr = Tcl_FindHashEntry(&commandTable, - (char*)(intptr_t)currentAppleMenuID); - appleMenuPtr = (TkMenu *) Tcl_GetHashValue(hashEntryPtr); - TkpDestroyMenu(appleMenuPtr); - TkpNewMenu(appleMenuPtr); - appleMenuPtr->menuFlags &= ~MENU_APPLE_MENU; - appleMenuPtr->menuFlags |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, (ClientData) appleMenuPtr); - } - - if (currentHelpMenuID != 0) { - hashEntryPtr = Tcl_FindHashEntry(&commandTable, - (char*)(intptr_t)currentHelpMenuID); - helpMenuPtr = (TkMenu *) Tcl_GetHashValue(hashEntryPtr); - TkpDestroyMenu(helpMenuPtr); - TkpNewMenu(helpMenuPtr); - helpMenuPtr->menuFlags &= ~MENU_HELP_MENU; - helpMenuPtr->menuFlags |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, - (ClientData) helpMenuPtr); - } - - /* - * We need to find the clone of this menu that is the menubar. - * Once we do that, for every cascade in the menu, we need to - * insert the Mac menu in the Mac menubar. Finally, we need - * to redraw the menubar. - */ - - menuRefPtr = NULL; - if (currentMenuBarName != NULL) { - menuRefPtr = TkFindMenuReferences(currentMenuBarInterp, - currentMenuBarName); - } - if (menuRefPtr) { - TkMenu *menuPtr; - TkMenu *cascadeMenuPtr; - char *appleMenuName, *helpMenuName; - int appleIndex = -1, helpIndex = -1, i; - - menuPtr = menuRefPtr->menuPtr; - if (menuPtr != NULL) { - TkMenuReferences *specialMenuRefPtr; - TkMenuEntry *specialEntryPtr; - - appleMenuName = ckalloc(strlen(currentMenuBarName) + 1 + - strlen(".apple") + 1); - sprintf(appleMenuName, "%s.apple", Tk_PathName(menuPtr->tkwin)); - specialMenuRefPtr = TkFindMenuReferences(currentMenuBarInterp, - appleMenuName); - if ((specialMenuRefPtr != NULL) - && (specialMenuRefPtr->menuPtr != NULL)) { - for (specialEntryPtr = specialMenuRefPtr->parentEntryPtr; - specialEntryPtr != NULL; - specialEntryPtr = specialEntryPtr->nextCascadePtr) { - if (specialEntryPtr->menuPtr == menuPtr) { - appleIndex = specialEntryPtr->index; - break; - } - } - } - ckfree(appleMenuName); - - helpMenuName = ckalloc(strlen(currentMenuBarName) + 1 + - strlen(".help") + 1); - sprintf(helpMenuName, "%s.help", Tk_PathName(menuPtr->tkwin)); - specialMenuRefPtr = TkFindMenuReferences(currentMenuBarInterp, - helpMenuName); - if ((specialMenuRefPtr != NULL) - && (specialMenuRefPtr->menuPtr != NULL)) { - for (specialEntryPtr = specialMenuRefPtr->parentEntryPtr; - specialEntryPtr != NULL; - specialEntryPtr = specialEntryPtr->nextCascadePtr) { - if (specialEntryPtr->menuPtr == menuPtr) { - helpIndex = specialEntryPtr->index; - break; - } - } - } - ckfree(helpMenuName); - } - - for (menuBarPtr = menuPtr; - (menuBarPtr != NULL) && (menuBarPtr->menuType != MENUBAR); - menuBarPtr = menuBarPtr->nextInstancePtr) { - /* - * Null loop body. - */ - } - - if (menuBarPtr) { - if (menuBarPtr->tearoff != menuPtr->tearoff) { - if (menuBarPtr->tearoff) { - appleIndex = (-1 == appleIndex) ? appleIndex - : appleIndex + 1; - helpIndex = (-1 == helpIndex) ? helpIndex - : helpIndex + 1; - } else { - appleIndex = (-1 == appleIndex) ? appleIndex - : appleIndex - 1; - helpIndex = (-1 == helpIndex) ? helpIndex - : helpIndex - 1; - } - } - ClearMenuBar(); +int +TkpConfigureMenuEntry( + TkMenuEntry *mePtr) /* Information about menu entry; may or may + * not already have values for some fields. */ +{ + NSMenuItem *menuItem = (NSMenuItem *) mePtr->platformEntryData; + NSString *title = @""; + NSAttributedString *attributedTitle = nil; + NSImage *image = nil; + NSString *keyEquivalent = @""; + NSUInteger modifierMask = NSCommandKeyMask; + NSMenu *submenu = nil; + NSDictionary *attributes; + int imageWidth, imageHeight; + GC gc = (mePtr->textGC ? mePtr->textGC : mePtr->menuPtr->textGC); + Tcl_Obj *fontPtr = (mePtr->fontPtr ? mePtr->fontPtr : + mePtr->menuPtr->fontPtr); + + if (mePtr->image) { + Tk_SizeOfImage(mePtr->image, &imageWidth, &imageHeight); + image = TkMacOSXGetNSImageWithTkImage(mePtr->menuPtr->display, + mePtr->image, imageWidth, imageHeight); + } else if (mePtr->bitmapPtr != None) { + Pixmap bitmap = Tk_GetBitmapFromObj(mePtr->menuPtr->tkwin, + mePtr->bitmapPtr); + + Tk_SizeOfBitmap(mePtr->menuPtr->display, bitmap, &imageWidth, + &imageHeight); + image = TkMacOSXGetNSImageWithBitmap(mePtr->menuPtr->display, bitmap, + gc, imageWidth, imageHeight); + } + [menuItem setImage:image]; + if ((!image || mePtr->compound != COMPOUND_NONE) && mePtr->labelPtr && + mePtr->labelLength) { + title = [[[NSString alloc] initWithBytes:Tcl_GetString(mePtr->labelPtr) + length:mePtr->labelLength encoding:NSUTF8StringEncoding] + autorelease]; + if ([title hasSuffix:@"..."]) { + title = [NSString stringWithFormat:@"%@%C", + [title substringToIndex:[title length] - 3], 0x2026]; + } + } + [menuItem setTitle:title]; + if (strcmp(Tcl_GetString(fontPtr), "menu") || gc->foreground != defaultFg + || gc->background != defaultBg) { + attributes = TkMacOSXNSFontAttributesForFont(Tk_GetFontFromObj( + mePtr->menuPtr->tkwin, fontPtr)); + if (gc->foreground != defaultFg || gc->background != defaultBg) { + NSColor *color = TkMacOSXGetNSColor(gc, + gc->foreground!=defaultFg? gc->foreground:gc->background); + + attributes = [[attributes mutableCopy] autorelease]; + [(NSMutableDictionary *)attributes setObject:color + forKey:NSForegroundColorAttributeName]; + } + if (attributes) { + attributedTitle = [[[NSAttributedString alloc] + initWithString:title attributes:attributes] autorelease]; + } + } + [menuItem setAttributedTitle:attributedTitle]; + [menuItem setEnabled:!(mePtr->state == ENTRY_DISABLED)]; + [menuItem setState:((mePtr->type == CHECK_BUTTON_ENTRY || + mePtr->type == RADIO_BUTTON_ENTRY) && mePtr->indicatorOn && + (mePtr->entryFlags & ENTRY_SELECTED) ? NSOnState : NSOffState)]; + if (mePtr->type != CASCADE_ENTRY && mePtr->accelPtr && mePtr->accelLength) { + keyEquivalent = ParseAccelerator(Tcl_GetString(mePtr->accelPtr), + &modifierMask); + } + [menuItem setKeyEquivalent:keyEquivalent]; + [menuItem setKeyEquivalentModifierMask:modifierMask]; + if (mePtr->type == CASCADE_ENTRY && mePtr->namePtr) { + TkMenuReferences *menuRefPtr; + + menuRefPtr = TkFindMenuReferencesObj(mePtr->menuPtr->interp, + mePtr->namePtr); + if (menuRefPtr && menuRefPtr->menuPtr) { + CheckForSpecialMenu(menuRefPtr->menuPtr); + submenu = (TKMenu *) menuRefPtr->menuPtr->platformData; + if ([submenu supermenu] && [menuItem submenu] != submenu) { + /* + * This happens during a clone, where the parent menu is + * cloned before its children, so just ignore this temprary + * setting, it will be changed shortly (c.f. tkMenu.c + * CloneMenu()) + */ - if (appleIndex == -1) { - InsertMenu(tkAppleMenu, 0); - currentAppleMenuID = 0; - tkCurrentAppleMenu = tkAppleMenu; + submenu = nil; } else { - short appleID; - - appleMenuPtr = menuBarPtr->entries[appleIndex] - ->childMenuRefPtr->menuPtr; - TkpDestroyMenu(appleMenuPtr); - TkMacOSXGetNewMenuID(appleMenuPtr->interp, appleMenuPtr, 0, - &appleID); - macMenuHdl = NewMenu(appleID, "\p\024"); - appleMenuPtr->platformData = - (TkMenuPlatformData) ckalloc(sizeof(MacMenu)); - ((MacMenu *)appleMenuPtr->platformData)->menuHdl - = macMenuHdl; - appleMenuPtr->menuFlags |= MENU_APPLE_MENU; - if (!(appleMenuPtr->menuFlags - & MENU_RECONFIGURE_PENDING)) { - appleMenuPtr->menuFlags |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, - (ClientData) appleMenuPtr); + [submenu setTitle:title]; + + if ([menuItem isEnabled]) { + /* This menuItem might have been previously disabled (XXX: + track this), which would have disabled entries; we must + re-enable the entries here. */ + int i = 0; + NSArray *itemArray = [submenu itemArray]; + for (NSMenuItem *item in itemArray) { + TkMenuEntry *submePtr = menuRefPtr->menuPtr->entries[i]; + [item setEnabled: !(submePtr->state == ENTRY_DISABLED)]; + i++; + } } - InsertMenu(macMenuHdl, 0); - RecursivelyInsertMenu(appleMenuPtr); - currentAppleMenuID = appleID; - tkCurrentAppleMenu = macMenuHdl; - } - if (helpIndex == -1) { - currentHelpMenuID = 0; - } - for (i = 0; i < menuBarPtr->numEntries; i++) { - if (i == appleIndex) { - if (menuBarPtr->entries[i]->state == ENTRY_DISABLED) { - DisableMenuItem(((MacMenu *) menuBarPtr->entries[i] - ->childMenuRefPtr->menuPtr - ->platformData)->menuHdl, 0); - } else { - EnableMenuItem(((MacMenu *) menuBarPtr->entries[i] - ->childMenuRefPtr->menuPtr - ->platformData)->menuHdl, 0); - } - continue; - } else if (i == helpIndex) { - TkMenu *helpMenuPtr = menuBarPtr->entries[i] - ->childMenuRefPtr->menuPtr; - - if (helpMenuPtr == NULL) { - continue; - } - helpMenuPtr->menuFlags |= MENU_HELP_MENU; - if (!(helpMenuPtr->menuFlags - & MENU_RECONFIGURE_PENDING)) { - helpMenuPtr->menuFlags - |= MENU_RECONFIGURE_PENDING; - Tcl_DoWhenIdle(ReconfigureMacintoshMenu, - (ClientData) helpMenuPtr); - } - macMenuHdl = - ((MacMenu *) helpMenuPtr->platformData)->menuHdl; - currentHelpMenuID = GetMenuID(macMenuHdl); - } else if (menuBarPtr->entries[i]->type - == CASCADE_ENTRY) { - if ((menuBarPtr->entries[i]->childMenuRefPtr != NULL) - && menuBarPtr->entries[i]->childMenuRefPtr - ->menuPtr != NULL) { - cascadeMenuPtr = menuBarPtr->entries[i] - ->childMenuRefPtr->menuPtr; - macMenuHdl = ((MacMenu *) cascadeMenuPtr - ->platformData)->menuHdl; - DeleteMenu(GetMenuID(macMenuHdl)); - InsertMenu(macMenuHdl, 0); - RecursivelyInsertMenu(cascadeMenuPtr); - if (menuBarPtr->entries[i]->state == ENTRY_DISABLED) { - DisableMenuItem(((MacMenu *) menuBarPtr->entries[i] - ->childMenuRefPtr->menuPtr - ->platformData)->menuHdl, 0); - } else { - EnableMenuItem(((MacMenu *) menuBarPtr->entries[i] - ->childMenuRefPtr->menuPtr - ->platformData)->menuHdl, 0); - } - } - } } } } - if (!menuRefPtr || !menuBarPtr) { - SetDefaultMenubar(); - } - DrawMenuBar(); - menuBarFlags &= ~MENUBAR_REDRAW_PENDING; -} - -/* - *---------------------------------------------------------------------- - * - * RecursivelyInsertMenu -- - * - * Puts all of the cascades of this menu in the Mac hierarchical list. - * - * Results: - * None. - * - * Side effects: - * The menubar is changed. - * - *---------------------------------------------------------------------- - */ - -void -RecursivelyInsertMenu( - TkMenu *menuPtr) /* All of the cascade items in this menu - * will be inserted into the mac menubar. */ -{ - int i; - TkMenu *cascadeMenuPtr; - MenuHandle macMenuHdl; + [menuItem setSubmenu:submenu]; - for (i = 0; i < menuPtr->numEntries; i++) { - if (menuPtr->entries[i]->type == CASCADE_ENTRY) { - if ((menuPtr->entries[i]->childMenuRefPtr != NULL) && - (menuPtr->entries[i]->childMenuRefPtr->menuPtr != NULL)) { - cascadeMenuPtr = menuPtr->entries[i]->childMenuRefPtr->menuPtr; - macMenuHdl = - ((MacMenu *) cascadeMenuPtr->platformData)->menuHdl; - InsertMenu(macMenuHdl, -1); - RecursivelyInsertMenu(cascadeMenuPtr); - } - } - } + return TCL_OK; } /* *---------------------------------------------------------------------- * - * RecursivelyDeleteMenu -- + * TkpDestroyMenuEntry -- * - * Takes all of the cascades of this menu out of the Mac hierarchical - * list. + * Cleans up platform-specific menu entry items. * * Results: - * None. + * None * * Side effects: - * The menubar is changed. + * All platform-specific allocations are freed up. * *---------------------------------------------------------------------- */ void -RecursivelyDeleteMenu( - TkMenu *menuPtr) /* All of the cascade items in this menu - * will be deleted from the mac menubar. */ +TkpDestroyMenuEntry( + TkMenuEntry *mePtr) { - int i; - TkMenu *cascadeMenuPtr; - MenuHandle macMenuHdl; + if (mePtr->platformEntryData && mePtr->menuPtr->platformData) { + TKMenu *menu = (TKMenu *) mePtr->menuPtr->platformData; + NSMenuItem *menuItem = (NSMenuItem *) mePtr->platformEntryData; + NSInteger index = [menu indexOfItem:menuItem]; - for (i = 0; i < menuPtr->numEntries; i++) { - if (menuPtr->entries[i]->type == CASCADE_ENTRY) { - if ((menuPtr->entries[i]->childMenuRefPtr != NULL) && - (menuPtr->entries[i]->childMenuRefPtr->menuPtr != NULL)) { - cascadeMenuPtr = menuPtr->entries[i]->childMenuRefPtr->menuPtr; - macMenuHdl = - ((MacMenu *) cascadeMenuPtr->platformData)->menuHdl; - DeleteMenu(GetMenuID(macMenuHdl)); - RecursivelyDeleteMenu(cascadeMenuPtr); - } + if (index > -1) { + [menu removeItemAtIndex:index]; } } + TkMacOSXMakeCollectableAndRelease(mePtr->platformEntryData); } /* *---------------------------------------------------------------------- * - * SetDefaultMenubar -- - * - * Puts the Apple, File and Edit menus into the Macintosh menubar. - * - * Results: - * None. - * - * Side effects: - * The menubar is changed. - * - *---------------------------------------------------------------------- - */ - -void -SetDefaultMenubar(void) -{ - if (currentMenuBarName != NULL) { - ckfree(currentMenuBarName); - currentMenuBarName = NULL; - } - currentMenuBarOwner = NULL; - ClearMenuBar(); - InsertMenu(tkAppleMenu, 0); - InsertMenu(tkFileMenu, 0); - InsertMenu(tkEditMenu, 0); - if (!(menuBarFlags & MENUBAR_REDRAW_PENDING)) { - Tcl_DoWhenIdle(DrawMenuBarWhenIdle, NULL); - menuBarFlags |= MENUBAR_REDRAW_PENDING; - } -} - -/* - *---------------------------------------------------------------------- - * - * TkpSetMainMenubar -- + * TkpPostMenu -- * - * Puts the menu associated with a window into the menubar. Should - * only be called when the window is in front. + * Posts a menu on the screen * * Results: * None. * * Side effects: - * The menubar is changed. + * The menu is posted and handled. * *---------------------------------------------------------------------- */ -void -TkpSetMainMenubar( - Tcl_Interp *interp, /* The interpreter of the application */ - Tk_Window tkwin, /* The frame we are setting up */ - char *menuName) /* The name of the menu to put in front. - * If NULL, use the default menu bar. - */ +int +TkpPostMenu( + Tcl_Interp *interp, /* The interpreter this menu lives in */ + TkMenu *menuPtr, /* The menu we are posting */ + int x, /* The global x-coordinate of the top, left- + * hand corner of where the menu is supposed + * to be posted. */ + int y) /* The global y-coordinate */ { - TkWindow *winPtr = (TkWindow *) tkwin; - WindowRef macWindowPtr; - WindowRef frontNonFloating; - - macWindowPtr = TkMacOSXDrawableWindow(winPtr->window); - - frontNonFloating = ActiveNonFloatingWindow(); - if ((macWindowPtr == NULL) || (macWindowPtr != frontNonFloating)) { - return; + NSWindow *win = [NSApp keyWindow]; + if (!win) { + return TCL_ERROR; } - if ((currentMenuBarInterp != interp) || (currentMenuBarOwner != tkwin) - || (currentMenuBarName == NULL) || (menuName == NULL) - || (strcmp(menuName, currentMenuBarName) != 0)) { - Tk_Window searchWindow; - TopLevelMenubarList *listPtr; + inPostMenu = 1; - if (currentMenuBarName != NULL) { - ckfree(currentMenuBarName); - } + int oldMode = Tcl_SetServiceMode(TCL_SERVICE_NONE); + NSView *view = [win contentView]; + NSRect frame = NSMakeRect(x + 9, tkMacOSXZeroScreenHeight - y - 9, 1, 1); - if (menuName == NULL) { - searchWindow = tkwin; - if (strcmp(Tk_Class(searchWindow), "Menu") == 0) { - TkMenuReferences *menuRefPtr; + frame.origin = [view convertPoint: + [win convertScreenToBase:frame.origin] fromView:nil]; - menuRefPtr = TkFindMenuReferences(interp, Tk_PathName(tkwin)); - if (menuRefPtr != NULL) { - TkMenu *menuPtr = menuRefPtr->menuPtr; + NSMenu *menu = (NSMenu *) menuPtr->platformData; + NSPopUpButtonCell *popUpButtonCell = [[NSPopUpButtonCell alloc] + initTextCell:@"" pullsDown:NO]; - if (menuPtr != NULL) { - searchWindow = menuPtr->masterMenuPtr->tkwin; - } - } - } - for (; searchWindow != NULL; - searchWindow = Tk_Parent(searchWindow)) { - for (listPtr = windowListPtr; listPtr != NULL; - listPtr = listPtr->nextPtr) { - if (listPtr->tkwin == searchWindow) { - break; - } - } - if (listPtr != NULL) { - menuName = Tk_PathName( - listPtr->menuPtr->masterMenuPtr->tkwin); - break; - } - } - } - - if (menuName == NULL) { - currentMenuBarName = NULL; - } else { - currentMenuBarName = ckalloc(strlen(menuName) + 1); - strcpy(currentMenuBarName, menuName); - } - currentMenuBarOwner = tkwin; - currentMenuBarInterp = interp; - } - if (!(menuBarFlags & MENUBAR_REDRAW_PENDING)) { - Tcl_DoWhenIdle(DrawMenuBarWhenIdle, NULL); - menuBarFlags |= MENUBAR_REDRAW_PENDING; - } + [popUpButtonCell setAltersStateOfSelectedItem:NO]; + [popUpButtonCell setMenu:menu]; + [popUpButtonCell selectItem:nil]; + [popUpButtonCell performClickWithFrame:frame inView:view]; + [popUpButtonCell release]; + Tcl_SetServiceMode(oldMode); + inPostMenu = 0; + return TCL_OK; } /* @@ -2105,8 +793,8 @@ TkpSetMainMenubar( * None. * * Side effects: - * On Windows and UNIX, associates the platform menu with the - * platform window. + * On Windows and UNIX, associates the platform menu with the platform + * window. * *---------------------------------------------------------------------- */ @@ -2116,276 +804,115 @@ TkpSetWindowMenuBar( Tk_Window tkwin, /* The window we are setting the menu in */ TkMenu *menuPtr) /* The menu we are setting */ { - TopLevelMenubarList *listPtr, *prevPtr; - - /* - * Remove any existing reference to this window. - */ - - for (prevPtr = NULL, listPtr = windowListPtr; - listPtr != NULL; - prevPtr = listPtr, listPtr = listPtr->nextPtr) { - if (listPtr->tkwin == tkwin) { - break; - } - } - - if (listPtr != NULL) { - if (prevPtr != NULL) { - prevPtr->nextPtr = listPtr->nextPtr; - } else { - windowListPtr = listPtr->nextPtr; - } - ckfree((char *) listPtr); - } + TkWindow *winPtr = (TkWindow *) tkwin; - if (menuPtr != NULL) { - listPtr = (TopLevelMenubarList *) ckalloc(sizeof(TopLevelMenubarList)); - listPtr->nextPtr = windowListPtr; - windowListPtr = listPtr; - listPtr->tkwin = tkwin; - listPtr->menuPtr = menuPtr; + if (winPtr->wmInfoPtr) { + winPtr->wmInfoPtr->menuPtr = menuPtr; } } /* *---------------------------------------------------------------------- * - * EventuallyInvokeMenu -- + * TkpSetMainMenubar -- * - * This IdleTime callback actually invokes the menu command - * scheduled in TkMacOSXDispatchMenuEvent. + * Puts the menu associated with a window into the menubar. Should only + * be called when the window is in front. * * Results: * None. * * Side effects: - * Commands get executed. + * The menubar is changed. * *---------------------------------------------------------------------- */ void -EventuallyInvokeMenu ( - ClientData data) +TkpSetMainMenubar( + Tcl_Interp *interp, /* The interpreter of the application */ + Tk_Window tkwin, /* The frame we are setting up */ + char *menuName) /* The name of the menu to put in front. If + * NULL, use the default menu bar. */ { - struct MenuCommandHandlerData *realData = - (struct MenuCommandHandlerData *) data; - int code; + static Tcl_Interp *currentInterp = NULL; + TKMenu *menu = nil; - code = TkInvokeMenu(realData->menuPtr->interp, realData->menuPtr, - realData->index); + if (menuName) { + TkWindow *winPtr = (TkWindow *) tkwin; - if (code != TCL_OK && code != TCL_CONTINUE && code != TCL_BREAK) { - Tcl_AddErrorInfo(realData->menuPtr->interp, "\n (menu invoke)"); - Tcl_BackgroundError(realData->menuPtr->interp); - } - - if (realData->menuPtr->tkwin) { - RecursivelyClearActiveMenu(realData->menuPtr); - } - TkMacOSXClearMenubarActive(); - - Tcl_Release(realData->menuPtr->interp); - Tcl_Release(realData->menuPtr); -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXDispatchMenuEvent -- - * - * Given a menu id and an item, dispatches the command associated - * with it. - * - * Results: - * None. - * - * Side effects: - * Commands for the event are scheduled for execution at idle time. - * - *---------------------------------------------------------------------- - */ - -int -TkMacOSXDispatchMenuEvent( - int menuID, /* The menu id of the menu we are invoking */ - int index) /* The one-based index of the item that was - * selected. */ -{ - int result = TCL_OK; - - if (menuID != 0) { - if (menuID == kHMHelpMenuID) { - if (currentMenuBarOwner != NULL) { - TkMenuReferences *helpMenuRef; - char *helpMenuName = ckalloc(strlen(currentMenuBarName) - + strlen(".help") + 1); - - sprintf(helpMenuName, "%s.help", currentMenuBarName); - helpMenuRef = TkFindMenuReferences(currentMenuBarInterp, - helpMenuName); - ckfree(helpMenuName); - if ((helpMenuRef != NULL) && (helpMenuRef->menuPtr != NULL)) { - MenuRef outHelpMenu; - MenuItemIndex itemIndex; - int newIndex; - - HMGetHelpMenu(&outHelpMenu, &itemIndex); - newIndex = index - itemIndex; - result = TkInvokeMenu(currentMenuBarInterp, - helpMenuRef->menuPtr, newIndex); - } - } + if (winPtr->wmInfoPtr && winPtr->wmInfoPtr->menuPtr && + winPtr->wmInfoPtr->menuPtr->masterMenuPtr && + winPtr->wmInfoPtr->menuPtr->masterMenuPtr->tkwin && + !strcmp(menuName, Tk_PathName( + winPtr->wmInfoPtr->menuPtr->masterMenuPtr->tkwin))) { + menu = (TKMenu *) winPtr->wmInfoPtr->menuPtr->platformData; } else { - Tcl_HashEntry *commandEntryPtr = - Tcl_FindHashEntry(&commandTable, (char*)(intptr_t)menuID); - if (commandEntryPtr != NULL) { - TkMenu *menuPtr = (TkMenu *) Tcl_GetHashValue(commandEntryPtr); - - if ((currentAppleMenuID == menuID) - && (index > menuPtr->numEntries + 1)) { - /* - * We don't need to do anything here, the standard - * Application event handler will open the built-in - * Apple menu item for us. - */ - result = TCL_OK; - } else { - struct MenuCommandHandlerData *data - = (struct MenuCommandHandlerData *) - ckalloc(sizeof(struct MenuCommandHandlerData)); - - Tcl_Preserve(menuPtr->interp); - Tcl_Preserve(menuPtr); - data->menuPtr = menuPtr; - data->index = index - 1; - Tcl_DoWhenIdle(EventuallyInvokeMenu, - (ClientData) data); - /* result = TkInvokeMenu(menuPtr->interp, menuPtr, index - 1); */ - } - } else { - return TCL_ERROR; + TkMenuReferences *menuRefPtr = TkFindMenuReferences(interp, + menuName); + + if (menuRefPtr && menuRefPtr->menuPtr && + menuRefPtr->menuPtr->platformData) { + menu = (TKMenu *) menuRefPtr->menuPtr->platformData; } } } - return result; -} - -/* - *---------------------------------------------------------------------- - * - * GetMenuIndicatorGeometry -- - * - * Gets the width and height of the indicator area of a menu. - * - * Results: - * widthPtr and heightPtr are set. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -void -GetMenuIndicatorGeometry ( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are measuring */ - Tk_Font tkfont, /* Precalculated font */ - const Tk_FontMetrics *fmPtr,/* Precalculated font metrics */ - int *widthPtr, /* The resulting width */ - int *heightPtr) /* The resulting height */ -{ - *heightPtr = fmPtr->linespace + menuItemExtraHeight; - if (IS_THEME_MENU_FONT(tkfont)) { - *widthPtr = menuMarkColumnWidth; - } else { - const char markChar = FindMarkCharacter(mePtr); - const char *markUtf = NULL; - int len; - - len = GetUtfMarkCharacter(markChar, &markUtf); - *widthPtr = Tk_TextWidth(tkfont, markUtf, len) + 2*menuMarkIndent; + if (menu || interp != currentInterp) { + [NSApp tkSetMainMenu:menu]; } + currentInterp = interp; } /* *---------------------------------------------------------------------- * - * GetMenuAccelGeometry -- + * CheckForSpecialMenu -- * - * Gets the width and height of the accelerator area of a menu. + * Given a menu, check to see whether or not it is a cascade in a menubar + * with one of the special names .apple, .help or .window If it is, the + * entry that points to this menu will be marked. * * Results: - * widthPtr and heightPtr are set. + * None. * * Side effects: - * None. + * Will set entryFlags appropriately. * *---------------------------------------------------------------------- */ -void -GetMenuAccelGeometry ( - TkMenu *menuPtr, /* The menu we are measuring */ - TkMenuEntry *mePtr, /* The entry we are measuring */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalculated font metrics */ - int *modWidthPtr, /* The width of all of the key - * modifier symbols. */ - int *textWidthPtr, /* The resulting width */ - int *heightPtr) /* The resulting height */ +static void +CheckForSpecialMenu( + TkMenu *menuPtr) /* The menu we are checking */ { - *heightPtr = fmPtr->linespace + menuItemExtraHeight; - *modWidthPtr = menuSymbols[COMMAND_SYMBOL].width; - *textWidthPtr = 0; - if (mePtr->type != CASCADE_ENTRY && mePtr->accelLength > 0) { - const char *accel = (mePtr->accelPtr == NULL) ? "" - : Tcl_GetString(mePtr->accelPtr); - EntryGeometry *geometryPtr = (EntryGeometry*)mePtr->platformEntryData; - - if (IS_THEME_MENU_FONT(tkfont)) { - CFStringRef cfStr; - int width = 0; - int maxWidth = ((TkFont *)tkfont)->fm.maxWidth; - - if (geometryPtr->accelGlyph) { - cfStr = CFStringCreateWithBytes(NULL, - (UInt8*)&geometryPtr->accelGlyph, 1, - kTextEncodingMacKeyboardGlyphs, false); - if (cfStr) { - width = MeasureThemeText(cfStr, kThemeMenuItemCmdKeyFont); - CFRelease(cfStr); - } - } - if ((mePtr->entryFlags & ENTRY_ACCEL_MASK) == 0) { - if (!geometryPtr->accelGlyph) { - width = Tk_TextWidth(tkfont, accel, mePtr->accelLength); - } - *textWidthPtr = maxWidth; - if (width < maxWidth) { - *modWidthPtr = 0; - } else { - *modWidthPtr = width - maxWidth; - } - } else { - if (!geometryPtr->accelGlyph) { - width = Tk_TextWidth(tkfont, accel + - geometryPtr->accelTextStart, mePtr->accelLength - - geometryPtr->accelTextStart); - } - if (width < maxWidth) { - *textWidthPtr = maxWidth; + if (!menuPtr->masterMenuPtr->tkwin) { + return; + } + for (TkMenuEntry *cascadeEntryPtr = menuPtr->menuRefPtr->parentEntryPtr; + cascadeEntryPtr; + cascadeEntryPtr = cascadeEntryPtr->nextCascadePtr) { + if (cascadeEntryPtr->menuPtr->menuType == MENUBAR + && cascadeEntryPtr->menuPtr->masterMenuPtr->tkwin) { + TkMenu *masterMenuPtr = cascadeEntryPtr->menuPtr->masterMenuPtr; + int i = 0; + Tcl_DString ds; + + Tcl_DStringInit(&ds); + Tcl_DStringAppend(&ds, Tk_PathName(masterMenuPtr->tkwin), -1); + while (specialMenus[i].name) { + Tcl_DStringAppend(&ds, specialMenus[i].name, + specialMenus[i].len); + if (strcmp(Tcl_DStringValue(&ds), + Tk_PathName(menuPtr->masterMenuPtr->tkwin)) == 0) { + cascadeEntryPtr->entryFlags |= specialMenus[i].flag; } else { - *textWidthPtr = width; - } - if (geometryPtr->modifierNum) { - *modWidthPtr = geometryPtr->modifierWidth; + cascadeEntryPtr->entryFlags &= ~specialMenus[i].flag; } + Tcl_DStringSetLength(&ds, Tcl_DStringLength(&ds) - + specialMenus[i].len); + i++; } - } else { - *textWidthPtr = Tk_TextWidth(tkfont, accel, mePtr->accelLength); + Tcl_DStringFree(&ds); } } } @@ -2393,48 +920,12 @@ GetMenuAccelGeometry ( /* *---------------------------------------------------------------------- * - * GetTearoffEntryGeometry -- - * - * Gets the width and height of of a tearoff entry. - * - * Results: - * widthPtr and heightPtr are set. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -void -GetTearoffEntryGeometry ( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are measuring */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalculated font metrics */ - int *widthPtr, /* The resulting width */ - int *heightPtr) /* The resulting height */ -{ -#ifdef USE_TK_MDEF - const int useMDEF = ((MacMenu *) menuPtr->platformData)->useMDEF; -#endif - if (useMDEF && menuPtr->menuType != TEAROFF_MENU) { - *heightPtr = fmPtr->linespace + menuItemExtraHeight; - *widthPtr = menuPtr->totalWidth; - } else { - *widthPtr = *heightPtr = 0; - } -} - -/* - *---------------------------------------------------------------------- - * - * GetMenuSeparatorGeometry -- + * ParseAccelerator -- * - * Gets the width and height of menu separator. + * Parse accelerator string. * * Results: - * widthPtr and heightPtr are set. + * Accelerator string & flags. * * Side effects: * None. @@ -2442,705 +933,96 @@ GetTearoffEntryGeometry ( *---------------------------------------------------------------------- */ -void -GetMenuSeparatorGeometry( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are measuring */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalcualted font metrics */ - int *widthPtr, /* The resulting width */ - int *heightPtr) /* The resulting height */ +static NSString * +ParseAccelerator( + const char *accel, + NSUInteger *maskPtr) { - *widthPtr = 0; - *heightPtr = menuSeparatorHeight; -} - -/* - *---------------------------------------------------------------------- - * - * DrawMenuEntryIndicator -- - * - * This procedure draws the indicator part of a menu. - * - * Results: - * None. - * - * Side effects: - * Commands are output to X to display the menu in its - * current mode. - * - *---------------------------------------------------------------------- - */ - -void -DrawMenuEntryIndicator( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are drawing */ - Drawable d, /* The drawable we are drawing */ - GC gc, /* The GC we are drawing with */ - GC indicatorGC, /* The GC to use for the indicator */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalculated font metrics */ - int x, /* topleft hand corner of entry */ - int y, /* topleft hand corner of entry */ - int width, /* width of entry */ - int height) /* height of entry */ -{ - if ((mePtr->type == CHECK_BUTTON_ENTRY) || - (mePtr->type == RADIO_BUTTON_ENTRY)) { - if (mePtr->indicatorOn && (mePtr->entryFlags & ENTRY_SELECTED)) { - short mark; - int baseline = y + (height + fmPtr->ascent - fmPtr->descent)/2; - - GetItemMark(((MacMenu *) menuPtr->platformData)->menuHdl, - mePtr->index + 1, &mark); - if (IS_THEME_MENU_FONT(tkfont)) { - ThemeFontID font = kThemeMenuItemMarkFont; - TextEncoding encoding = GetApplicationTextEncoding(); - CFStringRef cfStr; - ThemeDrawState drawState; - Rect bounds = {y, x + menuMarkIndent, y + height, x + width}; - - if (mark < kSpaceCharCode) { - font = kThemeMenuItemCmdKeyFont; - encoding = kTextEncodingMacKeyboardGlyphs; - } - switch (mePtr->state) { - case ENTRY_ACTIVE: - drawState = kThemeStatePressed; - break; - case ENTRY_DISABLED: - drawState = kThemeStateInactive; - break; - default: - drawState = kThemeStateActive; - break; - } - cfStr = CFStringCreateWithBytes(NULL, (UInt8*)&mark, 1, - encoding, false); - if (cfStr) { - DrawThemeText(d, gc, cfStr, font, drawState, &bounds, - baseline, teFlushDefault); - CFRelease(cfStr); - } - } else if (mark != 0) { - const char *markUtf = NULL; - int len; + unichar ch = 0; + size_t len; + int i; - len = GetUtfMarkCharacter(mark, &markUtf); - Tk_DrawChars(menuPtr->display, d, gc, tkfont, markUtf, len, - x + menuMarkIndent, baseline); + *maskPtr = 0; + while (1) { + i = 0; + while (modifiers[i].name) { + int l = modifiers[i].len; + + if (!strncasecmp(accel, modifiers[i].name, l) && + (accel[l] == '-' || accel[l] == '+')) { + *maskPtr |= modifiers[i].mask; + accel += l+1; + break; } + i++; + } + if (!modifiers[i].name || !*accel) { + break; } } -} - -#ifdef USE_TK_MDEF -/* - *---------------------------------------------------------------------- - * - * DrawMenuBackground -- - * - * If Appearance is present, draws the Appearance background - * - * Results: - * Nothing - * - * Side effects: - * Commands are output to X to display the menu in its - * current mode. - * - *---------------------------------------------------------------------- - */ -void -DrawMenuBackground( - TkMenu *menuPtr, - Rect *menuRectPtr, /* The menu rect */ - Drawable d) /* What we are drawing into */ -{ - Tk_3DBorder border; - - EraseMenuBackground(((MacMenu *) menuPtr->platformData)->menuHdl, - menuRectPtr, ((MacDrawable*)d)->context); - border = Tk_Get3DBorderFromObj(menuPtr->tkwin, menuPtr->borderPtr); - Tk_Fill3DRectangle(menuPtr->tkwin, d, border, - menuRectPtr->left, menuRectPtr->top, - menuRectPtr->right - menuRectPtr->left, - menuRectPtr->bottom - menuRectPtr->top, 0, TK_RELIEF_FLAT); -} -#endif /* USE_TK_MDEF */ - -/* - *---------------------------------------------------------------------- - * - * DrawMenuEntryAccelerator -- - * - * This procedure draws the accelerator part of a menu. - * - * Results: - * None. - * - * Side effects: - * Commands are output to X to display the menu in its - * current mode. - * - *---------------------------------------------------------------------- - */ + len = strlen(accel); + if (len > 1) { + i = 0; + if (accel[0] == 'F' && len < 4 && accel[1] > '0' && accel[1] <= '9') { + int fkey = accel[1] - '0'; -void -DrawMenuEntryAccelerator( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are drawing */ - Drawable d, /* The drawable we are drawing in */ - GC gc, /* The gc to draw into */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalculated font metrics */ - Tk_3DBorder activeBorder, /* border for menu background */ - int x, /* The left side of the entry */ - int y, /* The top of the entry */ - int width, /* The width of the entry */ - int height, /* The height of the entry */ - int drawArrow) /* Whether or not to draw cascade arrow */ -{ - if (mePtr->type != CASCADE_ENTRY && mePtr->accelLength > 0) { - const char *accel = (mePtr->accelPtr == NULL) ? "" - : Tcl_GetString(mePtr->accelPtr); - EntryGeometry *geometryPtr = (EntryGeometry*)mePtr->platformEntryData; - int leftEdge = x + width - geometryPtr->accelTextWidth; - int baseline = y + (height + fmPtr->ascent - fmPtr->descent) / 2; - - if (IS_THEME_MENU_FONT(tkfont)) { - CFStringRef cfStr; - ThemeDrawState drawState; - - switch (mePtr->state) { - case ENTRY_ACTIVE: - drawState = kThemeStatePressed; - break; - case ENTRY_DISABLED: - drawState = kThemeStateInactive; - break; - default: - drawState = kThemeStateActive; - break; - } - if ((mePtr->entryFlags & ENTRY_ACCEL_MASK) == 0) { - leftEdge -= geometryPtr->modifierWidth; - } - if (geometryPtr->accelGlyph) { - Rect bounds = {y, leftEdge, y + height, leftEdge + - geometryPtr->accelTextWidth}; - - cfStr = CFStringCreateWithBytes(NULL, - (UInt8*)&geometryPtr->accelGlyph, 1, - kTextEncodingMacKeyboardGlyphs, false); - if (cfStr) { - DrawThemeText(d, gc, cfStr, kThemeMenuItemCmdKeyFont, - drawState, &bounds, baseline, teFlushDefault); - CFRelease(cfStr); + if (len == 3) { + if (accel[2] >= '0' && accel[2] <= '9') { + fkey = 10 * fkey + (accel[2] - '0'); + } else { + fkey = 0; } - } else { - Tk_DrawChars(menuPtr->display, d, gc, tkfont, accel + - geometryPtr->accelTextStart, mePtr->accelLength - - geometryPtr->accelTextStart, leftEdge, baseline); } - if (geometryPtr->modifierNum) { - Rect bounds = {y, leftEdge - geometryPtr->modifierWidth, - y + height, leftEdge}; - - cfStr = CFStringCreateWithCharacters(NULL, - geometryPtr->modifierUniChars, - geometryPtr->modifierNum); - if (cfStr) { - DrawThemeText(d, gc, cfStr, kThemeMenuItemCmdKeyFont, - drawState, &bounds, baseline, teFlushDefault); - CFRelease(cfStr); - } + if (fkey >= 1 && fkey <= 15) { + ch = NSF1FunctionKey + fkey - 1; } - } else { - Tk_DrawChars(menuPtr->display, d, gc, tkfont, accel, - mePtr->accelLength, leftEdge, baseline); + } else while (specialAccelerators[i].name) { + if (accel[0] == specialAccelerators[i].name[0] && + len == specialAccelerators[i].len && !strncasecmp(accel, + specialAccelerators[i].name, specialAccelerators[i].len)) { + ch = specialAccelerators[i].ch; + break; + } + i++; } } -} - -/* - *---------------------------------------------------------------------- - * - * DrawMenuSeparator -- - * - * The menu separator is drawn. - * - * Results: - * None. - * - * Side effects: - * Commands are output to X to display the menu in its - * current mode. - * - *---------------------------------------------------------------------- - */ - -void -DrawMenuSeparator( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are drawing */ - Drawable d, /* The drawable we are drawing into */ - GC gc, /* The gc we are drawing with */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalculated font metrics */ - int x, /* left coordinate of entry */ - int y, /* top coordinate of entry */ - int width, /* width of entry */ - int height) /* height of entry */ -{ - TkMacOSXDrawingContext dc; - Rect r; - - r.top = y; - r.left = x; - r.bottom = y + height; - r.right = x + width; - if (TkMacOSXSetupDrawingContext(d, gc, 1, &dc)) { - ChkErr(DrawThemeMenuSeparator, &r); - TkMacOSXRestoreDrawingContext(&dc); - } -} - -#ifdef USE_TK_MDEF -/* - *---------------------------------------------------------------------- - * - * AppearanceEntryDrawWrapper -- - * - * It routes to the Appearance Managers DrawThemeEntry, which will - * then call us back after setting up the drawing context. - * - * Results: - * A menu entry is drawn - * - * Side effects: - * None - * - *---------------------------------------------------------------------- - */ -void -AppearanceEntryDrawWrapper( - TkMenuEntry *mePtr, - Rect *menuRectPtr, - MenuTrackingData *mtdPtr, - Drawable d, - Tk_FontMetrics *fmPtr, - Tk_Font tkfont, - int erase) -{ - MenuEntryUserData meData; - Rect itemRect; - ThemeMenuState theState; - ThemeMenuItemType theType; - Tk_FontMetrics entryMetrics; - - meData.mePtr = mePtr; - meData.mdefDrawable = d; - if (mePtr->fontPtr == NULL) { - meData.fmPtr = fmPtr; - meData.tkfont = tkfont; - } else { - meData.tkfont = Tk_GetFontFromObj(mePtr->menuPtr->tkwin, - mePtr->fontPtr); - Tk_GetFontMetrics(meData.tkfont, &entryMetrics); - fmPtr = &entryMetrics; - } - itemRect.left = menuRectPtr->left + mePtr->x; - itemRect.top = mtdPtr->virtualMenuTop + mePtr->y; - itemRect.right = mePtr->entryFlags & ENTRY_LAST_COLUMN ? - menuRectPtr->right : itemRect.left + mePtr->width; - itemRect.bottom = itemRect.top + mePtr->height; - - if (mePtr->state == ENTRY_ACTIVE) { - theState = kThemeMenuSelected; - } else if (mePtr->state == ENTRY_DISABLED) { - theState = kThemeMenuDisabled; - } else { - theState = kThemeMenuActive; - } - if (mePtr->type == CASCADE_ENTRY) { - theType = kThemeMenuItemHierarchical; + if (ch) { + return [[[NSString alloc] initWithCharacters:&ch length:1] autorelease]; } else { - theType = kThemeMenuItemPlain; + return [[[[NSString alloc] initWithUTF8String:accel] autorelease] + lowercaseString]; } - if (erase) { - DisableScreenUpdates(); - DrawMenuBackground(mePtr->menuPtr, &itemRect, d); - } - DrawThemeMenuItem(menuRectPtr, &itemRect, - mtdPtr->virtualMenuTop, mtdPtr->virtualMenuBottom, theState, - theType | kThemeMenuItemNoBackground, tkThemeMenuItemDrawingUPP, - (unsigned long) &meData); - if (erase) { - EnableScreenUpdates(); - } -} - -/* - *---------------------------------------------------------------------- - * - * ThemeMenuItemDrawingProc -- - * - * This routine is called from the Appearance DrawThemeMenuEntry - * - * Results: - * A menu entry is drawn - * - * Side effects: - * None - * - *---------------------------------------------------------------------- - */ -pascal void -ThemeMenuItemDrawingProc( - const Rect *inBounds, - SInt16 inDepth, - Boolean inIsColorDevice, - SInt32 inUserData) -{ - MenuEntryUserData *meData = (MenuEntryUserData *) inUserData; - - TkpDrawMenuEntry(meData->mePtr, meData->mdefDrawable, meData->tkfont, - meData->fmPtr, inBounds->left, inBounds->top, inBounds->right - - inBounds->left + menuItemExtraWidth, inBounds->bottom - - inBounds->top + menuItemExtraHeight, 0, 1); -} -#endif /* USE_TK_MDEF */ - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXHandleTearoffMenu() -- - * - * This routine sees if the MDEF has set a menu and a mouse position - * for tearing off and makes a tearoff menu if it has. - * - * Results: - * menuPtr->interp will have the result of the tearoff command. - * - * Side effects: - * A new tearoff menu is created if it is supposed to be. - * - *---------------------------------------------------------------------- - */ - -void -TkMacOSXHandleTearoffMenu(void) -{ - /* - * Obsolete: Nothing to do. - */ } /* *-------------------------------------------------------------- * - * TkpInitializeMenuBindings -- + * ModifierCharWidth -- * - * For every interp, initializes the bindings for Windows - * menus. Does nothing on Mac or XWindows. + * Helper mesuring width of command char in given font. * * Results: - * None. + * Width of command char. * * Side effects: - * C-level bindings are setup for the interp which will - * handle Alt-key sequences for menus without beeping - * or interfering with user-defined Alt-key bindings. - * - *-------------------------------------------------------------- - */ - -void -TkpInitializeMenuBindings( - Tcl_Interp *interp, /* The interpreter to set. */ - Tk_BindingTable bindingTable) - /* The table to add to. */ -{ - /* - * Nothing to do. - */ -} - -/* - *-------------------------------------------------------------- - * - * TkpComputeMenubarGeometry -- - * - * This procedure is invoked to recompute the size and - * layout of a menu that is a menubar clone. - * - * Results: * None. * - * Side effects: - * Fields of menu entries are changed to reflect their - * current positions, and the size of the menu window - * itself may be changed. - * *-------------------------------------------------------------- */ -void -TkpComputeMenubarGeometry( - TkMenu *menuPtr) /* Structure describing menu. */ -{ - TkpComputeStandardMenuGeometry(menuPtr); -} - -/* - *---------------------------------------------------------------------- - * - * DrawTearoffEntry -- - * - * This procedure draws a tearoff entry. - * - * Results: - * None. - * - * Side effects: - * Commands are output to X to display the menu in its - * current mode. - * - *---------------------------------------------------------------------- - */ - -void -DrawTearoffEntry( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are drawing */ - Drawable d, /* The drawable we are drawing into */ - GC gc, /* The gc we are drawing with */ - Tk_Font tkfont, /* The font we are drawing with */ - const Tk_FontMetrics *fmPtr,/* The metrics we are drawing with */ - int x, /* Left edge of entry. */ - int y, /* Top edge of entry. */ - int width, /* Width of entry. */ - int height) /* Height of entry. */ -{ - XPoint points[2]; - int margin, segmentWidth, maxX; - Tk_3DBorder border; - - if (menuPtr->menuType != MASTER_MENU ) { - return; - } - - margin = fmPtr->linespace/2; - points[0].x = x; - points[0].y = y + height/2; - points[1].y = points[0].y; - segmentWidth = 6; - maxX = x + menuPtr->totalWidth - 1; - border = Tk_Get3DBorderFromObj(menuPtr->tkwin, menuPtr->borderPtr); - - while (points[0].x < maxX) { - points[1].x = points[0].x + segmentWidth; - if (points[1].x > maxX) { - points[1].x = maxX; - } - Tk_Draw3DPolygon(menuPtr->tkwin, d, border, points, 2, 1, - TK_RELIEF_RAISED); - points[0].x += 2*segmentWidth; - } -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXSetHelpMenuItemCount -- - * - * Has to be called after the first call to InsertMenu. Sets - * up the global variable for the number of items in the - * unmodified help menu. - * NB. Nobody uses this any more, since you can get the number - * of system help items from HMGetHelpMenu trivially. - * But it is in the stubs table... - * - * Results: - * None. - * - * Side effects: - * Nothing. - * - *---------------------------------------------------------------------- - */ - -void -TkMacOSXSetHelpMenuItemCount(void) -{ - /* - * Obsolete: Nothing to do. - */ -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXMenuClick -- - * - * Prepares a menubar for MenuSelect or MenuKey. - * - * Results: - * None. - * - * Side effects: - * Any pending configurations of the menubar are completed. - * - *---------------------------------------------------------------------- - */ - -void -TkMacOSXMenuClick(void) -{ - TkMenu *menuPtr; - TkMenuReferences *menuRefPtr; - - if ((currentMenuBarInterp != NULL) && (currentMenuBarName != NULL)) { - menuRefPtr = TkFindMenuReferences(currentMenuBarInterp, - currentMenuBarName); - for (menuPtr = menuRefPtr->menuPtr->masterMenuPtr; - menuPtr != NULL; menuPtr = menuPtr->nextInstancePtr) { - if (menuPtr->menuType == MENUBAR) { - CompleteIdlers(menuPtr); - break; - } - } - } - - if (menuBarFlags & MENUBAR_REDRAW_PENDING) { - Tcl_CancelIdleCall(DrawMenuBarWhenIdle, NULL); - DrawMenuBarWhenIdle(NULL); - } -} - -/* - *---------------------------------------------------------------------- - * - * TkpDrawMenuEntry -- - * - * Draws the given menu entry at the given coordinates with the - * given attributes. - * - * Results: - * None. - * - * Side effects: - * X Server commands are executed to display the menu entry. - * - *---------------------------------------------------------------------- - */ - -void -TkpDrawMenuEntry( - TkMenuEntry *mePtr, /* The entry to draw */ - Drawable d, /* What to draw into */ - Tk_Font tkfont, /* Precalculated font for menu */ - const Tk_FontMetrics *menuMetricsPtr, - /* Precalculated metrics for menu */ - int x, /* X-coordinate of topleft of entry */ - int y, /* Y-coordinate of topleft of entry */ - int width, /* Width of the entry rectangle */ - int height, /* Height of the current rectangle */ - int strictMotif, /* Boolean flag */ - int drawArrow) /* Whether or not to draw the cascade - * arrow for cascade items. Only applies - * to Windows. */ +static int +ModifierCharWidth( + Tk_Font tkfont) { - GC gc; - TkMenu *menuPtr = mePtr->menuPtr; - int padY = (menuPtr->menuType == MENUBAR) ? 3 : 0; - GC indicatorGC; - Tk_3DBorder bgBorder, activeBorder; - const Tk_FontMetrics *fmPtr; - Tk_FontMetrics entryMetrics; - int adjustedY = y + padY; - int adjustedHeight = height - 2 * padY; - - /* - * Choose the gc for drawing the foreground part of the entry. - * Under Appearance, we pass a null (appearanceGC) to tell - * ourselves not to change whatever color the appearance manager has set. - */ + static NSString *cmdChar = nil; - if ((mePtr->state == ENTRY_ACTIVE) && !strictMotif) { - gc = mePtr->activeGC; - if (gc == NULL) { - gc = menuPtr->activeGC; - } - } else { - TkMenuEntry *parentEntryPtr = GetParentMenuEntry(menuPtr); - - if (((parentEntryPtr && parentEntryPtr->state == ENTRY_DISABLED) || - (mePtr->state == ENTRY_DISABLED)) && - (menuPtr->disabledFgPtr != NULL)) { - gc = mePtr->disabledGC; - if (gc == NULL) { - gc = menuPtr->disabledGC; - } - } else { - gc = mePtr->textGC; - if (gc == NULL) { - gc = menuPtr->textGC; - } - } - } - - indicatorGC = mePtr->indicatorGC; - if (indicatorGC == NULL) { - indicatorGC = menuPtr->indicatorGC; - } + if (!cmdChar) { + unichar cmd = kCommandUnicode; - bgBorder = Tk_Get3DBorderFromObj(menuPtr->tkwin, - (mePtr->borderPtr == NULL) - ? menuPtr->borderPtr : mePtr->borderPtr); - if (strictMotif) { - activeBorder = bgBorder; - } else { - activeBorder = Tk_Get3DBorderFromObj(menuPtr->tkwin, - (mePtr->activeBorderPtr == NULL) - ? menuPtr->activeBorderPtr : mePtr->activeBorderPtr); - } - - if (mePtr->fontPtr == NULL) { - fmPtr = menuMetricsPtr; - } else { - tkfont = Tk_GetFontFromObj(menuPtr->tkwin, mePtr->fontPtr); - Tk_GetFontMetrics(tkfont, &entryMetrics); - fmPtr = &entryMetrics; - } - - /* - * Need to draw the entire background, including padding. On Unix, - * for menubars, we have to draw the rest of the entry taking - * into account the padding. - */ - - DrawMenuEntryBackground(menuPtr, mePtr, d, activeBorder, bgBorder, x, y, - width, height); - - if (mePtr->type == SEPARATOR_ENTRY) { - DrawMenuSeparator(menuPtr, mePtr, d, gc, tkfont, - fmPtr, x, adjustedY, width, adjustedHeight); - } else if (mePtr->type == TEAROFF_ENTRY) { - DrawTearoffEntry(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, adjustedY, - width, adjustedHeight); - } else { - DrawMenuEntryLabel(menuPtr, mePtr, d, gc, tkfont, fmPtr, x, - adjustedY, width, adjustedHeight); - DrawMenuEntryAccelerator(menuPtr, mePtr, d, gc, tkfont, fmPtr, - activeBorder, x, adjustedY, width, adjustedHeight, drawArrow); - if (!mePtr->hideMargin) { - DrawMenuEntryIndicator(menuPtr, mePtr, d, gc, indicatorGC, tkfont, - fmPtr, x, adjustedY, width, adjustedHeight); - } + cmdChar = [[NSString alloc] initWithCharacters:&cmd length:1]; } + return [cmdChar sizeWithAttributes: + TkMacOSXNSFontAttributesForFont(tkfont)].width; } /* @@ -3148,16 +1030,15 @@ TkpDrawMenuEntry( * * TkpComputeStandardMenuGeometry -- * - * This procedure is invoked to recompute the size and - * layout of a menu that is not a menubar clone. + * This procedure is invoked to recompute the size and layout of a menu + * that is not a menubar clone. * * Results: * None. * * Side effects: - * Fields of menu entries are changed to reflect their - * current positions, and the size of the menu window - * itself may be changed. + * Fields of menu entries are changed to reflect their current positions, + * and the size of the menu window itself may be changed. * *-------------------------------------------------------------- */ @@ -3168,13 +1049,12 @@ TkpComputeStandardMenuGeometry( { Tk_Font tkfont, menuFont; Tk_FontMetrics menuMetrics, entryMetrics, *fmPtr; - int x, y, height, modifierWidth, labelWidth, indicatorSpace; - int windowWidth, windowHeight, accelWidth, maxAccelTextWidth; - int i, j, lastColumnBreak, maxModifierWidth, maxWidth, nonAccelMargin; - int maxNonAccelMargin, maxEntryWithAccelWidth, maxEntryWithoutAccelWidth; + int modifierCharWidth, menuModifierCharWidth; + int x, y, modifierWidth, labelWidth, indicatorSpace; + int windowWidth, windowHeight, accelWidth; + int i, j, lastColumnBreak, maxWidth; int entryWidth, maxIndicatorSpace, borderWidth, activeBorderWidth; TkMenuEntry *mePtr, *columnEntryPtr; - EntryGeometry *geometryPtr; int haveAccel = 0; if (menuPtr->tkwin == NULL) { @@ -3186,25 +1066,22 @@ TkpComputeStandardMenuGeometry( Tk_GetPixelsFromObj(NULL, menuPtr->tkwin, menuPtr->activeBorderWidthPtr, &activeBorderWidth); x = y = borderWidth; - indicatorSpace = labelWidth = accelWidth = maxAccelTextWidth = 0; - windowHeight = windowWidth = maxWidth = lastColumnBreak = 0; - maxModifierWidth = nonAccelMargin = maxNonAccelMargin = 0; - maxEntryWithAccelWidth = maxEntryWithoutAccelWidth = 0; + windowHeight = maxWidth = lastColumnBreak = 0; maxIndicatorSpace = 0; /* - * On the Mac especially, getting font metrics can be quite slow, - * so we want to do it intelligently. We are going to precalculate - * them and pass them down to all of the measuring and drawing - * routines. We will measure the font metrics of the menu once. - * If an entry does not have its own font set, then we give - * the geometry/drawing routines the menu's font and metrics. - * If an entry has its own font, we will measure that font and - * give all of the geometry/drawing the entry's font and metrics. + * On the Mac especially, getting font metrics can be quite slow, so we + * want to do it intelligently. We are going to precalculate them and pass + * them down to all of the measuring and drawing routines. We will measure + * the font metrics of the menu once. If an entry does not have its own + * font set, then we give the geometry/drawing routines the menu's font + * and metrics. If an entry has its own font, we will measure that font + * and give all of the geometry/drawing the entry's font and metrics. */ menuFont = Tk_GetFontFromObj(menuPtr->tkwin, menuPtr->fontPtr); Tk_GetFontMetrics(menuFont, &menuMetrics); + menuModifierCharWidth = ModifierCharWidth(menuFont); for (i = 0; i < menuPtr->numEntries; i++) { mePtr = menuPtr->entries[i]; @@ -3219,10 +1096,12 @@ TkpComputeStandardMenuGeometry( if (mePtr->fontPtr == NULL) { tkfont = menuFont; fmPtr = &menuMetrics; + modifierCharWidth = menuModifierCharWidth; } else { tkfont = Tk_GetFontFromObj(menuPtr->tkwin, mePtr->fontPtr); Tk_GetFontMetrics(tkfont, &entryMetrics); fmPtr = &entryMetrics; + modifierCharWidth = ModifierCharWidth(tkfont); } if ((i > 0) && mePtr->columnBreak) { @@ -3231,120 +1110,106 @@ TkpComputeStandardMenuGeometry( } for (j = lastColumnBreak; j < i; j++) { columnEntryPtr = menuPtr->entries[j]; - geometryPtr = - (EntryGeometry *) columnEntryPtr->platformEntryData; - columnEntryPtr->indicatorSpace = maxIndicatorSpace; columnEntryPtr->width = maxIndicatorSpace + maxWidth + 2 * activeBorderWidth; - geometryPtr->accelTextWidth = maxAccelTextWidth; - geometryPtr->modifierWidth = maxModifierWidth; columnEntryPtr->x = x; columnEntryPtr->entryFlags &= ~ENTRY_LAST_COLUMN; - if (maxEntryWithoutAccelWidth > maxEntryWithAccelWidth) { - geometryPtr->nonAccelMargin = maxEntryWithoutAccelWidth - - maxEntryWithAccelWidth; - if (geometryPtr->nonAccelMargin > maxNonAccelMargin) { - geometryPtr->nonAccelMargin = maxNonAccelMargin; - } - } else { - geometryPtr->nonAccelMargin = 0; - } } x += maxIndicatorSpace + maxWidth + 2 * borderWidth; - windowWidth = x; - maxWidth = maxIndicatorSpace = maxAccelTextWidth = 0; - maxModifierWidth = maxNonAccelMargin = maxEntryWithAccelWidth = 0; - maxEntryWithoutAccelWidth = 0; + maxWidth = maxIndicatorSpace = 0; lastColumnBreak = i; y = borderWidth; } - geometryPtr = (EntryGeometry *) mePtr->platformEntryData; - - if (mePtr->type == SEPARATOR_ENTRY) { - GetMenuSeparatorGeometry(menuPtr, mePtr, tkfont, - fmPtr, &entryWidth, &height); - mePtr->height = height; - } else if (mePtr->type == TEAROFF_ENTRY) { - GetTearoffEntryGeometry(menuPtr, mePtr, tkfont, - fmPtr, &entryWidth, &height); - mePtr->height = height; + accelWidth = modifierWidth = indicatorSpace = 0; + if (mePtr->type == SEPARATOR_ENTRY || mePtr->type == TEAROFF_ENTRY) { + mePtr->height = menuSeparatorHeight; } else { /* - * For each entry, compute the height required by that - * particular entry, plus three widths: the width of the - * label, the width to allow for an indicator to be displayed - * to the left of the label (if any), and the width of the - * accelerator to be displayed to the right of the label - * (if any). These sizes depend, of course, on the type - * of the entry. + * For each entry, compute the height required by that particular + * entry, plus three widths: the width of the label, the width to + * allow for an indicator to be displayed to the left of the label + * (if any), and the width of the accelerator to be displayed to + * the right of the label (if any). These sizes depend, of course, + * on the type of the entry. */ - GetMenuLabelGeometry(mePtr, tkfont, fmPtr, &labelWidth, &height); - mePtr->height = height; + NSMenuItem *menuItem = (NSMenuItem *) mePtr->platformEntryData; + int haveImage = 0, width = 0, height = 0; - nonAccelMargin = 0; - if (mePtr->type == CASCADE_ENTRY) { - GetMenuAccelGeometry(menuPtr, mePtr, tkfont, fmPtr, - &modifierWidth, &accelWidth, &height); - } else if (mePtr->accelLength == 0) { - if (haveAccel && !mePtr->hideMargin) { - if (IS_THEME_MENU_FONT(tkfont)) { - nonAccelMargin = menuSymbols[COMMAND_SYMBOL].width; - } else { - nonAccelMargin = Tk_TextWidth(tkfont, - menuSymbols[COMMAND_SYMBOL].utf, - menuSymbols[COMMAND_SYMBOL].utfLen); - } + if (mePtr->image) { + Tk_SizeOfImage(mePtr->image, &width, &height); + haveImage = 1; + } else if (mePtr->bitmapPtr) { + Pixmap bitmap = Tk_GetBitmapFromObj(menuPtr->tkwin, + mePtr->bitmapPtr); + + Tk_SizeOfBitmap(menuPtr->display, bitmap, &width, &height); + haveImage = 1; + } + if (!haveImage || (mePtr->compound != COMPOUND_NONE)) { + NSAttributedString *attrTitle = [menuItem attributedTitle]; + NSSize size; + + if (attrTitle) { + size = [attrTitle size]; + } else { + size = [[menuItem title] sizeWithAttributes: + TkMacOSXNSFontAttributesForFont(tkfont)]; } - accelWidth = modifierWidth = 0; - } else { - GetMenuAccelGeometry(menuPtr, mePtr, tkfont, - fmPtr, &modifierWidth, &accelWidth, &height); - if (height > mePtr->height) { - mePtr->height = height; + size.width += menuTextLeadingEdgeMargin + + menuTextTrailingEdgeMargin; + if (size.height < fmPtr->linespace) { + size.height = fmPtr->linespace; + } + if (haveImage && (mePtr->compound != COMPOUND_NONE)) { + int margin = width + menuIconTrailingEdgeMargin; + + if (margin > menuTextLeadingEdgeMargin) { + margin = menuTextLeadingEdgeMargin; + } + width += size.width + menuIconTrailingEdgeMargin - margin; + if (size.height > height) { + height = size.height; + } + } else { + width = size.width; + height = size.height; } } + labelWidth = width + menuItemExtraWidth; + mePtr->height = height + menuItemExtraHeight; - if (!(mePtr->hideMargin)) { - GetMenuIndicatorGeometry(menuPtr, mePtr, tkfont, - fmPtr, &indicatorSpace, &height); - if (height > mePtr->height) { - mePtr->height = height; + if (mePtr->type == CASCADE_ENTRY) { + modifierWidth = modifierCharWidth; + } else if (mePtr->accelLength == 0) { + if (haveAccel && !mePtr->hideMargin) { + modifierWidth = modifierCharWidth; } } else { - indicatorSpace = 0; - } + NSUInteger modifMask = [menuItem keyEquivalentModifierMask]; + int i = 0; - if (nonAccelMargin > maxNonAccelMargin) { - maxNonAccelMargin = nonAccelMargin; - } - if (accelWidth > maxAccelTextWidth) { - maxAccelTextWidth = accelWidth; + while (modifiers[i].name) { + if (modifMask & modifiers[i].mask) { + modifMask &= ~modifiers[i].mask; + modifierWidth += modifierCharWidth; + } + i++; + } + accelWidth = [[menuItem keyEquivalent] sizeWithAttributes: + TkMacOSXNSFontAttributesForFont(tkfont)].width; } - if (modifierWidth > maxModifierWidth) { - maxModifierWidth = modifierWidth; + if (!mePtr->hideMargin) { + indicatorSpace = menuMarkColumnWidth; } if (indicatorSpace > maxIndicatorSpace) { maxIndicatorSpace = indicatorSpace; } - - entryWidth = labelWidth + modifierWidth + accelWidth - + nonAccelMargin; - + entryWidth = labelWidth + modifierWidth + accelWidth; if (entryWidth > maxWidth) { maxWidth = entryWidth; } - - if (mePtr->accelLength > 0) { - if (entryWidth > maxEntryWithAccelWidth) { - maxEntryWithAccelWidth = entryWidth; - } - } else { - if (entryWidth > maxEntryWithoutAccelWidth) { - maxEntryWithoutAccelWidth = entryWidth; - } - } mePtr->height += 2 * activeBorderWidth; } mePtr->y = y; @@ -3356,33 +1221,16 @@ TkpComputeStandardMenuGeometry( for (j = lastColumnBreak; j < menuPtr->numEntries; j++) { columnEntryPtr = menuPtr->entries[j]; - geometryPtr = (EntryGeometry *) columnEntryPtr->platformEntryData; - columnEntryPtr->indicatorSpace = maxIndicatorSpace; columnEntryPtr->width = maxIndicatorSpace + maxWidth + 2 * activeBorderWidth; - geometryPtr->accelTextWidth = maxAccelTextWidth; columnEntryPtr->x = x; columnEntryPtr->entryFlags |= ENTRY_LAST_COLUMN; - if (maxEntryWithoutAccelWidth > maxEntryWithAccelWidth) { - geometryPtr->nonAccelMargin = maxEntryWithoutAccelWidth - - maxEntryWithAccelWidth; - if (geometryPtr->nonAccelMargin > maxNonAccelMargin) { - geometryPtr->nonAccelMargin = maxNonAccelMargin; - } - } else { - geometryPtr->nonAccelMargin = 0; - } } windowWidth = x + maxIndicatorSpace + maxWidth + 2 * activeBorderWidth + borderWidth; windowHeight += borderWidth; - /* - * The X server doesn't like zero dimensions, so round up to at least - * 1 (a zero-sized menu should never really occur, anyway). - */ - if (windowWidth <= 0) { windowWidth = 1; } @@ -3396,353 +1244,7 @@ TkpComputeStandardMenuGeometry( /* *---------------------------------------------------------------------- * - * DrawMenuEntryLabel -- - * - * This procedure draws the label part of a menu. - * - * Results: - * None. - * - * Side effects: - * Commands are output to X to display the menu in its - * current mode. - * - *---------------------------------------------------------------------- - */ - -void -DrawMenuEntryLabel( - TkMenu *menuPtr, /* The menu we are drawing */ - TkMenuEntry *mePtr, /* The entry we are drawing */ - Drawable d, /* What we are drawing into */ - GC gc, /* The gc we are drawing into */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalculated font metrics */ - int x, /* left edge */ - int y, /* right edge */ - int width, /* width of entry */ - int height) /* height of entry */ -{ - int imageWidth, imageHeight, textWidth = 0, textHeight = 0; - int indicatorSpace = mePtr->indicatorSpace; - int leftEdge = x + indicatorSpace; - int haveImage = 0, haveText = 0; - int imageXOffset = 0, imageYOffset = 0; - int textXOffset = 0, textYOffset = 0; - Pixmap bitmap = (Pixmap) NULL; - Tcl_DString itemTextDString; - - /* - * Work out what we will need to draw first. - */ - - if (mePtr->image != NULL) { - Tk_SizeOfImage(mePtr->image, &imageWidth, &imageHeight); - haveImage = 1; - } else if (mePtr->bitmapPtr != NULL) { - bitmap = Tk_GetBitmapFromObj(menuPtr->tkwin, mePtr->bitmapPtr); - Tk_SizeOfBitmap(menuPtr->display, bitmap, &imageWidth, &imageHeight); - haveImage = 1; - } - if (!haveImage || (mePtr->compound != COMPOUND_NONE)) { - if (mePtr->labelLength > 0) { - GetEntryText(mePtr, &itemTextDString); - if (mePtr->compound != COMPOUND_NONE) { - textWidth = Tk_TextWidth(tkfont, - Tcl_DStringValue(&itemTextDString), - Tcl_DStringLength(&itemTextDString)) + - menuTextLeadingEdgeMargin + menuTextTrailingEdgeMargin; - textHeight = fmPtr->linespace; - } - haveText = 1; - } - } - - /* - * Now work out what the relative positions are. - */ - - if (haveImage && haveText && (mePtr->compound != COMPOUND_NONE)) { - int fullWidth = (imageWidth > textWidth ? imageWidth : textWidth); - - switch ((enum compound) mePtr->compound) { - case COMPOUND_TOP: - textXOffset = (fullWidth - textWidth)/2; - textYOffset = imageHeight/2 + 2; - imageXOffset = (fullWidth - imageWidth)/2; - imageYOffset = -textHeight/2; - break; - case COMPOUND_BOTTOM: - textXOffset = (fullWidth - textWidth)/2; - textYOffset = -imageHeight/2; - imageXOffset = (fullWidth - imageWidth)/2; - imageYOffset = textHeight/2 + 2; - break; - case COMPOUND_LEFT: - /* - * Position image in the indicator space to the left of the - * entries, unless this entry is a radio|check button because - * then the indicator space will be used. - */ - - textXOffset = imageWidth + 2 - menuTextLeadingEdgeMargin; - if ((mePtr->type != CHECK_BUTTON_ENTRY) - && (mePtr->type != RADIO_BUTTON_ENTRY)) { - textXOffset -= indicatorSpace; - imageXOffset = -indicatorSpace; - } - if (textXOffset < 0) { - textXOffset = 0; - } - break; - case COMPOUND_RIGHT: - imageXOffset = textWidth + 2 - menuTextTrailingEdgeMargin; - break; - case COMPOUND_CENTER: - textXOffset = (fullWidth - textWidth)/2; - imageXOffset = (fullWidth - imageWidth)/2; - break; - case COMPOUND_NONE: - /* - * Never reached. - */ - break; - } - } - - /* - * Draw label and/or bitmap or image for entry. - */ - - if (mePtr->image != NULL) { - if ((mePtr->selectImage != NULL) - && (mePtr->entryFlags & ENTRY_SELECTED)) { - Tk_RedrawImage(mePtr->selectImage, 0, 0, imageWidth, imageHeight, - d, leftEdge + imageXOffset, - y + (mePtr->height - imageHeight)/2 + imageYOffset); - } else { - Tk_RedrawImage(mePtr->image, 0, 0, imageWidth, imageHeight, - d, leftEdge + imageXOffset, - y + (mePtr->height - imageHeight)/2 + imageYOffset); - } - } else if (mePtr->bitmapPtr != NULL) { - XCopyPlane(menuPtr->display, bitmap, d, gc, 0, 0, imageWidth, - imageHeight, leftEdge + imageXOffset, - y + (mePtr->height - imageHeight)/2 + imageYOffset, 1); - } - if (haveText) { - int baseline = y + (height + fmPtr->ascent - fmPtr->descent)/2; - - Tk_DrawChars(menuPtr->display, d, gc, tkfont, - Tcl_DStringValue(&itemTextDString), - Tcl_DStringLength(&itemTextDString), - leftEdge + menuTextLeadingEdgeMargin + textXOffset, - baseline + textYOffset); - Tcl_DStringFree(&itemTextDString); - } - - if (mePtr->state == ENTRY_DISABLED) { - if (menuPtr->disabledFgPtr == NULL) { - /* XFillRectangle(menuPtr->display, d, menuPtr->disabledGC, x, y, - width, height); */ - } else if ((mePtr->image != NULL) - && (menuPtr->disabledImageGC != None)) { - XFillRectangle(menuPtr->display, d, menuPtr->disabledImageGC, - leftEdge + imageXOffset, - y + (mePtr->height - imageHeight)/2 + imageYOffset, - imageWidth, imageHeight); - } - } -} - -/* - *---------------------------------------------------------------------- - * - * DrawMenuEntryBackground -- - * - * This procedure draws the background part of a menu entry. - * Under Appearance, we only draw the background if the entry's - * border is set, we DO NOT inherit it from the menu... - * - * Results: - * None. - * - * Side effects: - * Commands are output to X to display the menu in its - * current mode. - * - *---------------------------------------------------------------------- - */ - -void -DrawMenuEntryBackground( - TkMenu *menuPtr, /* The menu we are drawing. */ - TkMenuEntry *mePtr, /* The entry we are drawing. */ - Drawable d, /* What we are drawing into */ - Tk_3DBorder activeBorder, /* Border for active items */ - Tk_3DBorder bgBorder, /* Border for the background */ - int x, /* left edge */ - int y, /* top edge */ - int width, /* width of rectangle to draw */ - int height) /* height of rectangle to draw */ -{ - if ((menuPtr->menuType == TEAROFF_MENU) - || ((mePtr->state == ENTRY_ACTIVE) - && (mePtr->activeBorderPtr != None)) - || ((mePtr->state != ENTRY_ACTIVE) && (mePtr->borderPtr != None))) { - if (mePtr->state == ENTRY_ACTIVE) { - bgBorder = activeBorder; - } - Tk_Fill3DRectangle(menuPtr->tkwin, d, bgBorder, - x, y, width, height, 0, TK_RELIEF_FLAT); - } -} - -/* - *---------------------------------------------------------------------- - * - * GetMenuLabelGeometry -- - * - * Figures out the size of the label portion of a menu item. - * - * Results: - * widthPtr and heightPtr are filled in with the correct geometry - * information. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -void -GetMenuLabelGeometry( - TkMenuEntry *mePtr, /* The entry we are computing */ - Tk_Font tkfont, /* The precalculated font */ - const Tk_FontMetrics *fmPtr,/* The precalculated metrics */ - int *widthPtr, /* The resulting width of the label portion */ - int *heightPtr) /* The resulting height of the label portion */ -{ - TkMenu *menuPtr = mePtr->menuPtr; - int haveImage = 0, tornOff = (menuPtr->menuType == TEAROFF_MENU); -#ifdef USE_TK_MDEF - const int useMDEF = ((MacMenu *) menuPtr->platformData)->useMDEF; -#endif - - if (mePtr->image != NULL && (useMDEF || tornOff)) { - Tk_SizeOfImage(mePtr->image, widthPtr, heightPtr); - haveImage = 1; - } else if (mePtr->bitmapPtr != NULL && (useMDEF || tornOff)) { - Pixmap bitmap = Tk_GetBitmapFromObj(menuPtr->tkwin, mePtr->bitmapPtr); - Tk_SizeOfBitmap(menuPtr->display, bitmap, widthPtr, heightPtr); - haveImage = 1; - } - if (!haveImage || (mePtr->compound != COMPOUND_NONE)) { - int textWidth = 0, textHeight = fmPtr->linespace; - - if (mePtr->labelPtr != NULL) { - Tcl_DString itemTextDString; - - GetEntryText(mePtr, &itemTextDString); - textWidth = Tk_TextWidth(tkfont, - Tcl_DStringValue(&itemTextDString), - Tcl_DStringLength(&itemTextDString)) + - menuTextLeadingEdgeMargin + menuTextTrailingEdgeMargin; - Tcl_DStringFree(&itemTextDString); - - if (haveImage && (mePtr->compound != COMPOUND_NONE)) { - switch ((enum compound) mePtr->compound) { - int margin; - - case COMPOUND_TOP: - case COMPOUND_BOTTOM: - if (textWidth > *widthPtr) { - *widthPtr = textWidth; - } - *heightPtr += textHeight + 2; - break; - case COMPOUND_LEFT: - margin = *widthPtr + 2; - if (margin > menuTextLeadingEdgeMargin) { - margin = menuTextLeadingEdgeMargin; - } - *widthPtr += textWidth + 2 - margin; - if (textHeight > *heightPtr) { - *heightPtr = textHeight; - } - break; - case COMPOUND_RIGHT: - margin = menuTextTrailingEdgeMargin; - *widthPtr += textWidth + 2 - margin; - if (textHeight > *heightPtr) { - *heightPtr = textHeight; - } - break; - case COMPOUND_CENTER: - if (textWidth > *widthPtr) { - *widthPtr = textWidth; - } - if (textHeight > *heightPtr) { - *heightPtr = textHeight; - } - break; - case COMPOUND_NONE: - /* - * Never reached. - */ - break; - } - goto labelGeomDone; - } - } - *widthPtr = textWidth; - *heightPtr = textHeight; - } - -labelGeomDone: - *heightPtr += menuItemExtraHeight; - *widthPtr += menuItemExtraWidth; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXGenerateParentMenuSelectEvent -- - * - * Respond to a hierarchical menu being opened. - * - * Results: - * True if event(s) are generated - false otherwise. - * - * Side effects: - * Places a virtual event on the event queue. - * - *---------------------------------------------------------------------- - */ - -int -TkMacOSXGenerateParentMenuSelectEvent( - MenuRef menu) -{ - TkMenu *menuPtr = MenuPtrForMenuRef(menu); - - if (menuPtr) { - TkMenuEntry *parentEntryPtr = GetParentMenuEntry(menuPtr); - - if (parentEntryPtr && (menuPtr = parentEntryPtr->menuPtr)) { - TkActivateMenuEntry(menuPtr, parentEntryPtr->index); - MenuSelectEvent(menuPtr); - Tcl_ServiceAll(); - return true; - } - } - return false; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXGenerateMenuSelectEvent -- + * GenerateMenuSelectEvent -- * * Respond to a menu item being selected. * @@ -3756,34 +1258,34 @@ TkMacOSXGenerateParentMenuSelectEvent( */ int -TkMacOSXGenerateMenuSelectEvent( - MenuRef menu, - MenuItemIndex index) +GenerateMenuSelectEvent( + TKMenu *menu, + NSMenuItem *menuItem) { - TkMenu *menuPtr = MenuPtrForMenuRef(menu); - int item = index - 1; + TkMenu *menuPtr = [menu tkMenu]; if (menuPtr) { - if (item < 0 || item >= menuPtr->numEntries || - (menuPtr->entries[item])->state == ENTRY_DISABLED) { + int index = [menu tkIndexOfItem:menuItem]; + + if (index < 0 || index >= menuPtr->numEntries || + (menuPtr->entries[index])->state == ENTRY_DISABLED) { TkActivateMenuEntry(menuPtr, -1); } else { - TkActivateMenuEntry(menuPtr, item); + TkActivateMenuEntry(menuPtr, index); MenuSelectEvent(menuPtr); - Tcl_ServiceAll(); return true; } } return false; } - + /* *---------------------------------------------------------------------- * * MenuSelectEvent -- * - * Generates a "MenuSelect" virtual event. This can be used to - * do context-sensitive menu help. + * Generates a "MenuSelect" virtual event. This can be used to do + * context-sensitive menu help. * * Results: * None. @@ -3802,46 +1304,22 @@ MenuSelectEvent( bzero(&event, sizeof(XVirtualEvent)); event.type = VirtualEvent; - event.serial = menuPtr->display->request; + event.serial = LastKnownRequestProcessed(menuPtr->display); event.send_event = false; event.display = menuPtr->display; - Tk_MakeWindowExist(menuPtr->tkwin); event.event = Tk_WindowId(menuPtr->tkwin); event.root = XRootWindow(menuPtr->display, 0); event.subwindow = None; event.time = TkpGetMS(); - XQueryPointer(NULL, None, NULL, NULL, &event.x_root, &event.y_root, NULL, NULL, &event.state); event.same_screen = true; event.name = Tk_GetUid("MenuSelect"); - Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXClearActiveMenu -- - * - * Clears Tk's active entry for the given MenuRef. - * - * Results: - * None. - * - * Side effects: - * Generates <<MenuSelect>> virtual events. - * - *---------------------------------------------------------------------- - */ - -void -TkMacOSXClearActiveMenu( - MenuRef menu) -{ - TkMenu *menuPtr = MenuPtrForMenuRef(menu); - - if (menuPtr) { - RecursivelyClearActiveMenu(menuPtr); + Tk_MakeWindowExist(menuPtr->tkwin); + if (Tcl_GetServiceMode() != TCL_SERVICE_NONE) { + Tk_HandleEvent((XEvent *) &event); + } else { + Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); } } @@ -3866,16 +1344,15 @@ RecursivelyClearActiveMenu( TkMenu *menuPtr) /* The menu to reset. */ { int i; - TkMenuEntry *mePtr; TkActivateMenuEntry(menuPtr, -1); for (i = 0; i < menuPtr->numEntries; i++) { - mePtr = menuPtr->entries[i]; - if (mePtr->type == CASCADE_ENTRY) { - if ((mePtr->childMenuRefPtr != NULL) - && (mePtr->childMenuRefPtr->menuPtr != NULL)) { - RecursivelyClearActiveMenu(mePtr->childMenuRefPtr->menuPtr); - } + TkMenuEntry *mePtr = menuPtr->entries[i]; + + if (mePtr->type == CASCADE_ENTRY + && (mePtr->childMenuRefPtr != NULL) + && (mePtr->childMenuRefPtr->menuPtr != NULL)) { + RecursivelyClearActiveMenu(mePtr->childMenuRefPtr->menuPtr); } } } @@ -3899,20 +1376,13 @@ RecursivelyClearActiveMenu( void TkMacOSXClearMenubarActive(void) { - TkMenuReferences *menuBarRefPtr; - - if (currentMenuBarName != NULL) { - menuBarRefPtr = TkFindMenuReferences(currentMenuBarInterp, - currentMenuBarName); - if ((menuBarRefPtr != NULL) && (menuBarRefPtr->menuPtr != NULL)) { - TkMenu *menuPtr; - - for (menuPtr = menuBarRefPtr->menuPtr->masterMenuPtr; - menuPtr != NULL; menuPtr = menuPtr->nextInstancePtr) { - if (menuPtr->menuType == MENUBAR) { - RecursivelyClearActiveMenu(menuPtr); - } - } + NSMenu *mainMenu = [NSApp mainMenu]; + + if (mainMenu && [mainMenu isKindOfClass:[TKMenu class]]) { + TkMenu *menuPtr = [(TKMenu *) mainMenu tkMenu]; + + if (menuPtr && menuPtr->numEntries && menuPtr->entries) { + RecursivelyClearActiveMenu(menuPtr); } } } @@ -3920,29 +1390,25 @@ TkMacOSXClearMenubarActive(void) /* *---------------------------------------------------------------------- * - * TkpMenuNotifyToplevelCreate -- + * Tk_MacOSXTurnOffMenus -- * - * This routine reconfigures the menu and the clones indicated by - * menuName becuase a toplevel has been created and any system - * menus need to be created. Only applicable to Windows. + * Turns off all the menu drawing code. This is more than just disabling + * the "menu" command, this means that Tk will NEVER touch the menubar. + * It is needed in the Plugin, where Tk does not own the menubar. * * Results: * None. * * Side effects: - * An idle handler is set up to do the reconfiguration. + * A flag is set which will disable all menu drawing. * *---------------------------------------------------------------------- */ void -TkpMenuNotifyToplevelCreate( - Tcl_Interp *interp, /* The interp the menu lives in. */ - char *menuName) /* The name of the menu to reconfigure. */ +Tk_MacOSXTurnOffMenus(void) { - /* - * Nothing to do. - */ + gNoTkMenus = 1; } /* @@ -3964,66 +1430,46 @@ TkpMenuNotifyToplevelCreate( void TkpMenuInit(void) { - MenuSymbol *ms = menuSymbols; - CFStringRef cfStr; - - lastMenuID = 256; - Tcl_InitHashTable(&commandTable, TCL_ONE_WORD_KEYS); - currentMenuBarOwner = NULL; - currentAppleMenuID = 0; - currentHelpMenuID = 0; - currentMenuBarInterp = NULL; - currentMenuBarName = NULL; - windowListPtr = NULL; - -#ifdef USE_TK_MDEF - tkThemeMenuItemDrawingUPP - = NewMenuItemDrawingUPP(ThemeMenuItemDrawingProc); - useMDEFVar = Tcl_NewStringObj("::tk::mac::useCustomMDEF", -1); - macMDEFDrawable.winPtr = NULL; - macMDEFDrawable.xOff = 0; - macMDEFDrawable.yOff = 0; - macMDEFDrawable.visRgn = NULL; - macMDEFDrawable.aboveVisRgn = NULL; - macMDEFDrawable.drawRect = CGRectNull; - macMDEFDrawable.referenceCount = 0; - macMDEFDrawable.toplevel = NULL; - macMDEFDrawable.flags = 0; - macMDEFDrawable.grafPtr = NULL; - macMDEFDrawable.context = NULL; - macMDEFDrawable.size = CGSizeZero; -#endif + TkColor *tkColPtr; + + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + +#define observe(n, s) \ + [nc addObserver:NSApp selector:@selector(s) name:(n) object:nil] + observe(NSMenuDidBeginTrackingNotification, menuBeginTracking:); + observe(NSMenuDidEndTrackingNotification, menuEndTracking:); +#undef observe + + [NSMenuItem setUsesUserKeyEquivalents:NO]; + tkColPtr = TkpGetColor(None, DEF_MENU_BG_COLOR); + defaultBg = tkColPtr->color.pixel; + ckfree((char *) tkColPtr); + tkColPtr = TkpGetColor(None, DEF_MENU_FG); + defaultFg = tkColPtr->color.pixel; + ckfree((char *) tkColPtr); ChkErr(GetThemeMetric, kThemeMetricMenuMarkColumnWidth, &menuMarkColumnWidth); - ChkErr(GetThemeMetric, kThemeMetricMenuMarkIndent, &menuMarkIndent); ChkErr(GetThemeMetric, kThemeMetricMenuTextLeadingEdgeMargin, &menuTextLeadingEdgeMargin); ChkErr(GetThemeMetric, kThemeMetricMenuTextTrailingEdgeMargin, &menuTextTrailingEdgeMargin); + ChkErr(GetThemeMetric, kThemeMetricMenuIconTrailingEdgeMargin, + &menuIconTrailingEdgeMargin); ChkErr(GetThemeMenuItemExtra, kThemeMenuItemPlain, &menuItemExtraHeight, &menuItemExtraWidth); ChkErr(GetThemeMenuSeparatorHeight, &menuSeparatorHeight); - - while (ms->unicode) { - ms->utfLen = Tcl_UniCharToUtf(ms->unicode, ms->utf); - ms->utf[ms->utfLen] = 0; - cfStr = CFStringCreateWithCharacters(NULL, &ms->unicode, 1); - if (cfStr) { - ms->width = MeasureThemeText(cfStr, kThemeMenuItemCmdKeyFont); - CFRelease(cfStr); - } - ms++; - } } + +#pragma mark - +#pragma mark NOPs /* *---------------------------------------------------------------------- * * TkpMenuThreadInit -- * - * Does platform-specific initialization of thread-specific - * menu state. + * Does platform-specific initialization of thread-specific menu state. * * Results: * None. @@ -4045,696 +1491,273 @@ TkpMenuThreadInit(void) /* *---------------------------------------------------------------------- * - * TkpPreprocessMacMenu -- + * TkpMenuNotifyToplevelCreate -- * - * Handle preprocessing of menubar if it exists. + * This routine reconfigures the menu and the clones indicated by + * menuName because a toplevel has been created and any system menus need + * to be created. Only applicable to Windows. * * Results: - * None. + * None. * * Side effects: - * All post commands for the current menubar get executed. + * An idle handler is set up to do the reconfiguration. * *---------------------------------------------------------------------- */ void -TkMacOSXPreprocessMenu(void) +TkpMenuNotifyToplevelCreate( + Tcl_Interp *interp, /* The interp the menu lives in. */ + char *menuName) /* The name of the menu to reconfigure. */ { - if ((currentMenuBarName != NULL) && (currentMenuBarInterp != NULL)) { - TkMenuReferences *mbRefPtr = - TkFindMenuReferences(currentMenuBarInterp,currentMenuBarName); - - if ((mbRefPtr != NULL) && (mbRefPtr->menuPtr != NULL)) { - int code; - - Tcl_Preserve((ClientData) currentMenuBarInterp); - code = TkPreprocessMenu(mbRefPtr->menuPtr->masterMenuPtr); - if ((code != TCL_OK) && (code != TCL_CONTINUE) - && (code != TCL_BREAK)) { - Tcl_AddErrorInfo(currentMenuBarInterp, - "\n (menu preprocess)"); - Tcl_BackgroundError(currentMenuBarInterp); - } - Tcl_Release((ClientData) currentMenuBarInterp); - } - } + /* + * Nothing to do. + */ } -#ifdef USE_TK_MDEF -#pragma mark MDEF /* - *---------------------------------------------------------------------- + *-------------------------------------------------------------- * - * MenuDefProc -- + * TkpInitializeMenuBindings -- * - * This routine is the MDEF handler for Tk. It receives all messages - * for the menu and dispatches them. + * For every interp, initializes the bindings for Windows menus. Does + * nothing on Mac or XWindows. * * Results: * None. * * Side effects: - * This routine causes menus to be drawn and will certainly allocate - * memory as a result. Also, the menu can scroll up and down, and - * various other interface actions can take place. + * C-level bindings are setup for the interp which will handle Alt-key + * sequences for menus without beeping or interfering with user-defined + * Alt-key bindings. * - *---------------------------------------------------------------------- + *-------------------------------------------------------------- */ void -MenuDefProc( - SInt16 message, /* What action are we taking? */ - MenuRef menu, /* The menu we are working with */ - Rect *menuRectPtr, /* A pointer to the rect for the - * whole menu. */ - Point hitPt, /* Where the mouse was clicked for - * the appropriate messages. */ - SInt16 *whichItem) /* Output result. Which item was - * hit by the user? */ +TkpInitializeMenuBindings( + Tcl_Interp *interp, /* The interpreter to set. */ + Tk_BindingTable bindingTable) + /* The table to add to. */ { - TkMenu *menuPtr; - Tcl_HashEntry *commandEntryPtr; - MenuID menuID; - - menuID = GetMenuID(menu); - commandEntryPtr = Tcl_FindHashEntry(&commandTable, (char*)(intptr_t)menuID); - - if (!commandEntryPtr) return; - menuPtr = (TkMenu *) Tcl_GetHashValue(commandEntryPtr); + /* + * Nothing to do. + */ +} + +/* + *-------------------------------------------------------------- + * + * TkpComputeMenubarGeometry -- + * + * This procedure is invoked to recompute the size and layout of a menu + * that is a menubar clone. + * + * Results: + * None. + * + * Side effects: + * Fields of menu entries are changed to reflect their current positions, + * and the size of the menu window itself may be changed. + * + *-------------------------------------------------------------- + */ - switch (message) { - case kMenuInitMsg: - *whichItem = noErr; - break; - case kMenuDisposeMsg: - break; - case kMenuHiliteItemMsg: - HandleMenuHiliteMsg(menu, menuRectPtr, hitPt, whichItem, menuPtr); - break; - case kMenuCalcItemMsg: - HandleMenuCalcItemMsg(menu, menuRectPtr, hitPt, whichItem, - menuPtr); - break; - case kMenuDrawItemsMsg: -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("MDEF: DrawItemsMsg"); -#endif - /* - * We do nothing here, because we don't support the Menu Managers - * dynamic item groups - */ - break; - case kMenuThemeSavvyMsg: - *whichItem = kThemeSavvyMenuResponse; - break; - case kMenuSizeMsg: -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("MDEF: SizeMsg %d, %d", hitPt.h, hitPt.v); -#endif - SetMenuWidth(menu, hitPt.h < menuPtr->totalWidth ? hitPt.h : - menuPtr->totalWidth); - SetMenuHeight(menu, hitPt.v < menuPtr->totalHeight ? hitPt.v : - menuPtr->totalHeight); - break; - case kMenuDrawMsg: - HandleMenuDrawMsg(menu, menuRectPtr, hitPt, whichItem, menuPtr); - break; - case kMenuFindItemMsg: - HandleMenuFindItemMsg(menu, menuRectPtr, hitPt, whichItem, - menuPtr); - break; - case kMenuPopUpMsg: - HandleMenuPopUpMsg(menu, menuRectPtr, hitPt, whichItem, menuPtr); - break; - } +void +TkpComputeMenubarGeometry( + TkMenu *menuPtr) /* Structure describing menu. */ +{ + TkpComputeStandardMenuGeometry(menuPtr); } + /* *---------------------------------------------------------------------- * - * HandleMenuHiliteMsg -- + * TkpDrawMenuEntry -- * - * Handles the MenuDefProc's hilite message. + * Draws the given menu entry at the given coordinates with the given + * attributes. * * Results: - * A menu entry is drawn + * None. * * Side effects: - * None + * X Server commands are executed to display the menu entry. * *---------------------------------------------------------------------- */ void -HandleMenuHiliteMsg( - MenuRef menu, - Rect *menuRectPtr, - Point hitPt, - SInt16 *whichItem, - TkMenu *menuPtr) +TkpDrawMenuEntry( + TkMenuEntry *mePtr, /* The entry to draw */ + Drawable d, /* What to draw into */ + Tk_Font tkfont, /* Precalculated font for menu */ + const Tk_FontMetrics *menuMetricsPtr, + /* Precalculated metrics for menu */ + int x, /* X-coordinate of topleft of entry */ + int y, /* Y-coordinate of topleft of entry */ + int width, /* Width of the entry rectangle */ + int height, /* Height of the current rectangle */ + int strictMotif, /* Boolean flag */ + int drawArrow) /* Whether or not to draw the cascade arrow + * for cascade items. Only applies to + * Windows. */ { - OSStatus err; - Tk_Font tkfont; - Tk_FontMetrics fontMetrics; - MDEFHiliteItemData *hidPtr = (MDEFHiliteItemData *)whichItem; - int oldItem = hidPtr->previousItem - 1; - int newItem = hidPtr->newItem - 1; - MenuTrackingData mtd, *mtdPtr = &mtd; - -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("MDEF: HiliteMsg %d -> %d", hidPtr->previousItem, - hidPtr->newItem); -#endif - GetPort(&macMDEFDrawable.grafPtr); - macMDEFDrawable.context = (CGContextRef) hidPtr->context; - - err = ChkErr(GetMenuTrackingData, menu, mtdPtr); - if (err != noErr) { - return; - } - - tkfont = Tk_GetFontFromObj(menuPtr->tkwin, menuPtr->fontPtr); - Tk_GetFontMetrics(tkfont, &fontMetrics); - if (oldItem >= 0) { - AppearanceEntryDrawWrapper(menuPtr->entries[oldItem], menuRectPtr, - mtdPtr, (Drawable) &macMDEFDrawable, &fontMetrics, tkfont, 1); - } - if (newItem >= 0) { - AppearanceEntryDrawWrapper(menuPtr->entries[newItem], menuRectPtr, - mtdPtr, (Drawable) &macMDEFDrawable, &fontMetrics, tkfont, 0); - } } + +#pragma mark Obsolete /* *---------------------------------------------------------------------- * - * HandleMenuDrawMsg -- + * TkMacOSXPreprocessMenu -- * - * Handles the MenuDefProc's draw message. + * Handle preprocessing of menubar if it exists. * * Results: - * A menu entry is drawn + * None. * * Side effects: - * None + * All post commands for the current menubar get executed. * *---------------------------------------------------------------------- */ void -HandleMenuDrawMsg( - MenuRef menu, - Rect *menuRectPtr, - Point hitPt, - SInt16 *whichItem, - TkMenu *menuPtr) +TkMacOSXPreprocessMenu(void) { - Tk_Font menuFont; - Tk_FontMetrics fontMetrics; - TkMenuEntry *mePtr; - int i; - Rect menuClipRect, bounds; - MDEFDrawData *ddPtr = (MDEFDrawData*)whichItem; - MenuTrackingData *mtdPtr = &(ddPtr->trackingData); - TkWindow *winPtr = (TkWindow*)menuPtr->tkwin; - - GetPort(&macMDEFDrawable.grafPtr); - GetPortBounds(macMDEFDrawable.grafPtr, &bounds); - macMDEFDrawable.context = (CGContextRef) ddPtr->context; -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("MDEF: DrawMsg %d - %d; %d - %d", menuRectPtr->top, - menuRectPtr->bottom, bounds.top, bounds.bottom); -#endif - winPtr->changes.x = menuRectPtr->left; - winPtr->changes.y = menuRectPtr->top; - winPtr->changes.width = menuRectPtr->right - menuRectPtr->left; - winPtr->changes.height = menuRectPtr->bottom - menuRectPtr->top; - TkpClipDrawableToRect(menuPtr->display, (Drawable) &macMDEFDrawable, - 0, 0, -1, -1); -#if 0 - if (menuPtr->menuRefPtr->topLevelListPtr != NULL) { - menuType = kThemeMenuTypePullDown; - } else if (menuPtr->menuRefPtr->parentEntryPtr != NULL) { - menuType = kThemeMenuTypeHierarchical; - } else { - menuType = kThemeMenuTypePopUp; - } -#endif - DrawMenuBackground(menuPtr, menuRectPtr, (Drawable) &macMDEFDrawable); - menuFont = Tk_GetFontFromObj(menuPtr->tkwin, menuPtr->fontPtr); - Tk_GetFontMetrics(menuFont, &fontMetrics); - menuClipRect = *menuRectPtr; - mtdPtr->virtualMenuBottom = mtdPtr->virtualMenuTop + menuPtr->totalHeight; - - /* - * Next, figure out scrolling information. - */ - - if ((menuRectPtr->bottom - menuRectPtr->top) < menuPtr->totalHeight) { - short arrowHeight = fontMetrics.linespace + 1; - Rect arrowRect, eraseRect; - ThemeMenuState menuState = IsMenuItemEnabled(menu, 0) ? - kThemeMenuActive : kThemeMenuDisabled; - - if (mtdPtr->virtualMenuTop < menuRectPtr->top) { - arrowRect = bounds; - /*arrowRect.top += 1;*/ - arrowRect.bottom = arrowRect.top + arrowHeight; - eraseRect = arrowRect; - eraseRect.top = menuRectPtr->top; - menuClipRect.top = arrowRect.bottom; - ChkErr(EraseMenuBackground, menu, &eraseRect, - macMDEFDrawable.context); - ChkErr(DrawThemeMenuItem, menuRectPtr, &arrowRect, - mtdPtr->virtualMenuTop, mtdPtr->virtualMenuBottom, - menuState, kThemeMenuItemScrollUpArrow, NULL, 0); -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("upArrow: %d - %d, %d - %d", arrowRect.top, - arrowRect.bottom, arrowRect.left, arrowRect.right); -#endif - } - if (mtdPtr->virtualMenuBottom > menuRectPtr->bottom) { - arrowRect = bounds; - arrowRect.bottom -= 1; - arrowRect.top = arrowRect.bottom - arrowHeight; - eraseRect = arrowRect; - eraseRect.bottom = menuRectPtr->bottom; - menuClipRect.bottom = arrowRect.top; - ChkErr(EraseMenuBackground, menu, &eraseRect, - macMDEFDrawable.context); - ChkErr(DrawThemeMenuItem, menuRectPtr, &arrowRect, - mtdPtr->virtualMenuTop, mtdPtr->virtualMenuBottom, - menuState, kThemeMenuItemScrollDownArrow, NULL, 0); -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("downArrow: %d - %d, %d - %d", arrowRect.top, - arrowRect.bottom, arrowRect.left, arrowRect.right); -#endif - } - TkpClipDrawableToRect(menuPtr->display, (Drawable) &macMDEFDrawable, - menuClipRect.left, menuClipRect.top, menuClipRect.right - - menuClipRect.left, menuClipRect.bottom - menuClipRect.top); - } +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXUseID -- + * + * Take the ID out of the available list for new menus. Used by the + * default menu bar's menus so that they do not get created at the tk + * level. See TkMacOSXGetNewMenuID for more information. + * + * Results: + * Returns TCL_OK if the id was not in use. Returns TCL_ERROR if the id + * was in use. + * + * Side effects: + * A hash table entry in the command table is created with a NULL value. + * + *---------------------------------------------------------------------- + */ - /* - * Now, actually draw the menu. Don't draw entries that - * are higher than the top arrow, and don't draw entries - * that are lower than the bottom. - */ +int +TkMacOSXUseMenuID( + short macID) /* The id to take out of the table */ +{ + return TCL_OK; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXDispatchMenuEvent -- + * + * Given a menu id and an item, dispatches the command associated with + * it. + * + * Results: + * None. + * + * Side effects: + * Commands for the event are scheduled for execution at idle time. + * + *---------------------------------------------------------------------- + */ - for (i = 0; i < menuPtr->numEntries; i++) { - mePtr = menuPtr->entries[i]; - if (mtdPtr->virtualMenuTop + mePtr->y + mePtr->height < - menuClipRect.top || mtdPtr->virtualMenuTop + mePtr->y > - menuClipRect.bottom) { - continue; - } - AppearanceEntryDrawWrapper(mePtr, menuRectPtr, mtdPtr, - (Drawable) &macMDEFDrawable, &fontMetrics, menuFont, 0); - } - MDEFScrollFlag = 1; +int +TkMacOSXDispatchMenuEvent( + int menuID, /* The menu id of the menu we are invoking */ + int index) /* The one-based index of the item that was + * selected. */ +{ + return TCL_ERROR; } /* *---------------------------------------------------------------------- * - * HandleMenuFindItemMsg -- + * TkMacOSXHandleTearoffMenu() -- * - * Handles the MenuDefProc's FindItems message. We have to - * respond by filling in the itemSelected, itemUnderMouse and - * itemRect fields. This is also the time to scroll the menu if - * it is too long to fit on the screen. + * This routine sees if the MDEF has set a menu and a mouse position for + * tearing off and makes a tearoff menu if it has. * * Results: - * The Menu system is informed of the selected item & the item - * under the mouse. + * menuPtr->interp will have the result of the tearoff command. * * Side effects: - * The menu might get scrolled. + * A new tearoff menu is created if it is supposed to be. * *---------------------------------------------------------------------- */ + void -HandleMenuFindItemMsg( - MenuRef menu, - Rect *menuRectPtr, - Point hitPt, - SInt16 *whichItem, - TkMenu *menuPtr) +TkMacOSXHandleTearoffMenu(void) { - Tk_Font menuFont; - Tk_FontMetrics fontMetrics; - TkMenuEntry *mePtr; - int i, newItem = -1, itemUnderMouse = -1; - Rect itemRect = {0, 0, 0, 0}, menuClipRect, bounds; - int hasTopScroll, hasBottomScroll; - MDEFFindItemData *fiPtr = (MDEFFindItemData *)whichItem; - MenuTrackingData *mtdPtr = &(fiPtr->trackingData), topMtd; - enum { - DONT_SCROLL, DOWN_SCROLL, UP_SCROLL - } scrollDirection; - short arrowHeight; - -#ifdef TK_MAC_DEBUG_MENUS - static Point lastHitPt = {0, 0}; - if (hitPt.h != lastHitPt.h || hitPt.v != lastHitPt.v) { - lastHitPt = hitPt; - TkMacOSXDbgMsg("MDEF: FindItemMsg: %d, %d", hitPt.h, hitPt.v); - } -#endif - - GetPort(&macMDEFDrawable.grafPtr); - GetPortBounds(macMDEFDrawable.grafPtr, &bounds); - macMDEFDrawable.context = (CGContextRef) fiPtr->context; - /* - * Now we need to take care of scrolling the menu. - */ - - menuFont = Tk_GetFontFromObj(menuPtr->tkwin, menuPtr->fontPtr); - Tk_GetFontMetrics(menuFont, &fontMetrics); - arrowHeight = fontMetrics.linespace + 1; - menuClipRect = *menuRectPtr; - hasTopScroll = mtdPtr->virtualMenuTop < menuRectPtr->top; - hasBottomScroll = mtdPtr->virtualMenuBottom > menuRectPtr->bottom; - scrollDirection = DONT_SCROLL; - if (hasTopScroll) { - menuClipRect.top = bounds.top + arrowHeight; - if (hitPt.v < menuClipRect.top) { - newItem = -1; - scrollDirection = DOWN_SCROLL; - } - } - if (hasBottomScroll) { - menuClipRect.bottom = bounds.bottom - 1 - arrowHeight; - if (hitPt.v > menuClipRect.bottom) { - newItem = -1; - scrollDirection = UP_SCROLL; - } - } - if (MDEFScrollFlag) { - scrollDirection = DONT_SCROLL; - MDEFScrollFlag = 0; - } - /* - * Don't scroll if there are other menus open above us + * Obsolete: Nothing to do. */ - ChkErr(GetMenuTrackingData, NULL, &topMtd); - if (menu != topMtd.menu) { - scrollDirection = DONT_SCROLL; - } - if (scrollDirection == DONT_SCROLL) { - /* - * Find out which item was hit. If it is the same as the old item, - * we don't need to do anything. - */ - - if (PtInRect(hitPt, menuRectPtr)) { - for (i = 0; i < menuPtr->numEntries; i++) { - mePtr = menuPtr->entries[i]; - itemRect.left = menuRectPtr->left + mePtr->x; - itemRect.top = mtdPtr->virtualMenuTop + mePtr->y; - itemRect.right = mePtr->entryFlags & ENTRY_LAST_COLUMN ? - menuRectPtr->right : itemRect.left + mePtr->width; - itemRect.bottom = itemRect.top + mePtr->height; - if (PtInRect(hitPt, &itemRect)) { - if ((mePtr->type == SEPARATOR_ENTRY) - || (mePtr->state == ENTRY_DISABLED)) { - newItem = -1; - itemUnderMouse = i; - } else { - TkMenuEntry *parentEntryPtr = - GetParentMenuEntry(menuPtr); - - if (parentEntryPtr && - parentEntryPtr->state == ENTRY_DISABLED) { - newItem = -1; - itemUnderMouse = i; - } else { - newItem = i; - itemUnderMouse = i; - } - } - break; - } - } - } - } else { - short scrollAmt; - unsigned long scrollDelay; - Rect arrowRect, eraseRect, scrolledMenuClipRect; - ThemeMenuState menuState = IsMenuItemEnabled(menu, 0) ? - kThemeMenuActive : kThemeMenuDisabled; - int oldItem = mtdPtr->itemSelected - 1; - short d; - - TkpClipDrawableToRect(menuPtr->display, (Drawable) &macMDEFDrawable, - 0, 0, -1, -1); - scrollAmt = fontMetrics.linespace + menuItemExtraHeight; - if (scrollDirection == UP_SCROLL) { - scrollAmt = -scrollAmt; - d = hitPt.v - bounds.bottom; - } else { - d = bounds.top - hitPt.v; - } - scrollDelay = (d >= scrollAmt/2) ? 1 : 10; - menuClipRect = *menuRectPtr; - if (mtdPtr->virtualMenuTop + scrollAmt < menuRectPtr->top) { - arrowRect = bounds; - /*arrowRect.top += 1;*/ - arrowRect.bottom = arrowRect.top + arrowHeight; - eraseRect = arrowRect; - eraseRect.top = menuRectPtr->top; - menuClipRect.top = arrowRect.bottom; - if (!hasTopScroll) { - ChkErr(EraseMenuBackground, menu, &eraseRect, - macMDEFDrawable.context); - ChkErr(DrawThemeMenuItem, menuRectPtr, &arrowRect, - mtdPtr->virtualMenuTop + scrollAmt, - mtdPtr->virtualMenuBottom + scrollAmt, - menuState, kThemeMenuItemScrollUpArrow, NULL, 0); -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("upArrow: %d - %d, %d - %d", arrowRect.top, - arrowRect.bottom, arrowRect.left, arrowRect.right); -#endif - } - } - if (mtdPtr->virtualMenuBottom + scrollAmt > menuRectPtr->bottom) { - arrowRect = bounds; - arrowRect.bottom -= 1; - arrowRect.top = arrowRect.bottom - arrowHeight; - eraseRect = arrowRect; - eraseRect.bottom = menuRectPtr->bottom; - menuClipRect.bottom = arrowRect.top; - if (!hasBottomScroll) { - ChkErr(EraseMenuBackground, menu, &eraseRect, - macMDEFDrawable.context); - ChkErr(DrawThemeMenuItem, menuRectPtr, &arrowRect, - mtdPtr->virtualMenuTop + scrollAmt, - mtdPtr->virtualMenuBottom + scrollAmt, - menuState, kThemeMenuItemScrollDownArrow, NULL, 0); -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("downArrow: %d - %d, %d - %d", arrowRect.top, - arrowRect.bottom, arrowRect.left, arrowRect.right); -#endif - } - } - TkpClipDrawableToRect(menuPtr->display, (Drawable) &macMDEFDrawable, - menuClipRect.left, menuClipRect.top, menuClipRect.right - - menuClipRect.left, menuClipRect.bottom - menuClipRect.top); - TkActivateMenuEntry(menuPtr, -1); - if (oldItem >= 0) { - AppearanceEntryDrawWrapper(menuPtr->entries[oldItem], menuRectPtr, - mtdPtr, (Drawable) &macMDEFDrawable, &fontMetrics, - menuFont, 1); - } - ChkErr(ScrollMenuImage, menu, &menuClipRect, 0, scrollAmt, - macMDEFDrawable.context); - mtdPtr->virtualMenuTop += scrollAmt; - mtdPtr->virtualMenuBottom += scrollAmt; - scrolledMenuClipRect = menuClipRect; - OffsetRect(&scrolledMenuClipRect, 0, scrollAmt); - menuClipRect = bounds; - if (mtdPtr->virtualMenuTop < menuRectPtr->top) { - menuClipRect.top += arrowHeight; - } - if (mtdPtr->virtualMenuBottom > menuRectPtr->bottom) { - menuClipRect.bottom -= arrowHeight; - } - TkpClipDrawableToRect(menuPtr->display, (Drawable) &macMDEFDrawable, - menuClipRect.left, menuClipRect.top, menuClipRect.right - - menuClipRect.left, menuClipRect.bottom - menuClipRect.top); - if (scrolledMenuClipRect.bottom < menuClipRect.bottom) { - menuClipRect.top = scrolledMenuClipRect.bottom; - } else if (scrolledMenuClipRect.top < menuClipRect.top) { - menuClipRect.bottom = scrolledMenuClipRect.top; - } - for (i = 0; i < menuPtr->numEntries; i++) { - mePtr = menuPtr->entries[i]; - if (mtdPtr->virtualMenuTop + mePtr->y + mePtr->height < - menuClipRect.top || mtdPtr->virtualMenuTop + mePtr->y > - menuClipRect.bottom) { - continue; - } -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("Drawing item %i", i); -#endif - AppearanceEntryDrawWrapper(mePtr, menuRectPtr, mtdPtr, - (Drawable) &macMDEFDrawable, &fontMetrics, menuFont, 1); - } - Delay(scrollDelay, NULL); - } - mtdPtr->itemSelected = newItem + 1; - mtdPtr->itemUnderMouse = itemUnderMouse + 1; - mtdPtr->itemRect = itemRect; } /* *---------------------------------------------------------------------- * - * HandleMenuPopUpMsg -- + * TkMacOSXSetHelpMenuItemCount -- * - * Handles the MenuDefProc's PopUp message. The menu is - * posted with the selected item at the point given in hitPt. + * Has to be called after the first call to InsertMenu. Sets up the + * global variable for the number of items in the unmodified help menu. + * NB. Nobody uses this any more, since you can get the number of system + * help items from HMGetHelpMenu trivially. But it is in the stubs + * table... * * Results: - * A menu is posted. + * None. * * Side effects: - * None. + * Nothing. * *---------------------------------------------------------------------- */ + void -HandleMenuPopUpMsg( - MenuRef menu, - Rect *menuRectPtr, - Point hitPt, - SInt16 *whichItem, - TkMenu *menuPtr) +TkMacOSXSetHelpMenuItemCount(void) { - int maxMenuHeight; - int oldItem; - Rect portRect; - BitMap screenBits; - static SInt16 menuBarHeight = 0; - -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("MDEF: PopUpMsg"); -#endif - - if (!menuBarHeight) { - ChkErr(GetThemeMenuBarHeight, &menuBarHeight); - } - GetQDGlobalsScreenBits(&screenBits); - - /* - * Note that for some oddball reason, h and v are reversed in the - * point given to us by the MDEF. - */ - - oldItem = *whichItem; - if (oldItem >= menuPtr->numEntries) { - oldItem = -1; - } - portRect.top = 0; - portRect.bottom = 1280; - maxMenuHeight = screenBits.bounds.bottom - screenBits.bounds.top - - menuBarHeight - SCREEN_MARGIN; - if (menuPtr->totalHeight > maxMenuHeight) { - menuRectPtr->top = menuBarHeight; - } else { - int delta; - - menuRectPtr->top = hitPt.h; - if (oldItem >= 0) { - menuRectPtr->top -= menuPtr->entries[oldItem]->y; - } - - if (menuRectPtr->top < menuBarHeight) { - /* - * Displace downward if the menu would stick off the top of the - * screen. - */ - - menuRectPtr->top = menuBarHeight + SCREEN_MARGIN; - } else { - /* - * Or upward if the menu sticks off the bottom end... - */ - - delta = menuRectPtr->top + menuPtr->totalHeight - maxMenuHeight; - if (delta > 0) { - menuRectPtr->top -= delta; - } - } - } - menuRectPtr->left = hitPt.v; - menuRectPtr->right = menuRectPtr->left + menuPtr->totalWidth; - menuRectPtr->bottom = menuRectPtr->top + - ((maxMenuHeight < menuPtr->totalHeight) - ? maxMenuHeight : menuPtr->totalHeight); - if (menuRectPtr->top == menuBarHeight) { - *whichItem = hitPt.h; - } else { - *whichItem = menuRectPtr->top; - } } /* *---------------------------------------------------------------------- * - * HandleMenuCalcItemMsg -- + * TkMacOSXMenuClick -- * - * Handles the MenuDefProc's CalcItem message. It is supposed - * to calculate the Rect of the menu entry in whichItem in the - * menu, and put that in menuRectPtr. I assume this works, but I - * have never seen the MenuManager send this message. + * Prepares a menubar for MenuSelect or MenuKey. * * Results: - * The Menu Manager is informed of the bounding rect of a - * menu rect. + * None. * * Side effects: - * None. + * Any pending configurations of the menubar are completed. * *---------------------------------------------------------------------- */ void -HandleMenuCalcItemMsg( - MenuRef menu, - Rect *menuRectPtr, - Point hitPt, - SInt16 *whichItem, - TkMenu *menuPtr) +TkMacOSXMenuClick(void) { - TkMenuEntry *mePtr; - MenuTrackingData mtd, *mtdPtr = &mtd; - OSStatus err; - int virtualTop, item = *whichItem-1; - - err = ChkErr(GetMenuTrackingData, menu, mtdPtr); - if (err == noErr) { - virtualTop = mtdPtr->virtualMenuTop; - } else { - virtualTop = 0; - } - - if (item >= 0 && item < menuPtr->numEntries) { - mePtr = menuPtr->entries[item]; - menuRectPtr->left = mePtr->x; - menuRectPtr->top = mePtr->y + virtualTop; - if (mePtr->entryFlags & ENTRY_LAST_COLUMN) { - menuRectPtr->right = menuPtr->totalWidth; - } else { - menuRectPtr->right = mePtr->x + mePtr->width; - } - menuRectPtr->bottom = menuRectPtr->top + mePtr->height; - } -#ifdef TK_MAC_DEBUG_MENUS - TkMacOSXDbgMsg("MDEF: CalcItemMsg %d: %d, %d", *whichItem, - menuRectPtr->left, menuRectPtr->top); -#endif } -#endif /* USE_TK_MDEF */ + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXMenubutton.c b/macosx/tkMacOSXMenubutton.c index dbd4b6b..eaa444a 100644 --- a/macosx/tkMacOSXMenubutton.c +++ b/macosx/tkMacOSXMenubutton.c @@ -5,97 +5,76 @@ * menubutton widget. * * Copyright (c) 1996 by Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tkMacOSXPrivate.h" -#include "tkMenu.h" #include "tkMenubutton.h" #include "tkMacOSXFont.h" #include "tkMacOSXDebug.h" -#define kShadowOffset (3) /* amount to offset shadow from frame */ -#define kTriangleWidth (11) /* width of the triangle */ -#define kTriangleHeight (6) /* height of the triangle */ -#define kTriangleMargin (5) /* margin around triangle */ - -#define TK_POPUP_OFFSET 32 /* size of popup marker */ - -#define FIRST_DRAW 2 -#define ACTIVE 4 - -MODULE_SCOPE int TkMacOSXGetNewMenuID(Tcl_Interp *interp, TkMenu *menuInstPtr, - int cascade, short *menuIDPtr); -MODULE_SCOPE void TkMacOSXFreeMenuID(short menuID); +/* +#ifdef TK_MAC_DEBUG +#define TK_MAC_DEBUG_MENUBUTTON +#endif +*/ -typedef struct { - SInt16 initialValue; - SInt16 minValue; - SInt16 maxValue; - SInt16 procID; - int isBevel; -} MenuButtonControlParams; +typedef struct MacMenuButton { + TkMenuButton info; + NSPopUpButton *button; +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + int fix; +#endif +} MacMenuButton; -typedef struct { - int len; - Str255 title; - ControlFontStyleRec style; -} ControlTitleParams; +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS /* - * Declaration of Mac specific button structure. + * Use the following heuristic conversion constants to make NSButton-based + * widget metrics match up with the old Carbon control buttons (for the + * default Lucida Grande 13 font). + * TODO: provide a scriptable way to turn this off and use the raw NSButton + * metrics (will also need dynamic adjustment of the default padding, + * c.f. tkMacOSXDefault.h). */ -typedef struct MacMenuButton { - TkMenuButton info; /* Generic button info. */ - WindowRef windowRef; - ControlRef userPane; - ControlRef control; - MenuRef menuRef; - unsigned long userPaneBackground; - int flags; - MenuButtonControlParams params; - ControlTitleParams titleParams; - ControlButtonContentInfo bevelButtonContent; - OpenCPicParams picParams; -} MacMenuButton; +typedef struct { + int trimW, trimH, inset, shrinkW, offsetX, offsetY; +} BoundsFix; + +#define fixForStyle(style) ( \ + style == NSRoundedBezelStyle ? 1 : \ + style == NSRegularSquareBezelStyle ? 2 : \ + style == NSShadowlessSquareBezelStyle ? 3 : \ + INT_MIN) + +static const BoundsFix boundsFixes[] = { + [fixForStyle(NSRoundedBezelStyle)] = { 14, 10, -2, -1}, + [fixForStyle(NSRegularSquareBezelStyle)] = { 6, 13, -2, 1, 1}, + [fixForStyle(NSShadowlessSquareBezelStyle)] = { 15, 0, 2 }, +}; + +#endif /* * Forward declarations for procedures defined later in this file: */ -static OSStatus SetUserPaneDrawProc(ControlRef control, - ControlUserPaneDrawProcPtr upp); -static OSStatus SetUserPaneSetUpSpecialBackgroundProc(ControlRef control, - ControlUserPaneBackgroundProcPtr upp); -static void UserPaneDraw(ControlRef control, ControlPartCode cpc); -static void UserPaneBackgroundProc(ControlHandle, - ControlBackgroundPtr info); -static int MenuButtonInitControl (MacMenuButton *mbPtr, Rect *paneRect, - Rect *cntrRect ); static void MenuButtonEventProc(ClientData clientData, XEvent *eventPtr); -static int UpdateControlColors(MacMenuButton *mbPtr); -static void ComputeMenuButtonControlParams(TkMenuButton *mbPtr, - MenuButtonControlParams * paramsPtr); -static void ComputeControlTitleParams(TkMenuButton *mbPtr, - ControlTitleParams *paramsPtr); -static void CompareControlTitleParams(ControlTitleParams *p1Ptr, - ControlTitleParams *p2Ptr, int *titleChanged, int *styleChanged); /* - * The structure below defines menubutton class behavior by means of - * procedures that can be invoked from generic window code. + * The structure below defines menubutton class behavior by means of functions + * that can be invoked from generic window code. */ Tk_ClassProcs tkpMenubuttonClass = { sizeof(Tk_ClassProcs), /* size */ TkMenuButtonWorldChanged, /* worldChangedProc */ }; - /* *---------------------------------------------------------------------- @@ -117,309 +96,114 @@ TkMenuButton * TkpCreateMenuButton( Tk_Window tkwin) { - MacMenuButton *mbPtr = (MacMenuButton *) ckalloc(sizeof(MacMenuButton)); + MacMenuButton *macButtonPtr = + (MacMenuButton *) ckalloc(sizeof(MacMenuButton)); - Tk_CreateEventHandler(tkwin, ActivateMask, - MenuButtonEventProc, (ClientData) mbPtr); - mbPtr->flags = 0; - mbPtr->userPaneBackground = PIXEL_MAGIC << 24; - mbPtr->userPane = NULL; - mbPtr->control = NULL; - mbPtr->menuRef = NULL; - bzero(&mbPtr->params, sizeof(mbPtr->params)); - bzero(&mbPtr->titleParams, sizeof(mbPtr->titleParams)); + macButtonPtr->button = nil; - return (TkMenuButton *) mbPtr; + Tk_CreateEventHandler(tkwin, ActivateMask, + MenuButtonEventProc, (ClientData) macButtonPtr); + return (TkMenuButton *) macButtonPtr; } /* *---------------------------------------------------------------------- * - * TkpDisplayMenuButton -- + * TkpDestroyMenuButton -- * - * This procedure is invoked to display a menubutton widget. + * Free data structures associated with the menubutton control. * * Results: * None. * * Side effects: - * Commands are output to X to display the menubutton in its - * current mode. + * Restores the default control state. * *---------------------------------------------------------------------- */ void -TkpDisplayMenuButton( - ClientData clientData) /* Information about widget. */ +TkpDestroyMenuButton( + TkMenuButton *mbPtr) { - TkMenuButton *butPtr = (TkMenuButton *) clientData; - Tk_Window tkwin = butPtr->tkwin; - TkWindow *winPtr; - Pixmap pixmap; - MacMenuButton *mbPtr = (MacMenuButton *) butPtr; - CGrafPtr destPort, savePort; - Boolean portChanged = false; - int hasImageOrBitmap = 0, width, height; - OSStatus err; - ControlButtonGraphicAlignment theAlignment; - Rect paneRect, cntrRect; - int active, enabled; - - butPtr->flags &= ~REDRAW_PENDING; - if ((butPtr->tkwin == NULL) || !Tk_IsMapped(tkwin)) { - return; - } - pixmap = (Pixmap) Tk_WindowId(tkwin); - TkMacOSXSetUpClippingRgn(Tk_WindowId(tkwin)); + MacMenuButton *macButtonPtr = (MacMenuButton *) mbPtr; - winPtr = (TkWindow *)butPtr->tkwin; - paneRect.left = winPtr->privatePtr->xOff; - paneRect.top = winPtr->privatePtr->yOff; - paneRect.right = paneRect.left+Tk_Width(butPtr->tkwin); - paneRect.bottom = paneRect.top+Tk_Height(butPtr->tkwin); - - cntrRect = paneRect; - - cntrRect.left += butPtr->inset; - cntrRect.top += butPtr->inset; - cntrRect.right -= butPtr->inset; - cntrRect.bottom -= butPtr->inset; - - if (mbPtr->userPane) { - MenuButtonControlParams params; - bzero(¶ms, sizeof(params)); - ComputeMenuButtonControlParams(butPtr, ¶ms); - if ( -#if 0 - (winPtr->flags & TK_REBUILD_TOPLEVEL) || -#endif - bcmp(¶ms,&mbPtr->params,sizeof(params))) { - if (mbPtr->userPane) { - DisposeControl(mbPtr->userPane); - mbPtr->userPane = NULL; - mbPtr->control = NULL; - } - } - } - if (!mbPtr->userPane) { - if (MenuButtonInitControl(mbPtr, &paneRect, &cntrRect)) { - TkMacOSXDbgMsg("Init Control failed"); - return; - } - } - SetControlBounds(mbPtr->userPane, &paneRect); - SetControlBounds(mbPtr->control, &cntrRect); - - if (butPtr->image != None) { - Tk_SizeOfImage(butPtr->image, &width, &height); - hasImageOrBitmap = 1; - } else if (butPtr->bitmap != None) { - Tk_SizeOfBitmap(butPtr->display, butPtr->bitmap, &width, &height); - hasImageOrBitmap = 1; - } - - /* - * We need to cache the title and its style - */ - - if (!(mbPtr->flags & FIRST_DRAW)) { - ControlTitleParams titleParams; - int titleChanged; - int styleChanged; - - ComputeControlTitleParams(butPtr, &titleParams); - CompareControlTitleParams(&titleParams, &mbPtr->titleParams, - &titleChanged, &styleChanged); - if (titleChanged) { - CFStringRef cf = CFStringCreateWithCString(NULL, - (char*) titleParams.title, kCFStringEncodingUTF8); - - if (hasImageOrBitmap) { - SetControlTitleWithCFString(mbPtr->control, cf); - } else { - SetMenuItemTextWithCFString(mbPtr->menuRef, 1, cf); - } - CFRelease(cf); - bcopy(titleParams.title, mbPtr->titleParams.title, - titleParams.len + 1); - mbPtr->titleParams.len = titleParams.len; - } - if ((titleChanged||styleChanged) && titleParams .len) { - if (hasImageOrBitmap) { - err = ChkErr(SetControlFontStyle, mbPtr->control, - &titleParams.style); - if (err != noErr) { - return; - } - } - bcopy(&titleParams.style, &mbPtr->titleParams.style, - sizeof(titleParams.style)); - } - } - if (hasImageOrBitmap) { - { - destPort = TkMacOSXGetDrawablePort(Tk_WindowId(tkwin)); - portChanged = QDSwapPort(destPort, &savePort); - mbPtr->picParams.version = -2; - mbPtr->picParams.hRes = 0x00480000; - mbPtr->picParams.vRes = 0x00480000; - mbPtr->picParams.srcRect.top = 0; - mbPtr->picParams.srcRect.left = 0; - mbPtr->picParams.srcRect.bottom = height; - mbPtr->picParams.srcRect.right = width; - mbPtr->picParams.reserved1 = 0; - mbPtr->picParams.reserved2 = 0; - mbPtr->bevelButtonContent.contentType = kControlContentPictHandle; - mbPtr->bevelButtonContent.u.picture = OpenCPicture(&mbPtr->picParams); - if (!mbPtr->bevelButtonContent.u.picture) { - TkMacOSXDbgMsg("OpenCPicture failed"); - } - tkPictureIsOpen = 1; - - /* - * TO DO - There is one case where XCopyPlane calls CopyDeepMask, - * which does not get recorded in the picture. So the bitmap code - * will fail in that case. - */ - } - if (butPtr->image != NULL) { - Tk_RedrawImage(butPtr->image, 0, 0, width, height, pixmap, 0, 0); - } else { - GC gc; - - if (butPtr->state == STATE_DISABLED) { - gc = butPtr->disabledGC; - } else if (butPtr->state == STATE_ACTIVE) { - gc = butPtr->activeTextGC; - } else { - gc = butPtr->normalTextGC; - } - XCopyPlane(butPtr->display, butPtr->bitmap, pixmap, gc, 0, 0, - width, height, 0, 0, 1); - } - { - ClosePicture(); - tkPictureIsOpen = 0; - if (portChanged) { - QDSwapPort(savePort, NULL); - } - } - ChkErr(SetControlData, mbPtr->control, kControlButtonPart, - kControlBevelButtonContentTag, - sizeof(ControlButtonContentInfo), - (char *) &mbPtr->bevelButtonContent); - switch (butPtr->anchor) { - case TK_ANCHOR_N: - theAlignment = kControlBevelButtonAlignTop; - break; - case TK_ANCHOR_NE: - theAlignment = kControlBevelButtonAlignTopRight; - break; - case TK_ANCHOR_E: - theAlignment = kControlBevelButtonAlignRight; - break; - case TK_ANCHOR_SE: - theAlignment = kControlBevelButtonAlignBottomRight; - break; - case TK_ANCHOR_S: - theAlignment = kControlBevelButtonAlignBottom; - break; - case TK_ANCHOR_SW: - theAlignment = kControlBevelButtonAlignBottomLeft; - break; - case TK_ANCHOR_W: - theAlignment = kControlBevelButtonAlignLeft; - break; - case TK_ANCHOR_NW: - theAlignment = kControlBevelButtonAlignTopLeft; - break; - case TK_ANCHOR_CENTER: - theAlignment = kControlBevelButtonAlignCenter; - break; - } - - ChkErr(SetControlData, mbPtr->control, kControlButtonPart, - kControlBevelButtonGraphicAlignTag, - sizeof(ControlButtonGraphicAlignment), (char *) &theAlignment); - } - active = ((mbPtr->flags & ACTIVE) != 0); - if (active != IsControlActive(mbPtr->control)) { - if (active) { - ChkErr(ActivateControl, mbPtr->control); - } else { - ChkErr(DeactivateControl, mbPtr->control); - } - } - enabled = !(butPtr->state == STATE_DISABLED); - if (enabled != IsControlEnabled(mbPtr->control)) { - if (enabled) { - ChkErr(EnableControl, mbPtr->control); - } else { - ChkErr(DisableControl, mbPtr->control); - } - } - if (active && enabled) { - if (butPtr->state == STATE_ACTIVE) { - if (hasImageOrBitmap) { - HiliteControl(mbPtr->control, kControlButtonPart); - } else { - HiliteControl(mbPtr->control, kControlLabelPart); - } - } else { - HiliteControl(mbPtr->control, kControlNoPart); - } - } - UpdateControlColors(mbPtr); - if (mbPtr->flags & FIRST_DRAW) { - ShowControl(mbPtr->control); - ShowControl(mbPtr->userPane); - mbPtr->flags ^= FIRST_DRAW; - } else { - SetControlVisibility(mbPtr->control, true, true); - Draw1Control(mbPtr->userPane); - } - if (hasImageOrBitmap) { - if (mbPtr->bevelButtonContent.contentType == - kControlContentPictHandle) { - KillPicture(mbPtr->bevelButtonContent.u.picture); - } - } + TkMacOSXMakeCollectableAndRelease(macButtonPtr->button); } /* *---------------------------------------------------------------------- * - * TkpDestroyMenuButton -- + * TkpDisplayMenuButton -- * - * Free data structures associated with the menubutton control. + * This function is invoked to display a menubutton widget. * * Results: * None. * * Side effects: - * Restores the default control state. + * Commands are output to X to display the menubutton in its current + * mode. * *---------------------------------------------------------------------- */ void -TkpDestroyMenuButton( - TkMenuButton *mbPtr) +TkpDisplayMenuButton( + ClientData clientData) /* Information about widget. */ { - MacMenuButton *macMbPtr = (MacMenuButton *) mbPtr; - - if (macMbPtr->userPane) { - DisposeControl(macMbPtr->userPane); - macMbPtr->userPane = NULL; + TkMenuButton *mbPtr = (TkMenuButton *) clientData; + MacMenuButton *macButtonPtr = (MacMenuButton *) mbPtr; + NSPopUpButton *button = macButtonPtr->button; + Tk_Window tkwin = mbPtr->tkwin; + TkWindow *winPtr = (TkWindow *) tkwin; + MacDrawable *macWin = (MacDrawable *) winPtr->window; + TkMacOSXDrawingContext dc; + NSView *view = TkMacOSXDrawableView(macWin); + CGFloat viewHeight = [view bounds].size.height; + CGAffineTransform t = { .a = 1, .b = 0, .c = 0, .d = -1, .tx = 0, + .ty = viewHeight}; + NSRect frame; + int enabled; + + mbPtr->flags &= ~REDRAW_PENDING; + if (!tkwin || !Tk_IsMapped(tkwin) || !view || + !TkMacOSXSetupDrawingContext((Drawable) macWin, NULL, 1, &dc)) { + return; } - if (macMbPtr->menuRef) { - short menuID = GetMenuID(macMbPtr->menuRef); - - TkMacOSXFreeMenuID(menuID); - DisposeMenu(macMbPtr->menuRef); - macMbPtr->menuRef = NULL; + CGContextConcatCTM(dc.context, t); + Tk_Fill3DRectangle(tkwin, (Pixmap) macWin, mbPtr->normalBorder, 0, 0, + Tk_Width(tkwin), Tk_Height(tkwin), 0, TK_RELIEF_FLAT); + if ([button superview] != view) { + [view addSubview:button]; } + enabled = !(mbPtr->state == STATE_DISABLED); + [button setEnabled:enabled]; + if (enabled) { + [[button cell] setHighlighted:(mbPtr->state == STATE_ACTIVE)]; + } + frame = NSMakeRect(macWin->xOff, macWin->yOff, Tk_Width(tkwin), + Tk_Height(tkwin)); + frame = NSInsetRect(frame, mbPtr->inset, mbPtr->inset); +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + BoundsFix boundsFix = boundsFixes[macButtonPtr->fix]; + frame = NSOffsetRect(frame, boundsFix.offsetX, boundsFix.offsetY); + frame.size.width -= boundsFix.shrinkW; + frame = NSInsetRect(frame, boundsFix.inset, boundsFix.inset); + } +#endif + frame.origin.y = viewHeight - (frame.origin.y + frame.size.height); + if (!NSEqualRects(frame, [button frame])) { + [button setFrame:frame]; + } + [button displayRectIgnoringOpacity:[button bounds]]; + TkMacOSXRestoreDrawingContext(&dc); +#ifdef TK_MAC_DEBUG_MENUBUTTON + TKLog(@"menubutton %s frame %@ width %d height %d", + ((TkWindow *)mbPtr->tkwin)->pathName, NSStringFromRect(frame), + Tk_Width(tkwin), Tk_Height(tkwin)); +#endif } /* @@ -427,7 +211,7 @@ TkpDestroyMenuButton( * * TkpComputeMenuButtonGeometry -- * - * After changes in a menu button's text or bitmap, this procedure + * After changes in a menu button's text or bitmap, this function * recomputes the menu button's geometry and passes this information * along to the geometry manager for the window. * @@ -441,482 +225,205 @@ TkpDestroyMenuButton( */ void -TkpComputeMenuButtonGeometry(mbPtr) - register TkMenuButton *mbPtr; /* Widget record for menu button. */ +TkpComputeMenuButtonGeometry( + TkMenuButton *mbPtr) /* Widget record for menu button. */ { - int width, height, mm, pixels; - int hasImageOrBitmap = 0; - - mbPtr->inset = mbPtr->highlightWidth + mbPtr->borderWidth; - if (mbPtr->image != None) { - Tk_SizeOfImage(mbPtr->image, &width, &height); - hasImageOrBitmap = 1; - } else if (mbPtr->bitmap != None) { - Tk_SizeOfBitmap(mbPtr->display, mbPtr->bitmap, &width, &height); - hasImageOrBitmap = 1; + MacMenuButton *macButtonPtr = (MacMenuButton *) mbPtr; + NSPopUpButton *button = macButtonPtr->button; + NSPopUpButtonCell *cell; + NSMenuItem *menuItem; + NSBezelStyle style = NSRoundedBezelStyle; + NSFont *font; + NSRect bounds = NSZeroRect, titleRect = NSZeroRect; + int haveImage = (mbPtr->image || mbPtr->bitmap != None), haveText = 0; + int haveCompound = (mbPtr->compound != COMPOUND_NONE); + int width, height; + + if (!button) { + button = [[NSPopUpButton alloc] initWithFrame:NSZeroRect pullsDown:YES]; + macButtonPtr->button = TkMacOSXMakeUncollectable(button); + cell = [button cell]; + [cell setUsesItemFromMenu:NO]; + menuItem = [[[NSMenuItem alloc] initWithTitle:@"" + action:NULL keyEquivalent:@""] autorelease]; + [cell setMenuItem:menuItem]; } else { - hasImageOrBitmap = 0; - Tk_FreeTextLayout(mbPtr->textLayout); - mbPtr->textLayout = Tk_ComputeTextLayout(mbPtr->tkfont, mbPtr->text, - -1, mbPtr->wrapLength, mbPtr->justify, 0, &mbPtr->textWidth, - &mbPtr->textHeight); - width = mbPtr->textWidth; - height = mbPtr->textHeight; - if (mbPtr->width > 0) { - width = mbPtr->width * Tk_TextWidth(mbPtr->tkfont, "0", 1); - } - if (mbPtr->height > 0) { - Tk_FontMetrics fm; + cell = [button cell]; + menuItem = [cell menuItem]; + } + if (haveImage) { + style = NSShadowlessSquareBezelStyle; + } else if (!mbPtr->indicatorOn) { + style = NSRegularSquareBezelStyle; + } + [button setBezelStyle:style]; + [cell setArrowPosition:(mbPtr->indicatorOn ? NSPopUpArrowAtBottom : + NSPopUpNoArrow)]; +#if 0 + NSControlSize controlSize = NSRegularControlSize; - Tk_GetFontMetrics(mbPtr->tkfont, &fm); - height = mbPtr->height * fm.linespace; - } - width += 2*mbPtr->padX; - height += 2*mbPtr->padY; + if (mbPtr->borderWidth <= 2) { + controlSize = NSMiniControlSize; + } else if (mbPtr->borderWidth == 3) { + controlSize = NSSmallControlSize; } - if (hasImageOrBitmap) { - if (mbPtr->width > 0) { - width = mbPtr->width; - } - if (mbPtr->height > 0) { - height = mbPtr->height; + [cell setControlSize:controlSize]; +#endif + + if (mbPtr->text && *(mbPtr->text) && (!haveImage || haveCompound)) { + NSString *title = [[NSString alloc] initWithUTF8String:mbPtr->text]; + [button setTitle:title]; + [title release]; + haveText = 1; + } + haveCompound = (haveCompound && haveImage && haveText); + if (haveText) { + NSTextAlignment alignment = NSNaturalTextAlignment; + + switch (mbPtr->justify) { + case TK_JUSTIFY_LEFT: + alignment = NSLeftTextAlignment; + break; + case TK_JUSTIFY_RIGHT: + alignment = NSRightTextAlignment; + break; + case TK_JUSTIFY_CENTER: + alignment = NSCenterTextAlignment; + break; } - mbPtr->inset = mbPtr->highlightWidth + 2; - width += (2 * mbPtr->borderWidth + 4); - height += (2 * mbPtr->borderWidth + 4); + [button setAlignment:alignment]; } else { - width += TK_POPUP_OFFSET; + [button setTitle:@""]; } - if (mbPtr->indicatorOn) { - mm = WidthMMOfScreen(Tk_Screen(mbPtr->tkwin)); - pixels = WidthOfScreen(Tk_Screen(mbPtr->tkwin)); - mbPtr->indicatorHeight = kTriangleHeight; - mbPtr->indicatorWidth = kTriangleWidth + kTriangleMargin; - width += mbPtr->indicatorWidth; - } else { - mbPtr->indicatorHeight = 0; - mbPtr->indicatorWidth = 0; + font = TkMacOSXNSFontForFont(mbPtr->tkfont); + if (font) { + [button setFont:font]; } - - Tk_GeometryRequest(mbPtr->tkwin, (int) (width + 2*mbPtr->inset), - (int) (height + 2*mbPtr->inset)); - Tk_SetInternalBorder(mbPtr->tkwin, mbPtr->inset); -} - -/* - *---------------------------------------------------------------------- - * - * ComputeMenuButtonControlParams -- - * - * This procedure computes the various parameters used - * when creating a Carbon control (NewControl) - * These are determined by the various tk menu button parameters - * - * Results: - * None. - * - * Side effects: - * Sets the control initialisation parameters - * - *---------------------------------------------------------------------- - */ - -static void -ComputeMenuButtonControlParams( - TkMenuButton *mbPtr, - MenuButtonControlParams *paramsPtr) -{ - int fakeMenuID = 256; - - /* - * Determine ProcID based on button type and dimensions - * - * We need to set minValue to some non-zero value, - * Otherwise, the markers do not show up - */ - - paramsPtr->minValue = kControlBehaviorMultiValueMenu; - paramsPtr->maxValue = 0; - if (mbPtr->image || mbPtr->bitmap) { - paramsPtr->isBevel = 1; - if (mbPtr->borderWidth <= 2) { - paramsPtr->procID = kControlBevelButtonSmallBevelProc; - } else if (mbPtr->borderWidth == 3) { - paramsPtr->procID = kControlBevelButtonNormalBevelProc; + if (haveImage) { + int width, height; + NSImage *image; + NSCellImagePosition pos = NSImageOnly; + + if (mbPtr->image) { + Tk_SizeOfImage(mbPtr->image, &width, &height); + image = TkMacOSXGetNSImageWithTkImage(mbPtr->display, + mbPtr->image, width, height); } else { - paramsPtr->procID = kControlBevelButtonLargeBevelProc; + Tk_SizeOfBitmap(mbPtr->display, mbPtr->bitmap, &width, &height); + image = TkMacOSXGetNSImageWithBitmap(mbPtr->display, + mbPtr->bitmap, mbPtr->normalTextGC, width, height); } - if (mbPtr->indicatorOn) { - paramsPtr->initialValue = fakeMenuID; - } else { - paramsPtr->initialValue = 0; + if (haveCompound) { + switch ((enum compound) mbPtr->compound) { + case COMPOUND_TOP: + pos = NSImageAbove; + break; + case COMPOUND_BOTTOM: + pos = NSImageBelow; + break; + case COMPOUND_LEFT: + pos = NSImageLeft; + break; + case COMPOUND_RIGHT: + pos = NSImageRight; + break; + case COMPOUND_CENTER: + pos = NSImageOverlaps; + break; + case COMPOUND_NONE: + pos = NSImageOnly; + break; + } } + [button setImagePosition:pos]; + [menuItem setImage:image]; + bounds.size = cell ? [cell cellSize] : NSZeroSize; + if (bounds.size.height < height + 8) { /* workaround AppKit sizing bug */ + bounds.size.height = height + 8; + } +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (!mbPtr->indicatorOn && tkMacOSXUseCompatibilityMetrics) { + bounds.size.width -= 16; + } +#endif } else { - paramsPtr->isBevel = 0; - paramsPtr->procID = kControlPopupButtonProc - + kControlPopupVariableWidthVariant; - paramsPtr->minValue = -12345; - paramsPtr->maxValue = -1; - paramsPtr->initialValue = 0; - } -} - -/* - *---------------------------------------------------------------------- - * - * returns 0 if same, 1 otherwise - * - *---------------------------------------------------------------------- - */ - -static void -CompareControlTitleParams( - ControlTitleParams *p1Ptr, - ControlTitleParams *p2Ptr, - int *titleChanged, - int *styleChanged) -{ - if (p1Ptr->len != p2Ptr->len) { - *titleChanged = 1; - } else if (bcmp(p1Ptr->title,p2Ptr->title,p1Ptr->len)) { - *titleChanged = 1; - } else { - *titleChanged = 0; - } - - if (p1Ptr->len && p2Ptr->len) { - *styleChanged = bcmp(&p1Ptr->style, &p2Ptr->style, - sizeof(p2Ptr->style)); - } else { - *styleChanged = p1Ptr->len||p2Ptr->len; - } -} - -static void -ComputeControlTitleParams( - TkMenuButton *butPtr, - ControlTitleParams *paramsPtr) -{ - Tk_Font font; - - paramsPtr->len = TkFontGetFirstTextLayout(butPtr->textLayout, &font, - (char*) paramsPtr->title); - paramsPtr->title[paramsPtr->len] = 0; - if (paramsPtr->len) { - TkMacOSXInitControlFontStyle(font,¶msPtr->style); + bounds.size = cell ? [cell cellSize] : NSZeroSize; } -} - -/* - *---------------------------------------------------------------------- - * - * MenuButtonInitControl -- - * - * This procedure initialises a Carbon control - * - * Results: - * 0 on success, 1 on failure. - * - * Side effects: - * A background pane control and the control itself is created - * The contol is embedded in the background control - * The background control is embedded in the root control - * of the containing window - * The creation parameters for the control are also computed - * - *---------------------------------------------------------------------- - */ -int -MenuButtonInitControl( - MacMenuButton *mbPtr, /* Mac button. */ - Rect *paneRect, - Rect *cntrRect) -{ - OSStatus err; - TkMenuButton *butPtr = (TkMenuButton *) mbPtr; - SInt16 procID, initialValue, minValue, maxValue; - Boolean initiallyVisible; - SInt32 controlReference; - short menuID; - ControlRef rootControl = - TkMacOSXGetRootControl(Tk_WindowId(butPtr->tkwin)); - - mbPtr->windowRef = TkMacOSXDrawableWindow(Tk_WindowId(butPtr->tkwin)); - - /* - * Set up the user pane - */ - - initiallyVisible = false; - initialValue = kControlSupportsEmbedding | kControlHasSpecialBackground; - minValue = 0; - maxValue = 1; - procID = kControlUserPaneProc; - controlReference = (SInt32)mbPtr; - mbPtr->userPane = NewControl(mbPtr->windowRef, paneRect, "\p", - initiallyVisible, initialValue, minValue, maxValue, procID, - controlReference); - if (!mbPtr->userPane) { - TkMacOSXDbgMsg("Failed to create user pane control"); - return 1; - } - err = ChkErr(EmbedControl, mbPtr->userPane, rootControl); - if (err != noErr) { - return 1; - } - SetUserPaneSetUpSpecialBackgroundProc(mbPtr->userPane, - UserPaneBackgroundProc); - SetUserPaneDrawProc(mbPtr->userPane,UserPaneDraw); - initiallyVisible = false; - ComputeMenuButtonControlParams(butPtr,&mbPtr->params); - - /* - * Do this only if we are using bevel buttons. - */ - - ComputeControlTitleParams(butPtr, &mbPtr->titleParams); - mbPtr->control = NewControl(mbPtr->windowRef, - cntrRect, "\p" /* mbPtr->titleParams.title */, - initiallyVisible, mbPtr->params.initialValue, - mbPtr->params.minValue, mbPtr->params.maxValue, - mbPtr->params.procID, controlReference); - if (!mbPtr->control) { - TkMacOSXDbgMsg("Failed to create control of type %d", - mbPtr->params.procID); - return 1; - } - err = ChkErr(EmbedControl, mbPtr->control, mbPtr->userPane); - if (err != noErr ) { - return 1; - } - if (mbPtr->params.isBevel) { - CFStringRef cf = CFStringCreateWithCString(NULL, - (char*) mbPtr->titleParams.title, kCFStringEncodingUTF8); - - SetControlTitleWithCFString(mbPtr->control, cf); - CFRelease(cf); - if (mbPtr->titleParams.len) { - err = ChkErr(SetControlFontStyle, mbPtr->control, - &mbPtr->titleParams.style); - if (err != noErr) { - return 1; + if (haveText) { + titleRect = cell ? [cell titleRectForBounds:bounds] : NSZeroRect; + if (mbPtr->wrapLength > 0 && + titleRect.size.width > mbPtr->wrapLength) { + if (style == NSRoundedBezelStyle) { + [button setBezelStyle:(style = NSRegularSquareBezelStyle)]; + bounds.size = cell ? [cell cellSize] : NSZeroSize; + titleRect = cell ? [cell titleRectForBounds:bounds] : NSZeroRect; } + bounds.size.width -= titleRect.size.width - mbPtr->wrapLength; + bounds.size.height = 40000.0; + [cell setWraps:YES]; + bounds.size = cell ? [cell cellSizeForBounds:bounds] : NSZeroSize; +#ifdef TK_MAC_DEBUG_MENUBUTTON + titleRect = cell ? [cell titleRectForBounds:bounds] : NSZeroRect; +#endif +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + bounds.size.height += 3; + } +#endif } - } else { - CFStringRef cfStr; + } + width = lround(bounds.size.width); + height = lround(bounds.size.height); +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS + if (tkMacOSXUseCompatibilityMetrics) { + macButtonPtr->fix = fixForStyle(style); + width -= boundsFixes[macButtonPtr->fix].trimW; + height -= boundsFixes[macButtonPtr->fix].trimH; + } +#endif - err = TkMacOSXGetNewMenuID(mbPtr->info.interp, (TkMenu *) mbPtr, 0, - &menuID); - if (err != TCL_OK) { - return 1; - } - err = ChkErr(CreateNewMenu, menuID, kMenuAttrDoNotUseUserCommandKeys, - &(mbPtr->menuRef)); - if (err != noErr) { - return 1; + if (haveImage || haveCompound) { + if (mbPtr->width > 0) { + width = mbPtr->width; } - cfStr = CFStringCreateWithCString(NULL, Tk_PathName(mbPtr->info.tkwin), - kCFStringEncodingUTF8); - if (!cfStr) { - TkMacOSXDbgMsg("CFStringCreateWithCString failed"); - return 1; + if (mbPtr->height > 0) { + height = mbPtr->height; } - err = ChkErr(SetMenuTitleWithCFString, mbPtr->menuRef, cfStr); - CFRelease(cfStr); - if (err != noErr) { - return 1; + } else { + if (mbPtr->width > 0) { + int avgWidth = Tk_TextWidth(mbPtr->tkfont, "0", 1); + width = mbPtr->width * avgWidth; } - cfStr = CFStringCreateWithCString(NULL, - (char*) mbPtr->titleParams.title, kCFStringEncodingUTF8); - AppendMenuItemText(mbPtr->menuRef, "\px"); - if (cfStr) { - SetMenuItemTextWithCFString(mbPtr->menuRef, 1, cfStr); - CFRelease(cfStr); + if (mbPtr->height > 0) { + Tk_FontMetrics fm; + + Tk_GetFontMetrics(mbPtr->tkfont, &fm); + height = mbPtr->height * fm.linespace; } - ChkErr(SetControlData, mbPtr->control, kControlNoPart, - kControlPopupButtonMenuRefTag, sizeof(mbPtr->menuRef), - &mbPtr->menuRef); - SetControlMinimum(mbPtr->control, 1); - SetControlMaximum(mbPtr->control, 1); - SetControlValue(mbPtr->control, 1); } - mbPtr->flags |= FIRST_DRAW; - if (IsWindowActive(mbPtr->windowRef)) { - mbPtr->flags |= ACTIVE; + if (!haveImage || haveCompound) { + width += 2*mbPtr->padX; + height += 2*mbPtr->padY; } - return 0; -} - -/* - *-------------------------------------------------------------- - * - * SetUserPane - * - * Utility function to add a UserPaneDrawProc - * to a userPane control. From MoreControls code - * from Apple DTS. - * - * Results: - * MacOS system error. - * - * Side effects: - * The user pane gets a new UserPaneDrawProc. - * - *-------------------------------------------------------------- - */ -OSStatus -SetUserPaneDrawProc( - ControlRef control, - ControlUserPaneDrawProcPtr upp) -{ - ControlUserPaneDrawUPP myControlUserPaneDrawUPP = - NewControlUserPaneDrawUPP(upp); - - return SetControlData(control, kControlNoPart,kControlUserPaneDrawProcTag, - sizeof(myControlUserPaneDrawUPP), (Ptr)&myControlUserPaneDrawUPP); -} - -/* - *-------------------------------------------------------------- - * - * SetUserPaneSetUpSpecialBackgroundProc -- - * - * Utility function to add a UserPaneBackgroundProc - * to a userPane control - * - * Results: - * MacOS system error. - * - * Side effects: - * The user pane gets a new UserPaneBackgroundProc. - * - *-------------------------------------------------------------- - */ - -OSStatus -SetUserPaneSetUpSpecialBackgroundProc( - ControlRef control, - ControlUserPaneBackgroundProcPtr upp) -{ - ControlUserPaneBackgroundUPP myControlUserPaneBackgroundUPP = - NewControlUserPaneBackgroundUPP(upp); - - return SetControlData(control, kControlNoPart, - kControlUserPaneBackgroundProcTag, - sizeof(myControlUserPaneBackgroundUPP), - (Ptr) &myControlUserPaneBackgroundUPP); -} - -/* - *-------------------------------------------------------------- - * - * UserPaneDraw -- - * - * This function draws the background of the user pane that will - * lie under checkboxes and radiobuttons. - * - * Results: - * None. - * - * Side effects: - * The user pane gets updated to the current color. - * - *-------------------------------------------------------------- - */ - -void -UserPaneDraw( - ControlRef control, - ControlPartCode cpc) -{ - Rect contrlRect; - MacMenuButton * mbPtr = - (MacMenuButton *)(intptr_t)GetControlReference(control); - CGrafPtr port; - - GetPort(&port); - GetControlBounds(control,&contrlRect); - TkMacOSXSetColorInPort(mbPtr->userPaneBackground, 0, NULL, port); - EraseRect (&contrlRect); -} - -/* - *-------------------------------------------------------------- - * - * UserPaneBackgroundProc -- - * - * This function sets up the background of the user pane that will - * lie under checkboxes and radiobuttons. - * - * Results: - * None. - * - * Side effects: - * The user pane background gets set to the current color. - * - *-------------------------------------------------------------- - */ - -void -UserPaneBackgroundProc( - ControlHandle control, - ControlBackgroundPtr info) -{ - MacMenuButton *mbPtr = - (MacMenuButton *)(intptr_t)GetControlReference(control); - - if (info->colorDevice) { - CGrafPtr port; - - GetPort(&port); - TkMacOSXSetColorInPort(mbPtr->userPaneBackground, 0, NULL, port); + if (mbPtr->highlightWidth < 0) { + mbPtr->highlightWidth = 0; } -} - -/* - *-------------------------------------------------------------- - * - * UpdateControlColors -- - * - * This function will review the colors used to display - * a Macintosh button. If any non-standard colors are - * used we create a custom palette for the button, populate - * with the colors for the button and install the palette. - * - * Under Appearance, we just set the pointer that will be - * used by the UserPaneDrawProc. - * - * Results: - * None. - * - * Side effects: - * The Macintosh control may get a custom palette installed. - * - *-------------------------------------------------------------- - */ - -static int -UpdateControlColors( - MacMenuButton *mbPtr) -{ - XColor *xcolor; - TkMenuButton * butPtr = (TkMenuButton *) mbPtr; - - /* - * Under Appearance we cannot change the background of the - * button itself. However, the color we are setting is the color - * of the containing userPane. This will be the color that peeks - * around the rounded corners of the button. - * We make this the highlightbackground rather than the background, - * because if you color the background of a frame containing a - * button, you usually also color the highlightbackground as well, - * or you will get a thin grey ring around the button. - */ - - xcolor = Tk_3DBorderColor(butPtr->normalBorder); - mbPtr->userPaneBackground = xcolor->pixel; - - return false; + if (haveImage) { + mbPtr->inset = mbPtr->highlightWidth; + width += 2*mbPtr->borderWidth; + height += 2*mbPtr->borderWidth; + } else { + mbPtr->inset = mbPtr->highlightWidth + mbPtr->borderWidth; + } + Tk_GeometryRequest(mbPtr->tkwin, width + 2 * mbPtr->inset, + height + 2 * mbPtr->inset); + Tk_SetInternalBorder(mbPtr->tkwin, mbPtr->inset); +#ifdef TK_MAC_DEBUG_MENUBUTTON + TKLog(@"menubutton %s bounds %@ titleRect %@ width %d height %d inset %d borderWidth %d", + ((TkWindow *)mbPtr->tkwin)->pathName, NSStringFromRect(bounds), + NSStringFromRect(titleRect), width, height, mbPtr->inset, + mbPtr->borderWidth); +#endif } /* @@ -931,7 +438,7 @@ UpdateControlColors( * None. * * Side effects: - * When it gets exposed, it is redisplayed. + * When activation state changes, it is redisplayed. * *-------------------------------------------------------------- */ @@ -941,22 +448,27 @@ MenuButtonEventProc( ClientData clientData, /* Information about window. */ XEvent *eventPtr) /* Information about event. */ { - TkMenuButton *buttonPtr = (TkMenuButton *) clientData; - MacMenuButton *mbPtr = (MacMenuButton *) clientData; + TkMenuButton *mbPtr = (TkMenuButton *) clientData; - if (eventPtr->type == ActivateNotify - || eventPtr->type == DeactivateNotify) { - if ((buttonPtr->tkwin == NULL) || (!Tk_IsMapped(buttonPtr->tkwin))) { - return; - } - if (eventPtr->type == ActivateNotify) { - mbPtr->flags |= ACTIVE; - } else { - mbPtr->flags &= ~ACTIVE; - } - if ((buttonPtr->flags & REDRAW_PENDING) == 0) { - Tcl_DoWhenIdle(TkpDisplayMenuButton, (ClientData) buttonPtr); - buttonPtr->flags |= REDRAW_PENDING; + if (!mbPtr->tkwin || !Tk_IsMapped(mbPtr->tkwin)) { + return; + } + switch (eventPtr->type) { + case ActivateNotify: + case DeactivateNotify: + if (!(mbPtr->flags & REDRAW_PENDING)) { + Tcl_DoWhenIdle(TkpDisplayMenuButton, (ClientData) mbPtr); + mbPtr->flags |= REDRAW_PENDING; } + break; } } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXMenus.c b/macosx/tkMacOSXMenus.c index 2b5126c..8b0c013 100644 --- a/macosx/tkMacOSXMenus.c +++ b/macosx/tkMacOSXMenus.c @@ -1,45 +1,240 @@ /* * tkMacOSXMenus.c -- * - * These calls set up and manage the menubar for the - * Macintosh version of Tk. + * These calls set up the default menus for Tk. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tkMacOSXPrivate.h" +#include "tkMenu.h" -#define kAppleMenu 256 -#define kAppleAboutItem 1 -#define kFileMenu 2 -#define kEditMenu 3 +static void GenerateEditEvent(const char *name); +static Tcl_Obj * GetWidgetDemoPath(Tcl_Interp *interp); -#define kSourceItem 1 -#define kDemoItem 2 -#define kCloseItem 3 +#pragma mark TKApplication(TKMenus) -#define EDIT_CUT 1 -#define EDIT_COPY 2 -#define EDIT_PASTE 3 -#define EDIT_CLEAR 4 +@implementation TKApplication(TKMenus) +- (void)_setupMenus { + if (_defaultMainMenu) { + return; + } + TkMenuInit(); + NSString *applicationName = [[NSBundle mainBundle] + objectForInfoDictionaryKey:@"CFBundleName"]; + if (!applicationName) { + applicationName = [[NSProcessInfo processInfo] processName]; + } + NSString *aboutName = (applicationName && + ![applicationName isEqualToString:@"Wish"] && + ![applicationName hasPrefix:@"tclsh"]) ? + applicationName : @"Tcl & Tk"; + _servicesMenu = [NSMenu menuWithTitle:@"Services"]; + _defaultApplicationMenuItems = [[NSArray arrayWithObjects: + [NSMenuItem separatorItem], + [NSMenuItem itemWithTitle: + [NSString stringWithFormat:@"Preferences%C", 0x2026] + action:@selector(preferences:) keyEquivalent:@","], + [NSMenuItem separatorItem], + [NSMenuItem itemWithTitle:@"Services" submenu:_servicesMenu], + [NSMenuItem separatorItem], + [NSMenuItem itemWithTitle: + [NSString stringWithFormat:@"Hide %@", applicationName] + action:@selector(hide:) keyEquivalent:@"h"], + [NSMenuItem itemWithTitle:@"Hide Others" + action:@selector(hideOtherApplications:) keyEquivalent:@"h" + keyEquivalentModifierMask: + NSCommandKeyMask|NSAlternateKeyMask], + [NSMenuItem itemWithTitle:@"Show All" + action:@selector(unhideAllApplications:)], + [NSMenuItem separatorItem], + [NSMenuItem itemWithTitle: + [NSString stringWithFormat:@"Quit %@", applicationName] + action: @selector(terminate:) keyEquivalent:@"q"], + nil] retain]; + _defaultApplicationMenu = [TKMenu menuWithTitle:applicationName + menuItems:_defaultApplicationMenuItems]; + [_defaultApplicationMenu insertItem: + [NSMenuItem itemWithTitle: + [NSString stringWithFormat:@"About %@", aboutName] + action:@selector(orderFrontStandardAboutPanel:)] atIndex:0]; + TKMenu *fileMenu = [TKMenu menuWithTitle:@"File" menuItems: + [NSArray arrayWithObjects: + [NSMenuItem itemWithTitle: + [NSString stringWithFormat:@"Source%C", 0x2026] + action:@selector(tkSource:)], + [NSMenuItem itemWithTitle:@"Run Widget Demo" + action:@selector(tkDemo:)], + [NSMenuItem itemWithTitle:@"Close" action:@selector(performClose:) + target:nil keyEquivalent:@"w"], + nil]]; + TKMenu *editMenu = [TKMenu menuWithTitle:@"Edit" menuItems: + [NSArray arrayWithObjects: + [NSMenuItem itemWithTitle:@"Undo" action:@selector(undo:) + target:nil keyEquivalent:@"z"], + [NSMenuItem itemWithTitle:@"Redo" action:@selector(redo:) + target:nil keyEquivalent:@"y"], + [NSMenuItem separatorItem], + [NSMenuItem itemWithTitle:@"Cut" action:@selector(cut:) + target:nil keyEquivalent:@"x"], + [NSMenuItem itemWithTitle:@"Copy" action:@selector(copy:) + target:nil keyEquivalent:@"c"], + [NSMenuItem itemWithTitle:@"Paste" action:@selector(paste:) + target:nil keyEquivalent:@"v"], + [NSMenuItem itemWithTitle:@"Delete" action:@selector(delete:) + target:nil], + nil]]; + _defaultWindowsMenuItems = [[NSArray arrayWithObjects: + [NSMenuItem itemWithTitle:@"Minimize" + action:@selector(performMiniaturize:) target:nil + keyEquivalent:@"m"], + [NSMenuItem itemWithTitle:@"Zoom" action:@selector(performZoom:) + target:nil], + [NSMenuItem separatorItem], + [NSMenuItem itemWithTitle:@"Bring All to Front" + action:@selector(arrangeInFront:)], + nil] retain]; + TKMenu *windowsMenu = [TKMenu menuWithTitle:@"Window" menuItems: + _defaultWindowsMenuItems]; + _defaultHelpMenuItems = [[NSArray arrayWithObjects: + [NSMenuItem itemWithTitle: + [NSString stringWithFormat:@"%@ Help", applicationName] + action:@selector(showHelp:) keyEquivalent:@"?"], + nil] retain]; + TKMenu *helpMenu = [TKMenu menuWithTitle:@"Help" menuItems: + _defaultHelpMenuItems]; + [self setServicesMenu:_servicesMenu]; + [self setWindowsMenu:windowsMenu]; + _defaultMainMenu = [[TKMenu menuWithTitle:@"" submenus:[NSArray + arrayWithObjects:_defaultApplicationMenu, fileMenu, editMenu, + windowsMenu, helpMenu, nil]] retain]; + [_defaultMainMenu setSpecial:tkMainMenu]; + [_defaultApplicationMenu setSpecial:tkApplicationMenu]; + [windowsMenu setSpecial:tkWindowsMenu]; + [helpMenu setSpecial:tkHelpMenu]; + [self tkSetMainMenu:nil]; +} +- (void)dealloc { + [_defaultMainMenu release]; + [_defaultHelpMenuItems release]; + [_defaultWindowsMenuItems release]; + [_defaultApplicationMenuItems release]; + [super dealloc]; +} +- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem { + SEL action = [anItem action]; -MenuRef tkAppleMenu; -MenuRef tkFileMenu; -MenuRef tkEditMenu; + if (sel_isEqual(action, @selector(preferences:))) { + Tcl_CmdInfo dummy; + return (_eventInterp && Tcl_GetCommandInfo(_eventInterp, + "::tk::mac::ShowPreferences", &dummy)); + } else if (sel_isEqual(action, @selector(tkDemo:))) { + BOOL haveDemo = NO; + if (_eventInterp) { + Tcl_Obj *path = GetWidgetDemoPath(_eventInterp); -static Tcl_Interp * gInterp = NULL; /* Standard menu interpreter. */ -static EventHandlerRef menuEventHandlerRef = NULL; + if (path) { + Tcl_IncrRefCount(path); + haveDemo = (Tcl_FSAccess(path, R_OK) == 0); + Tcl_DecrRefCount(path); + } + } + return haveDemo; + } else { + return [super validateUserInterfaceItem:anItem]; + } +} +- (void)orderFrontStandardAboutPanel:(id)sender { + Tcl_CmdInfo dummy; + if (!_eventInterp || !Tcl_GetCommandInfo(_eventInterp, "tkAboutDialog", + &dummy) || (GetCurrentEventKeyModifiers() & optionKey)) { + TkAboutDlg(); + } else { + int code = Tcl_EvalEx(_eventInterp, "tkAboutDialog", -1, + TCL_EVAL_GLOBAL); + if (code != TCL_OK) { + Tcl_BackgroundError(_eventInterp); + } + Tcl_ResetResult(_eventInterp); + } +} +- (void)showHelp:(id)sender { + Tcl_CmdInfo dummy; + if (!_eventInterp || !Tcl_GetCommandInfo(_eventInterp, + "::tk::mac::ShowHelp", &dummy)) { + [super showHelp:sender]; + } else { + int code = Tcl_EvalEx(_eventInterp, "::tk::mac::ShowHelp", -1, + TCL_EVAL_GLOBAL); + if (code != TCL_OK) { + Tcl_BackgroundError(_eventInterp); + } + Tcl_ResetResult(_eventInterp); + } +} +- (void)tkSource:(id)sender { + if (_eventInterp) { + if (Tcl_EvalEx(_eventInterp, "tk_getOpenFile -filetypes {" + "{{TCL Scripts} {.tcl} TEXT} {{Text Files} {} TEXT}}", + -1, TCL_EVAL_GLOBAL) == TCL_OK) { + Tcl_Obj *path = Tcl_GetObjResult(_eventInterp); + int len; + Tcl_GetStringFromObj(path, &len); + if (len) { + Tcl_IncrRefCount(path); + int code = Tcl_FSEvalFile(_eventInterp, path); + if (code != TCL_OK) { + Tcl_BackgroundError(_eventInterp); + } + Tcl_DecrRefCount(path); + } + } + Tcl_ResetResult(_eventInterp); + } +} +- (void)tkDemo:(id)sender { + if (_eventInterp) { + Tcl_Obj *path = GetWidgetDemoPath(_eventInterp); + if (path) { + Tcl_IncrRefCount(path); + int code = Tcl_FSEvalFile(_eventInterp, path); + if (code != TCL_OK) { + Tcl_BackgroundError(_eventInterp); + } + Tcl_DecrRefCount(path); + Tcl_ResetResult(_eventInterp); + } + } +} +@end -static void GenerateEditEvent(int flag); -static Tcl_Obj* GetWidgetDemoPath(Tcl_Interp *interp); -static OSStatus MenuEventHandlerProc(EventHandlerCallRef callRef, - EventRef event, void *userData); +#pragma mark TKContentView(TKMenus) +@implementation TKContentView(TKMenus) +- (BOOL)validateUserInterfaceItem:(id <NSValidatedUserInterfaceItem>)anItem { + return YES; +} +#define EDIT_ACTION(a, e) \ + - (void) a:(id)sender { \ + if ([sender isKindOfClass:[NSMenuItem class]]) { \ + GenerateEditEvent(#e); \ + } \ + } +EDIT_ACTION(cut, Cut) +EDIT_ACTION(copy, Copy) +EDIT_ACTION(paste, Paste) +EDIT_ACTION(delete, Clear) +EDIT_ACTION(undo, Undo) +EDIT_ACTION(redo, Redo) +#undef EDIT_ACTION +@end + +#pragma mark - /* *---------------------------------------------------------------------- @@ -57,20 +252,22 @@ static OSStatus MenuEventHandlerProc(EventHandlerCallRef callRef, *---------------------------------------------------------------------- */ -Tcl_Obj* +static Tcl_Obj * GetWidgetDemoPath( Tcl_Interp *interp) { - Tcl_Obj *libpath , *result = NULL; + Tcl_Obj *libpath, *result = NULL; - libpath = Tcl_GetVar2Ex(gInterp, "tk_library", NULL, TCL_GLOBAL_ONLY); + libpath = Tcl_GetVar2Ex(interp, "tk_library", NULL, TCL_GLOBAL_ONLY); if (libpath) { Tcl_Obj *demo[2] = { Tcl_NewStringObj("demos", 5), Tcl_NewStringObj("widget", 6) }; - + Tcl_IncrRefCount(libpath); result = Tcl_FSJoinToPath(libpath, 2, demo); Tcl_DecrRefCount(libpath); + } else { + Tcl_ResetResult(interp); } return result; } @@ -93,151 +290,11 @@ GetWidgetDemoPath( void TkMacOSXHandleMenuSelect( - MenuID theMenu, - MenuItemIndex theItem, + short theMenu, + unsigned short theItem, int optionKeyPressed) { - Tk_Window tkwin; - Window window; - TkDisplay *dispPtr; - - if (theItem == 0) { - TkMacOSXClearMenubarActive(); - return; - } - - switch (theMenu) { - case kAppleMenu: - switch (theItem) { - case kAppleAboutItem: - { - Tcl_CmdInfo dummy; - if (optionKeyPressed || gInterp == NULL || - Tcl_GetCommandInfo(gInterp, - "tkAboutDialog", &dummy) == 0) { - TkAboutDlg(); - } else { - if (Tcl_EvalEx(gInterp, "tkAboutDialog", -1, - TCL_EVAL_GLOBAL) != TCL_OK) { - Tcl_BackgroundError(gInterp); - } - Tcl_ResetResult(gInterp); - } - break; - } - } - break; - case kFileMenu: - switch (theItem) { - case kSourceItem: - if (gInterp) { - if(Tcl_EvalEx(gInterp, "tk_getOpenFile -filetypes {" - "{{TCL Scripts} {.tcl} TEXT} " - "{{Text Files} {} TEXT}}", -1, TCL_EVAL_GLOBAL) - == TCL_OK) { - Tcl_Obj *path = Tcl_GetObjResult(gInterp); - int len; - - Tcl_GetStringFromObj(path, &len); - if (len) { - Tcl_IncrRefCount(path); - if (Tcl_FSEvalFile(gInterp, path) - == TCL_ERROR) { - Tcl_BackgroundError(gInterp); - } - Tcl_DecrRefCount(path); - } - } - Tcl_ResetResult(gInterp); - } - break; - case kDemoItem: - if (gInterp) { - Tcl_Obj *path = GetWidgetDemoPath(gInterp); - - if (path) { - Tcl_IncrRefCount(path); - if (Tcl_FSEvalFile(gInterp, path) - == TCL_ERROR) { - Tcl_BackgroundError(gInterp); - } - Tcl_DecrRefCount(path); - Tcl_ResetResult(gInterp); - } - } - break; - case kCloseItem: - /* Send close event */ - window = TkMacOSXGetXWindow(ActiveNonFloatingWindow()); - dispPtr = TkGetDisplayList(); - tkwin = Tk_IdToWindow(dispPtr->display, window); - TkGenWMDestroyEvent(tkwin); - break; - } - break; - case kEditMenu: - /* - * This implementation just send the keysyms Tk thinks are - * associated with function keys that do Cut, Copy & Paste on - * a Sun keyboard. - */ - GenerateEditEvent(theItem); - break; - default: - TkMacOSXDispatchMenuEvent(theMenu, theItem); - break; - } - /* - * Finally we unhighlight the menu. - */ - HiliteMenu(0); -} - -/* - *---------------------------------------------------------------------- - * - * MenuEventHandlerProc -- - * - * One-time handler of kEventMenuEnableItems for the edit menu. - * - * Results: - * OS status code. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -static OSStatus -MenuEventHandlerProc( - EventHandlerCallRef callRef, - EventRef event, - void *userData) -{ - OSStatus result = eventNotHandledErr, err; - int menuContext; - - err = ChkErr(GetEventParameter, event, kEventParamMenuContext, typeUInt32, - NULL, sizeof(menuContext), NULL, &menuContext); - if (err == noErr && (menuContext & kMenuContextMenuBarTracking)) { - if (gInterp) { - Tcl_Obj *path = GetWidgetDemoPath(gInterp); - - if (path) { - Tcl_IncrRefCount(path); - if (Tcl_FSAccess(path, R_OK) == 0) { - EnableMenuItem(tkFileMenu, kDemoItem); - } - Tcl_DecrRefCount(path); - } - } - ChkErr(RemoveEventHandler, menuEventHandlerRef); - menuEventHandlerRef = NULL; - result = noErr; - } - - return result; + Tcl_Panic("TkMacOSXHandleMenuSelect: Obsolete, no more Carbon!"); } /* @@ -260,75 +317,7 @@ void TkMacOSXInitMenus( Tcl_Interp *interp) { - OSStatus err; - EventHandlerUPP menuEventHandlerUPP; - const EventTypeSpec menuEventTypes[] = { - {kEventClassMenu, kEventMenuEnableItems}, - }; - - gInterp = interp; - if (TkMacOSXUseMenuID(kAppleMenu) != TCL_OK) { - Tcl_Panic("Menu ID %d is already in use!", kAppleMenu); - } - err = ChkErr(CreateNewMenu, kAppleMenu, kMenuAttrDoNotUseUserCommandKeys, - &tkAppleMenu); - if (err != noErr) { - Tcl_Panic("CreateNewMenu failed !"); - } - SetMenuTitle(tkAppleMenu, "\p\024"); - InsertMenu(tkAppleMenu, 0); - AppendMenu(tkAppleMenu, "\pAbout Tcl & Tk\xc9"); - AppendMenu(tkAppleMenu, "\p(-"); - - if (TkMacOSXUseMenuID(kFileMenu) != TCL_OK) { - Tcl_Panic("Menu ID %d is already in use!", kFileMenu); - } - err = ChkErr(CreateNewMenu, kFileMenu, kMenuAttrDoNotUseUserCommandKeys, - &tkFileMenu); - if (err != noErr) { - Tcl_Panic("CreateNewMenu failed !"); - } - SetMenuTitle(tkFileMenu, "\pFile"); - InsertMenu(tkFileMenu, 0); - InsertMenuItem(tkFileMenu, "\pSource\xc9", kSourceItem - 1); - InsertMenuItem(tkFileMenu, "\pRun Widget Demo", kDemoItem - 1); - InsertMenuItem(tkFileMenu, "\pClose/W", kCloseItem - 1); - DisableMenuItem(tkFileMenu, kDemoItem); - menuEventHandlerUPP = NewEventHandlerUPP(MenuEventHandlerProc); - ChkErr(InstallEventHandler, GetMenuEventTarget(tkFileMenu), - menuEventHandlerUPP, GetEventTypeCount(menuEventTypes), - menuEventTypes, NULL, &menuEventHandlerRef); - DisposeEventHandlerUPP(menuEventHandlerUPP); - - if (TkMacOSXUseMenuID(kEditMenu) != TCL_OK) { - Tcl_Panic("Menu ID %d is already in use!", kEditMenu); - } - err = ChkErr(CreateNewMenu, kEditMenu, kMenuAttrDoNotUseUserCommandKeys, - &tkEditMenu); - if (err != noErr) { - Tcl_Panic("CreateNewMenu failed !"); - } - SetMenuTitle(tkEditMenu, "\pEdit"); - InsertMenu(tkEditMenu, 0); - AppendMenu(tkEditMenu, "\pCut/X"); - AppendMenu(tkEditMenu, "\pCopy/C"); - AppendMenu(tkEditMenu, "\pPaste/V"); - AppendMenu(tkEditMenu, "\pClear"); - if (TkMacOSXUseMenuID(kHMHelpMenuID) != TCL_OK) { - Tcl_Panic("Help menu ID %s is already in use!", kHMHelpMenuID); - } - - /* - * Workaround a Carbon bug with kHICommandPreferences: the first call to - * IsMenuKeyEvent returns false for the preferences menu item key shorcut - * event (even if the corresponding menu item is dynamically enabled by a - * kEventCommandUpdateStatus handler), unless the kHICommandPreferences - * menu item has previously been enabled manually. [Bug 1481503] - */ - EnableMenuCommand(NULL, kHICommandPreferences); - - DrawMenuBar(); - return; + [NSApp _setupMenus]; } /* @@ -336,8 +325,8 @@ TkMacOSXInitMenus( * * GenerateEditEvent -- * - * Takes an edit menu item and posts the corasponding a virtual - * event to Tk's event queue. + * Takes an edit menu item and posts the corasponding a virtual event to + * Tk's event queue. * * Results: * None. @@ -350,50 +339,133 @@ TkMacOSXInitMenus( static void GenerateEditEvent( - int flag) + const char *name) { XVirtualEvent event; int x, y; - Tk_Window tkwin; - Window window; - TkDisplay *dispPtr; + TkWindow *winPtr = TkMacOSXGetTkWindow([NSApp keyWindow]); + Tk_Window tkwin = (Tk_Window) winPtr; - window = TkMacOSXGetXWindow(ActiveNonFloatingWindow()); - dispPtr = TkGetDisplayList(); - tkwin = Tk_IdToWindow(dispPtr->display, window); - tkwin = (Tk_Window) ((TkWindow *) tkwin)->dispPtr->focusPtr; if (tkwin == NULL) { return; } - + tkwin = (Tk_Window) winPtr->dispPtr->focusPtr; + if (tkwin == NULL) { + return; + } bzero(&event, sizeof(XVirtualEvent)); event.type = VirtualEvent; - event.serial = Tk_Display(tkwin)->request; + event.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); event.send_event = false; event.display = Tk_Display(tkwin); event.event = Tk_WindowId(tkwin); event.root = XRootWindow(Tk_Display(tkwin), 0); event.subwindow = None; event.time = TkpGetMS(); - - XQueryPointer(NULL, None, NULL, NULL, + XQueryPointer(NULL, winPtr->window, NULL, NULL, &event.x_root, &event.y_root, &x, &y, &event.state); - tkwin = Tk_TopCoordsToWindow(tkwin, x, y, &event.x, &event.y); + Tk_TopCoordsToWindow(tkwin, x, y, &event.x, &event.y); event.same_screen = true; + event.name = Tk_GetUid(name); + Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); +} - switch (flag) { - case EDIT_CUT: - event.name = Tk_GetUid("Cut"); - break; - case EDIT_COPY: - event.name = Tk_GetUid("Copy"); - break; - case EDIT_PASTE: - event.name = Tk_GetUid("Paste"); - break; - case EDIT_CLEAR: - event.name = Tk_GetUid("Clear"); - break; +#pragma mark - +#pragma mark NSMenu & NSMenuItem Utilities + +@implementation NSMenu(TKUtils) ++ (id)menuWithTitle:(NSString *)title { + NSMenu *m = [[self alloc] initWithTitle:title]; + return [m autorelease]; +} ++ (id)menuWithTitle:(NSString *)title menuItems:(NSArray *)items { + NSMenu *m = [[self alloc] initWithTitle:title]; + for (NSMenuItem *i in items) { + [m addItem:i]; } - Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); + return [m autorelease]; +} ++ (id)menuWithTitle:(NSString *)title submenus:(NSArray *)submenus { + NSMenu *m = [[self alloc] initWithTitle:title]; + for (NSMenu *i in submenus) { + [m addItem:[NSMenuItem itemWithSubmenu:i]]; + } + return [m autorelease]; +} +- (NSMenuItem *)itemWithSubmenu:(NSMenu *)submenu { + return [self itemAtIndex:[self indexOfItemWithSubmenu:submenu]]; } +- (NSMenuItem *)itemInSupermenu { + NSMenu *supermenu = [self supermenu]; + return (supermenu ? [supermenu itemWithSubmenu:self] : nil); +} +@end + +@implementation NSMenuItem(TKUtils) ++ (id)itemWithSubmenu:(NSMenu *)submenu { + NSMenuItem *i = [[self alloc] initWithTitle:[submenu title] action:NULL + keyEquivalent:@""]; + [i setSubmenu:submenu]; + return [i autorelease]; +} ++ (id)itemWithTitle:(NSString *)title submenu:(NSMenu *)submenu { + NSMenuItem *i = [[self alloc] initWithTitle:title action:NULL + keyEquivalent:@""]; + [i setSubmenu:submenu]; + return [i autorelease]; +} ++ (id)itemWithTitle:(NSString *)title action:(SEL)action { + NSMenuItem *i = [[self alloc] initWithTitle:title action:action + keyEquivalent:@""]; + [i setTarget:NSApp]; + return [i autorelease]; +} ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + target:(id)target { + NSMenuItem *i = [[self alloc] initWithTitle:title action:action + keyEquivalent:@""]; + [i setTarget:target]; + return [i autorelease]; +} ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + keyEquivalent:(NSString *)keyEquivalent { + NSMenuItem *i = [[self alloc] initWithTitle:title action:action + keyEquivalent:keyEquivalent]; + [i setTarget:NSApp]; + return [i autorelease]; +} ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + target:(id)target keyEquivalent:(NSString *)keyEquivalent { + NSMenuItem *i = [[self alloc] initWithTitle:title action:action + keyEquivalent:keyEquivalent]; + [i setTarget:target]; + return [i autorelease]; +} ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + keyEquivalent:(NSString *)keyEquivalent + keyEquivalentModifierMask:(NSUInteger)keyEquivalentModifierMask { + NSMenuItem *i = [[self alloc] initWithTitle:title action:action + keyEquivalent:keyEquivalent]; + [i setTarget:NSApp]; + [i setKeyEquivalentModifierMask:keyEquivalentModifierMask]; + return [i autorelease]; +} ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + target:(id)target keyEquivalent:(NSString *)keyEquivalent + keyEquivalentModifierMask:(NSUInteger)keyEquivalentModifierMask { + NSMenuItem *i = [[self alloc] initWithTitle:title action:action + keyEquivalent:keyEquivalent]; + [i setTarget:target]; + [i setKeyEquivalentModifierMask:keyEquivalentModifierMask]; + return [i autorelease]; +} +@end + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXMouseEvent.c b/macosx/tkMacOSXMouseEvent.c index 46398f6..89f0642 100644 --- a/macosx/tkMacOSXMouseEvent.c +++ b/macosx/tkMacOSXMouseEvent.c @@ -1,58 +1,14 @@ /* * tkMacOSXMouseEvent.c -- * - * This file implements functions that decode & handle mouse events - * on MacOS X. + * This file implements functions that decode & handle mouse events on + * MacOS X. * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. */ #include "tkMacOSXPrivate.h" @@ -61,698 +17,198 @@ #include "tkMacOSXDebug.h" typedef struct { - WindowRef whichWin; - WindowRef activeNonFloating; - WindowPartCode windowPart; - unsigned int state; - long delta; - Window window; - Point global; - Point local; + unsigned int state; + long delta; + Window window; + Point global; + Point local; } MouseEventData; -/* - * Declarations of static variables used in this file. - */ +static int GenerateButtonEvent(MouseEventData *medPtr); +static unsigned int ButtonModifiers2State(UInt32 buttonState, + UInt32 keyModifiers); -static int gEatButtonUp = 0; /* 1 if we need to eat the next up event */ +#pragma mark TKApplication(TKMouseEvent) -/* - * Declarations of functions used only in this file. - */ +enum { + NSWindowWillMoveEventType = 20 +}; -static void BringWindowForward(WindowRef wRef, int isFrontProcess, - int frontWindowOnly); -static int GeneratePollingEvents(MouseEventData * medPtr); -static int GenerateMouseWheelEvent(MouseEventData * medPtr); -static int GenerateButtonEvent(MouseEventData * medPtr); -static int GenerateToolbarButtonEvent(MouseEventData * medPtr); -static int HandleWindowTitlebarMouseDown(MouseEventData * medPtr, Tk_Window tkwin); -static unsigned int ButtonModifiers2State(UInt32 buttonState, UInt32 keyModifiers); -static Tk_Window GetGrabWindowForWindow(Tk_Window tkwin); +@implementation TKApplication(TKMouseEvent) +- (NSEvent *)tkProcessMouseEvent:(NSEvent *)theEvent { +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, theEvent); +#endif + id win; + NSEventType type = [theEvent type]; +#if 0 + NSTrackingArea *trackingArea = nil; + NSInteger eventNumber, clickCount, buttonNumber; +#endif -static int TkMacOSXGetEatButtonUp(void); -static void TkMacOSXSetEatButtonUp(int f); + switch (type) { + case NSMouseEntered: + case NSMouseExited: + case NSCursorUpdate: +#if 0 + trackingArea = [theEvent trackingArea]; +#endif + /* fall through */ + case NSLeftMouseDown: + case NSLeftMouseUp: + case NSRightMouseDown: + case NSRightMouseUp: + case NSOtherMouseDown: + case NSOtherMouseUp: + + case NSLeftMouseDragged: + case NSRightMouseDragged: + case NSOtherMouseDragged: + + case NSMouseMoved: +#if 0 + eventNumber = [theEvent eventNumber]; + if (!trackingArea) { + clickCount = [theEvent clickCount]; + buttonNumber = [theEvent buttonNumber]; + } +#endif - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXProcessMouseEvent -- - * - * This routine processes the event in eventPtr, and - * generates the appropriate Tk events from it. - * - * Results: - * True if event(s) are generated - false otherwise. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * - *---------------------------------------------------------------------- - */ + case NSTabletPoint: + case NSTabletProximity: -MODULE_SCOPE int -TkMacOSXProcessMouseEvent(TkMacOSXEvent *eventPtr, MacEventStatus * statusPtr) -{ - Tk_Window tkwin; - Point where, where2; - int result; - TkDisplay * dispPtr; - OSStatus err; - MouseEventData mouseEventData, * medPtr = &mouseEventData; - int isFrontProcess; + case NSScrollWheel: + win = [self windowWithWindowNumber:[theEvent windowNumber]]; + break; - switch (eventPtr->eKind) { - case kEventMouseDown: - case kEventMouseUp: - case kEventMouseMoved: - case kEventMouseDragged: - case kEventMouseWheelMoved: - break; - default: - return false; - break; - } - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamMouseLocation, - typeQDPoint, NULL, - sizeof(where), NULL, - &where); - if (err != noErr) { - GetGlobalMouse(&where); - } - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamWindowRef, - typeWindowRef, NULL, - sizeof(WindowRef), NULL, - &medPtr->whichWin); - if (err == noErr) { - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamWindowPartCode, - typeWindowPartCode, NULL, - sizeof(WindowPartCode), NULL, - &medPtr->windowPart); + default: + return theEvent; + break; } - if (err != noErr) { - medPtr->windowPart = FindWindow(where, &medPtr->whichWin); - } - medPtr->window = TkMacOSXGetXWindow(medPtr->whichWin); - if (medPtr->whichWin != NULL && medPtr->window == None) { - return false; + + NSPoint global, local = [theEvent locationInWindow]; + if (win) { + global = [win convertBaseToScreen:local]; + local.y = [win frame].size.height - local.y; + global.y = tkMacOSXZeroScreenHeight - global.y; + } else { + local.y = tkMacOSXZeroScreenHeight - local.y; + global = local; } - if (eventPtr->eKind == kEventMouseDown) { - if (IsWindowActive(medPtr->whichWin) && IsWindowPathSelectEvent( - medPtr->whichWin, eventPtr->eventRef)) { - ChkErr(WindowPathSelect, medPtr->whichWin, NULL, NULL); - return false; - } - if (medPtr->windowPart == inProxyIcon) { - TkMacOSXTrackingLoop(1); - err = ChkErr(TrackWindowProxyDrag, medPtr->whichWin, where); - TkMacOSXTrackingLoop(0); - if (err == errUserWantsToDragWindow) { - medPtr->windowPart = inDrag; - } else { - return false; - } - } + + Window window = TkMacOSXGetXWindow(win); + Tk_Window tkwin = window ? Tk_IdToWindow(TkGetDisplayList()->display, + window) : NULL; + if (!tkwin) { + tkwin = TkMacOSXGetCapture(); } - isFrontProcess = Tk_MacOSXIsAppInFront(); - if (isFrontProcess) { - medPtr->state = ButtonModifiers2State(GetCurrentEventButtonState(), - GetCurrentEventKeyModifiers()); - } else { - medPtr->state = ButtonModifiers2State(GetCurrentButtonState(), - GetCurrentKeyModifiers()); + if (!tkwin) { + return theEvent; } - medPtr->global = where; - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamWindowMouseLocation, - typeQDPoint, NULL, - sizeof(Point), NULL, - &medPtr->local); + + /* + MacDrawable *macWin = (MacDrawable *) window; + NSView *view = TkMacOSXDrawableView(macWin); + local = [view convertPoint:local fromView:nil]; + local.y = NSHeight([view bounds]) - local.y; + */ + TkWindow *winPtr = (TkWindow *) tkwin; + local.x -= winPtr->wmInfoPtr->xInParent; + local.y -= winPtr->wmInfoPtr->yInParent; + + int win_x, win_y; + tkwin = Tk_TopCoordsToWindow(tkwin, local.x, local.y, + &win_x, &win_y); + + unsigned int state = 0; + NSInteger button = [theEvent buttonNumber]; + EventRef eventRef = (EventRef)[theEvent eventRef]; + UInt32 buttons; + OSStatus err = GetEventParameter(eventRef, kEventParamMouseChord, + typeUInt32, NULL, sizeof(UInt32), NULL, &buttons); if (err == noErr) { - if (medPtr->whichWin) { - Rect widths; - GetWindowStructureWidths(medPtr->whichWin, &widths); - medPtr->local.h -= widths.left; - medPtr->local.v -= widths.top; - } + state |= (buttons & ((1<<5) - 1)) << 8; } else { - medPtr->local = where; - if (medPtr->whichWin) { - QDGlobalToLocalPoint(GetWindowPort(medPtr->whichWin), - &medPtr->local); - } - } - medPtr->activeNonFloating = ActiveNonFloatingWindow(); - dispPtr = TkGetDisplayList(); - tkwin = Tk_IdToWindow(dispPtr->display, medPtr->window); - - if (eventPtr->eKind != kEventMouseDown) { - int res = false; - - switch (eventPtr->eKind) { - case kEventMouseUp: - /* - * The window manager only needs to know about mouse down - * events and sometimes we need to "eat" the mouse up. - * Otherwise, we just pass the event to Tk. - */ - if (TkMacOSXGetEatButtonUp()) { - TkMacOSXSetEatButtonUp(false); - } else { - res = GenerateButtonEvent(medPtr); - } - break; - case kEventMouseWheelMoved: - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamMouseWheelDelta, typeLongInteger, NULL, - sizeof(long), NULL, &medPtr->delta); - if (err != noErr ) { - statusPtr->err = 1; - } else { - EventMouseWheelAxis axis; - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamMouseWheelAxis, typeMouseWheelAxis, - NULL, sizeof(EventMouseWheelAxis), NULL, &axis); - if (err == noErr && axis == kEventMouseWheelAxisX) { - medPtr->state |= ShiftMask; - } - res = GenerateMouseWheelEvent(medPtr); - } - break; - case kEventMouseMoved: - case kEventMouseDragged: - res = GeneratePollingEvents(medPtr); + if (button < 5) { + switch (type) { + case NSLeftMouseDown: + case NSRightMouseDown: + case NSLeftMouseDragged: + case NSRightMouseDragged: + case NSOtherMouseDown: + state |= 1 << (button + 8); break; default: - Tcl_Panic("Unknown mouse event !"); - } - if (res) { - statusPtr->stopProcessing = 1; - } - return res; - } - TkMacOSXSetEatButtonUp(false); - if (medPtr->whichWin) { - /* - * We got a mouse down in a window - * See if this is the activate click - * This click moves the window forward. We don't want - * the corresponding mouse-up to be reported to the application - * or else it will mess up some Tk scripts. - */ - - if (!(TkpIsWindowFloating(medPtr->whichWin)) - && (medPtr->whichWin != medPtr->activeNonFloating - || !isFrontProcess)) { - int frontWindowOnly = 1; - int cmdDragGrow = ((medPtr->windowPart == inDrag || - medPtr->windowPart == inGrow) && medPtr->state & Mod1Mask); - - if (!cmdDragGrow) { - Tk_Window grabWin = GetGrabWindowForWindow(tkwin); - - frontWindowOnly = !grabWin; - if (grabWin && grabWin != tkwin) { - TkMacOSXSetEatButtonUp(true); - BringWindowForward(TkMacOSXDrawableWindow( - ((TkWindow*)grabWin)->window), isFrontProcess, - frontWindowOnly); - return false; - } - } - - /* - * Clicks in the titlebar widgets are handled without bringing the - * window forward. - */ - if ((result = HandleWindowTitlebarMouseDown(medPtr, tkwin)) != -1) { - statusPtr->stopProcessing = 1; - return result; - } else { - /* - * Only windows with the kWindowNoActivatesAttribute can - * receive mouse events in the background. - */ - if (!(((TkWindow *)tkwin)->wmInfoPtr->attributes & - kWindowNoActivatesAttribute)) { - /* - * Allow background window dragging & growing with Command - * down. - */ - if (!cmdDragGrow) { - TkMacOSXSetEatButtonUp(true); - BringWindowForward(medPtr->whichWin, isFrontProcess, - frontWindowOnly); - } - /* - * Allow dragging & growing of windows that were/are in the - * background. - */ - if (!(medPtr->windowPart == inDrag || - medPtr->windowPart == inGrow)) { - return false; - } - } - } - } else { - if ((result = HandleWindowTitlebarMouseDown(medPtr, tkwin)) != -1) { - statusPtr->stopProcessing = 1; - return result; - } - } - switch (medPtr->windowPart) { - case inDrag: { - WindowAttributes attributes; - - GetWindowAttributes(medPtr->whichWin, &attributes); - if (!(attributes & kWindowAsyncDragAttribute)) { - TkMacOSXTrackingLoop(1); - DragWindow(medPtr->whichWin, where, NULL); - TkMacOSXTrackingLoop(0); - where2.h = where2.v = 0; - QDLocalToGlobalPoint(GetWindowPort(medPtr->whichWin), - &where2); - if (EqualPt(where, where2)) { - return false; - } - return true; - } break; } - case inGrow: - /* - * Generally the content region is the domain of Tk - * sub-windows. However, one exception is the grow - * region. A button down in this area will be handled - * by the window manager. Note: this means that Tk - * may not get button down events in this area! - */ - if (TkMacOSXGrowToplevel(medPtr->whichWin, where) == true) { - statusPtr->stopProcessing = 1; - return true; - } else { - return GenerateButtonEvent(medPtr); - } - break; - case inContent: - return GenerateButtonEvent(medPtr); - break; - default: - return false; - break; } } - return false; -} - -/* - *---------------------------------------------------------------------- - * - * HandleWindowTitlebarMouseDown -- - * - * Handle clicks in window titlebar. - * - * Results: - * 1 if event was handled, 0 if event was not handled, - * -1 if MouseDown was not in window titlebar. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * - *---------------------------------------------------------------------- - */ - -int -HandleWindowTitlebarMouseDown(MouseEventData * medPtr, Tk_Window tkwin) -{ - int result = INT_MAX; - - switch (medPtr->windowPart) { - case inGoAway: - case inCollapseBox: - case inZoomIn: - case inZoomOut: - case inToolbarButton: - if (!IsWindowActive(medPtr->whichWin)) { - WindowRef frontWindow = FrontNonFloatingWindow(); - WindowModality frontWindowModality = kWindowModalityNone; + NSUInteger modifiers = [theEvent modifierFlags]; - if (frontWindow && frontWindow != medPtr->whichWin) { - ChkErr(GetWindowModality, frontWindow, - &frontWindowModality, NULL); - } - if (frontWindowModality == kWindowModalityAppModal) { - result = 0; - } - } - break; - default: - result = -1; - break; + if (modifiers & NSAlphaShiftKeyMask) { + state |= LockMask; } - - if (result == INT_MAX) { - result = 0; - TkMacOSXTrackingLoop(1); - switch (medPtr->windowPart) { - case inGoAway: - if (TrackGoAway(medPtr->whichWin, medPtr->global) && tkwin) { - TkGenWMDestroyEvent(tkwin); - result = 1; - } - break; - case inCollapseBox: - if (TrackBox(medPtr->whichWin, medPtr->global, - medPtr->windowPart) && tkwin) { - TkpWmSetState((TkWindow *)tkwin, IconicState); - result = 1; - } - break; - case inZoomIn: - case inZoomOut: - if (TrackBox(medPtr->whichWin, medPtr->global, - medPtr->windowPart)) { - result = TkMacOSXZoomToplevel(medPtr->whichWin, - medPtr->windowPart); - } - break; - case inToolbarButton: - if (TrackBox(medPtr->whichWin, medPtr->global, - medPtr->windowPart)) { - result = GenerateToolbarButtonEvent(medPtr); - } - break; - } - TkMacOSXTrackingLoop(0); + if (modifiers & NSShiftKeyMask) { + state |= ShiftMask; } - - return result; -} - -/* - *---------------------------------------------------------------------- - * - * GeneratePollingEvents -- - * - * This function polls the mouse position and generates X Motion, - * Enter & Leave events. The cursor is also updated at this - * time. - * - * Results: - * True if event(s) are generated - false otherwise. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * The cursor may be changed. - * - *---------------------------------------------------------------------- - */ - -static int -GeneratePollingEvents(MouseEventData * medPtr) -{ - Tk_Window tkwin, rootwin, grabWin; - int local_x, local_y; - TkDisplay *dispPtr; - - - grabWin = TkMacOSXGetCapture(); - - if ((!TkpIsWindowFloating(medPtr->whichWin) - && (medPtr->activeNonFloating != medPtr->whichWin))) { - /* - * If the window for this event is not floating, and is not the - * active non-floating window, don't generate polling events. - * We don't send events to backgrounded windows. So either send - * it to the grabWin, or NULL if there is no grabWin. - */ - - tkwin = grabWin; - } else { - /* - * First check whether the toplevel containing this mouse - * event is the grab window. If not, then send the event - * to the grab window. Otherwise, set tkWin to the subwindow - * which most closely contains the mouse event. - */ - - dispPtr = TkGetDisplayList(); - rootwin = Tk_IdToWindow(dispPtr->display, medPtr->window); - if ((rootwin == NULL) - || ((grabWin != NULL) && (rootwin != grabWin))) { - tkwin = grabWin; - } else { - tkwin = Tk_TopCoordsToWindow(rootwin, - medPtr->local.h, medPtr->local.v, - &local_x, &local_y); - } + if (modifiers & NSControlKeyMask) { + state |= ControlMask; } - - /* - * The following call will generate the appropiate X events and - * adjust any state that Tk must remember. - */ - - Tk_UpdatePointer(tkwin, medPtr->global.h, medPtr->global.v, - medPtr->state); - - return true; -} - -/* - *---------------------------------------------------------------------- - * - * BringWindowForward -- - * - * Bring this background window to the front. - * - * Results: - * None. - * - * Side effects: - * The window is brought forward. - * - *---------------------------------------------------------------------- - */ - -static void -BringWindowForward( - WindowRef wRef, - int isFrontProcess, - int frontWindowOnly) -{ - if (wRef && !TkpIsWindowFloating(wRef) && IsValidWindowPtr(wRef)) { - WindowRef frontWindow = FrontNonFloatingWindow(); - WindowModality frontWindowModality = kWindowModalityNone; - - if (frontWindow && frontWindow != wRef) { - ChkErr(GetWindowModality, frontWindow, &frontWindowModality, NULL); - } - if (frontWindowModality != kWindowModalityAppModal) { - Window window = TkMacOSXGetXWindow(wRef); - - if (window != None) { - TkDisplay *dispPtr = TkGetDisplayList(); - TkWindow * winPtr = (TkWindow *)Tk_IdToWindow(dispPtr->display, - window); - - if (winPtr && winPtr->wmInfoPtr && - winPtr->wmInfoPtr->master != None) { - TkWindow *masterWinPtr = (TkWindow *)Tk_IdToWindow( - dispPtr->display, winPtr->wmInfoPtr->master); - - if (masterWinPtr && masterWinPtr->window != None && - TkMacOSXHostToplevelExists(masterWinPtr)) { - WindowRef masterMacWin = - TkMacOSXDrawableWindow(masterWinPtr->window); - - if (masterMacWin) { - BringToFront(masterMacWin); - } - } - } - } - SelectWindow(wRef); - } else { - frontWindowOnly = 0; - } + if (modifiers & NSCommandKeyMask) { + state |= Mod1Mask; /* command key */ } - if (!isFrontProcess) { - ProcessSerialNumber ourPsn = {0, kCurrentProcess}; - - ChkErr(SetFrontProcessWithOptions, &ourPsn, frontWindowOnly ? - kSetFrontProcessFrontWindowOnly : 0); + if (modifiers & NSAlternateKeyMask) { + state |= Mod2Mask; /* option key */ } -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXBringWindowForward -- - * - * Bring this window to the front in response to a mouse click. If - * a grab is in effect, bring the grab window to the front instead. - * - * Results: - * None. - * - * Side effects: - * The window is brought forward. - * - *---------------------------------------------------------------------- - */ - -void -TkMacOSXBringWindowForward( - WindowRef wRef) -{ - TkDisplay *dispPtr = TkGetDisplayList(); - Tk_Window tkwin = Tk_IdToWindow(dispPtr->display,TkMacOSXGetXWindow(wRef)); - Tk_Window grabWin = GetGrabWindowForWindow(tkwin); - - if (grabWin && grabWin != tkwin) { - wRef = TkMacOSXDrawableWindow(((TkWindow*)grabWin)->window); + if (modifiers & NSNumericPadKeyMask) { + state |= Mod3Mask; } - TkMacOSXSetEatButtonUp(true); - BringWindowForward(wRef, Tk_MacOSXIsAppInFront(), !grabWin); -} - -/* - *---------------------------------------------------------------------- - * - * GetGrabWindowForWindow -- - * - * Get the grab window for the given window, if any. - * - * Results: - * Grab Tk_Window or None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -Tk_Window -GetGrabWindowForWindow( - Tk_Window tkwin) -{ - Tk_Window grabWin = TkMacOSXGetCapture(); - - if (!grabWin) { - int grabState = TkGrabState((TkWindow*)tkwin); - - if (grabState != TK_GRAB_NONE && grabState != TK_GRAB_IN_TREE) { - grabWin = (Tk_Window) (((TkWindow*)tkwin)->dispPtr->grabWinPtr); - } + if (modifiers & NSFunctionKeyMask) { + state |= Mod4Mask; } - - return grabWin; -} - -/* - *---------------------------------------------------------------------- - * - * GenerateMouseWheelEvent -- - * - * Generates a "MouseWheel" Tk event. - * - * Results: - * None. - * - * Side effects: - * Places a mousewheel event on the event queue. - * - *---------------------------------------------------------------------- - */ -static int -GenerateMouseWheelEvent(MouseEventData * medPtr) -{ - Tk_Window tkwin, rootwin; - TkDisplay *dispPtr; - TkWindow *winPtr; - XEvent xEvent; - - dispPtr = TkGetDisplayList(); - rootwin = Tk_IdToWindow(dispPtr->display, medPtr->window); - if (rootwin == NULL) { - tkwin = NULL; + if (type != NSScrollWheel) { +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@"UpdatePointer %p x %f.0 y %f.0 %d", tkwin, global.x, global.y, state); +#endif + Tk_UpdatePointer(tkwin, global.x, global.y, state); } else { - tkwin = Tk_TopCoordsToWindow(rootwin, - medPtr->local.h, medPtr->local.v, - &xEvent.xbutton.x, &xEvent.xbutton.y); - } - - /* - * The following call will generate the appropiate X events and - * adjust any state that Tk must remember. - */ - - if (!tkwin) { - tkwin = TkMacOSXGetCapture(); - } - if (!tkwin) { - return false; + CGFloat delta; + int coarseDelta; + XEvent xEvent; + + xEvent.type = MouseWheelEvent; + xEvent.xbutton.x = local.x; + xEvent.xbutton.y = local.y; + xEvent.xbutton.x_root = global.x; + xEvent.xbutton.y_root = global.y; + xEvent.xany.send_event = false; + xEvent.xany.display = Tk_Display(tkwin); + xEvent.xany.window = Tk_WindowId(tkwin); + + delta = [theEvent deltaY]; + if (delta != 0.0) { + coarseDelta = (delta > -1.0 && delta < 1.0) ? (signbit(delta) ? -1 : 1) : lround(delta); + xEvent.xbutton.state = state; + xEvent.xkey.keycode = coarseDelta; + xEvent.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); + Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); + } + delta = [theEvent deltaX]; + if (delta != 0.0) { + coarseDelta = (delta > -1.0 && delta < 1.0) ? (signbit(delta) ? -1 : 1) : lround(delta); + xEvent.xbutton.state = state | ShiftMask; + xEvent.xkey.keycode = coarseDelta; + xEvent.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); + Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); + } } - winPtr = (TkWindow *) tkwin; - xEvent.type = MouseWheelEvent; - xEvent.xkey.keycode = medPtr->delta; - xEvent.xbutton.x_root = medPtr->global.h; - xEvent.xbutton.y_root = medPtr->global.v; - xEvent.xbutton.state = medPtr->state; - xEvent.xany.serial = LastKnownRequestProcessed(winPtr->display); - xEvent.xany.send_event = false; - xEvent.xany.display = winPtr->display; - xEvent.xany.window = Tk_WindowId(winPtr); - Tk_QueueWindowEvent(&xEvent, TCL_QUEUE_TAIL); - return true; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXGetEatButtonUp -- - * - * Results: - * Returns the flag indicating if we need to eat the - * next mouse up event - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -int -TkMacOSXGetEatButtonUp(void) -{ - return gEatButtonUp; -} - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXSetEatButtonUp -- - * - * Results: - * None. - * - * Side effects: - * Sets the flag indicating if we need to eat the - * next mouse up event - * - *---------------------------------------------------------------------- - */ -void -TkMacOSXSetEatButtonUp(int f) -{ - gEatButtonUp = f; + return theEvent; } +@end + +#pragma mark - /* *---------------------------------------------------------------------- @@ -779,7 +235,7 @@ TkMacOSXModifierState(void) keyModifiers = isFrontProcess ? GetCurrentEventKeyModifiers() : GetCurrentKeyModifiers(); - return (EventModifiers)(keyModifiers & USHRT_MAX); + return (EventModifiers) (keyModifiers & USHRT_MAX); } /* @@ -790,8 +246,8 @@ TkMacOSXModifierState(void) * Returns the current state of the button & modifier keys. * * Results: - * A bitwise inclusive OR of a subset of the following: - * Button1Mask, ShiftMask, LockMask, ControlMask, Mod*Mask. + * A bitwise inclusive OR of a subset of the following: Button1Mask, + * ShiftMask, LockMask, ControlMask, Mod*Mask. * * Side effects: * None. @@ -805,10 +261,8 @@ TkMacOSXButtonKeyState(void) UInt32 buttonState = 0, keyModifiers; int isFrontProcess = (GetCurrentEvent() && Tk_MacOSXIsAppInFront()); - if (!TkMacOSXGetEatButtonUp()) { - buttonState = isFrontProcess ? GetCurrentEventButtonState() : - GetCurrentButtonState(); - } + buttonState = isFrontProcess ? GetCurrentEventButtonState() : + GetCurrentButtonState(); keyModifiers = isFrontProcess ? GetCurrentEventKeyModifiers() : GetCurrentKeyModifiers(); @@ -833,11 +287,16 @@ TkMacOSXButtonKeyState(void) */ static unsigned int -ButtonModifiers2State(UInt32 buttonState, UInt32 keyModifiers) +ButtonModifiers2State( + UInt32 buttonState, + UInt32 keyModifiers) { unsigned int state; - /* Tk supports at most 5 buttons */ + /* + * Tk supports at most 5 buttons. + */ + state = (buttonState & ((1<<5) - 1)) << 8; if (keyModifiers & alphaLock) { @@ -871,12 +330,12 @@ ButtonModifiers2State(UInt32 buttonState, UInt32 keyModifiers) * XQueryPointer -- * * Check the current state of the mouse. This is not a complete - * implementation of this function. It only computes the root - * coordinates and the current mask. + * implementation of this function. It only computes the root coordinates + * and the current mask. * * Results: - * Sets root_x_return, root_y_return, and mask_return. Returns - * true on success. + * Sets root_x_return, root_y_return, and mask_return. Returns true on + * success. * * Side effects: * None. @@ -886,71 +345,42 @@ ButtonModifiers2State(UInt32 buttonState, UInt32 keyModifiers) Bool XQueryPointer( - Display* display, + Display *display, Window w, - Window* root_return, - Window* child_return, - int* root_x_return, - int* root_y_return, - int* win_x_return, - int* win_y_return, - unsigned int* mask_return) + Window *root_return, + Window *child_return, + int *root_x_return, + int *root_y_return, + int *win_x_return, + int *win_y_return, + unsigned int *mask_return) { int getGlobal = (root_x_return && root_y_return); - int getLocal = (win_x_return && win_y_return); + int getLocal = (win_x_return && win_y_return && w != None); if (getGlobal || getLocal) { - Point where, local; - OSStatus err = noErr; - int gotMouseLoc = 0; - EventRef ev = GetCurrentEvent(); + NSPoint global = [NSEvent mouseLocation]; - if (ev && getLocal) { - err = ChkErr(GetEventParameter, ev, kEventParamWindowMouseLocation, - typeQDPoint, NULL, sizeof(Point), NULL, &local); - gotMouseLoc = (err == noErr); - } - if (getGlobal || !gotMouseLoc) { - if (ev) { - err = ChkErr(GetEventParameter, ev, kEventParamMouseLocation, - typeQDPoint, NULL, sizeof(Point), NULL, &where); - } - if (!ev || err != noErr) { - GetGlobalMouse(&where); - } - } if (getLocal) { - WindowRef whichWin; - if (ev) { - err = ChkErr(GetEventParameter, ev, kEventParamWindowRef, - typeWindowRef, NULL, sizeof(WindowRef), NULL, - &whichWin); - } - if (!ev || err != noErr) { - FindWindow(where, &whichWin); - } - if (gotMouseLoc) { - if (whichWin) { - Rect widths; + MacDrawable *macWin = (MacDrawable *) w; + NSWindow *win = TkMacOSXDrawableWindow(w); - ChkErr(GetWindowStructureWidths, whichWin, &widths); - local.h -= widths.left; - local.v -= widths.top; - } - } else { - local = where; - if (whichWin) { - QDGlobalToLocalPoint(GetWindowPort(whichWin), &local); + if (win) { + NSPoint local; + + local = [win convertScreenToBase:global]; + local.y = [win frame].size.height - local.y; + if (macWin->winPtr && macWin->winPtr->wmInfoPtr) { + local.x -= macWin->winPtr->wmInfoPtr->xInParent; + local.y -= macWin->winPtr->wmInfoPtr->yInParent; } + *win_x_return = local.x; + *win_y_return = local.y; } } if (getGlobal) { - *root_x_return = where.h; - *root_y_return = where.v; - } - if (getLocal) { - *win_x_return = local.h; - *win_y_return = local.v; + *root_x_return = global.x; + *root_y_return = tkMacOSXZeroScreenHeight - global.y; } } if (mask_return) { @@ -964,35 +394,34 @@ XQueryPointer( * * TkGenerateButtonEventForXPointer -- * - * This procedure generates an X button event for the current - * pointer state as reported by XQueryPointer(). + * This procedure generates an X button event for the current pointer + * state as reported by XQueryPointer(). * * Results: * True if event(s) are generated - false otherwise. * * Side effects: - * Additional events may be place on the Tk event queue. - * Grab state may also change. + * Additional events may be place on the Tk event queue. Grab state may + * also change. * *---------------------------------------------------------------------- */ MODULE_SCOPE int TkGenerateButtonEventForXPointer( - Window window) /* X Window containing button event. */ + Window window) /* X Window containing button event. */ { MouseEventData med; int global_x, global_y, local_x, local_y; bzero(&med, sizeof(MouseEventData)); - XQueryPointer(NULL, None, NULL, NULL, &global_x, &global_y, + XQueryPointer(NULL, window, NULL, NULL, &global_x, &global_y, &local_x, &local_y, &med.state); med.global.h = global_x; med.global.v = global_y; med.local.h = local_x; med.local.v = local_y; med.window = window; - med.activeNonFloating = ActiveNonFloatingWindow(); return GenerateButtonEvent(&med); } @@ -1002,27 +431,29 @@ TkGenerateButtonEventForXPointer( * * TkGenerateButtonEvent -- * - * Given a global x & y position and the button key status this - * procedure generates the appropiate X button event. It also - * handles the state changes needed to implement implicit grabs. + * Given a global x & y position and the button key status this procedure + * generates the appropiate X button event. It also handles the state + * changes needed to implement implicit grabs. * * Results: - * True if event(s) are generated - false otherwise. + * True if event(s) are generated, false otherwise. * * Side effects: - * Additional events may be place on the Tk event queue. - * Grab state may also change. + * Additional events may be place on the Tk event queue. Grab state may + * also change. * *---------------------------------------------------------------------- */ int TkGenerateButtonEvent( - int x, /* X location of mouse */ - int y, /* Y location of mouse */ - Window window, /* X Window containing button event. */ - unsigned int state) /* Button Key state suitable for X event */ + int x, /* X location of mouse, */ + int y, /* Y location of mouse. */ + Window window, /* X Window containing button event. */ + unsigned int state) /* Button Key state suitable for X event. */ { + MacDrawable *macWin = (MacDrawable *) window; + NSWindow *win = TkMacOSXDrawableWindow(window); MouseEventData med; bzero(&med, sizeof(MouseEventData)); @@ -1030,10 +461,20 @@ TkGenerateButtonEvent( med.window = window; med.global.h = x; med.global.v = y; - FindWindow(med.global, &med.whichWin); - med.activeNonFloating = ActiveNonFloatingWindow(); med.local = med.global; - QDGlobalToLocalPoint(GetWindowPort(med.whichWin), &med.local); + + if (win) { + NSPoint local = NSMakePoint(x, tkMacOSXZeroScreenHeight - y); + + local = [win convertScreenToBase:local]; + local.y = [win frame].size.height - local.y; + if (macWin->winPtr && macWin->winPtr->wmInfoPtr) { + local.x -= macWin->winPtr->wmInfoPtr->xInParent; + local.y -= macWin->winPtr->wmInfoPtr->yInParent; + } + med.local.h = local.x; + med.local.v = tkMacOSXZeroScreenHeight - local.y; + } return GenerateButtonEvent(&med); } @@ -1043,21 +484,22 @@ TkGenerateButtonEvent( * * GenerateButtonEvent -- * - * Generate an X button event from a MouseEventData structure. - * Handles the state changes needed to implement implicit grabs. + * Generate an X button event from a MouseEventData structure. Handles + * the state changes needed to implement implicit grabs. * * Results: * True if event(s) are generated - false otherwise. * * Side effects: - * Additional events may be place on the Tk event queue. - * Grab state may also change. + * Additional events may be place on the Tk event queue. Grab state may + * also change. * *---------------------------------------------------------------------- */ static int -GenerateButtonEvent(MouseEventData * medPtr) +GenerateButtonEvent( + MouseEventData *medPtr) { Tk_Window tkwin; int dummy; @@ -1065,11 +507,12 @@ GenerateButtonEvent(MouseEventData * medPtr) #if UNUSED /* - * ButtonDown events will always occur in the front - * window. ButtonUp events, however, may occur anywhere - * on the screen. ButtonUp events should only be sent - * to Tk if in the front window or during an implicit grab. + * ButtonDown events will always occur in the front window. ButtonUp + * events, however, may occur anywhere on the screen. ButtonUp events + * should only be sent to Tk if in the front window or during an implicit + * grab. */ + if ((medPtr->activeNonFloating == NULL) || ((!(TkpIsWindowFloating(medPtr->whichWin)) && (medPtr->activeNonFloating != medPtr->whichWin)) @@ -1087,61 +530,14 @@ GenerateButtonEvent(MouseEventData * medPtr) } Tk_UpdatePointer(tkwin, medPtr->global.h, medPtr->global.v, medPtr->state); - return true; } /* - *---------------------------------------------------------------------- - * - * GenerateToolbarButtonEvent -- - * - * Generates a "ToolbarButton" virtual event. - * This can be used to manage disappearing toolbars. - * - * Results: - * None. - * - * Side effects: - * Places a virtual event on the event queue. - * - *---------------------------------------------------------------------- + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: */ - -static int -GenerateToolbarButtonEvent(MouseEventData * medPtr) -{ - Tk_Window rootwin, tkwin = NULL; - TkDisplay *dispPtr; - TkWindow *winPtr; - XVirtualEvent event; - - dispPtr = TkGetDisplayList(); - rootwin = Tk_IdToWindow(dispPtr->display, medPtr->window); - if (rootwin) { - tkwin = Tk_TopCoordsToWindow(rootwin, - medPtr->local.h, medPtr->local.v, &event.x, &event.y); - } - if (!tkwin) { - return true; - } - winPtr = (TkWindow *)tkwin; - - bzero(&event, sizeof(XVirtualEvent)); - event.type = VirtualEvent; - event.serial = LastKnownRequestProcessed(winPtr->display); - event.send_event = false; - event.display = winPtr->display; - event.event = winPtr->window; - 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); - return true; -} diff --git a/macosx/tkMacOSXNotify.c b/macosx/tkMacOSXNotify.c index d368292..b400423 100644 --- a/macosx/tkMacOSXNotify.c +++ b/macosx/tkMacOSXNotify.c @@ -2,11 +2,11 @@ * tkMacOSXNotify.c -- * * This file contains the implementation of a tcl event source - * for the Carbon event loop. + * for the AppKit event loop. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -14,29 +14,113 @@ #include "tkMacOSXPrivate.h" #include "tkMacOSXEvent.h" +#include <tclInt.h> #include <pthread.h> - -/* - * The following static indicates whether this module has been initialized - * in the current thread. - */ +#import <objc/objc-auto.h> typedef struct ThreadSpecificData { - int initialized; + int initialized, sendEventNestingLevel; + NSEvent *currentEvent; } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; +#define TSD_INIT() ThreadSpecificData *tsdPtr = Tcl_GetThreadData(&dataKey, \ + sizeof(ThreadSpecificData)) + static void TkMacOSXNotifyExitHandler(ClientData clientData); -static void CarbonEventsSetupProc(ClientData clientData, int flags); -static void CarbonEventsCheckProc(ClientData clientData, int flags); +static void TkMacOSXEventsSetupProc(ClientData clientData, int flags); +static void TkMacOSXEventsCheckProc(ClientData clientData, int flags); + +#pragma mark TKApplication(TKNotify) + +@interface NSApplication(TKNotify) +- (void)_modalSession:(NSModalSession)session sendEvent:(NSEvent *)event; +@end + +@implementation NSWindow(TKNotify) +- (id)tkDisplayIfNeeded { + if (![self isAutodisplay]) { + [self displayIfNeeded]; + } + return nil; +} +@end + +@implementation TKApplication(TKNotify) +- (NSEvent *)nextEventMatchingMask:(NSUInteger)mask + untilDate:(NSDate *)expiration inMode:(NSString *)mode + dequeue:(BOOL)deqFlag { + NSAutoreleasePool *pool = [NSAutoreleasePool new]; + [NSApp makeWindowsPerform:@selector(tkDisplayIfNeeded) inOrder:NO]; + int oldMode = Tcl_SetServiceMode(TCL_SERVICE_ALL); + NSEvent *event = [[super nextEventMatchingMask:mask untilDate:expiration + inMode:mode dequeue:deqFlag] retain]; + Tcl_SetServiceMode(oldMode); + if (event) { + TSD_INIT(); + if (tsdPtr->sendEventNestingLevel) { + if (![NSApp tkProcessEvent:event]) { + [event release]; + event = nil; + } + } + } + [pool drain]; + return [event autorelease]; +} +- (void)sendEvent:(NSEvent *)theEvent { + TSD_INIT(); + int oldMode = Tcl_SetServiceMode(TCL_SERVICE_ALL); + tsdPtr->sendEventNestingLevel++; + [super sendEvent:theEvent]; + tsdPtr->sendEventNestingLevel--; + Tcl_SetServiceMode(oldMode); + [NSApp tkCheckPasteboard]; +} +@end + +#pragma mark - + +/* + *---------------------------------------------------------------------- + * + * GetRunLoopMode -- + * + * Results: + * RunLoop mode that should be passed to -nextEventMatchingMask: + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +static NSString * +GetRunLoopMode(NSModalSession modalSession) +{ + NSString *runLoopMode = nil; -/* + if (modalSession) { + runLoopMode = NSModalPanelRunLoopMode; + } else if (TkMacOSXGetCapture()) { + runLoopMode = NSEventTrackingRunLoopMode; + } + if (!runLoopMode) { + runLoopMode = [[NSRunLoop currentRunLoop] currentMode]; + } + if (!runLoopMode) { + runLoopMode = NSDefaultRunLoopMode; + } + return runLoopMode; +} + +/* *---------------------------------------------------------------------- * * Tk_MacOSXSetupTkNotifier -- * * This procedure is called during Tk initialization to create - * the event source for Carbon events. + * the event source for TkAqua events. * * Results: * None. @@ -50,35 +134,29 @@ static void CarbonEventsCheckProc(ClientData clientData, int flags); void Tk_MacOSXSetupTkNotifier(void) { - ThreadSpecificData *tsdPtr = Tcl_GetThreadData(&dataKey, - sizeof(ThreadSpecificData)); - + TSD_INIT(); if (!tsdPtr->initialized) { - /* HACK ALERT: There is a bug in Jaguar where when it goes to make - * the event queue for the Main Event Loop, it stores the Current - * event loop rather than the Main Event Loop in the Queue structure. - * So we have to make sure that the Main Event Queue gets set up on - * the main thread. Calling GetMainEventQueue will force this to - * happen. + tsdPtr->initialized = 1; + + /* + * Install TkAqua event source in main event loop thread. */ - GetMainEventQueue(); - tsdPtr->initialized = 1; - /* Install Carbon events event source in main event loop thread. */ - if (GetCurrentEventLoop() == GetMainEventLoop()) { + if (CFRunLoopGetMain() == CFRunLoopGetCurrent()) { if (!pthread_main_np()) { /* - * Panic if the Carbon main event loop thread (i.e. the - * thread where HIToolbox was first loaded) is not the - * main application thread, as Carbon does not support - * this properly. + * Panic if main runloop is not on the main application thread. */ + Tcl_Panic("Tk_MacOSXSetupTkNotifier: %s", "first [load] of TkAqua has to occur in the main thread!"); } - Tcl_CreateEventSource(CarbonEventsSetupProc, - CarbonEventsCheckProc, GetMainEventQueue()); + Tcl_CreateEventSource(TkMacOSXEventsSetupProc, + TkMacOSXEventsCheckProc, GetMainEventQueue()); TkCreateExitHandler(TkMacOSXNotifyExitHandler, NULL); + Tcl_SetServiceMode(TCL_SERVICE_ALL); + TclMacOSXNotifierAddRunLoopMode(NSEventTrackingRunLoopMode); + TclMacOSXNotifierAddRunLoopMode(NSModalPanelRunLoopMode); } } } @@ -101,89 +179,134 @@ Tk_MacOSXSetupTkNotifier(void) */ static void -TkMacOSXNotifyExitHandler(clientData) - ClientData clientData; /* Not used. */ +TkMacOSXNotifyExitHandler( + ClientData clientData) /* Not used. */ { - ThreadSpecificData *tsdPtr = Tcl_GetThreadData(&dataKey, - sizeof(ThreadSpecificData)); - - Tcl_DeleteEventSource(CarbonEventsSetupProc, - CarbonEventsCheckProc, GetMainEventQueue()); + TSD_INIT(); + Tcl_DeleteEventSource(TkMacOSXEventsSetupProc, + TkMacOSXEventsCheckProc, GetMainEventQueue()); tsdPtr->initialized = 0; } /* *---------------------------------------------------------------------- * - * CarbonEventsSetupProc -- + * TkMacOSXEventsSetupProc -- * - * This procedure implements the setup part of the Carbon Events - * event source. It is invoked by Tcl_DoOneEvent before entering - * the notifier to check for events. + * This procedure implements the setup part of the TkAqua Events event + * source. It is invoked by Tcl_DoOneEvent before entering the notifier + * to check for events. * * Results: * None. * * Side effects: - * If Carbon events are queued, then the maximum block time will be - * set to 0 to ensure that the notifier returns control to Tcl. + * If TkAqua events are queued, then the maximum block time will be set + * to 0 to ensure that the notifier returns control to Tcl. * *---------------------------------------------------------------------- */ static void -CarbonEventsSetupProc(clientData, flags) - ClientData clientData; - int flags; +TkMacOSXEventsSetupProc( + ClientData clientData, + int flags) { - static Tcl_Time blockTime = { 0, 0 }; + if (flags & TCL_WINDOW_EVENTS && + ![[NSRunLoop currentRunLoop] currentMode]) { + static Tcl_Time zeroBlockTime = { 0, 0 }; - if (!(flags & TCL_WINDOW_EVENTS)) { - return; - } - - if (GetNumEventsInQueue((EventQueueRef)clientData)) { - Tcl_SetMaxBlockTime(&blockTime); + TSD_INIT(); + if (!tsdPtr->currentEvent) { + NSEvent *currentEvent = [NSApp nextEventMatchingMask:NSAnyEventMask + untilDate:[NSDate distantPast] + inMode:GetRunLoopMode(TkMacOSXGetModalSession()) + dequeue:YES]; + if (currentEvent) { + tsdPtr->currentEvent = + TkMacOSXMakeUncollectableAndRetain(currentEvent); + } + } + if (tsdPtr->currentEvent) { + Tcl_SetMaxBlockTime(&zeroBlockTime); + } } } /* *---------------------------------------------------------------------- * - * CarbonEventsCheckProc -- + * TkMacOSXEventsCheckProc -- * - * This procedure processes events sitting in the Carbon event - * queue. + * This procedure processes events sitting in the TkAqua event queue. * * Results: * None. * * Side effects: - * Moves applicable queued Carbon events onto the Tcl event queue. + * Moves applicable queued TkAqua events onto the Tcl event queue. * *---------------------------------------------------------------------- */ static void -CarbonEventsCheckProc(clientData, flags) - ClientData clientData; - int flags; +TkMacOSXEventsCheckProc( + ClientData clientData, + int flags) { - int numFound; - OSStatus err = noErr; - - if (!(flags & TCL_WINDOW_EVENTS)) { - return; - } + if (flags & TCL_WINDOW_EVENTS && + ![[NSRunLoop currentRunLoop] currentMode]) { + NSEvent *currentEvent = nil; + NSAutoreleasePool *pool = nil; + NSModalSession modalSession; - numFound = GetNumEventsInQueue((EventQueueRef)clientData); - - /* Avoid starving other event sources: */ - if (numFound > 4) { - numFound = 4; - } - while (numFound > 0 && err == noErr) { - err = TkMacOSXReceiveAndDispatchEvent(); - numFound--; + TSD_INIT(); + if (tsdPtr->currentEvent) { + currentEvent = TkMacOSXMakeCollectableAndAutorelease( + tsdPtr->currentEvent); + } + do { + modalSession = TkMacOSXGetModalSession(); + if (!currentEvent) { + currentEvent = [NSApp nextEventMatchingMask:NSAnyEventMask + untilDate:[NSDate distantPast] + inMode:GetRunLoopMode(modalSession) dequeue:YES]; + } + if (!currentEvent) { + break; + } + [currentEvent retain]; + pool = [NSAutoreleasePool new]; + if (tkMacOSXGCEnabled) { + objc_clear_stack(0); + } + if (![NSApp tkProcessEvent:currentEvent]) { + [currentEvent release]; + currentEvent = nil; + } + if (currentEvent) { +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@" event: %@", currentEvent); +#endif + if (modalSession) { + [NSApp _modalSession:modalSession sendEvent:currentEvent]; + } else { + [NSApp sendEvent:currentEvent]; + } + [currentEvent release]; + currentEvent = nil; + } + [pool drain]; + pool = nil; + } while (1); } } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXPort.h b/macosx/tkMacOSXPort.h index a099612..0a60cf6 100644 --- a/macosx/tkMacOSXPort.h +++ b/macosx/tkMacOSXPort.h @@ -6,8 +6,8 @@ * #includes for system include files and a few other things. * * Copyright (c) 1994-1996 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -58,6 +58,9 @@ # include <time.h> # endif #endif +#if HAVE_INTTYPES_H +# include <inttypes.h> +#endif #include <unistd.h> #include <X11/Xlib.h> #include <X11/cursorfont.h> @@ -137,7 +140,6 @@ #define TkFreeWindowId(dispPtr,w) #define TkInitXId(dispPtr) -#define TkpButtonSetDefaults(specPtr) {} #define TkpCmapStressed(tkwin,colormap) (0) #define TkpFreeColor(tkColPtr) #define TkSetPixmapColormap(p,c) {} diff --git a/macosx/tkMacOSXPrivate.h b/macosx/tkMacOSXPrivate.h index d054e1c..3ad0689 100644 --- a/macosx/tkMacOSXPrivate.h +++ b/macosx/tkMacOSXPrivate.h @@ -3,7 +3,8 @@ * * Macros and declarations that are purely internal & private to TkAqua. * - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2008-2009, Apple Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -12,78 +13,26 @@ #ifndef _TKMACPRIV #define _TKMACPRIV -#ifndef _TKMACINT -#include "tkMacOSXInt.h" +#if !__OBJC__ +#error Objective-C compiler required #endif -/* Define constants only available on Mac OS X 10.3 or later */ -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 - #define kEventAppAvailableWindowBoundsChanged 110 - #define kEventParamTransactionID 'trns' - #define kEventParamWindowPartCode 'wpar' - #define typeWindowPartCode 'wpar' - #define kMenuAttrDoNotUseUserCommandKeys (1 << 7) - #define kSimpleWindowClass 18 - #define kWindowDoesNotCycleAttribute (1L << 15) - #define kWindowAsyncDragAttribute (1L << 23) - #define kThemeBrushAlternatePrimaryHighlightColor -5 - #define kThemeResizeUpCursor 19 - #define kThemeResizeDownCursor 19 - #define kThemeResizeUpDownCursor 19 - #define kThemePoofCursor 19 - #define kThemeBackgroundMetal 6 - #define kThemeIncDecButtonSmall 21 - #define kThemeIncDecButtonMini 22 - #define kThemeMiniSystemFont 109 - #define kAppearancePartUpButton 20 - #define kAppearancePartDownButton 21 - #define kAppearancePartPageUpArea 22 - #define kAppearancePartPageDownArea 23 - #define kAppearancePartIndicator 129 - #define kUIModeAllSuppressed 4 - #define FixedToInt(a) ((short)(((Fixed)(a) + fixed1/2) >> 16)) - #define IntToFixed(a) ((Fixed)(a) << 16) -#endif -/* Define constants only available on Mac OS X 10.4 or later */ -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1040 - #define kWindowNoTitleBarAttribute (1L << 9) - #define kWindowMetalNoContentSeparatorAttribute (1L << 11) - #define kThemeDisclosureTriangle 6 - #define kThemeBrushListViewOddRowBackground 56 - #define kThemeBrushListViewEvenRowBackground 57 - #define kThemeBrushListViewColumnDivider 58 - #define kThemeMetricScrollBarMinThumbHeight 132 - #define kThemeMetricSmallScrollBarMinThumbHeight 134 - #define kThemeScrollBarMedium kThemeMediumScrollBar - #define kThemeScrollBarSmall kThemeSmallScrollBar - #ifdef __BIG_ENDIAN__ - #define kCGBitmapByteOrder32Host (4 << 12) - #else - #define kCGBitmapByteOrder32Host (2 << 12) - #endif - #endif -/* Define constants only available on Mac OS X 10.5 or later */ -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1050 - #define kWindowUnifiedTitleAndToolbarAttribute (1L << 7) - #define kWindowTexturedSquareCornersAttribute (1L << 10) -#endif -/* HIToolbox version constants */ -#ifndef kHIToolboxVersionNumber10_3 - #define kHIToolboxVersionNumber10_3 (145) +#define TextStyle MacTextStyle +#import <ApplicationServices/ApplicationServices.h> +#import <Cocoa/Cocoa.h> +#ifndef NO_CARBON_H +#import <Carbon/Carbon.h> #endif -#ifndef kHIToolboxVersionNumber10_4 - #define kHIToolboxVersionNumber10_4 (219) +#undef TextStyle +#import <objc/runtime.h> /* for sel_isEqual() */ + +#ifndef _TKMACINT +#include "tkMacOSXInt.h" #endif -#ifndef kHIToolboxVersionNumber10_5 - #define kHIToolboxVersionNumber10_5 (343) +#ifndef _TKMACDEFAULT +#include "tkMacOSXDefault.h" #endif -/* Macros for HIToolbox runtime version checking */ -MODULE_SCOPE float tkMacOSXToolboxVersionNumber; -#define TK_IF_HI_TOOLBOX(vers, ...) \ - tk_if_mac_os_x_min_10_##vers(tkMacOSXToolboxVersionNumber >= \ - kHIToolboxVersionNumber10_##vers, 1, __VA_ARGS__) -#define TK_ELSE_HI_TOOLBOX(vers, ...) \ - tk_else_mac_os_x_min_10_##vers(__VA_ARGS__) + /* Macros for Mac OS X API availability checking */ #define TK_IF_MAC_OS_X_API(vers, symbol, ...) \ tk_if_mac_os_x_10_##vers(symbol != NULL, 1, __VA_ARGS__) @@ -109,46 +58,6 @@ MODULE_SCOPE float tkMacOSXToolboxVersionNumber; #define tk_else_mac_os_x_no(...) \ } else { __VA_ARGS__ /* Private mapping macros defined according to Mac OS X version requirements */ -/* 10.3 Panther */ -#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1030 -#define tk_if_mac_os_x_min_10_3 tk_if_mac_os_x_yes -#define tk_else_mac_os_x_min_10_3 tk_else_mac_os_x_yes -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 -#define tk_if_mac_os_x_10_3 tk_if_mac_os_x_yes -#define tk_else_mac_os_x_10_3 tk_else_mac_os_x_yes -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ -#else /* MAC_OS_X_VERSION_MIN_REQUIRED */ -#define tk_if_mac_os_x_min_10_3 tk_if_mac_os_x_chk -#define tk_else_mac_os_x_min_10_3 tk_else_mac_os_x_chk -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1030 -#define tk_if_mac_os_x_10_3 tk_if_mac_os_x_chk -#define tk_else_mac_os_x_10_3 tk_else_mac_os_x_chk -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ -#endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1030 -#define tk_if_mac_os_x_10_3 tk_if_mac_os_x_no -#define tk_else_mac_os_x_10_3 tk_else_mac_os_x_no -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ -/* 10.4 Tiger */ -#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1040 -#define tk_if_mac_os_x_min_10_4 tk_if_mac_os_x_yes -#define tk_else_mac_os_x_min_10_4 tk_else_mac_os_x_yes -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 -#define tk_if_mac_os_x_10_4 tk_if_mac_os_x_yes -#define tk_else_mac_os_x_10_4 tk_else_mac_os_x_yes -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ -#else /* MAC_OS_X_VERSION_MIN_REQUIRED */ -#define tk_if_mac_os_x_min_10_4 tk_if_mac_os_x_chk -#define tk_else_mac_os_x_min_10_4 tk_else_mac_os_x_chk -#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1040 -#define tk_if_mac_os_x_10_4 tk_if_mac_os_x_chk -#define tk_else_mac_os_x_10_4 tk_else_mac_os_x_chk -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ -#endif /* MAC_OS_X_VERSION_MIN_REQUIRED */ -#if MAC_OS_X_VERSION_MAX_ALLOWED < 1040 -#define tk_if_mac_os_x_10_4 tk_if_mac_os_x_no -#define tk_else_mac_os_x_10_4 tk_else_mac_os_x_no -#endif /* MAC_OS_X_VERSION_MAX_ALLOWED */ /* 10.5 Leopard */ #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 #define tk_if_mac_os_x_min_10_5 tk_if_mac_os_x_yes @@ -184,26 +93,25 @@ MODULE_SCOPE float tkMacOSXToolboxVersionNumber; */ #ifdef TK_MAC_DEBUG +#define TKLog(f, ...) NSLog(f, ##__VA_ARGS__) + /* * Macro to do debug message output. */ -#define TkMacOSXDbgMsg(m, ...) do { \ - fprintf(stderr, "%s:%d: %s(): " m "\n", strrchr(__FILE__, '/')+1, \ - __LINE__, __func__, ##__VA_ARGS__); \ - } while (0) +#define TkMacOSXDbgMsg(m, ...) \ + do { \ + TKLog(@"%s:%d: %s(): " m, strrchr(__FILE__, '/')+1, \ + __LINE__, __func__, ##__VA_ARGS__); \ + } while (0) + /* * Macro to do debug API failure message output. */ -#if !defined(DEBUGLEVEL) || !DEBUGLEVEL -#define TkMacOSXDbgOSErr(f, err) do { \ - TkMacOSXDbgMsg("%s failed: %ld", #f, err); \ - } while (0) -#else -#define TkMacOSXDbgOSErr(f, err) do { \ - DEBUG_ASSERT_MESSAGE(kComponentSignatureString, #f " failed:", \ - __func__, 0, strrchr(__FILE__, '/')+1, __LINE__, err); \ - } while (0) -#endif +#define TkMacOSXDbgOSErr(f, err) \ + do { \ + TkMacOSXDbgMsg("%s failed: %d", #f, (int)(err)); \ + } while (0) + /* * Macro to do very common check for noErr return from given API and output * debug message in case of failure. @@ -214,19 +122,12 @@ MODULE_SCOPE float tkMacOSXToolboxVersionNumber; TkMacOSXDbgOSErr(f, err); \ } \ err;}) -/* - * Macro to check emptyness of shared QD tmp region before use in debug builds. - */ -#define TkMacOSXCheckTmpQdRgnEmpty() do { \ - if (!EmptyRgn(tkMacOSXtmpQdRgn)) { \ - Tcl_Panic("tkMacOSXtmpQdRgn nonempty"); \ - } \ - } while(0) + #else /* TK_MAC_DEBUG */ +#define TKLog(f, ...) #define TkMacOSXDbgMsg(m, ...) #define TkMacOSXDbgOSErr(f, err) #define ChkErr(f, ...) ({f(__VA_ARGS__);}) -#define TkMacOSXCheckTmpQdRgnEmpty() #endif /* TK_MAC_DEBUG */ /* @@ -237,10 +138,25 @@ MODULE_SCOPE float tkMacOSXToolboxVersionNumber; static ret (* symbol)(__VA_ARGS__) = (void*)(-1L); \ if (symbol == (void*)(-1L)) { \ symbol = TkMacOSXGetNamedSymbol(STRINGIFY(module), \ - STRINGIFY(_##symbol)); \ + STRINGIFY(symbol)); \ } -MODULE_SCOPE void* TkMacOSXGetNamedSymbol(const char* module, - const char* symbol); + +/* + * Macros for GC + */ + +#define TkMacOSXMakeUncollectable(x) ({ id o = (id)(x); \ + if (o) { if(tkMacOSXGCEnabled) CFRetain(o); } o; }) +#define TkMacOSXMakeUncollectableAndRetain(x) ({ id o = (id)(x); \ + if (o) { if(tkMacOSXGCEnabled) CFRetain(o); else [o retain]; } o; }) +#define TkMacOSXMakeCollectable(x) ({ id o = (id)(x); \ + if (o) { x = nil; if (tkMacOSXGCEnabled) CFRelease(o); } o; }) +#define TkMacOSXMakeCollectableAndRelease(x) ({ id o = (id)(x); \ + if (o) { x = nil; if (tkMacOSXGCEnabled) CFRelease(o); \ + else [o release]; } o; }) +#define TkMacOSXMakeCollectableAndAutorelease(x) ({ id o = (id)(x); \ + if (o) { x = nil; if (tkMacOSXGCEnabled) CFRelease(o); \ + else [o autorelease]; } o; }) /* * Structure encapsulating current drawing environment. @@ -248,89 +164,203 @@ MODULE_SCOPE void* TkMacOSXGetNamedSymbol(const char* module, typedef struct TkMacOSXDrawingContext { CGContextRef context; - CGrafPtr port, savePort; - ThemeDrawingState saveState; - RgnHandle saveClip; + NSView *view; HIShapeRef clipRgn; - PixPatHandle penPat; - Rect portBounds; - Boolean portChanged; + CGRect portBounds; + int focusLocked; } TkMacOSXDrawingContext; /* * Variables internal to TkAqua. */ -MODULE_SCOPE RgnHandle tkMacOSXtmpQdRgn; -MODULE_SCOPE int tkMacOSXUseCGDrawing; +MODULE_SCOPE CGFloat tkMacOSXZeroScreenHeight; +MODULE_SCOPE CGFloat tkMacOSXZeroScreenTop; +MODULE_SCOPE int tkMacOSXGCEnabled; +MODULE_SCOPE long tkMacOSXMacOSXVersion; +#if TK_MAC_BUTTON_USE_COMPATIBILITY_METRICS +MODULE_SCOPE int tkMacOSXUseCompatibilityMetrics; +#endif /* * Prototypes for TkMacOSXRegion.c. */ #if 0 -MODULE_SCOPE void TkMacOSXEmtpyRegion(TkRegion r); -MODULE_SCOPE int TkMacOSXIsEmptyRegion(TkRegion r); +MODULE_SCOPE void TkMacOSXEmtpyRegion(TkRegion r); +MODULE_SCOPE int TkMacOSXIsEmptyRegion(TkRegion r); #endif -MODULE_SCOPE HIShapeRef TkMacOSXGetNativeRegion(TkRegion r); -MODULE_SCOPE void TkMacOSXSetWithNativeRegion(TkRegion r, HIShapeRef rgn); -MODULE_SCOPE void TkMacOSXOffsetRegion(TkRegion r, short dx, short dy); -MODULE_SCOPE HIShapeRef TkMacOSXHIShapeCreateEmpty(void); +MODULE_SCOPE HIShapeRef TkMacOSXGetNativeRegion(TkRegion r); +MODULE_SCOPE void TkMacOSXSetWithNativeRegion(TkRegion r, + HIShapeRef rgn); +MODULE_SCOPE void TkMacOSXOffsetRegion(TkRegion r, short dx, short dy); +MODULE_SCOPE HIShapeRef TkMacOSXHIShapeCreateEmpty(void); MODULE_SCOPE HIMutableShapeRef TkMacOSXHIShapeCreateMutableWithRect( - const CGRect *inRect); -MODULE_SCOPE OSStatus TkMacOSXHIShapeSetWithShape( - HIMutableShapeRef inDestShape, HIShapeRef inSrcShape); + const CGRect *inRect); +MODULE_SCOPE OSStatus TkMacOSXHIShapeSetWithShape( + HIMutableShapeRef inDestShape, + HIShapeRef inSrcShape); #if 0 -MODULE_SCOPE OSStatus TkMacOSXHIShapeSetWithRect(HIMutableShapeRef inShape, - const CGRect *inRect); +MODULE_SCOPE OSStatus TkMacOSXHIShapeSetWithRect(HIMutableShapeRef inShape, + const CGRect *inRect); #endif -MODULE_SCOPE OSStatus TkMacOSHIShapeDifferenceWithRect( - HIMutableShapeRef inShape, const CGRect *inRect); -MODULE_SCOPE OSStatus TkMacOSHIShapeUnionWithRect(HIMutableShapeRef inShape, - const CGRect *inRect); -MODULE_SCOPE OSStatus TkMacOSHIShapeUnion(HIShapeRef inShape1, - HIShapeRef inShape2, HIMutableShapeRef outResult); +MODULE_SCOPE OSStatus TkMacOSHIShapeDifferenceWithRect( + HIMutableShapeRef inShape, const CGRect *inRect); +MODULE_SCOPE OSStatus TkMacOSHIShapeUnionWithRect(HIMutableShapeRef inShape, + const CGRect *inRect); +MODULE_SCOPE OSStatus TkMacOSHIShapeUnion(HIShapeRef inShape1, + HIShapeRef inShape2, HIMutableShapeRef outResult); /* * Prototypes of TkAqua internal procs. */ -MODULE_SCOPE void TkMacOSXDisplayChanged(Display *display); -MODULE_SCOPE void TkMacOSXInitScrollbarMetrics(void); -MODULE_SCOPE int TkMacOSXUseAntialiasedText(Tcl_Interp *interp, int enable); -MODULE_SCOPE void TkMacOSXInitCarbonEvents(Tcl_Interp *interp); -MODULE_SCOPE int TkMacOSXInitCGDrawing(Tcl_Interp *interp, int enable, - int antiAlias); -MODULE_SCOPE void TkMacOSXInitKeyboard(Tcl_Interp *interp); -MODULE_SCOPE int TkMacOSXGenerateFocusEvent(Window window, int activeFlag); -MODULE_SCOPE int TkMacOSXGenerateParentMenuSelectEvent(MenuRef menu); -MODULE_SCOPE int TkMacOSXGenerateMenuSelectEvent(MenuRef menu, - MenuItemIndex index); -MODULE_SCOPE void TkMacOSXClearActiveMenu(MenuRef menu); +MODULE_SCOPE void * TkMacOSXGetNamedSymbol(const char *module, + const char *symbol); +MODULE_SCOPE void TkMacOSXDisplayChanged(Display *display); +MODULE_SCOPE int TkMacOSXUseAntialiasedText(Tcl_Interp *interp, + int enable); +MODULE_SCOPE int TkMacOSXInitCGDrawing(Tcl_Interp *interp, int enable, + int antiAlias); +MODULE_SCOPE int TkMacOSXGenerateFocusEvent(TkWindow *winPtr, + int activeFlag); MODULE_SCOPE WindowClass TkMacOSXWindowClass(TkWindow *winPtr); -MODULE_SCOPE int TkMacOSXIsWindowZoomed(TkWindow *winPtr); -MODULE_SCOPE int TkGenerateButtonEventForXPointer(Window window); +MODULE_SCOPE int TkMacOSXIsWindowZoomed(TkWindow *winPtr); +MODULE_SCOPE int TkGenerateButtonEventForXPointer(Window window); MODULE_SCOPE EventModifiers TkMacOSXModifierState(void); -MODULE_SCOPE int TkMacOSXSetupDrawingContext(Drawable d, GC gc, int useCG, - TkMacOSXDrawingContext *dcPtr); -MODULE_SCOPE void TkMacOSXRestoreDrawingContext(TkMacOSXDrawingContext *dcPtr); -MODULE_SCOPE void TkMacOSXSetColorInPort(unsigned long pixel, int fg, - PixPatHandle penPat, CGrafPtr port); -MODULE_SCOPE void TkMacOSXSetColorInContext(unsigned long pixel, - CGContextRef context); -MODULE_SCOPE int TkMacOSXRunTclEventLoop(void); -MODULE_SCOPE OSStatus TkMacOSXStartTclEventLoopCarbonTimer(void); -MODULE_SCOPE OSStatus TkMacOSXStopTclEventLoopCarbonTimer(void); -MODULE_SCOPE void TkMacOSXTrackingLoop(int tracking); -MODULE_SCOPE OSStatus TkMacOSXReceiveAndDispatchEvent(void); -MODULE_SCOPE void TkMacOSXInstallWindowCarbonEventHandler(Tcl_Interp *interp, - WindowRef window); -MODULE_SCOPE int TkMacOSXMakeFullscreen(TkWindow *winPtr, WindowRef window, - int fullscreen, Tcl_Interp *interp); -MODULE_SCOPE void TkMacOSXEnterExitFullscreen(TkWindow *winPtr, int active); -MODULE_SCOPE void TkMacOSXBringWindowForward(WindowRef wRef); -MODULE_SCOPE WindowRef TkMacOSXDrawableWindow(Drawable drawable); -MODULE_SCOPE void TkMacOSXWinCGBounds(TkWindow *winPtr, CGRect *bounds); -MODULE_SCOPE HIShapeRef TkMacOSXGetClipRgn(Drawable drawable); +MODULE_SCOPE int TkMacOSXSetupDrawingContext(Drawable d, GC gc, + int useCG, TkMacOSXDrawingContext *dcPtr); +MODULE_SCOPE void TkMacOSXRestoreDrawingContext( + TkMacOSXDrawingContext *dcPtr); +MODULE_SCOPE void TkMacOSXSetColorInContext(GC gc, unsigned long pixel, + CGContextRef context); +MODULE_SCOPE int TkMacOSXMakeFullscreen(TkWindow *winPtr, + NSWindow *window, int fullscreen, + Tcl_Interp *interp); +MODULE_SCOPE void TkMacOSXEnterExitFullscreen(TkWindow *winPtr, + int active); +MODULE_SCOPE NSWindow* TkMacOSXDrawableWindow(Drawable drawable); +MODULE_SCOPE NSView* TkMacOSXDrawableView(MacDrawable *macWin); +MODULE_SCOPE void TkMacOSXWinCGBounds(TkWindow *winPtr, CGRect *bounds); +MODULE_SCOPE HIShapeRef TkMacOSXGetClipRgn(Drawable drawable); +MODULE_SCOPE void TkMacOSXInvalidateViewRegion(NSView *view, + HIShapeRef rgn); +MODULE_SCOPE CGImageRef TkMacOSXCreateCGImageWithDrawable(Drawable drawable); +MODULE_SCOPE NSImage* TkMacOSXGetNSImageWithTkImage(Display *display, + Tk_Image image, int width, int height); +MODULE_SCOPE NSImage* TkMacOSXGetNSImageWithBitmap(Display *display, + Pixmap bitmap, GC gc, int width, int height); +MODULE_SCOPE CGColorRef TkMacOSXCreateCGColor(GC gc, unsigned long pixel); +MODULE_SCOPE NSColor* TkMacOSXGetNSColor(GC gc, unsigned long pixel); +MODULE_SCOPE Tcl_Obj * TkMacOSXGetStringObjFromCFString(CFStringRef str); +MODULE_SCOPE TkWindow* TkMacOSXGetTkWindow(NSWindow *w); +MODULE_SCOPE NSFont* TkMacOSXNSFontForFont(Tk_Font tkfont); +MODULE_SCOPE NSDictionary* TkMacOSXNSFontAttributesForFont(Tk_Font tkfont); +MODULE_SCOPE NSModalSession TkMacOSXGetModalSession(void); +MODULE_SCOPE void TkMacOSXSelDeadWindow(TkWindow *winPtr); +MODULE_SCOPE void TkMacOSXApplyWindowAttributes(TkWindow *winPtr, + NSWindow *macWindow); +MODULE_SCOPE int TkMacOSXStandardAboutPanelObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +MODULE_SCOPE int TkMacOSXIconBitmapObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); + +#pragma mark Private Objective-C Classes + +#define VISIBILITY_HIDDEN __attribute__((visibility("hidden"))) + +enum { tkMainMenu = 1, tkApplicationMenu, tkWindowsMenu, tkHelpMenu}; + +VISIBILITY_HIDDEN +@interface TKMenu : NSMenu { +@private + void *_tkMenu; + NSUInteger _tkOffset, _tkItemCount, _tkSpecial; +} +- (void)setSpecial:(NSUInteger)special; +- (BOOL)isSpecial:(NSUInteger)special; +@end + +VISIBILITY_HIDDEN +@interface TKApplication : NSApplication { +@private + Tcl_Interp *_eventInterp; + NSMenu *_servicesMenu; + TKMenu *_defaultMainMenu, *_defaultApplicationMenu; + NSArray *_defaultApplicationMenuItems, *_defaultWindowsMenuItems; + NSArray *_defaultHelpMenuItems; +} +@end +@interface TKApplication(TKInit) +- (NSString *)tkFrameworkImagePath:(NSString*)image; +@end +@interface TKApplication(TKEvent) +- (NSEvent *)tkProcessEvent:(NSEvent *)theEvent; +@end +@interface TKApplication(TKMouseEvent) +- (NSEvent *)tkProcessMouseEvent:(NSEvent *)theEvent; +@end +@interface TKApplication(TKKeyEvent) +- (NSEvent *)tkProcessKeyEvent:(NSEvent *)theEvent; +@end +@interface TKApplication(TKMenu) +- (void)tkSetMainMenu:(TKMenu *)menu; +@end +@interface TKApplication(TKClipboard) +- (void)tkProvidePasteboard:(TkDisplay *)dispPtr; +- (void)tkCheckPasteboard; +@end + +VISIBILITY_HIDDEN +@interface TKContentView : NSView <NSTextInput> { +@private + id _savedSubviews; + BOOL _subviewsSetAside; + NSString *_workingText; +} +@end + +@interface TKContentView(TKKeyEvent) +- (void) deleteWorkingText; +@end + +VISIBILITY_HIDDEN +@interface TKWindow : NSWindow +@end + +#pragma mark NSMenu & NSMenuItem Utilities + +@interface NSMenu(TKUtils) ++ (id)menuWithTitle:(NSString *)title; ++ (id)menuWithTitle:(NSString *)title menuItems:(NSArray *)items; ++ (id)menuWithTitle:(NSString *)title submenus:(NSArray *)submenus; +- (NSMenuItem *)itemWithSubmenu:(NSMenu *)submenu; +- (NSMenuItem *)itemInSupermenu; +@end + +@interface NSMenuItem(TKUtils) ++ (id)itemWithSubmenu:(NSMenu *)submenu; ++ (id)itemWithTitle:(NSString *)title submenu:(NSMenu *)submenu; ++ (id)itemWithTitle:(NSString *)title action:(SEL)action; ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + target:(id)target; ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + keyEquivalent:(NSString *)keyEquivalent; ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + target:(id)target keyEquivalent:(NSString *)keyEquivalent; ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + keyEquivalent:(NSString *)keyEquivalent + keyEquivalentModifierMask:(NSUInteger)keyEquivalentModifierMask; ++ (id)itemWithTitle:(NSString *)title action:(SEL)action + target:(id)target keyEquivalent:(NSString *)keyEquivalent + keyEquivalentModifierMask:(NSUInteger)keyEquivalentModifierMask; +@end + +/* From WebKit/WebKit/mac/WebCoreSupport/WebChromeClient.mm: */ +@interface NSWindow(TKGrowBoxRect) +- (NSRect)_growBoxRect; +@end #endif /* _TKMACPRIV */ diff --git a/macosx/tkMacOSXRegion.c b/macosx/tkMacOSXRegion.c index 4c480c6..8432299 100644 --- a/macosx/tkMacOSXRegion.c +++ b/macosx/tkMacOSXRegion.c @@ -4,8 +4,8 @@ * Implements X window calls for manipulating regions * * Copyright (c) 1995-1996 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -19,8 +19,8 @@ * * TkCreateRegion -- * - * Implements the equivelent of the X window function - * XCreateRegion. See X window documentation for more details. + * Implements the equivelent of the X window function XCreateRegion. See + * Xwindow documentation for more details. * * Results: * Returns an allocated region handle. @@ -42,8 +42,8 @@ TkCreateRegion(void) * * TkDestroyRegion -- * - * Implements the equivelent of the X window function - * XDestroyRegion. See X window documentation for more details. + * Implements the equivelent of the X window function XDestroyRegion. See + * Xwindow documentation for more details. * * Results: * None. @@ -68,8 +68,8 @@ TkDestroyRegion( * * TkIntersectRegion -- * - * Implements the equivalent of the X window function - * XIntersectRegion. See X window documentation for more details. + * Implements the equivalent of the X window function XIntersectRegion. + * See Xwindow documentation for more details. * * Results: * None. @@ -95,8 +95,8 @@ TkIntersectRegion( * * TkSubtractRegion -- * - * Implements the equivalent of the X window function - * XSubtractRegion. See X window documentation for more details. + * Implements the equivalent of the X window function XSubtractRegion. + * See X window documentation for more details. * * Results: * None. @@ -123,8 +123,7 @@ TkSubtractRegion( * TkUnionRectWithRegion -- * * Implements the equivelent of the X window function - * XUnionRectWithRegion. See X window documentation for more - * details. + * XUnionRectWithRegion. See Xwindow documentation for more details. * * Results: * None. @@ -161,8 +160,8 @@ TkUnionRectWithRegion( * * TkRectInRegion -- * - * Implements the equivelent of the X window function - * XRectInRegion. See X window documentation for more details. + * Implements the equivelent of the X window function XRectInRegion. See + * Xwindow documentation for more details. * * Results: * Returns RectanglePart or RectangleOut. Note that this is not a @@ -185,38 +184,8 @@ TkRectInRegion( int result; const CGRect r = CGRectMake(x, y, width, height); - TK_IF_MAC_OS_X_API (4, HIShapeIntersectsRect, - result = HIShapeIntersectsRect((HIShapeRef) region, &r) ? - RectanglePart : RectangleOut; - ) TK_ELSE_MAC_OS_X (4, - HIShapeRef rectRgn = HIShapeCreateWithRect(&r); - HIShapeRef sectRgn = HIShapeCreateIntersection((HIShapeRef) region, - rectRgn); - -#if 1 - result = !HIShapeIsEmpty(sectRgn) ? RectanglePart : RectangleOut; -#else - /* - * More expensive full implementation that tests for RectangleIn, - * unused by Tk at present. - */ - - if (!HIShapeIsEmpty(sectRgn)) { - HIShapeRef diffRgn = HIShapeCreateDifference(rectRgn, sectRgn); - - if (HIShapeIsEmpty(diffRgn)) { - result = RectangleIn; - } else { - result = RectanglePart; - } - CFRelease(diffRgn); - } else { - result = RectangleOut; - } -#endif - CFRelease(sectRgn); - CFRelease(rectRgn); - ) TK_ENDIF + result = HIShapeIntersectsRect((HIShapeRef) region, &r) ? + RectanglePart : RectangleOut; return result; } @@ -225,8 +194,8 @@ TkRectInRegion( * * TkClipBox -- * - * Implements the equivelent of the X window function XClipBox. - * See X window documentation for more details. + * Implements the equivelent of the X window function XClipBox. See + * Xwindow documentation for more details. * * Results: * None. @@ -243,7 +212,7 @@ TkClipBox( XRectangle* rect_return) { CGRect rect; - + HIShapeGetBounds((HIShapeRef) r, &rect); rect_return->x = rect.origin.x; rect_return->y = rect.origin.y; @@ -256,8 +225,8 @@ TkClipBox( * * TkpBuildRegionFromAlphaData -- * - * Set up a rectangle of the given region based on the supplied - * alpha data. + * Set up a rectangle of the given region based on the supplied alpha + * data. * * Results: * None @@ -288,13 +257,20 @@ TkpBuildRegionFromAlphaData( for (y1 = 0; y1 < height; y1++) { lineDataPtr = dataPtr; for (x1 = 0; x1 < width; x1 = end) { - /* search for first non-transparent pixel */ + /* + * Search for first non-transparent pixel. + */ + while ((x1 < width) && !*lineDataPtr) { x1++; lineDataPtr += pixelStride; } end = x1; - /* search for first transparent pixel */ + + /* + * Search for first transparent pixel. + */ + while ((end < width) && *lineDataPtr) { end++; lineDataPtr += pixelStride; @@ -495,20 +471,7 @@ TkMacOSXHIShapeCreateEmpty(void) { HIShapeRef result; - TK_IF_MAC_OS_X_API (4, HIShapeCreateEmpty, - result = HIShapeCreateEmpty(); - ) TK_ELSE_MAC_OS_X (4, - static HIShapeRef emptyRgn = NULL; - - if (!emptyRgn) { - HIMutableShapeRef rgn = HIShapeCreateMutable(); - - emptyRgn = HIShapeCreateCopy(rgn); - CFRelease(rgn); - } - result = HIShapeCreateCopy(emptyRgn); - ) TK_ENDIF - + result = HIShapeCreateEmpty(); return result; } @@ -518,15 +481,7 @@ TkMacOSXHIShapeCreateMutableWithRect( { HIMutableShapeRef result; - TK_IF_MAC_OS_X_API (5, HIShapeCreateMutableWithRect, - result = HIShapeCreateMutableWithRect(inRect); - ) TK_ELSE_MAC_OS_X (5, - HIShapeRef rgn = HIShapeCreateWithRect(inRect); - - result = HIShapeCreateMutableCopy(rgn); - CFRelease(rgn); - ) TK_ENDIF - + result = HIShapeCreateMutableWithRect(inRect); return result; } @@ -537,15 +492,7 @@ TkMacOSXHIShapeSetWithShape( { OSStatus result; - TK_IF_MAC_OS_X_API (5, HIShapeSetWithShape, - result = HIShapeSetWithShape(inDestShape, inSrcShape); - ) TK_ELSE_MAC_OS_X (5, - result = HIShapeSetEmpty(inDestShape); - if (result == noErr) { - result = HIShapeDifference(inSrcShape, inDestShape, inDestShape); - } - ) TK_ENDIF - + result = HIShapeSetWithShape(inDestShape, inSrcShape); return result; } @@ -586,15 +533,7 @@ TkMacOSHIShapeUnionWithRect( { OSStatus result; - TK_IF_MAC_OS_X_API (5, HIShapeUnionWithRect, - result = HIShapeUnionWithRect(inShape, inRect); - ) TK_ELSE_MAC_OS_X (5, - HIShapeRef rgn = HIShapeCreateWithRect(inRect); - - result = TkMacOSHIShapeUnion(rgn, inShape, inShape); - CFRelease(rgn); - ) TK_ENDIF - + result = HIShapeUnionWithRect(inShape, inRect); return result; } @@ -606,21 +545,15 @@ TkMacOSHIShapeUnion( { OSStatus result; - TK_IF_HI_TOOLBOX (4, - result = HIShapeUnion(inShape1, inShape2, outResult); - ) TK_ELSE_HI_TOOLBOX (4, - /* Workaround HIShapeUnion bug in 10.3 and earlier */ - HIShapeRef rgn = HIShapeCreateCopy(outResult); - - result = HIShapeUnion(inShape1, inShape2, (HIMutableShapeRef) rgn); - if (result == noErr) { - result = HIShapeSetEmpty(outResult); - if (result == noErr) { - result = HIShapeDifference(rgn, outResult, outResult); - } - } - CFRelease(rgn); - ) TK_ENDIF - + result = HIShapeUnion(inShape1, inShape2, outResult); return result; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXScale.c b/macosx/tkMacOSXScale.c index c63df02..e94763d 100644 --- a/macosx/tkMacOSXScale.c +++ b/macosx/tkMacOSXScale.c @@ -6,7 +6,8 @@ * * Copyright (c) 1996 by Sun Microsystems, Inc. * Copyright (c) 1998-2000 by Scriptics Corporation. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2008-2009, Apple Inc. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -15,6 +16,7 @@ #include "tkMacOSXPrivate.h" #include "tkScale.h" +#ifdef MAC_OSX_TK_TODO /* #ifdef TK_MAC_DEBUG #define TK_MAC_DEBUG_SCALE @@ -479,4 +481,13 @@ ScaleActionProc( TkMacOSXRunTclEventLoop(); Tcl_Release((ClientData) scalePtr); } - +#endif + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXScrlbr.c b/macosx/tkMacOSXScrlbr.c index 2b5f094..ff91ffd 100644 --- a/macosx/tkMacOSXScrlbr.c +++ b/macosx/tkMacOSXScrlbr.c @@ -2,12 +2,11 @@ * tkMacOSXScrollbar.c -- * * This file implements the Macintosh specific portion of the scrollbar - * widget. The Macintosh scrollbar may also draw a windows grow - * region under certain cases. + * widget. * * Copyright (c) 1996 by Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -15,95 +14,147 @@ #include "tkMacOSXPrivate.h" #include "tkScrollbar.h" -#include "tkMacOSXDebug.h" -#define MIN_SCROLLBAR_VALUE 0 -#define SCROLLBAR_SCALING_VALUE ((double)(LONG_MAX>>1)) +/* +#ifdef TK_MAC_DEBUG +#define TK_MAC_DEBUG_SCROLLBAR +#endif +*/ /* * Declaration of Mac specific scrollbar structure. */ typedef struct MacScrollbar { - TkScrollbar info; /* Generic scrollbar info */ - ControlRef sbHandle; /* Scrollbar control */ - int macFlags; /* Various flags; see below */ - Rect eraseRect; /* Rect to erase before drawing control */ + TkScrollbar info; + NSScroller *scroller; + int variant; } MacScrollbar; -/* - * Flag bits for scrollbars on the Mac: - * - * ALREADY_DEAD: Non-zero means this scrollbar has been - * destroyed, but has not been cleaned up. - * IN_MODAL_LOOP: Non-zero means this scrollbar is in the middle - * of a modal loop. - * ACTIVE: Non-zero means this window is currently - * active (in the foreground). - */ - -#define ALREADY_DEAD 1 -#define IN_MODAL_LOOP 2 -#define ACTIVE 4 - -/* - * Globals uses locally in this file. - */ -static ControlActionUPP scrollActionProc = NULL; /* Pointer to func. */ -static ControlActionUPP thumbActionProc = NULL; /* Pointer to func. */ -static Point mouseDownPoint; /* Used to store the coordinates where the */ - /* mouse was first pressed to begin */ - /* dragging the thumb, because */ - /* ThumbActionProc can't take any args. */ - typedef struct ScrollbarMetrics { - SInt32 width, minHeight, minThumbHeight; - short topArrowHeight, bottomArrowHeight; - ControlSize size; + SInt32 width, minThumbHeight; + int minHeight, topArrowHeight, bottomArrowHeight; + NSControlSize controlSize; } ScrollbarMetrics; static ScrollbarMetrics metrics[2] = { - {15, 54, 26, 14, 14, kControlSizeNormal}, /* kThemeScrollBarMedium */ - {11, 40, 20, 10, 10, kControlSizeSmall}, /* kThemeScrollBarSmall */ + {15, 54, 26, 14, 14, NSRegularControlSize}, /* kThemeScrollBarMedium */ + {11, 40, 20, 10, 10, NSSmallControlSize}, /* kThemeScrollBarSmall */ }; /* - * This variable holds the default width for a scrollbar in string form for - * use in a Tk_ConfigSpec. + * Declarations for functions defined in this file. */ -static char defWidth[TCL_INTEGER_SPACE]; +static void UpdateScrollbarMetrics(void); +static void ScrollbarEventProc(ClientData clientData, + XEvent *eventPtr); /* - * Forward declarations for procedures defined later in this file: - */ - -static pascal void ScrollbarActionProc(ControlRef theControl, - ControlPartCode partCode); -static pascal void ThumbActionProc(ControlRef theControl, - ControlPartCode partCode); -static int ScrollbarBindProc(ClientData clientData, Tcl_Interp *interp, - XEvent *eventPtr, Tk_Window tkwin, KeySym keySym); -static void ScrollbarEventProc(ClientData clientData, XEvent *eventPtr); -static void UpdateControlValues(MacScrollbar *macScrollPtr); - -/* - * The class procedure table for the scrollbar widget. Leave the proc fields - * initialized to NULL, which should happen automatically because of the scope - * at which the variable is declared. + * The class procedure table for the scrollbar widget. */ Tk_ClassProcs tkpScrollbarProcs = { - sizeof(Tk_ClassProcs) /* size */ + sizeof(Tk_ClassProcs), /* size */ + NULL, /* worldChangedProc */ + NULL, /* createProc */ + NULL /* modalProc */ }; + +#pragma mark TKApplication(TKScrlbr) + +#define NSAppleAquaScrollBarVariantChanged @"AppleAquaScrollBarVariantChanged" + +@implementation TKApplication(TKScrlbr) +- (void) tkScroller: (NSScroller *) scroller +{ + NSScrollerPart hitPart = [scroller hitPart]; + TkScrollbar *scrollPtr = (TkScrollbar *)[scroller tag]; + Tcl_DString cmdString; + Tcl_Interp *interp; + int result; + + if (!scrollPtr || !scrollPtr->command || !scrollPtr->commandSize || + hitPart == NSScrollerNoPart) { + return; + } + + Tcl_DStringInit(&cmdString); + Tcl_DStringAppend(&cmdString, scrollPtr->command, + scrollPtr->commandSize); + switch (hitPart) { + case NSScrollerKnob: + case NSScrollerKnobSlot: { + char valueString[TCL_DOUBLE_SPACE]; + + Tcl_PrintDouble(NULL, [scroller doubleValue] * + (1.0 - [scroller knobProportion]), valueString); + Tcl_DStringAppendElement(&cmdString, "moveto"); + Tcl_DStringAppendElement(&cmdString, valueString); + break; + } + case NSScrollerDecrementLine: + case NSScrollerIncrementLine: + Tcl_DStringAppendElement(&cmdString, "scroll"); + Tcl_DStringAppendElement(&cmdString, + (hitPart == NSScrollerDecrementLine) ? "-1" : "1"); + Tcl_DStringAppendElement(&cmdString, "unit"); + break; + case NSScrollerDecrementPage: + case NSScrollerIncrementPage: + Tcl_DStringAppendElement(&cmdString, "scroll"); + Tcl_DStringAppendElement(&cmdString, + (hitPart == NSScrollerDecrementPage) ? "-1" : "1"); + Tcl_DStringAppendElement(&cmdString, "page"); + break; + } + interp = scrollPtr->interp; + Tcl_Preserve(interp); + Tcl_Preserve(scrollPtr); + result = Tcl_EvalEx(interp, Tcl_DStringValue(&cmdString), + Tcl_DStringLength(&cmdString), TCL_EVAL_GLOBAL); + if (result != TCL_OK && result != TCL_CONTINUE && result != TCL_BREAK) { + Tcl_AddErrorInfo(interp, "\n (scrollbar command)"); + Tcl_BackgroundError(interp); + } + Tcl_Release(scrollPtr); + Tcl_Release(interp); + Tcl_DStringFree(&cmdString); +#ifdef TK_MAC_DEBUG_SCROLLBAR + TKLog(@"scroller %s value %f knobProportion %f", + ((TkWindow *)scrollPtr->tkwin)->pathName, [scroller doubleValue], + [scroller knobProportion]); +#endif +} +- (void) scrollBarVariantChanged: (NSNotification *) notification +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + UpdateScrollbarMetrics(); +} + +- (void) _setupScrollBarNotifications +{ + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + +#define observe(n, s) [nc addObserver:self selector:@selector(s) name:(n) object:nil] + observe(NSAppleAquaScrollBarVariantChanged, scrollBarVariantChanged:); +#undef observe + + UpdateScrollbarMetrics(); +} +@end + +#pragma mark - + /* *---------------------------------------------------------------------- * - * TkMacOSXInitScrollbarMetrics -- + * UpdateScrollbarMetrics -- * - * This function initializes the current system metrics for a - * scrollbar. + * This function retrieves the current system metrics for a scrollbar. * * Results: * None. @@ -114,41 +165,44 @@ Tk_ClassProcs tkpScrollbarProcs = { *---------------------------------------------------------------------- */ -void -TkMacOSXInitScrollbarMetrics(void) +static void +UpdateScrollbarMetrics(void) { const short height = 100, width = 50; - ThemeTrackDrawInfo info = {0, {0, 0, height, width}, 0, 1, 0, 0, - kThemeTrackShowThumb, kThemeTrackActive, 0, {{1, 0}}}; - Rect bounds; - Tk_ConfigSpec *specPtr; + HIThemeTrackDrawInfo info = { + .version = 0, + .bounds = {{0, 0}, {width, height}}, + .min = 0, + .max = 1, + .value = 0, + .attributes = kThemeTrackShowThumb, + .enableState = kThemeTrackActive, + .trackInfo.scrollbar = {.viewsize = 1, .pressState = 0}, + }; + CGRect bounds; ChkErr(GetThemeMetric, kThemeMetricScrollBarWidth, &metrics[0].width); ChkErr(GetThemeMetric, kThemeMetricScrollBarMinThumbHeight, &metrics[0].minThumbHeight); info.kind = kThemeScrollBarMedium; - ChkErr(GetThemeTrackDragRect, &info, &bounds); - metrics[0].topArrowHeight = bounds.top; - metrics[0].bottomArrowHeight = height - bounds.bottom; + ChkErr(HIThemeGetTrackDragRect, &info, &bounds); + metrics[0].topArrowHeight = bounds.origin.y; + metrics[0].bottomArrowHeight = height - (bounds.origin.y + + bounds.size.height); metrics[0].minHeight = metrics[0].minThumbHeight + metrics[0].topArrowHeight + metrics[0].bottomArrowHeight; ChkErr(GetThemeMetric, kThemeMetricSmallScrollBarWidth, &metrics[1].width); ChkErr(GetThemeMetric, kThemeMetricSmallScrollBarMinThumbHeight, &metrics[1].minThumbHeight); info.kind = kThemeScrollBarSmall; - ChkErr(GetThemeTrackDragRect, &info, &bounds); - metrics[1].topArrowHeight = bounds.top; - metrics[1].bottomArrowHeight = height - bounds.bottom; + ChkErr(HIThemeGetTrackDragRect, &info, &bounds); + metrics[1].topArrowHeight = bounds.origin.y; + metrics[1].bottomArrowHeight = height - (bounds.origin.y + + bounds.size.height); metrics[1].minHeight = metrics[1].minThumbHeight + metrics[1].topArrowHeight + metrics[1].bottomArrowHeight; - sprintf(defWidth, "%ld", metrics[0].width); - for (specPtr = tkpScrollbarConfigSpecs; specPtr->type != TK_CONFIG_END; - specPtr++) { - if (specPtr->offset == Tk_Offset(TkScrollbar, width)) { - specPtr->defValue = defWidth; - } - } + sprintf(tkDefScrollbarWidth, "%d", (int)(metrics[0].width)); } /* @@ -162,45 +216,46 @@ TkMacOSXInitScrollbarMetrics(void) * Returns a newly allocated TkScrollbar structure. * * Side effects: - * None. + * Registers an event handler for the widget. * *---------------------------------------------------------------------- */ TkScrollbar * TkpCreateScrollbar( - Tk_Window tkwin) /* New Tk Window. */ + Tk_Window tkwin) { - static int initialized = 0; - MacScrollbar * macScrollPtr; - TkWindow *winPtr = (TkWindow *)tkwin; + MacScrollbar *scrollPtr = (MacScrollbar *) ckalloc(sizeof(MacScrollbar)); - if (scrollActionProc == NULL) { - scrollActionProc = NewControlActionUPP(ScrollbarActionProc); - thumbActionProc = NewControlActionUPP(ThumbActionProc); - } - if (!initialized) { - TkMacOSXInitScrollbarMetrics(); - initialized = 1; - } - macScrollPtr = (MacScrollbar *) ckalloc(sizeof(MacScrollbar)); - macScrollPtr->sbHandle = NULL; - macScrollPtr->macFlags = 0; - SetRect(&macScrollPtr->eraseRect, 0, 0, 0, 0); + scrollPtr->scroller = nil; + Tk_CreateEventHandler(tkwin, StructureNotifyMask|FocusChangeMask| + ActivateMask|ExposureMask, ScrollbarEventProc, (ClientData) scrollPtr); + return (TkScrollbar *) scrollPtr; +} + +/* + *---------------------------------------------------------------------- + * + * TkpDestroyScrollbar -- + * + * Free data structures associated with the scrollbar control. + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ - Tk_CreateEventHandler(tkwin, ActivateMask|ExposureMask| - StructureNotifyMask|FocusChangeMask, - ScrollbarEventProc, (ClientData) macScrollPtr); +void +TkpDestroyScrollbar( + TkScrollbar *scrollPtr) +{ + MacScrollbar *macScrollPtr = (MacScrollbar *) scrollPtr; - if (!Tcl_GetAssocData(winPtr->mainPtr->interp, "TkScrollbar", NULL)) { - Tcl_SetAssocData(winPtr->mainPtr->interp, "TkScrollbar", NULL, - (ClientData)1); - TkCreateBindingProcedure(winPtr->mainPtr->interp, - winPtr->mainPtr->bindingTable, - (ClientData)Tk_GetUid("Scrollbar"), "<ButtonPress>", - ScrollbarBindProc, NULL, NULL); - } - return (TkScrollbar *) macScrollPtr; + TkMacOSXMakeCollectableAndRelease(macScrollPtr->scroller); } /* @@ -208,9 +263,9 @@ TkpCreateScrollbar( * * TkpDisplayScrollbar -- * - * This procedure redraws the contents of a scrollbar window. - * It is invoked as a do-when-idle handler, so it only runs - * when there's nothing else for the application to do. + * This procedure redraws the contents of a scrollbar window. It is + * invoked as a do-when-idle handler, so it only runs when there's nothing + * else for the application to do. * * Results: * None. @@ -227,109 +282,85 @@ TkpDisplayScrollbar( { TkScrollbar *scrollPtr = (TkScrollbar *) clientData; MacScrollbar *macScrollPtr = (MacScrollbar *) clientData; + NSScroller *scroller = macScrollPtr->scroller; Tk_Window tkwin = scrollPtr->tkwin; - CGrafPtr destPort, savePort; - Boolean portChanged; - WindowRef windowRef; + TkWindow *winPtr = (TkWindow *) tkwin; + MacDrawable *macWin = (MacDrawable *) winPtr->window; + TkMacOSXDrawingContext dc; + NSView *view = TkMacOSXDrawableView(macWin); + CGFloat viewHeight = [view bounds].size.height; + CGAffineTransform t = { .a = 1, .b = 0, .c = 0, .d = -1, .tx = 0, + .ty = viewHeight}; + NSRect frame; + double knobProportion = scrollPtr->lastFraction - scrollPtr->firstFraction; - if ((scrollPtr->tkwin == NULL) || !Tk_IsMapped(tkwin)) { - goto done; + scrollPtr->flags &= ~REDRAW_PENDING; + if (!scrollPtr->tkwin || !Tk_IsMapped(tkwin) || !view || + !TkMacOSXSetupDrawingContext((Drawable) macWin, NULL, 1, &dc)) { + return; } - - /* - * Draw the focus or any 3D relief we may have. - */ + CGContextConcatCTM(dc.context, t); if (scrollPtr->highlightWidth != 0) { GC fgGC, bgGC; - bgGC = Tk_GCForColor(scrollPtr->highlightBgColorPtr, - Tk_WindowId(tkwin)); - + bgGC = Tk_GCForColor(scrollPtr->highlightBgColorPtr, (Pixmap) macWin); if (scrollPtr->flags & GOT_FOCUS) { - fgGC = Tk_GCForColor(scrollPtr->highlightColorPtr, - Tk_WindowId(tkwin)); - TkpDrawHighlightBorder(tkwin, fgGC, bgGC, scrollPtr->highlightWidth, - Tk_WindowId(tkwin)); + fgGC = Tk_GCForColor(scrollPtr->highlightColorPtr, (Pixmap) macWin); } else { - TkpDrawHighlightBorder(tkwin, bgGC, bgGC, scrollPtr->highlightWidth, - Tk_WindowId(tkwin)); + fgGC = bgGC; } - } - Tk_Draw3DRectangle(tkwin, Tk_WindowId(tkwin), scrollPtr->bgBorder, - scrollPtr->highlightWidth, scrollPtr->highlightWidth, - Tk_Width(tkwin) - 2*scrollPtr->highlightWidth, - Tk_Height(tkwin) - 2*scrollPtr->highlightWidth, - scrollPtr->borderWidth, scrollPtr->relief); - - if (macScrollPtr->sbHandle == NULL) { - Rect r = {0, 0, 1, 1}; - - windowRef = TkMacOSXDrawableWindow(Tk_WindowId(tkwin)); - CreateScrollBarControl(windowRef, &r, 0, 0, 0, 0, true, NULL, - &(macScrollPtr->sbHandle)); - SetControlReference(macScrollPtr->sbHandle, (SInt32) scrollPtr); + TkpDrawHighlightBorder(tkwin, fgGC, bgGC, scrollPtr->highlightWidth, + (Pixmap) macWin); + } + Tk_Draw3DRectangle(tkwin, (Pixmap) macWin, scrollPtr->bgBorder, + scrollPtr->highlightWidth, scrollPtr->highlightWidth, + Tk_Width(tkwin) - 2*scrollPtr->highlightWidth, + Tk_Height(tkwin) - 2*scrollPtr->highlightWidth, + scrollPtr->borderWidth, scrollPtr->relief); + Tk_Fill3DRectangle(tkwin, (Pixmap) macWin, scrollPtr->bgBorder, + scrollPtr->inset, scrollPtr->inset, + Tk_Width(tkwin) - 2*scrollPtr->inset, + Tk_Height(tkwin) - 2*scrollPtr->inset, 0, TK_RELIEF_FLAT); + if ([scroller superview] != view) { + [view addSubview:scroller]; + } + frame = NSMakeRect(macWin->xOff, macWin->yOff, Tk_Width(tkwin), + Tk_Height(tkwin)); + frame = NSInsetRect(frame, scrollPtr->inset, scrollPtr->inset); + frame.origin.y = viewHeight - (frame.origin.y + frame.size.height); + + NSWindow *w = [view window]; + + if ([w showsResizeIndicator]) { + NSRect growBox = [view convertRect:[w _growBoxRect] fromView:nil]; + + if (NSIntersectsRect(growBox, frame)) { + if (scrollPtr->vertical) { + CGFloat y = frame.origin.y; - if (IsWindowActive(windowRef)) { - macScrollPtr->macFlags |= ACTIVE; + frame.origin.y = growBox.origin.y + growBox.size.height; + frame.size.height -= frame.origin.y - y; + } else { + frame.size.width = growBox.origin.x - frame.origin.x; + } + TkMacOSXSetScrollbarGrow(winPtr, true); } } - - /* - * Update the control values before we draw. - */ - - UpdateControlValues(macScrollPtr); - - /* - * Set up port for drawing Macintosh control. - */ - destPort = TkMacOSXGetDrawablePort(Tk_WindowId(tkwin)); - portChanged = QDSwapPort(destPort, &savePort); - TkMacOSXSetUpClippingRgn(Tk_WindowId(tkwin)); - - /* - * Scrollbars do not erase the complete control bounds if they are wider - * than the standard width, so manually erase the extra space. - */ - - if (!EmptyRect(&macScrollPtr->eraseRect)) { - EraseRect(&macScrollPtr->eraseRect); - } - - Draw1Control(macScrollPtr->sbHandle); - - if (portChanged) { - QDSwapPort(savePort, NULL); - } - - done: - scrollPtr->flags &= ~REDRAW_PENDING; -} - -/* - *---------------------------------------------------------------------- - * - * TkpConfigureScrollbar -- - * - * This procedure is called after the generic code has finished - * processing configuration options, in order to configure - * platform specific options. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - -void -TkpConfigureScrollbar(scrollPtr) - register TkScrollbar *scrollPtr; /* Information about widget; may or - * may not already have values for - * some fields. */ -{ + if (!NSEqualRects(frame, [scroller frame])) { + [scroller setFrame:frame]; + } + [scroller setEnabled:(knobProportion < 1.0 && + (scrollPtr->vertical ? frame.size.height : frame.size.width) > + metrics[macScrollPtr->variant].minHeight)]; + [scroller setDoubleValue:scrollPtr->firstFraction / (1.0 - knobProportion)]; + [scroller setKnobProportion:knobProportion]; + [scroller displayRectIgnoringOpacity:[scroller bounds]]; + TkMacOSXRestoreDrawingContext(&dc); +#ifdef TK_MAC_DEBUG_SCROLLBAR + TKLog(@"scroller %s frame %@ width %d height %d", + ((TkWindow *)scrollPtr->tkwin)->pathName, NSStringFromRect(frame), + Tk_Width(tkwin), Tk_Height(tkwin)); +#endif } /* @@ -337,9 +368,9 @@ TkpConfigureScrollbar(scrollPtr) * * TkpComputeScrollbarGeometry -- * - * After changes in a scrollbar's size or configuration, this - * procedure recomputes various geometry information used in - * displaying the scrollbar. + * After changes in a scrollbar's size or configuration, this procedure + * recomputes various geometry information used in displaying the + * scrollbar. * * Results: * None. @@ -352,18 +383,59 @@ TkpConfigureScrollbar(scrollPtr) void TkpComputeScrollbarGeometry( - register TkScrollbar *scrollPtr) /* Scrollbar whose geometry may - * have changed. */ + register TkScrollbar *scrollPtr) + /* Scrollbar whose geometry may have + * changed. */ { - int variant, fieldLength; + MacScrollbar *macScrollPtr = (MacScrollbar *) scrollPtr; + NSScroller *scroller = macScrollPtr->scroller; + int width, height, variant, fieldLength; if (scrollPtr->highlightWidth < 0) { scrollPtr->highlightWidth = 0; } scrollPtr->inset = scrollPtr->highlightWidth + scrollPtr->borderWidth; - variant = ((scrollPtr->vertical ? Tk_Width(scrollPtr->tkwin) : - Tk_Height(scrollPtr->tkwin)) - 2 * scrollPtr->inset - < metrics[0].width) ? 1 : 0; + width = Tk_Width(scrollPtr->tkwin) - 2 * scrollPtr->inset; + height = Tk_Height(scrollPtr->tkwin) - 2 * scrollPtr->inset; + variant = ((scrollPtr->vertical ? width : height) < metrics[0].width) ? + 1 : 0; + macScrollPtr->variant = variant; + if (scroller) { + NSSize size = [scroller frame].size; + + if ((size.width > size.height) ^ !scrollPtr->vertical) { + /* + * Orientation changed, need new scroller. + */ + + if ([scroller superview]) { + [scroller removeFromSuperviewWithoutNeedingDisplay]; + } + TkMacOSXMakeCollectableAndRelease(scroller); + } + } + if (!scroller) { + if ((width > height) ^ !scrollPtr->vertical) { + /* -[NSScroller initWithFrame:] determines horizonalness for the + * lifetime of the scroller via isHoriz = (width > height) */ + if (scrollPtr->vertical) { + width = height; + } else if (width > 1) { + height = width - 1; + } else { + height = 1; + width = 2; + } + } + scroller = [[NSScroller alloc] initWithFrame: + NSMakeRect(0, 0, width, height)]; + macScrollPtr->scroller = TkMacOSXMakeUncollectable(scroller); + [scroller setAction:@selector(tkScroller:)]; + [scroller setTarget:NSApp]; + [scroller setTag:(NSInteger)scrollPtr]; + } + [[scroller cell] setControlSize:metrics[variant].controlSize]; + scrollPtr->arrowLength = (metrics[variant].topArrowHeight + metrics[variant].bottomArrowHeight) / 2; fieldLength = (scrollPtr->vertical ? Tk_Height(scrollPtr->tkwin) @@ -376,9 +448,9 @@ TkpComputeScrollbarGeometry( scrollPtr->sliderLast = fieldLength * scrollPtr->lastFraction; /* - * Adjust the slider so that some piece of it is always - * displayed in the scrollbar and so that it has at least - * a minimal width (so it can be grabbed with the mouse). + * Adjust the slider so that some piece of it is always displayed in the + * scrollbar and so that it has at least a minimal width (so it can be + * grabbed with the mouse). */ if (scrollPtr->sliderFirst > (fieldLength - 2*scrollPtr->borderWidth)) { @@ -401,10 +473,9 @@ TkpComputeScrollbarGeometry( metrics[variant].bottomArrowHeight; /* - * Register the desired geometry for the window (leave enough space - * for the two arrows plus a minimum-size slider, plus border around - * the whole window, if any). Then arrange for the window to be - * redisplayed. + * Register the desired geometry for the window (leave enough space for + * the two arrows plus a minimum-size slider, plus border around the whole + * window, if any). Then arrange for the window to be redisplayed. */ if (scrollPtr->vertical) { @@ -419,14 +490,22 @@ TkpComputeScrollbarGeometry( 2 * scrollPtr->inset); } Tk_SetInternalBorder(scrollPtr->tkwin, scrollPtr->inset); +#ifdef TK_MAC_DEBUG_SCROLLBAR + TKLog(@"scroller %s bounds %@ width %d height %d inset %d borderWidth %d", + ((TkWindow *)scrollPtr->tkwin)->pathName, + NSStringFromRect([scroller bounds]), + width, height, scrollPtr->inset, scrollPtr->borderWidth); +#endif } /* *---------------------------------------------------------------------- * - * TkpDestroyScrollbar -- + * TkpConfigureScrollbar -- * - * Free data structures associated with the scrollbar control. + * This procedure is called after the generic code has finished + * processing configuration options, in order to configure platform + * specific options. * * Results: * None. @@ -438,18 +517,11 @@ TkpComputeScrollbarGeometry( */ void -TkpDestroyScrollbar( - TkScrollbar *scrollPtr) /* Scrollbar to destroy. */ +TkpConfigureScrollbar( + register TkScrollbar *scrollPtr) + /* Information about widget; may or may not + * already have values for some fields. */ { - MacScrollbar *macScrollPtr = (MacScrollbar *)scrollPtr; - - if (macScrollPtr->sbHandle != NULL) { - if (!(macScrollPtr->macFlags & IN_MODAL_LOOP)) { - DisposeControl(macScrollPtr->sbHandle); - macScrollPtr->sbHandle = NULL; - } - } - macScrollPtr->macFlags |= ALREADY_DEAD; } /* @@ -457,14 +529,12 @@ TkpDestroyScrollbar( * * TkpScrollbarPosition -- * - * Determine the scrollbar element corresponding to a - * given position. + * Determine the scrollbar element corresponding to a given position. * * Results: - * One of TOP_ARROW, TOP_GAP, etc., indicating which element - * of the scrollbar covers the position given by (x, y). If - * (x,y) is outside the scrollbar entirely, then OUTSIDE is - * returned. + * One of TOP_ARROW, TOP_GAP, etc., indicating which element of the + * scrollbar covers the position given by (x, y). If (x,y) is outside the + * scrollbar entirely, then OUTSIDE is returned. * * Side effects: * None. @@ -474,395 +544,32 @@ TkpDestroyScrollbar( int TkpScrollbarPosition( - TkScrollbar *scrollPtr, /* Scrollbar widget record. */ - int x, int y) /* Coordinates within scrollPtr's - * window. */ + register TkScrollbar *scrollPtr, + /* Scrollbar widget record. */ + int x, int y) /* Coordinates within scrollPtr's window. */ { - MacScrollbar *macScrollPtr = (MacScrollbar *) scrollPtr; - CGrafPtr destPort, savePort; - Boolean portChanged; - int inactive = 0; - ControlPartCode part; - Point where = {y, x}; - Rect bounds; - - if ((x < scrollPtr->inset) || (x >= (Tk_Width(scrollPtr->tkwin) - - scrollPtr->inset)) || (y < scrollPtr->inset) || - (y >= (Tk_Height(scrollPtr->tkwin) - scrollPtr->inset))) { + NSScroller *scroller = ((MacScrollbar *) scrollPtr)->scroller; + MacDrawable *macWin = (MacDrawable *) + ((TkWindow *) scrollPtr->tkwin)->window; + NSView *view = TkMacOSXDrawableView(macWin); + + switch ([scroller testPart:NSMakePoint(macWin->xOff + x, + [view bounds].size.height - (macWin->yOff + y))]) { + case NSScrollerDecrementLine: + return TOP_ARROW; + case NSScrollerDecrementPage: + return TOP_GAP; + case NSScrollerKnob: + return SLIDER; + case NSScrollerIncrementPage: + return BOTTOM_GAP; + case NSScrollerIncrementLine: + return BOTTOM_ARROW; + case NSScrollerKnobSlot: + case NSScrollerNoPart: + default: return OUTSIDE; } - - /* - * All of the calculations in this procedure mirror those in - * DisplayScrollbar. Be sure to keep the two consistent. On the - * Macintosh we use the OS call TestControl to do this mapping. - * For TestControl to work, the scrollbar must be active and must - * be in the current port. - */ - - destPort = TkMacOSXGetDrawablePort(Tk_WindowId(scrollPtr->tkwin)); - portChanged = QDSwapPort(destPort, &savePort); - UpdateControlValues(macScrollPtr); - if (!IsControlActive(macScrollPtr->sbHandle)) { - inactive = true; - ActivateControl(macScrollPtr->sbHandle); - } - TkMacOSXWinBounds((TkWindow *) scrollPtr->tkwin, &bounds); - where.h += bounds.left; - where.v += bounds.top; - part = TestControl(((MacScrollbar *) scrollPtr)->sbHandle, where); - if (inactive) { - DeactivateControl(macScrollPtr->sbHandle); - } - if (portChanged) { - QDSwapPort(savePort, NULL); - } - switch (part) { - case kAppearancePartUpButton: - return TOP_ARROW; - case kAppearancePartPageUpArea: - return TOP_GAP; - case kAppearancePartIndicator: - return SLIDER; - case kAppearancePartPageDownArea: - return BOTTOM_GAP; - case kAppearancePartDownButton: - return BOTTOM_ARROW; - default: - return OUTSIDE; - } -} - -/* - *-------------------------------------------------------------- - * - * ThumbActionProc -- - * - * Callback procedure used by the Macintosh toolbox call - * HandleControlClick. This call is used to track the - * thumb of the scrollbar. Unlike the - * ScrollbarActionProc function this function is called - * once and basically takes over tracking the scrollbar - * from the control. This is done to avoid conflicts with - * what the control plans to draw. - * - * Results: - * None. - * - * Side effects: - * May change the display. - * - *-------------------------------------------------------------- - */ - -static pascal void -ThumbActionProc(ControlRef theControl, ControlPartCode partCode) -{ - TkScrollbar *scrollPtr = (TkScrollbar *)(intptr_t)GetControlReference( - theControl); - MacScrollbar *macScrollPtr = (MacScrollbar *) scrollPtr; - Tcl_DString cmdString; - int origValue, variant; - short trackBarSize; - double oldFirstFraction, newFirstFraction; - char valueString[40]; - Point currentPoint = { 0, 0 }; - Rect trackRect; - Tcl_Interp *interp; - MouseTrackingResult trackingResult; - OSStatus err; - - if (scrollPtr == NULL) { - return; - } - - Tcl_DStringInit(&cmdString); - origValue = GetControl32BitValue(macScrollPtr->sbHandle); - GetControlBounds(macScrollPtr->sbHandle, &trackRect); - - if (scrollPtr->vertical) { - variant = (trackRect.right - trackRect.left) < metrics[0].width ? 1 : 0; - trackBarSize = trackRect.bottom - trackRect.top - - metrics[variant].topArrowHeight - - metrics[variant].bottomArrowHeight; - InsetRect(&trackRect, -25, -113); - } else { - variant = (trackRect.bottom - trackRect.top) < metrics[0].width ? 1 : 0; - trackBarSize = trackRect.right - trackRect.left - - metrics[variant].topArrowHeight - - metrics[variant].bottomArrowHeight; - InsetRect(&trackRect, -113, -25); - } - - /* - * Track the mouse while the button is held down. If the mouse is moved, - * we calculate the value that should be passed to the "command" part of - * the scrollbar. Since the mouse may move a distance too small to - * cause a change to the first fraction, each calculation must be done - * versus what the first fraction was when the mouse button was - * initially pressed. Otherwise, moving the mouse too slowly will - * cause the calculated fraction delta to be zero and the scrollbar - * won't respond. - */ - - oldFirstFraction = scrollPtr->firstFraction; - - TkMacOSXTrackingLoop(1); - do { - err = ChkErr(TrackMouseLocationWithOptions, NULL, - kTrackMouseLocationOptionDontConsumeMouseUp, - kEventDurationForever, ¤tPoint, NULL, &trackingResult); - if ((err == noErr) && ((trackingResult == kMouseTrackingMouseDragged) - || (trackingResult == kMouseTrackingMouseMoved))) { - - /* - * Calculate where the scrollbar should move to, based on - * where the mouse button was pressed and where the scrollbar - * initially was at that time. Note that PtInRect() will - * return false if currentPoint or trackRect are not in - * is not in current graphics port, which may happen if any - * of the waiting idle events change the port (e.g. with - * SetPort()) but fail to restore it before returning and the - * scrollbar will lock in place. - */ - newFirstFraction = oldFirstFraction; - if (PtInRect(currentPoint, &trackRect)) { - short pixDiff; - - if (scrollPtr->vertical) { - pixDiff = currentPoint.v - mouseDownPoint.v; - } else { - pixDiff = currentPoint.h - mouseDownPoint.h; - } - newFirstFraction += (double)pixDiff / trackBarSize; - if (newFirstFraction > 1.0) { - newFirstFraction = 1.0; - } else if (newFirstFraction < 0.0) { - newFirstFraction = 0.0; - } - } - - /* - * Move the scrollbar thumb to the new first fraction given - * its position when initially pressed and how far the mouse - * has moved. Process waiting idle tasks afterward to allow - * for the display to update. - */ - - sprintf(valueString, "%g", newFirstFraction); - Tcl_DStringSetLength(&cmdString, 0); - Tcl_DStringAppend(&cmdString, scrollPtr->command, - scrollPtr->commandSize); - Tcl_DStringAppendElement(&cmdString, "moveto"); - Tcl_DStringAppendElement(&cmdString, valueString); - interp = scrollPtr->interp; - Tcl_Preserve((ClientData) interp); - Tcl_EvalEx(interp, Tcl_DStringValue(&cmdString), - Tcl_DStringLength(&cmdString), TCL_EVAL_GLOBAL); - Tcl_Release((ClientData) interp); - TkMacOSXRunTclEventLoop(); - } - } while ((err == noErr) && trackingResult != kMouseTrackingMouseReleased); - TkMacOSXTrackingLoop(0); - Tcl_DStringFree(&cmdString); - return; -} - -/* - *-------------------------------------------------------------- - * - * ScrollbarActionProc -- - * - * Callback procedure used by the Macintosh toolbox call - * HandleControlClick. This call will update the display - * while the scrollbar is being manipulated by the user. - * - * Results: - * None. - * - * Side effects: - * May change the display. - * - *-------------------------------------------------------------- - */ - -static pascal void -ScrollbarActionProc( - ControlRef theControl, /* Handle to scrollbat control */ - ControlPartCode partCode) /* Part of scrollbar that was "hit" */ -{ - TkScrollbar *scrollPtr = (TkScrollbar *)(intptr_t)GetControlReference( - theControl); - MacScrollbar *macScrollPtr = (MacScrollbar *) scrollPtr; - Tcl_DString cmdString; - - Tcl_DStringInit(&cmdString); - Tcl_DStringAppend(&cmdString, scrollPtr->command, - scrollPtr->commandSize); - - if ( partCode == kAppearancePartUpButton || - partCode == kAppearancePartDownButton ) { - Tcl_DStringAppendElement(&cmdString, "scroll"); - Tcl_DStringAppendElement(&cmdString, - (partCode == kAppearancePartUpButton) ? "-1" : "1"); - Tcl_DStringAppendElement(&cmdString, "unit"); - } else if (partCode == kAppearancePartPageUpArea || - partCode == kAppearancePartPageDownArea ) { - Tcl_DStringAppendElement(&cmdString, "scroll"); - Tcl_DStringAppendElement(&cmdString, - (partCode == kAppearancePartPageUpArea) ? "-1" : "1"); - Tcl_DStringAppendElement(&cmdString, "page"); - } else if (partCode == kAppearancePartIndicator) { - char valueString[TCL_DOUBLE_SPACE]; - - sprintf(valueString, "%g", - (GetControl32BitValue(macScrollPtr->sbHandle) - - MIN_SCROLLBAR_VALUE) / SCROLLBAR_SCALING_VALUE); - Tcl_DStringAppendElement(&cmdString, "moveto"); - Tcl_DStringAppendElement(&cmdString, valueString); - } - Tcl_Preserve((ClientData) scrollPtr->interp); - Tcl_EvalEx(scrollPtr->interp, Tcl_DStringValue(&cmdString), - Tcl_DStringLength(&cmdString), TCL_EVAL_GLOBAL); - Tcl_Release((ClientData) scrollPtr->interp); - Tcl_DStringFree(&cmdString); - TkMacOSXRunTclEventLoop(); -} - -/* - *-------------------------------------------------------------- - * - * ScrollbarBindProc -- - * - * This procedure is invoked when the default <ButtonPress> - * binding on the Scrollbar bind tag fires. - * - * Results: - * None. - * - * Side effects: - * The event enters a modal loop. - * - *-------------------------------------------------------------- - */ - -static int -ScrollbarBindProc( - ClientData clientData, /* Not used. */ - Tcl_Interp *interp, /* Interp with binding. */ - XEvent *eventPtr, /* X event that triggered binding. */ - Tk_Window tkwin, /* Target window for event. */ - KeySym keySym) /* The KeySym if a key event. */ -{ - TkWindow *winPtr = (TkWindow*)tkwin; - TkScrollbar *scrollPtr = (TkScrollbar *) winPtr->instanceData; - MacScrollbar *macScrollPtr = (MacScrollbar *) winPtr->instanceData; - - Tcl_Preserve((ClientData)scrollPtr); - macScrollPtr->macFlags |= IN_MODAL_LOOP; - - if (eventPtr->type == ButtonPress) { - Point where; - Rect bounds; - ControlPartCode part; - CGrafPtr destPort, savePort; - Boolean portChanged; - Window window; - - /* - * To call Macintosh control routines we must have the port - * set to the window containing the control. We will then test - * which part of the control was hit and act accordingly. - */ - destPort = TkMacOSXGetDrawablePort(Tk_WindowId(scrollPtr->tkwin)); - portChanged = QDSwapPort(destPort, &savePort); - TkMacOSXSetUpClippingRgn(Tk_WindowId(scrollPtr->tkwin)); - - TkMacOSXWinBounds((TkWindow *) scrollPtr->tkwin, &bounds); - where.h = eventPtr->xbutton.x + bounds.left; - where.v = eventPtr->xbutton.y + bounds.top; - part = TestControl(macScrollPtr->sbHandle, where); - TkMacOSXTrackingLoop(1); - if (part == kAppearancePartIndicator && scrollPtr->jump == false) { - /* - * Case 1: In thumb, no jump scrolling. Call track control - * with the thumb action proc which will do most of the work. - */ - mouseDownPoint.h = where.h; - mouseDownPoint.v = where.v; - part = HandleControlClick(macScrollPtr->sbHandle, where, - TkMacOSXModifierState(), thumbActionProc); - } else if (part == kAppearancePartIndicator) { - /* - * Case 2: in thumb with jump scrolling. Call HandleControlClick - * with a NULL action proc. Use the new value of the control - * to set update the control. - */ - part = HandleControlClick(macScrollPtr->sbHandle, where, - TkMacOSXModifierState(), NULL); - if (part == kAppearancePartIndicator) { - Tcl_DString cmdString; - char valueString[TCL_DOUBLE_SPACE]; - - sprintf(valueString, "%g", - (GetControl32BitValue(macScrollPtr->sbHandle) - - MIN_SCROLLBAR_VALUE) / SCROLLBAR_SCALING_VALUE); - Tcl_DStringInit(&cmdString); - Tcl_DStringAppend(&cmdString, scrollPtr->command, - strlen(scrollPtr->command)); - Tcl_DStringAppendElement(&cmdString, "moveto"); - Tcl_DStringAppendElement(&cmdString, valueString); - - interp = scrollPtr->interp; - Tcl_Preserve((ClientData) interp); - Tcl_EvalEx(interp, Tcl_DStringValue(&cmdString), - Tcl_DStringLength(&cmdString), TCL_EVAL_GLOBAL); - Tcl_Release((ClientData) interp); - Tcl_DStringFree(&cmdString); - TkMacOSXRunTclEventLoop(); - } - } else if (part != 0) { - /* - * Case 3: in any other part of the scrollbar. We call - * HandleControlClick with the scrollActionProc which will do - * most all the work. - */ - HandleControlClick(macScrollPtr->sbHandle, where, - TkMacOSXModifierState(), scrollActionProc); - /* - * Workaround for Carbon bug where the scrollbar down arrow - * sometimes gets "stuck" after the mousebutton has been released. - */ - if (scrollPtr->tkwin) { - TkMacOSXSetUpClippingRgn(Tk_WindowId(scrollPtr->tkwin)); - } - Draw1Control(macScrollPtr->sbHandle); - } - TkMacOSXTrackingLoop(0); - - /* - * The HandleControlClick call will "eat" the ButtonUp event. We now - * generate a ButtonUp event so Tk will unset implicit grabs etc. - */ - - if (scrollPtr->tkwin) { - window = Tk_WindowId(scrollPtr->tkwin); - TkGenerateButtonEventForXPointer(window); - } - - if (portChanged) { - QDSwapPort(savePort, NULL); - } - } - - if (macScrollPtr->sbHandle && (macScrollPtr->macFlags & ALREADY_DEAD)) { - DisposeControl(macScrollPtr->sbHandle); - macScrollPtr->sbHandle = NULL; - } - macScrollPtr->macFlags &= ~IN_MODAL_LOOP; - Tcl_Release((ClientData)scrollPtr); - - return TCL_OK; } /* @@ -870,15 +577,15 @@ ScrollbarBindProc( * * ScrollbarEventProc -- * - * This procedure is invoked by the Tk dispatcher for various - * events on scrollbars. + * This procedure is invoked by the Tk dispatcher for various events on + * scrollbars. * * Results: * None. * * Side effects: - * When the window gets deleted, internal structures get - * cleaned up. When it gets exposed, it is redisplayed. + * When the window gets deleted, internal structures get cleaned up. When + * it gets exposed, it is redisplayed. * *-------------------------------------------------------------- */ @@ -889,155 +596,25 @@ ScrollbarEventProc( XEvent *eventPtr) /* Information about event. */ { TkScrollbar *scrollPtr = (TkScrollbar *) clientData; - MacScrollbar *macScrollPtr = (MacScrollbar *) clientData; - if (eventPtr->type == UnmapNotify) { + switch (eventPtr->type) { + case UnmapNotify: TkMacOSXSetScrollbarGrow((TkWindow *) scrollPtr->tkwin, false); - } else if (eventPtr->type == ActivateNotify) { - macScrollPtr->macFlags |= ACTIVE; + break; + case ActivateNotify: + case DeactivateNotify: TkScrollbarEventuallyRedraw((ClientData) scrollPtr); - } else if (eventPtr->type == DeactivateNotify) { - macScrollPtr->macFlags &= ~ACTIVE; - TkScrollbarEventuallyRedraw((ClientData) scrollPtr); - } else { + break; + default: TkScrollbarEventProc(clientData, eventPtr); } } /* - *-------------------------------------------------------------- - * - * UpdateControlValues -- - * - * This procedure updates the Macintosh scrollbar control - * to display the values defined by the Tk scrollbar. - * - * Results: - * None. - * - * Side effects: - * The Macintosh control is updated. - * - *-------------------------------------------------------------- + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: */ - -static void -UpdateControlValues( - MacScrollbar *macScrollPtr) /* Scrollbar data struct. */ -{ - TkScrollbar *scrollPtr = (TkScrollbar *) macScrollPtr; - Tk_Window tkwin = scrollPtr->tkwin; - MacDrawable * macDraw = (MacDrawable *) Tk_WindowId(scrollPtr->tkwin); - double dViewSize; - Rect contrlRect, portRect; - int variant, active; - short width, height; - - contrlRect.left = macDraw->xOff + scrollPtr->inset; - contrlRect.top = macDraw->yOff + scrollPtr->inset; - contrlRect.right = macDraw->xOff + Tk_Width(tkwin) - scrollPtr->inset; - contrlRect.bottom = macDraw->yOff + Tk_Height(tkwin) - scrollPtr->inset; - - GetPortBounds (GetWindowPort(GetControlOwner(macScrollPtr->sbHandle)), - &portRect); - - /* - * If the scrollbar is flush against the bottom right hand corner then - * we leave space to draw the grow region for the window. - */ - if (portRect.bottom == contrlRect.bottom && - portRect.right == contrlRect.right) { - TkMacOSXSetScrollbarGrow((TkWindow *) tkwin, true); - if (macDraw->toplevel && - TkMacOSXResizable(macDraw->toplevel->winPtr)) { - int growSize; - - switch (TkMacOSXWindowClass(macDraw->toplevel->winPtr)) { - case kFloatingWindowClass: - case kUtilityWindowClass: - growSize = metrics[1].width - 1; - break; - case kDocumentWindowClass: - case kMovableAlertWindowClass: - case kMovableModalWindowClass: - default: - growSize = metrics[0].width - 1; - break; - } - if (scrollPtr->vertical) { - contrlRect.bottom -= growSize; - } else { - contrlRect.right -= growSize; - } - } - } else { - TkMacOSXSetScrollbarGrow((TkWindow *) tkwin, false); - } - - if (IsControlVisible (macScrollPtr->sbHandle)) { - SetControlVisibility(macScrollPtr->sbHandle, false, false); - } - - if (scrollPtr->vertical) { - width = contrlRect.right - contrlRect.left; - height = contrlRect.bottom - contrlRect.top; - } else { - width = contrlRect.bottom - contrlRect.top; - height = contrlRect.right - contrlRect.left; - } - variant = width < metrics[0].width ? 1 : 0; - SetControlData(macScrollPtr->sbHandle, kControlEntireControl, - kControlSizeTag, sizeof(ControlSize), - &(metrics[variant].size)); - - macScrollPtr->eraseRect = contrlRect; - if (scrollPtr->vertical) { - macScrollPtr->eraseRect.left += metrics[variant].width; - } else { - macScrollPtr->eraseRect.top += metrics[variant].width; - } - - /* - * Ensure we set scrollbar control bounds only once all size - * adjustments have been computed. - */ - - SetControlBounds(macScrollPtr->sbHandle, &contrlRect); - - /* - * Given the Tk parameters for the fractions of the start and - * end of the thumb, the following calculation determines the - * location for the Macintosh thumb. - * The Aqua scroll control works as follows. - * The scrollbar's value is the position of the left (or top) side of - * the view area in the content area being scrolled. - * The maximum value of the control is therefore the dimension of - * the content area less the size of the view area. - * Since these values are all integers, and Tk gives the thumb position - * as fractions, we have introduced a scaling factor. - */ - - dViewSize = (scrollPtr->lastFraction - scrollPtr->firstFraction) - * SCROLLBAR_SCALING_VALUE; - SetControl32BitMinimum(macScrollPtr->sbHandle, MIN_SCROLLBAR_VALUE); - SetControl32BitMaximum(macScrollPtr->sbHandle, MIN_SCROLLBAR_VALUE + - SCROLLBAR_SCALING_VALUE - dViewSize); - SetControlViewSize(macScrollPtr->sbHandle, dViewSize); - SetControl32BitValue(macScrollPtr->sbHandle, MIN_SCROLLBAR_VALUE + - SCROLLBAR_SCALING_VALUE * scrollPtr->firstFraction); - - if((scrollPtr->firstFraction <= 0.0 && scrollPtr->lastFraction >= 1.0) - || height <= metrics[variant].minHeight) { - /* Disable scrollbar */ - SetControl32BitMaximum(macScrollPtr->sbHandle, MIN_SCROLLBAR_VALUE); - } - active = ((macScrollPtr->macFlags & ACTIVE) != 0); - if (active != IsControlActive(macScrollPtr->sbHandle)) { - if (active) { - ActivateControl(macScrollPtr->sbHandle); - } else { - DeactivateControl(macScrollPtr->sbHandle); - } - } - SetControlVisibility(macScrollPtr->sbHandle, true, false); -} diff --git a/macosx/tkMacOSXSend.c b/macosx/tkMacOSXSend.c index 39c4cf0..603d70e 100644 --- a/macosx/tkMacOSXSend.c +++ b/macosx/tkMacOSXSend.c @@ -1,34 +1,31 @@ /* * tkMacOSXSend.c -- * - * This file provides procedures that implement the "send" - * command, allowing commands to be passed from interpreter - * to interpreter. This current implementation for the Mac - * has most functionality stubed out. - * - * The current plan, which we have not had time to implement, is - * for the first Wish app to create a gestalt of type 'WIsH'. - * This gestalt will point to a table, in system memory, of - * Tk apps. Each Tk app, when it starts up, will register their - * name, and process ID, in this table. This will allow us to - * implement "tk appname". - * - * Then the send command will look up the process id of the target - * app in this table, and send an AppleEvent to that process. The - * AppleEvent handler is much like the do script handler, except that - * you have to specify the name of the tk app as well, since there may - * be many interps in one wish app, and you need to send it to the - * right one. - * - * Implementing this has been on our list of things to do, but what - * with the demise of Tcl at Sun, and the lack of resources at - * Scriptics it may not get done for awhile. So this sketch is - * offered for the brave to attempt if they need the functionality... + * This file provides procedures that implement the "send" command, + * allowing commands to be passed from interpreter to interpreter. This + * current implementation for the Mac has most functionality stubed out. + * + * The current plan, which we have not had time to implement, is for the + * first Wish app to create a gestalt of type 'WIsH'. This gestalt will + * point to a table, in system memory, of Tk apps. Each Tk app, when it + * starts up, will register their name, and process ID, in this table. + * This will allow us to implement "tk appname". + * + * Then the send command will look up the process id of the target app in + * this table, and send an AppleEvent to that process. The AppleEvent + * handler is much like the do script handler, except that you have to + * specify the name of the tk app as well, since there may be many + * interps in one wish app, and you need to send it to the right one. + * + * Implementing this has been on our list of things to do, but what with + * the demise of Tcl at Sun, and the lack of resources at Scriptics it + * may not get done for awhile. So this sketch is offered for the brave + * to attempt if they need the functionality... * * Copyright (c) 1989-1994 The Regents of the University of California. * Copyright (c) 1994-1998 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -37,137 +34,136 @@ #include "tkMacOSXInt.h" /* - * The following structure is used to keep track of the - * interpreters registered by this process. + * The following structure is used to keep track of the interpreters + * registered by this process. */ typedef struct RegisteredInterp { char *name; /* Interpreter's name (malloc-ed). */ - Tcl_Interp *interp; /* Interpreter associated with - * name. */ + Tcl_Interp *interp; /* Interpreter associated with name. */ struct RegisteredInterp *nextPtr; - /* Next in list of names associated - * with interps in this process. - * NULL means end of list. */ + /* Next in list of names associated with + * interps in this process. NULL means end of + * list. */ } RegisteredInterp; /* - * A registry of all interpreters for a display is kept in a - * property "InterpRegistry" on the root window of the display. - * It is organized as a series of zero or more concatenated strings - * (in no particular order), each of the form + * A registry of all interpreters for a display is kept in a property + * "InterpRegistry" on the root window of the display. It is organized as a + * series of zero or more concatenated strings (in no particular order), each + * of the form * window space name '\0' - * where "window" is the hex id of the comm. window to use to talk - * to an interpreter named "name". + * where "window" is the hex id of the comm. window to use to talk to an + * interpreter named "name". * - * When the registry is being manipulated by an application (e.g. to - * add or remove an entry), it is loaded into memory using a structure - * of the following type: + * When the registry is being manipulated by an application (e.g. to add or + * remove an entry), it is loaded into memory using a structure of the + * following type: */ typedef struct NameRegistry { TkDisplay *dispPtr; /* Display from which the registry was * read. */ - int locked; /* Non-zero means that the display was - * locked when the property was read in. */ - int modified; /* Non-zero means that the property has - * been modified, so it needs to be written - * out when the NameRegistry is closed. */ + int locked; /* Non-zero means that the display was locked + * when the property was read in. */ + int modified; /* Non-zero means that the property has been + * modified, so it needs to be written out + * when the NameRegistry is closed. */ unsigned long propLength; /* Length of the property, in bytes. */ - char *property; /* The contents of the property, or NULL - * if none. See format description above; - * this is *not* terminated by the first - * null character. Dynamically allocated. */ + char *property; /* The contents of the property, or NULL if + * none. See format description above; this is + * *not* terminated by the first null + * character. Dynamically allocated. */ int allocedByX; /* Non-zero means must free property with * XFree; zero means use ckfree. */ } NameRegistry; -static int initialized = false; /* A flag to denote if we have initialized yet. */ +static int initialized = 0; /* A flag to denote if we have initialized + * yet. */ static RegisteredInterp *interpListPtr = NULL; -/* List of all interpreters - * registered by this process. */ - - /* - * The information below is used for communication between processes - * during "send" commands. Each process keeps a private window, never - * even mapped, with one property, "Comm". When a command is sent to - * an interpreter, the command is appended to the comm property of the - * communication window associated with the interp's process. Similarly, - * when a result is returned from a sent command, it is also appended - * to the comm property. - * - * Each command and each result takes the form of ASCII text. For a - * command, the text consists of a zero character followed by several - * null-terminated ASCII strings. The first string consists of the - * single letter "c". Subsequent strings have the form "option value" - * where the following options are supported: - * - * -r commWindow serial - * - * This option means that a response should be sent to the window - * whose X identifier is "commWindow" (in hex), and the response should - * be identified with the serial number given by "serial" (in decimal). - * If this option isn't specified then the send is asynchronous and - * no response is sent. - * - * -n name - * "Name" gives the name of the application for which the command is - * intended. This option must be present. - * - * -s script - * - * "Script" is the script to be executed. This option must be present. - * - * The options may appear in any order. The -n and -s options must be - * present, but -r may be omitted for asynchronous RPCs. For compatibility - * with future releases that may add new features, there may be additional - * options present; as long as they start with a "-" character, they will - * be ignored. - * - * A result also consists of a zero character followed by several null- - * terminated ASCII strings. The first string consists of the single - * letter "r". Subsequent strings have the form "option value" where - * the following options are supported: - * - * -s serial - * - * Identifies the command for which this is the result. It is the - * same as the "serial" field from the -s option in the command. This - * option must be present. - * - * -c code - * - * "Code" is the completion code for the script, in decimal. If the - * code is omitted it defaults to TCL_OK. - * - * -r result - * - * "Result" is the result string for the script, which may be either - * a result or an error message. If this field is omitted then it - * defaults to an empty string. - * - * -i errorInfo - * - * "ErrorInfo" gives a string with which to initialize the errorInfo - * variable. This option may be omitted; it is ignored unless the - * completion code is TCL_ERROR. - * - * -e errorCode - * - * "ErrorCode" gives a string with with to initialize the errorCode - * variable. This option may be omitted; it is ignored unless the - * completion code is TCL_ERROR. - * - * Options may appear in any order, and only the -s option must be - * present. As with commands, there may be additional options besides - * these; unknown options are ignored. - */ - - /* - * Maximum size property that can be read at one time by - * this module: - */ + /* List of all interpreters registered by this + * process. */ + +/* + * The information below is used for communication between processes during + * "send" commands. Each process keeps a private window, never even mapped, + * with one property, "Comm". When a command is sent to an interpreter, the + * command is appended to the comm property of the communication window + * associated with the interp's process. Similarly, when a result is returned + * from a sent command, it is also appended to the comm property. + * + * Each command and each result takes the form of ASCII text. For a command, + * the text consists of a zero character followed by several null-terminated + * ASCII strings. The first string consists of the single letter "c". + * Subsequent strings have the form "option value" where the following options + * are supported: + * + * -r commWindow serial + * + * This option means that a response should be sent to the window whose X + * identifier is "commWindow" (in hex), and the response should be + * identified with the serial number given by "serial" (in decimal). If + * this option isn't specified then the send is asynchronous and no + * response is sent. + * + * -n name + * + * "Name" gives the name of the application for which the command is + * intended. This option must be present. + * + * -s script + * + * "Script" is the script to be executed. This option must be present. + * + * The options may appear in any order. The -n and -s options must be present, + * but -r may be omitted for asynchronous RPCs. For compatibility with future + * releases that may add new features, there may be additional options + * present; as long as they start with a "-" character, they will be ignored. + * + * + * A result also consists of a zero character followed by several null- + * terminated ASCII strings. The first string consists of the single letter + * "r". Subsequent strings have the form "option value" where the following + * options are supported: + * + * -s serial + * + * Identifies the command for which this is the result. It is the same as + * the "serial" field from the -s option in the command. This option must + * be present. + * + * -c code + * + * "Code" is the completion code for the script, in decimal. If the code + * is omitted it defaults to TCL_OK. + * + * -r result + * + * "Result" is the result string for the script, which may be either a + * result or an error message. If this field is omitted then it defaults + * to an empty string. + * + * -i errorInfo + * + * "ErrorInfo" gives a string with which to initialize the errorInfo + * variable. This option may be omitted; it is ignored unless the + * completion code is TCL_ERROR. + * + * -e errorCode + * + * "ErrorCode" gives a string with with to initialize the errorCode + * variable. This option may be omitted; it is ignored unless the + * completion code is TCL_ERROR. + * + * Options may appear in any order, and only the -s option must be present. As + * with commands, there may be additional options besides these; unknown + * options are ignored. + */ + +/* + * Maximum size property that can be read at one time by this module: + */ #define MAX_PROP_WORDS 100000 @@ -176,7 +172,6 @@ static RegisteredInterp *interpListPtr = NULL; */ static int SendInit(Tcl_Interp *interp); - /* *-------------------------------------------------------------- @@ -184,34 +179,33 @@ static int SendInit(Tcl_Interp *interp); * Tk_SetAppName -- * * This procedure is called to associate an ASCII name with a Tk - * application. If the application has already been named, the - * name replaces the old one. + * application. If the application has already been named, the name + * replaces the old one. * * Results: - * The return value is the name actually given to the application. - * This will normally be the same as name, but if name was already - * in use for an application then a name of the form "name #2" will - * be chosen, with a high enough number to make the name unique. + * The return value is the name actually given to the application. This + * will normally be the same as name, but if name was already in use for + * an application then a name of the form "name #2" will be chosen, with + * a high enough number to make the name unique. * * Side effects: - * Registration info is saved, thereby allowing the "send" command - * to be used later to invoke commands in the application. In - * addition, the "send" command is created in the application's - * interpreter. The registration will be removed automatically - * if the interpreter is deleted or the "send" command is removed. + * Registration info is saved, thereby allowing the "send" command to be + * used later to invoke commands in the application. In addition, the + * "send" command is created in the application's interpreter. The + * registration will be removed automatically if the interpreter is + * deleted or the "send" command is removed. * *-------------------------------------------------------------- */ -CONST char * +const char * Tk_SetAppName( - Tk_Window tkwin, /* Token for any window in the application - * to be named: it is just used to identify - * the application and the display. */ - CONST char *name) /* The name that will be used to - * refer to the interpreter in later - * "send" commands. Must be globally - * unique. */ + Tk_Window tkwin, /* Token for any window in the application to + * be named: it is just used to identify the + * application and the display. */ + const char *name) /* The name that will be used to refer to the + * interpreter in later "send" commands. Must + * be globally unique. */ { TkWindow *winPtr = (TkWindow *) tkwin; Tcl_Interp *interp = winPtr->mainPtr->interp; @@ -227,9 +221,9 @@ Tk_SetAppName( } /* - * See if the application is already registered; if so, remove its - * current name from the registry. The deletion of the command - * will take care of disposing of this entry. + * See if the application is already registered; if so, remove its current + * name from the registry. The deletion of the command will take care of + * disposing of this entry. */ for (riPtr = interpListPtr, prevPtr = NULL; riPtr != NULL; @@ -245,10 +239,9 @@ Tk_SetAppName( } /* - * Pick a name to use for the application. Use "name" if it's not - * already in use. Otherwise add a suffix such as " #2", trying - * larger and larger numbers until we eventually find one that is - * unique. + * Pick a name to use for the application. Use "name" if it's not already + * in use. Otherwise add a suffix such as " #2", trying larger and larger + * numbers until we eventually find one that is unique. */ actualName = name; @@ -261,7 +254,7 @@ Tk_SetAppName( Tcl_IncrRefCount(resultObjPtr); for (i = 0; ; ) { result = Tcl_ListObjIndex(NULL, resultObjPtr, i, &interpNamePtr); - if (interpNamePtr == NULL) { + if (result != TCL_OK || interpNamePtr == NULL) { break; } interpName = Tcl_GetString(interpNamePtr); @@ -299,8 +292,7 @@ Tk_SetAppName( * TODO: DeleteProc */ - Tcl_CreateObjCommand(interp, "send", Tk_SendObjCmd, - (ClientData) riPtr, NULL); + Tcl_CreateObjCommand(interp, "send", Tk_SendObjCmd, riPtr, NULL); if (Tcl_IsSafe(interp)) { Tcl_HideCommand(interp, "send", "send"); } @@ -314,8 +306,8 @@ Tk_SetAppName( * * Tk_SendObjCmd -- * - * This procedure is invoked to process the "send" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "send" Tcl command. See the + * user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -331,14 +323,14 @@ Tk_SendObjCmd( ClientData clientData, /* Used only for deletion */ Tcl_Interp *interp, /* The interp we are sending from */ int objc, /* Number of arguments */ - Tcl_Obj *CONST objv[]) /* The arguments */ + Tcl_Obj *const objv[]) /* The arguments */ { const char *sendOptions[] = {"-async", "-displayof", "-", NULL}; char *stringRep, *destName; - int async = 0; + /*int async = 0;*/ int i, index, firstArg; RegisteredInterp *riPtr; - Tcl_Obj *resultPtr, *listObjPtr; + Tcl_Obj *listObjPtr; int result = TCL_OK; for (i = 1; i < (objc - 1); ) { @@ -349,7 +341,7 @@ Tk_SendObjCmd( return TCL_ERROR; } if (index == 0) { - async = 1; + /*async = 1;*/ i++; } else if (index == 1) { i += 2; @@ -363,21 +355,18 @@ Tk_SendObjCmd( if (objc < (i + 2)) { Tcl_WrongNumArgs(interp, 1, objv, - "?options? interpName arg ?arg ...?"); + "?-option value ...? interpName arg ?arg ...?"); return TCL_ERROR; } destName = Tcl_GetString(objv[i]); firstArg = i + 1; - resultPtr = Tcl_GetObjResult(interp); - /* - * See if the target interpreter is local. If so, execute - * the command directly without going through the DDE server. - * The only tricky thing is passing the result from the target - * interpreter to the invoking interpreter. Watch out: they - * could be the same! + * See if the target interpreter is local. If so, execute the command + * directly without going through the DDE server. The only tricky thing is + * passing the result from the target interpreter to the invoking + * interpreter. Watch out: they could be the same! */ for (riPtr = interpListPtr; (riPtr != NULL) @@ -385,29 +374,29 @@ Tk_SendObjCmd( /* * Empty loop body. */ - } if (riPtr != NULL) { /* - * This command is to a local interp. No need to go through - * the server. + * This command is to a local interp. No need to go through the + * server. */ Tcl_Interp *localInterp; - Tcl_Preserve((ClientData) riPtr); + Tcl_Preserve(riPtr); localInterp = riPtr->interp; - Tcl_Preserve((ClientData) localInterp); + Tcl_Preserve(localInterp); if (firstArg == (objc - 1)) { /* - * This might be one of those cases where the new - * parser is faster. + * This might be one of those cases where the new parser is + * faster. */ - result = Tcl_EvalObjEx(localInterp, objv[firstArg], TCL_EVAL_DIRECT); + result = Tcl_EvalObjEx(localInterp, objv[firstArg], + TCL_EVAL_DIRECT); } else { - listObjPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL); + listObjPtr = Tcl_NewListObj(0, NULL); for (i = firstArg; i < objc; i++) { Tcl_ListObjAppendList(interp, listObjPtr, objv[i]); } @@ -423,9 +412,9 @@ Tk_SendObjCmd( * An error occurred, so transfer error information from the * destination interpreter back to our interpreter. Must clear * interp's result before calling Tcl_AddErrorInfo, since - * Tcl_AddErrorInfo will store the interp's result in errorInfo - * before appending riPtr's $errorInfo; we've already got - * everything we need in riPtr's $errorInfo. + * Tcl_AddErrorInfo will store the interp's result in + * errorInfo before appending riPtr's $errorInfo; we've + * already got everything we need in riPtr's $errorInfo. */ Tcl_ResetResult(interp); @@ -437,12 +426,12 @@ Tk_SendObjCmd( } Tcl_SetObjResult(interp, Tcl_GetObjResult(localInterp)); } - Tcl_Release((ClientData) riPtr); - Tcl_Release((ClientData) localInterp); + Tcl_Release(riPtr); + Tcl_Release(localInterp); } else { /* - * TODO: This is a non-local request. Send the script to the server and - * poll it for a result. + * TODO: This is a non-local request. Send the script to the server + * and poll it for a result. */ } @@ -454,15 +443,14 @@ Tk_SendObjCmd( * * TkGetInterpNames -- * - * This procedure is invoked to fetch a list of all the - * interpreter names currently registered for the display - * of a particular window. + * This procedure is invoked to fetch a list of all the interpreter names + * currently registered for the display of a particular window. * * Results: - * A standard Tcl return value. Interp->result will be set - * to hold a list of all the interpreter names defined for - * tkwin's display. If an error occurs, then TCL_ERROR - * is returned and interp->result will hold an error message. + * A standard Tcl return value. Interp->result will be set to hold a list + * of all the interpreter names defined for tkwin's display. If an error + * occurs, then TCL_ERROR is returned and interp->result will hold an + * error message. * * Side effects: * None. @@ -473,13 +461,13 @@ Tk_SendObjCmd( int TkGetInterpNames( Tcl_Interp *interp, /* Interpreter for returning a result. */ - Tk_Window tkwin) /* Window whose display is to be used - * for the lookup. */ + Tk_Window tkwin) /* Window whose display is to be used for the + * lookup. */ { Tcl_Obj *listObjPtr; RegisteredInterp *riPtr; - listObjPtr = Tcl_NewListObj(0, (Tcl_Obj **) NULL); + listObjPtr = Tcl_NewListObj(0, NULL); riPtr = interpListPtr; while (riPtr != NULL) { Tcl_ListObjAppendElement(interp, listObjPtr, @@ -496,9 +484,8 @@ TkGetInterpNames( * * SendInit -- * - * This procedure is called to initialize the - * communication channels for sending commands and - * receiving results. + * This procedure is called to initialize the communication channels for + * sending commands and receiving results. * * Results: * None. @@ -511,9 +498,18 @@ TkGetInterpNames( static int SendInit( - Tcl_Interp *interp) /* Interpreter to use for error reporting - * (no errors are ever returned, but the + Tcl_Interp *interp) /* Interpreter to use for error reporting (no + * errors are ever returned, but the * interpreter is needed anyway). */ { return TCL_OK; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXSubwindows.c b/macosx/tkMacOSXSubwindows.c index 6f31a99..c235cbf 100644 --- a/macosx/tkMacOSXSubwindows.c +++ b/macosx/tkMacOSXSubwindows.c @@ -4,8 +4,8 @@ * Implements subwindows for the macintosh version of Tk. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2008 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -25,10 +25,12 @@ * Prototypes for functions used only in this file. */ -static void MoveResizeWindow(MacDrawable *macWin); -static void GenerateConfigureNotify(TkWindow *winPtr, int includeWin); -static void UpdateOffsets(TkWindow *winPtr, int deltaX, int deltaY); -static void NotifyVisibility(TkWindow *winPtr, XEvent *eventPtr); +static void MoveResizeWindow(MacDrawable *macWin); +static void GenerateConfigureNotify(TkWindow *winPtr, + int includeWin); +static void UpdateOffsets(TkWindow *winPtr, int deltaX, + int deltaY); +static void NotifyVisibility(TkWindow *winPtr, XEvent *eventPtr); /* @@ -49,130 +51,21 @@ static void NotifyVisibility(TkWindow *winPtr, XEvent *eventPtr); void XDestroyWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window) /* Window. */ { MacDrawable *macWin = (MacDrawable *) window; /* - * Remove any dangling pointers that may exist if - * the window we are deleting is being tracked by - * the grab code. + * Remove any dangling pointers that may exist if the window we are + * deleting is being tracked by the grab code. */ TkPointerDeadWindow(macWin->winPtr); + TkMacOSXSelDeadWindow(macWin->winPtr); macWin->toplevel->referenceCount--; - if (Tk_IsTopLevel(macWin->winPtr)) { - WindowRef winRef; - /* - * We are relying on the Activate Mac OS event to pass the - * focus away from a window that is getting Destroyed to the - * Front non-floating window. BUT we don't get activate events - * when a floating window is destroyed - since the front non-floating - * window doesn't in fact get activated... So maybe we can check here - * and if we are destroying a floating window, we can pass the focus - * back to the front non-floating window... - */ - - if (macWin->grafPtr != NULL) { - TkWindow *focusPtr = TkGetFocusWin(macWin->winPtr); - if (focusPtr == NULL || (focusPtr->mainPtr->winPtr == macWin->winPtr)) { - winRef = TkMacOSXDrawableWindow(window); - if (TkpIsWindowFloating (winRef)) { - Window window; - - window = TkMacOSXGetXWindow(ActiveNonFloatingWindow()); - if (window != None) { - TkMacOSXGenerateFocusEvent(window, 1); - } - } - } - } - if (macWin->visRgn) { - CFRelease(macWin->visRgn); - } - if (macWin->aboveVisRgn) { - CFRelease(macWin->aboveVisRgn); - } - - /* - * Delete the Mac window and remove it from the windowTable. - * The window could be NULL if the window was never mapped. - * However, we don't do this for embedded windows, they don't - * go in the window list, and they do not own their portPtr's. - */ - - if (!(Tk_IsEmbedded(macWin->winPtr))) { - WindowRef winRef = TkMacOSXDrawableWindow(window); - - if (winRef) { - TkMacOSXWindowList *listPtr, *prevPtr; - WindowGroupRef group; - - if (GetWindowProperty(winRef, 'Tk ', 'TsGp', sizeof(group), - NULL, &group) == noErr) { - TkDisplay *dispPtr = TkGetDisplayList(); - ItemCount i = CountWindowGroupContents(group, - kWindowGroupContentsReturnWindows); - - while (i > 0) { - WindowRef macWin; - - ChkErr(GetIndexedWindow, group, i--, 0, &macWin); - if (macWin) { - WindowGroupRef newGroup = NULL; - Window window = TkMacOSXGetXWindow(macWin); - - if (window != None) { - TkWindow * winPtr = (TkWindow *)Tk_IdToWindow( - dispPtr->display, window); - - if (winPtr && winPtr->wmInfoPtr) { - newGroup = GetWindowGroupOfClass( - winPtr->wmInfoPtr->macClass); - } - } - if (!newGroup) { - newGroup = GetWindowGroupOfClass( - kDocumentWindowClass); - } - ChkErr(SetWindowGroup, macWin, newGroup); - } - - } - ChkErr(SetWindowGroupOwner, group, NULL); - ChkErr(ReleaseWindowGroup, group); - } - TkMacOSXUnregisterMacWindow(winRef); - DisposeWindow(winRef); - - for (listPtr = tkMacOSXWindowListPtr, prevPtr = NULL; - tkMacOSXWindowListPtr != NULL; - prevPtr = listPtr, listPtr = listPtr->nextPtr) { - if (listPtr->winPtr == macWin->winPtr) { - if (prevPtr == NULL) { - tkMacOSXWindowListPtr = listPtr->nextPtr; - } else { - prevPtr->nextPtr = listPtr->nextPtr; - } - ckfree((char *) listPtr); - break; - } - } - } - } - - macWin->grafPtr = NULL; - - /* - * Delay deletion of a toplevel data structure untill all - * children have been deleted. - */ - if (macWin->toplevel->referenceCount == 0) { - ckfree((char *) macWin->toplevel); - } - } else { + if (!Tk_IsTopLevel(macWin->winPtr)) { TkMacOSXInvalidateWindow(macWin, TK_PARENT_WINDOW); if (macWin->winPtr->parentPtr != NULL) { TkMacOSXInvalClipRgns((Tk_Window) macWin->winPtr->parentPtr); @@ -183,11 +76,34 @@ XDestroyWindow( if (macWin->aboveVisRgn) { CFRelease(macWin->aboveVisRgn); } + if (macWin->drawRgn) { + CFRelease(macWin->drawRgn); + } if (macWin->toplevel->referenceCount == 0) { ckfree((char *) macWin->toplevel); } ckfree((char *) macWin); + return; + } + if (macWin->visRgn) { + CFRelease(macWin->visRgn); + } + if (macWin->aboveVisRgn) { + CFRelease(macWin->aboveVisRgn); + } + if (macWin->drawRgn) { + CFRelease(macWin->drawRgn); + } + macWin->view = nil; + + /* + * Delay deletion of a toplevel data structure untill all children have + * been deleted. + */ + + if (macWin->toplevel->referenceCount == 0) { + ckfree((char *) macWin->toplevel); } } @@ -196,8 +112,8 @@ XDestroyWindow( * * XMapWindow -- * - * Map the given X Window to the screen. See X window documentation - * for more details. + * Map the given X Window to the screen. See X window documentation for + * more details. * * Results: * None. @@ -210,19 +126,20 @@ XDestroyWindow( void XMapWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window) /* Window. */ { MacDrawable *macWin = (MacDrawable *) window; XEvent event; /* - * Under certain situations it's possible for this function to be - * called before the toplevel window it's associated with has actually - * been mapped. In that case we need to create the real Macintosh - * window now as this function as well as other X functions assume that - * the portPtr is valid. + * Under certain situations it's possible for this function to be called + * before the toplevel window it's associated with has actually been + * mapped. In that case we need to create the real Macintosh window now as + * this function as well as other X functions assume that the portPtr is + * valid. */ + if (!TkMacOSXHostToplevelExists(macWin->toplevel->winPtr)) { TkMacOSXMakeRealWindowExist(macWin->toplevel->winPtr); } @@ -231,28 +148,19 @@ XMapWindow( macWin->winPtr->flags |= TK_MAPPED; if (Tk_IsTopLevel(macWin->winPtr)) { if (!Tk_IsEmbedded(macWin->winPtr)) { - /* - * XXX This should be ShowSheetWindow for kSheetWindowClass - * XXX windows that have a wmPtr->master parent set. - */ - WindowRef wRef = TkMacOSXDrawableWindow(window); - - if ((macWin->winPtr->wmInfoPtr->macClass == kSheetWindowClass) - && (macWin->winPtr->wmInfoPtr->master != None)) { - ShowSheetWindow(wRef, TkMacOSXDrawableWindow( - macWin->winPtr->wmInfoPtr->master)); - } else { - ShowWindow(wRef); - } + NSWindow *win = TkMacOSXDrawableWindow(window); + + [win makeKeyAndOrderFront:NSApp]; + [win windowRef]; + TkMacOSXApplyWindowAttributes(macWin->winPtr, win); } TkMacOSXInvalClipRgns((Tk_Window) macWin->winPtr); /* - * We only need to send the MapNotify event - * for toplevel windows. + * We only need to send the MapNotify event for toplevel windows. */ - event.xany.serial = display->request; + event.xany.serial = LastKnownRequestProcessed(display); event.xany.send_event = False; event.xany.display = display; @@ -263,7 +171,7 @@ XMapWindow( Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); } else { /* - * Generate damage for that area of the window + * Generate damage for that area of the window. */ TkMacOSXInvalClipRgns((Tk_Window) macWin->winPtr->parentPtr); @@ -287,7 +195,7 @@ XMapWindow( * NotifyVisibility -- * * Recursively called helper proc for XMapWindow(). - + * * Results: * None. * @@ -320,8 +228,8 @@ NotifyVisibility( * * XUnmapWindow -- * - * Unmap the given X Window to the screen. See X window - * documentation for more details. + * Unmap the given X Window to the screen. See X window documentation for + * more details. * * Results: * None. @@ -334,7 +242,7 @@ NotifyVisibility( void XUnmapWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window) /* Window. */ { MacDrawable *macWin = (MacDrawable *) window; @@ -343,28 +251,22 @@ XUnmapWindow( display->request++; macWin->winPtr->flags &= ~TK_MAPPED; if (Tk_IsTopLevel(macWin->winPtr)) { - if (!Tk_IsEmbedded(macWin->winPtr) - && macWin->winPtr->wmInfoPtr->hints.initial_state != IconicState) { - /* - * XXX This should be HideSheetWindow for kSheetWindowClass - * XXX windows that have a wmPtr->master parent set. - */ - WindowRef wref = TkMacOSXDrawableWindow(window); + if (!Tk_IsEmbedded(macWin->winPtr) && + macWin->winPtr->wmInfoPtr->hints.initial_state!=IconicState) { + NSWindow *win = TkMacOSXDrawableWindow(window); - if ((macWin->winPtr->wmInfoPtr->macClass == kSheetWindowClass) - && (macWin->winPtr->wmInfoPtr->master != None)) { - HideSheetWindow(wref); - } else { - HideWindow(wref); + if ([win isVisible]) { + [[win parentWindow] removeChildWindow:win]; + [win orderOut:NSApp]; } } TkMacOSXInvalClipRgns((Tk_Window) macWin->winPtr); /* - * We only need to send the UnmapNotify event - * for toplevel windows. + * We only need to send the UnmapNotify event for toplevel windows. */ - event.xany.serial = display->request; + + event.xany.serial = LastKnownRequestProcessed(display); event.xany.send_event = False; event.xany.display = display; @@ -388,8 +290,8 @@ XUnmapWindow( * * XResizeWindow -- * - * Resize a given X window. See X windows documentation for - * further details. + * Resize a given X window. See X windows documentation for further + * details. * * Results: * None. @@ -402,7 +304,7 @@ XUnmapWindow( void XResizeWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window, /* Window. */ unsigned int width, unsigned int height) @@ -411,15 +313,14 @@ XResizeWindow( display->request++; if (Tk_IsTopLevel(macWin->winPtr) && !Tk_IsEmbedded(macWin->winPtr)) { - WindowRef w = TkMacOSXDrawableWindow(window); + NSWindow *w = macWin->winPtr->wmInfoPtr->window; if (w) { - Rect bounds; - - ChkErr(GetWindowBounds, w, kWindowContentRgn, &bounds); - bounds.right = bounds.left + width; - bounds.bottom = bounds.top + height; - ChkErr(SetWindowBounds, w, kWindowContentRgn, &bounds); + NSRect r = [w contentRectForFrameRect:[w frame]]; + r.origin.y += r.size.height - height; + r.size.width = width; + r.size.height = height; + [w setFrame:[w frameRectForContentRect:r] display:YES]; } } else { MoveResizeWindow(macWin); @@ -445,26 +346,24 @@ XResizeWindow( void XMoveResizeWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window, /* Window. */ int x, int y, unsigned int width, unsigned int height) { - MacDrawable * macWin = (MacDrawable *) window; + MacDrawable *macWin = (MacDrawable *) window; display->request++; if (Tk_IsTopLevel(macWin->winPtr) && !Tk_IsEmbedded(macWin->winPtr)) { - WindowRef w = TkMacOSXDrawableWindow(window); + NSWindow *w = macWin->winPtr->wmInfoPtr->window; if (w) { - Rect bounds; - - bounds.left = x + macWin->winPtr->wmInfoPtr->xInParent; - bounds.right = bounds.left + width; - bounds.top = y + macWin->winPtr->wmInfoPtr->yInParent; - bounds.bottom = bounds.top + height; - ChkErr(SetWindowBounds, w, kWindowContentRgn, &bounds); + NSRect r = NSMakeRect(x + macWin->winPtr->wmInfoPtr->xInParent, + tkMacOSXZeroScreenHeight - (y + + macWin->winPtr->wmInfoPtr->yInParent + height), + width, height); + [w setFrame:[w frameRectForContentRect:r] display:YES]; } } else { MoveResizeWindow(macWin); @@ -490,19 +389,18 @@ XMoveResizeWindow( void XMoveWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window, /* Window. */ - int x, - int y) + int x, int y) { MacDrawable *macWin = (MacDrawable *) window; display->request++; if (Tk_IsTopLevel(macWin->winPtr) && !Tk_IsEmbedded(macWin->winPtr)) { - WindowRef w = TkMacOSXDrawableWindow(window); + NSWindow *w = macWin->winPtr->wmInfoPtr->window; if (w) { - ChkErr(MoveWindowStructure, w, x, y); + [w setFrameTopLeftPoint:NSMakePoint(x, tkMacOSXZeroScreenHeight - y)]; } } else { MoveResizeWindow(macWin); @@ -531,11 +429,12 @@ MoveResizeWindow( { int deltaX = 0, deltaY = 0, parentBorderwidth = 0; MacDrawable *macParent = NULL; - CGrafPtr destPort = TkMacOSXGetDrawablePort((Drawable) macWin); + NSWindow *macWindow = TkMacOSXDrawableWindow((Drawable) macWin); /* * Find the Parent window, for an embedded window it will be its container. */ + if (Tk_IsEmbedded(macWin->winPtr)) { TkWindow *contWinPtr = TkpGetOtherWindow(macWin->winPtr); @@ -543,10 +442,10 @@ MoveResizeWindow( macParent = contWinPtr->privatePtr; } else { /* - * Here we should handle out of process embedding. - * At this point, we are assuming that the changes.x,y is not - * maintained, if you need the info get it from Tk_GetRootCoords, - * and that the toplevel sits at 0,0 when it is drawn. + * Here we should handle out of process embedding. At this point, + * we are assuming that the changes.x,y is not maintained, if you + * need the info get it from Tk_GetRootCoords, and that the + * toplevel sits at 0,0 when it is drawn. */ } } else { @@ -557,20 +456,21 @@ MoveResizeWindow( macParent = macWin->winPtr->parentPtr->privatePtr; parentBorderwidth = macWin->winPtr->parentPtr->changes.border_width; } + if (macParent) { deltaX = macParent->xOff + parentBorderwidth + macWin->winPtr->changes.x - macWin->xOff; deltaY = macParent->yOff + parentBorderwidth + macWin->winPtr->changes.y - macWin->yOff; } - if (destPort) { + if (macWindow) { TkMacOSXInvalidateWindow(macWin, TK_PARENT_WINDOW); if (macParent) { TkMacOSXInvalClipRgns((Tk_Window) macParent->winPtr); } } UpdateOffsets(macWin->winPtr, deltaX, deltaY); - if (destPort) { + if (macWindow) { TkMacOSXInvalidateWindow(macWin, TK_PARENT_WINDOW); } GenerateConfigureNotify(macWin->winPtr, 0); @@ -581,10 +481,9 @@ MoveResizeWindow( * * GenerateConfigureNotify -- * - * Generates ConfigureNotify events for all the child widgets - * of the widget passed in the winPtr parameter. If includeWin - * is true, also generates ConfigureNotify event for the - * widget itself. + * Generates ConfigureNotify events for all the child widgets of the + * widget passed in the winPtr parameter. If includeWin is true, also + * generates ConfigureNotify event for the widget itself. * * Results: * None. @@ -596,12 +495,14 @@ MoveResizeWindow( */ static void -GenerateConfigureNotify (TkWindow *winPtr, int includeWin) +GenerateConfigureNotify( + TkWindow *winPtr, + int includeWin) { TkWindow *childPtr; for (childPtr = winPtr->childList; childPtr != NULL; - childPtr = childPtr->nextPtr) { + childPtr = childPtr->nextPtr) { if (!Tk_IsMapped(childPtr) || Tk_IsTopLevel(childPtr)) { continue; } @@ -630,7 +531,7 @@ GenerateConfigureNotify (TkWindow *winPtr, int includeWin) void XRaiseWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window) /* Window. */ { MacDrawable *macWin = (MacDrawable *) window; @@ -664,7 +565,7 @@ XRaiseWindow( void XLowerWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window window) /* Window. */ { MacDrawable *macWin = (MacDrawable *) window; @@ -685,26 +586,25 @@ XLowerWindow( * * XConfigureWindow -- * - * Change the size, position, stacking, or border of the specified - * window. + * Change the size, position, stacking, or border of the specified window. * * Results: * None. * * Side effects: - * Changes the attributes of the specified window. Note that we - * ignore the passed in values and use the values stored in the - * TkWindow data structure. + * Changes the attributes of the specified window. Note that we ignore the + * passed in values and use the values stored in the TkWindow data + * structure. * *---------------------------------------------------------------------- */ void XConfigureWindow( - Display* display, /* Display. */ + Display *display, /* Display. */ Window w, /* Window. */ unsigned int value_mask, - XWindowChanges* values) + XWindowChanges *values) { MacDrawable *macWin = (MacDrawable *) w; TkWindow *winPtr = macWin->winPtr; @@ -721,20 +621,24 @@ XConfigureWindow( } /* - * Change the stacking order of the window. Tk actuall keeps all - * the information we need for stacking order. All we need to do - * is make sure the clipping regions get updated and generate damage - * that will ensure things get drawn correctly. + * Change the stacking order of the window. Tk actually keeps all the + * information we need for stacking order. All we need to do is make sure + * the clipping regions get updated and generate damage that will ensure + * things get drawn correctly. */ if (value_mask & CWStackMode) { + NSView *view = TkMacOSXDrawableView(macWin); Rect bounds; - WindowRef wRef = TkMacOSXDrawableWindow(w); + NSRect r; - if (wRef) { + if (view) { TkMacOSXInvalClipRgns((Tk_Window) winPtr->parentPtr); TkMacOSXWinBounds(winPtr, &bounds); - InvalWindowRect(wRef, &bounds); + r = NSMakeRect(bounds.left, + [view bounds].size.height - bounds.bottom, + bounds.right - bounds.left, bounds.bottom - bounds.top); + [view setNeedsDisplayInRect:r]; } } @@ -747,10 +651,10 @@ XConfigureWindow( * * TkMacOSXUpdateClipRgn -- * - * This function updates the cliping regions for a given window - * and all of its children. Once updated the TK_CLIP_INVALID flag - * in the subwindow data structure is unset. The TK_CLIP_INVALID - * flag should always be unset before any drawing is attempted. + * This function updates the cliping regions for a given window and all of + * its children. Once updated the TK_CLIP_INVALID flag in the subwindow + * data structure is unset. The TK_CLIP_INVALID flag should always be + * unset before any drawing is attempted. * * Results: * None. @@ -774,6 +678,9 @@ TkMacOSXUpdateClipRgn( if (macWin && macWin->flags & TK_CLIP_INVALID) { TkWindow *win2Ptr; +#ifdef TK_MAC_DEBUG_CLIP_REGIONS + TkMacOSXDbgMsg("%s", winPtr->pathName); +#endif if (Tk_IsMapped(winPtr)) { int rgnChanged = 0; CGRect bounds; @@ -787,24 +694,21 @@ TkMacOSXUpdateClipRgn( rgn = TkMacOSXHIShapeCreateMutableWithRect(&bounds); /* - * Clip away the area of any windows that may obscure this - * window. + * Clip away the area of any windows that may obscure this window. * For a non-toplevel window, first, clip to the parents visible - * clip region. - * Second, clip away any siblings that are higher in the - * stacking order. - * For an embedded toplevel, just clip to the container's visible - * clip region. Remember, we only allow one contained window - * in a frame, and don't support any other widgets in the frame - * either. This is not currently enforced, however. + * clip region. Second, clip away any siblings that are higher in + * the stacking order. For an embedded toplevel, just clip to the + * container's visible clip region. Remember, we only allow one + * contained window in a frame, and don't support any other widgets + * in the frame either. This is not currently enforced, however. */ if (!Tk_IsTopLevel(winPtr)) { TkMacOSXUpdateClipRgn(winPtr->parentPtr); if (winPtr->parentPtr) { ChkErr(HIShapeIntersect, - winPtr->parentPtr->privatePtr->aboveVisRgn, rgn, - rgn); + winPtr->parentPtr->privatePtr->aboveVisRgn, + rgn, rgn); } win2Ptr = winPtr; while ((win2Ptr = win2Ptr->nextPtr)) { @@ -821,14 +725,14 @@ TkMacOSXUpdateClipRgn( ChkErr(HIShapeIntersect, win2Ptr->privatePtr->aboveVisRgn, rgn, rgn); } else if (tkMacOSXEmbedHandler != NULL) { + TkRegion r = TkCreateRegion(); HIShapeRef visRgn; - TkMacOSXCheckTmpQdRgnEmpty(); - tkMacOSXEmbedHandler->getClipProc((Tk_Window) winPtr, - tkMacOSXtmpQdRgn); - visRgn = HIShapeCreateWithQDRgn(tkMacOSXtmpQdRgn); - SetEmptyRgn(tkMacOSXtmpQdRgn); + tkMacOSXEmbedHandler->getClipProc((Tk_Window) winPtr, r); + visRgn = TkMacOSXGetNativeRegion(r); ChkErr(HIShapeIntersect, visRgn, rgn, rgn); + CFRelease(visRgn); + TkpReleaseRegion(r); } /* @@ -836,26 +740,23 @@ TkMacOSXUpdateClipRgn( */ } else if (winPtr->wmInfoPtr->attributes & kWindowResizableAttribute) { - HIViewRef growBoxView; - OSErr err = HIViewFindByID(HIViewGetRoot( - TkMacOSXDrawableWindow(winPtr->window)), - kHIViewWindowGrowBoxID, &growBoxView); - - if (err == noErr) { - ChkErr(HIViewGetFrame, growBoxView, &bounds); - bounds = CGRectOffset(bounds, - -winPtr->wmInfoPtr->xInParent, - -winPtr->wmInfoPtr->yInParent); + NSWindow *w = TkMacOSXDrawableWindow(winPtr->window); + + if (w) { + bounds = NSRectToCGRect([w _growBoxRect]); + bounds.origin.y = [w contentRectForFrameRect: + [w frame]].size.height - bounds.size.height - + bounds.origin.y; ChkErr(TkMacOSHIShapeDifferenceWithRect, rgn, &bounds); } } macWin->aboveVisRgn = HIShapeCreateCopy(rgn); /* - * The final clip region is the aboveVis region (or visible - * region) minus all the children of this window. - * If the window is a container, we must also subtract the region - * of the embedded window. + * The final clip region is the aboveVis region (or visible region) + * minus all the children of this window. If the window is a + * container, we must also subtract the region of the embedded + * window. */ win2Ptr = winPtr->childList; @@ -884,6 +785,7 @@ TkMacOSXUpdateClipRgn( * TODO: Here we should handle out of process embedding. */ } + if (rgnChanged) { HIShapeRef diffRgn = HIShapeCreateDifference( macWin->aboveVisRgn, rgn); @@ -915,10 +817,6 @@ TkMacOSXUpdateClipRgn( macWin->visRgn = HIShapeCreateCopy(macWin->aboveVisRgn); } macWin->flags &= ~TK_CLIP_INVALID; - -#ifdef TK_MAC_DEBUG_CLIP_REGIONS - TkMacOSXDebugFlashRegion((Drawable) macWin, macWin->visRgn); -#endif /* TK_MAC_DEBUG_CLIP_REGIONS */ } } @@ -927,8 +825,9 @@ TkMacOSXUpdateClipRgn( * * TkMacOSXVisableClipRgn -- * - * This function returnd the Macintosh cliping region for the - * given window. A NULL Rgn means the window is not visible. + * This function returns the Macintosh cliping region for the given + * window. The caller is responsible for disposing of the returned + * region via TkDestroyRegion(). * * Results: * The region. @@ -939,20 +838,63 @@ TkMacOSXUpdateClipRgn( *---------------------------------------------------------------------- */ -RgnHandle +TkRegion TkMacOSXVisableClipRgn( TkWindow *winPtr) { - static RgnHandle visQdRgn = NULL; - - if (visQdRgn == NULL) { - visQdRgn = NewRgn(); - } if (winPtr->privatePtr->flags & TK_CLIP_INVALID) { TkMacOSXUpdateClipRgn(winPtr); } - ChkErr(HIShapeGetAsQDRgn, winPtr->privatePtr->visRgn, visQdRgn); - return visQdRgn; + return (TkRegion)HIShapeCreateMutableCopy(winPtr->privatePtr->visRgn); +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXInvalidateViewRegion -- + * + * This function invalidates the given region of a view. + * + * Results: + * None. + * + * Side effects: + * Damage is created. + * + *---------------------------------------------------------------------- + */ + +static OSStatus +InvalViewRect(int msg, HIShapeRef rgn, const CGRect *rect, void *ref) { + static CGAffineTransform t; + NSView *view = ref; + + if (!view) { + return paramErr; + } + switch (msg) { + case kHIShapeEnumerateInit: + t = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, + NSHeight([view bounds])); + break; + case kHIShapeEnumerateRect: + [view setNeedsDisplayInRect:NSRectFromCGRect( + CGRectApplyAffineTransform(*rect, t))]; + break; + } + return noErr; +} + +void +TkMacOSXInvalidateViewRegion( + NSView *view, + HIShapeRef rgn) +{ + if (view && !HIShapeIsEmpty(rgn)) { + ChkErr(HIShapeEnumerate, rgn, + kHIShapeParseFromBottom|kHIShapeParseFromLeft, + InvalViewRect, view); + } } /* @@ -960,8 +902,7 @@ TkMacOSXVisableClipRgn( * * TkMacOSXInvalidateWindow -- * - * This function makes the window as invalid will generate damage - * for the window. + * This function invalidates a window and (optionally) its children. * * Results: * None. @@ -974,38 +915,29 @@ TkMacOSXVisableClipRgn( void TkMacOSXInvalidateWindow( - MacDrawable *macWin, /* Make window that's causing damage. */ + MacDrawable *macWin, /* Window to be invalidated. */ int flag) /* Should be TK_WINDOW_ONLY or * TK_PARENT_WINDOW */ { - WindowRef windowRef; - HIShapeRef rgn; - - windowRef = TkMacOSXDrawableWindow((Drawable)macWin); +#ifdef TK_MAC_DEBUG_CLIP_REGIONS + TkMacOSXDbgMsg("%s", winPtr->pathName); +#endif if (macWin->flags & TK_CLIP_INVALID) { TkMacOSXUpdateClipRgn(macWin->winPtr); } - rgn = (flag == TK_WINDOW_ONLY) ? macWin->visRgn : macWin->aboveVisRgn; - if (!HIShapeIsEmpty(rgn)) { - TkMacOSXCheckTmpQdRgnEmpty(); - ChkErr(HIShapeGetAsQDRgn, rgn, tkMacOSXtmpQdRgn); - InvalWindowRgn(windowRef, tkMacOSXtmpQdRgn); - SetEmptyRgn(tkMacOSXtmpQdRgn); - } -#ifdef TK_MAC_DEBUG_CLIP_REGIONS - TkMacOSXDebugFlashRegion((Drawable) macWin, rgn); -#endif /* TK_MAC_DEBUG_CLIP_REGIONS */ + TkMacOSXInvalidateViewRegion(TkMacOSXDrawableView(macWin), + (flag == TK_WINDOW_ONLY) ? macWin->visRgn : macWin->aboveVisRgn); } /* *---------------------------------------------------------------------- * - * TkMacOSXGetDrawableWindow -- + * TkMacOSXDrawableWindow -- * - * This function returns the WindowRef for a given X drawable. + * This function returns the NSWindow for a given X drawable. * * Results: - * A WindowRef, or NULL for off screen pixmaps. + * A NSWindow, or nil for off screen pixmaps. * * Side effects: * None. @@ -1013,20 +945,37 @@ TkMacOSXInvalidateWindow( *---------------------------------------------------------------------- */ -WindowRef +NSWindow* TkMacOSXDrawableWindow( Drawable drawable) { MacDrawable *macWin = (MacDrawable *) drawable; - WindowRef result = NULL; + NSWindow *result = nil; if (!macWin || macWin->flags & TK_IS_PIXMAP) { - result = NULL; - } else { - result = GetWindowFromPort(TkMacOSXGetDrawablePort(drawable)); + result = nil; + } else if (macWin->toplevel && macWin->toplevel->winPtr && + macWin->toplevel->winPtr->wmInfoPtr && + macWin->toplevel->winPtr->wmInfoPtr->window) { + result = macWin->toplevel->winPtr->wmInfoPtr->window; + } else if (macWin->winPtr && macWin->winPtr->wmInfoPtr && + macWin->winPtr->wmInfoPtr->window) { + result = macWin->winPtr->wmInfoPtr->window; + } else if (macWin->toplevel && (macWin->toplevel->flags & TK_EMBEDDED)) { + TkWindow *contWinPtr = TkpGetOtherWindow(macWin->toplevel->winPtr); + if (contWinPtr) { + result = TkMacOSXDrawableWindow((Drawable) contWinPtr->privatePtr); + } } return result; } + +void * +TkMacOSXDrawable( + Drawable drawable) +{ + return TkMacOSXDrawableWindow(drawable); +} /* *---------------------------------------------------------------------- @@ -1036,7 +985,7 @@ TkMacOSXDrawableWindow( * This function returns the Graphics Port for a given X drawable. * * Results: - * A CGrafPort . Either an off screen pixmap or a Window. + * NULL. * * Side effects: * None. @@ -1044,73 +993,48 @@ TkMacOSXDrawableWindow( *---------------------------------------------------------------------- */ -CGrafPtr +void * TkMacOSXGetDrawablePort( Drawable drawable) { - MacDrawable *macWin = (MacDrawable *) drawable; - CGrafPtr resultPort = NULL; - - if (macWin) { - if (macWin->toplevel) { - /* - * If the Drawable is in an embedded window, use the Port of its - * container. - * - * TRICKY POINT: we can have cases when a toplevel is being - * destroyed where the winPtr for the toplevel has been freed, but - * the children are not all the way destroyed. The children will - * call this function as they are being destroyed, but - * Tk_IsEmbedded will return garbage. So we check the copy of the - * TK_EMBEDDED flag we put into the toplevel's macWin flags. - */ - - if (macWin->toplevel->flags & TK_EMBEDDED) { - TkWindow *contWinPtr; - - contWinPtr = TkpGetOtherWindow(macWin->toplevel->winPtr); - - if (contWinPtr != NULL) { - resultPort = TkMacOSXGetDrawablePort( - (Drawable) contWinPtr->privatePtr); - } else if (tkMacOSXEmbedHandler != NULL) { - resultPort = tkMacOSXEmbedHandler->getPortProc( - (Tk_Window) macWin->winPtr); - } - - if (!resultPort) { - /* - * FIXME: So far as I can tell, the only time that this - * happens is when we are tearing down an embedded child - * interpreter, and most of the time, this is harmless... - * However, we really need to find why the embedding loses. - */ - TkMacOSXDbgMsg("Couldn't find container"); - } + return NULL; +} + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXDrawableView -- + * + * This function returns the NSView for a given X drawable. + * + * Results: + * A NSView* or nil. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ - /* - * TODO: Here we should handle out of process embedding. - */ - } else { - resultPort = macWin->toplevel->grafPtr; - } - } else { - if ((macWin->flags & TK_IS_PIXMAP) && !macWin->grafPtr) { - Rect bounds = {0, 0, macWin->size.height, macWin->size.width}; - - ChkErr(NewGWorld, &macWin->grafPtr, - (macWin->flags & TK_IS_BW_PIXMAP) ? 1 : 0, - &bounds, NULL, NULL, 0 -#ifdef __LITTLE_ENDIAN__ - | kNativeEndianPixMap -#endif - ); - } - resultPort = macWin->grafPtr; +NSView* +TkMacOSXDrawableView( + MacDrawable *macWin) +{ + NSView *result = nil; + + if (!macWin) { + result = nil; + } else if (!macWin->toplevel) { + result = macWin->view; + } else if (!(macWin->toplevel->flags & TK_EMBEDDED)) { + result = macWin->toplevel->view; + } else { + TkWindow *contWinPtr = TkpGetOtherWindow(macWin->toplevel->winPtr); + if (contWinPtr) { + result = TkMacOSXDrawableView(contWinPtr->privatePtr); } } - - return resultPort; + return result; } /* @@ -1118,10 +1042,10 @@ TkMacOSXGetDrawablePort( * * TkMacOSXGetRootControl -- * - * This function returns the Root Control for a given X drawable. + * This function returns the NSView for a given X drawable. * * Results: - * A ControlRef . + * A NSView* . * * Side effects: * None. @@ -1129,34 +1053,15 @@ TkMacOSXGetDrawablePort( *---------------------------------------------------------------------- */ -ControlRef +void * TkMacOSXGetRootControl( Drawable drawable) { /* * will probably need to fix this up for embedding */ - MacDrawable *macWin = (MacDrawable *) drawable; - ControlRef result = NULL; - - if (macWin == NULL) { - return NULL; - } - if (!(macWin->toplevel->flags & TK_EMBEDDED)) { - return macWin->toplevel->rootControl; - } else { - TkWindow *contWinPtr; - contWinPtr = TkpGetOtherWindow(macWin->toplevel->winPtr); - - if (contWinPtr != NULL) { - result = TkMacOSXGetRootControl( - (Drawable) contWinPtr->privatePtr); - } else if (tkMacOSXEmbedHandler != NULL) { - result = NULL; - } - } - return result; + return TkMacOSXDrawableView((MacDrawable *) drawable); } /* @@ -1164,17 +1069,17 @@ TkMacOSXGetRootControl( * * TkMacOSXInvalClipRgns -- * - * This function invalidates the clipping regions for a given - * window and all of its children. This function should be - * called whenever changes are made to subwindows that would - * affect the size or position of windows. + * This function invalidates the clipping regions for a given window and + * all of its children. This function should be called whenever changes + * are made to subwindows that would affect the size or position of + * windows. * * Results: * None. * * Side effects: - * The cliping regions for the window and its children are - * mark invalid. (Make sure they are valid before drawing.) + * The cliping regions for the window and its children are mark invalid. + * (Make sure they are valid before drawing.) * *---------------------------------------------------------------------- */ @@ -1188,9 +1093,10 @@ TkMacOSXInvalClipRgns( MacDrawable *macWin = winPtr->privatePtr; /* - * If already marked we can stop because all - * decendants will also already be marked. + * If already marked we can stop because all descendants will also already + * be marked. */ + if (!macWin || macWin->flags & TK_CLIP_INVALID) { return; } @@ -1204,11 +1110,16 @@ TkMacOSXInvalClipRgns( CFRelease(macWin->aboveVisRgn); macWin->aboveVisRgn = NULL; } + if (macWin->drawRgn) { + CFRelease(macWin->drawRgn); + macWin->drawRgn = NULL; + } /* - * Invalidate clip regions for all children & - * their decendants - unless the child is a toplevel. + * Invalidate clip regions for all children & their descendants, unless the + * child is a toplevel. */ + childPtr = winPtr->childList; while (childPtr) { if (!Tk_IsTopLevel(childPtr)) { @@ -1218,7 +1129,7 @@ TkMacOSXInvalClipRgns( } /* - * Also, if the window is a container, mark its embedded window + * Also, if the window is a container, mark its embedded window. */ if (Tk_IsContainer(winPtr)) { @@ -1239,10 +1150,10 @@ TkMacOSXInvalClipRgns( * * TkMacOSXWinBounds -- * - * Given a Tk window this function determines the windows - * bounds in relation to the Macintosh window's coordinate - * system. This is also the same coordinate system as the - * Tk toplevel window in which this window is contained. + * Given a Tk window this function determines the windows bounds in + * relation to the Macintosh window's coordinate system. This is also the + * same coordinate system as the Tk toplevel window in which this window + * is contained. * * Results: * None. @@ -1256,12 +1167,13 @@ TkMacOSXInvalClipRgns( void TkMacOSXWinBounds( TkWindow *winPtr, - Rect *bounds) + void *bounds) { - bounds->left = winPtr->privatePtr->xOff; - bounds->top = winPtr->privatePtr->yOff; - bounds->right = bounds->left + winPtr->changes.width; - bounds->bottom = bounds->top + winPtr->changes.height; + Rect *b = (Rect *)bounds; + b->left = winPtr->privatePtr->xOff; + b->top = winPtr->privatePtr->yOff; + b->right = b->left + winPtr->changes.width; + b->bottom = b->top + winPtr->changes.height; } /* @@ -1269,10 +1181,10 @@ TkMacOSXWinBounds( * * TkMacOSXWinCGBounds -- * - * Given a Tk window this function determines the windows - * bounds in relation to the Macintosh window's coordinate - * system. This is also the same coordinate system as the - * Tk toplevel window in which this window is contained. + * Given a Tk window this function determines the windows bounds in + * relation to the Macintosh window's coordinate system. This is also the + * same coordinate system as the Tk toplevel window in which this window + * is contained. * * Results: * None. @@ -1299,15 +1211,15 @@ TkMacOSXWinCGBounds( * * UpdateOffsets -- * - * Updates the X & Y offsets of the given TkWindow from the - * TopLevel it is a decendant of. + * Updates the X & Y offsets of the given TkWindow from the TopLevel it is + * a decendant of. * * Results: * None. * * Side effects: - * The xOff & yOff fields for the Mac window datastructure - * is updated to the proper offset. + * The xOff & yOff fields for the Mac window datastructure is updated to + * the proper offset. * *---------------------------------------------------------------------- */ @@ -1322,11 +1234,12 @@ UpdateOffsets( if (winPtr->privatePtr == NULL) { /* - * We haven't called Tk_MakeWindowExist for this window yet. The - * offset information will be postponed and calulated at that - * time. (This will usually only happen when a mapped parent is - * being moved but has child windows that have yet to be mapped.) + * We haven't called Tk_MakeWindowExist for this window yet. The offset + * information will be postponed and calulated at that time. (This will + * usually only happen when a mapped parent is being moved but has + * child windows that have yet to be mapped.) */ + return; } @@ -1388,23 +1301,13 @@ Tk_GetPixmap( macPix->yOff = 0; macPix->visRgn = NULL; macPix->aboveVisRgn = NULL; - macPix->drawRect = CGRectNull; + macPix->drawRgn = NULL; macPix->referenceCount = 0; macPix->toplevel = NULL; macPix->flags = TK_IS_PIXMAP | (depth == 1 ? TK_IS_BW_PIXMAP : 0); - macPix->grafPtr = NULL; + macPix->view = nil; macPix->context = NULL; macPix->size = CGSizeMake(width, height); - { - Rect bounds = {0, 0, height, width}; - - ChkErr(NewGWorld, &macPix->grafPtr, depth == 1 ? 1 : 0, &bounds, NULL, - NULL, 0 -#ifdef __LITTLE_ENDIAN__ - | kNativeEndianPixMap -#endif - ); - } return (Pixmap) macPix; } @@ -1433,11 +1336,22 @@ Tk_FreePixmap( MacDrawable *macPix = (MacDrawable *) pixmap; display->request++; - if (macPix->grafPtr) { - DisposeGWorld(macPix->grafPtr); - } if (macPix->context) { - TkMacOSXDbgMsg("Cannot free CG backed Pixmap"); + char *data = CGBitmapContextGetData(macPix->context); + + if (data) { + ckfree(data); + } + CFRelease(macPix->context); } ckfree((char *) macPix); } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXTest.c b/macosx/tkMacOSXTest.c index 76fc150..0e43785 100644 --- a/macosx/tkMacOSXTest.c +++ b/macosx/tkMacOSXTest.c @@ -5,14 +5,14 @@ * the Macintosh platform. * * Copyright (c) 1996 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ -#include "tkMacOSXInt.h" +#include "tkMacOSXPrivate.h" /* * Forward declarations of procedures defined later in this file: @@ -79,3 +79,12 @@ DebuggerCmd( Debugger(); return TCL_OK; } + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXWindowEvent.c b/macosx/tkMacOSXWindowEvent.c index 4d2f477..87504b3 100644 --- a/macosx/tkMacOSXWindowEvent.c +++ b/macosx/tkMacOSXWindowEvent.c @@ -1,58 +1,14 @@ /* * tkMacOSXWindowEvent.c -- * - * This file defines the routines for both creating and handling - * Window Manager class events for Tk. + * This file defines the routines for both creating and handling Window + * Manager class events for Tk. * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. */ #include "tkMacOSXPrivate.h" @@ -62,7 +18,8 @@ /* #ifdef TK_MAC_DEBUG -#define TK_MAC_DEBUG_CLIP_REGIONS +#define TK_MAC_DEBUG_EVENTS +#define TK_MAC_DEBUG_DRAWING #endif */ @@ -70,440 +27,281 @@ * Declaration of functions used only in this file */ -static int GenerateUpdateEvent(Window window); -static int GenerateUpdates(HIMutableShapeRef updateRgn, CGRect *updateBounds, - TkWindow *winPtr); -static int GenerateActivateEvents(Window window, int activeFlag); -static void ClearPort(CGrafPtr port, HIShapeRef updateRgn); +static int GenerateUpdates(HIMutableShapeRef updateRgn, + CGRect *updateBounds, TkWindow *winPtr); +static int GenerateActivateEvents(TkWindow *winPtr, + int activeFlag); +static void DoWindowActivate(ClientData clientData); + +#pragma mark TKApplication(TKWindowEvent) + +#ifdef TK_MAC_DEBUG_NOTIFICATIONS +extern NSString *NSWindowWillOrderOnScreenNotification; +extern NSString *NSWindowDidOrderOnScreenNotification; +extern NSString *NSWindowDidOrderOffScreenNotification; +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +#define NSWindowWillStartLiveResizeNotification @"NSWindowWillStartLiveResizeNotification" +#define NSWindowDidEndLiveResizeNotification @"NSWindowDidEndLiveResizeNotification" +#endif +#endif -/* - *---------------------------------------------------------------------- - * - * TkMacOSXProcessApplicationEvent -- - * - * This processes Application level events, mainly activate - * and deactivate. - * - * Results: - * 0. - * - * Side effects: - * Hide or reveal floating windows. - * - *---------------------------------------------------------------------- - */ +extern NSString *opaqueTag; -MODULE_SCOPE int -TkMacOSXProcessApplicationEvent( - TkMacOSXEvent *eventPtr, - MacEventStatus *statusPtr) +@implementation TKApplication(TKWindowEvent) + +- (void) windowActivation: (NSNotification *) notification { - Tcl_CmdInfo dummy; +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + BOOL activate = [[notification name] + isEqualToString:NSWindowDidBecomeKeyNotification]; + NSWindow *w = [notification object]; + TkWindow *winPtr = TkMacOSXGetTkWindow(w); - /* - * This is a bit of a hack. We get "show" events both when we come back - * from being hidden, and whenever we are activated. I only want to run - * the "show" proc when we have been hidden already, not as a substitute - * for <Activate>. So I use this toggle... - */ - static int toggleHide = 0; - - switch (eventPtr->eKind) { - case kEventAppActivated: - ShowFloatingWindows(); - break; - case kEventAppDeactivated: - TkSuspendClipboard(); - HideFloatingWindows(); - break; - case kEventAppQuit: - statusPtr->stopProcessing = 1; - break; - case kEventAppHidden: - if (toggleHide == 0) { - toggleHide = 1; - if (eventPtr->interp && Tcl_GetCommandInfo(eventPtr->interp, - "::tk::mac::OnHide", &dummy)) { - Tcl_EvalEx(eventPtr->interp, "::tk::mac::OnHide", -1, TCL_EVAL_GLOBAL); - } - } - statusPtr->stopProcessing = 1; - break; - case kEventAppShown: - if (toggleHide == 1) { - toggleHide = 0; - if (eventPtr->interp && Tcl_GetCommandInfo(eventPtr->interp, - "::tk::mac::OnShow", &dummy)) { - Tcl_EvalEx(eventPtr->interp, "::tk::mac::OnShow", -1, TCL_EVAL_GLOBAL); - } - } - statusPtr->stopProcessing = 1; - break; - case kEventAppAvailableWindowBoundsChanged: { - static UInt32 prevId = 0; - UInt32 id; - OSStatus err; - - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamTransactionID, typeUInt32, - NULL, sizeof(id), NULL, &id); - if (err != noErr || id != prevId) { - TkDisplay *dispPtr = TkGetDisplayList(); - - prevId = id; - TkMacOSXDisplayChanged(dispPtr->display); - } + if (winPtr && Tk_IsMapped(winPtr)) { + GenerateActivateEvents(winPtr, activate); + } +} + +- (void) windowBoundsChanged: (NSNotification *) notification +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + BOOL movedOnly = [[notification name] + isEqualToString:NSWindowDidMoveNotification]; + + if (movedOnly) { + /* constraining to screen after move not needed with AppKit */ + } + + NSWindow *w = [notification object]; + TkWindow *winPtr = TkMacOSXGetTkWindow(w); + + if (winPtr) { + WmInfo *wmPtr = winPtr->wmInfoPtr; + NSRect bounds = [w frame]; + int x, y, width = -1, height = -1, flags = 0; + + x = bounds.origin.x; + y = tkMacOSXZeroScreenHeight - (bounds.origin.y + bounds.size.height); + if (winPtr->changes.x != x || winPtr->changes.y != y){ + flags |= TK_LOCATION_CHANGED; + } else { + x = y = -1; + } + if (!movedOnly && (winPtr->changes.width != bounds.size.width || + winPtr->changes.height != bounds.size.height)) { + width = bounds.size.width - wmPtr->xInParent; + height = bounds.size.height - wmPtr->yInParent; + flags |= TK_SIZE_CHANGED; + } + if (Tcl_GetServiceMode() != TCL_SERVICE_NONE) { /* - * Should we call ::tk::mac::OnDisplayChanged? + * Propagate geometry changes immediately. */ - break; + + flags |= TK_MACOSX_HANDLE_EVENT_IMMEDIATELY; } - default: - break; + TkGenWMConfigureEvent((Tk_Window) winPtr, x, y, width, height, flags); } - return 0; } - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXProcessAppearanceEvent -- - * - * This processes Appearance events. - * - * Results: - * 0. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -MODULE_SCOPE int -TkMacOSXProcessAppearanceEvent( - TkMacOSXEvent *eventPtr, - MacEventStatus *statusPtr) +- (void) windowExpanded: (NSNotification *) notification { - switch (eventPtr->eKind) { - case kEventAppearanceScrollBarVariantChanged: - TkMacOSXInitScrollbarMetrics(); - break; - default: - break; +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + NSWindow *w = [notification object]; + TkWindow *winPtr = TkMacOSXGetTkWindow(w); + + if (winPtr) { + winPtr->wmInfoPtr->hints.initial_state = + TkMacOSXIsWindowZoomed(winPtr) ? ZoomState : NormalState; + Tk_MapWindow((Tk_Window) winPtr); + if (Tcl_GetServiceMode() != TCL_SERVICE_NONE) { + /* + * Process all Tk events generated by Tk_MapWindow(). + */ + + while (Tcl_ServiceEvent(0)) {} + while (Tcl_DoOneEvent(TCL_IDLE_EVENTS|TCL_DONT_WAIT)) {} + + /* + * NSWindowDidDeminiaturizeNotification is received after + * NSWindowDidBecomeKeyNotification, so activate manually + */ + + GenerateActivateEvents(winPtr, 1); + } else { + Tcl_DoWhenIdle(DoWindowActivate, winPtr); + } } - return 0; } - -/* - *---------------------------------------------------------------------- - * - * TkMacOSXProcessWindowEvent -- - * - * This processes Window level events, mainly activate - * and deactivate. - * - * Results: - * 0. - * - * Side effects: - * Cause Windows to be moved forward or backward in the - * window stack. - * - *---------------------------------------------------------------------- - */ -MODULE_SCOPE int -TkMacOSXProcessWindowEvent( - TkMacOSXEvent * eventPtr, - MacEventStatus * statusPtr) +- (void) windowCollapsed: (NSNotification *) notification { - OSStatus err; - WindowRef whichWindow; - Window window; - int eventFound = false; - TkDisplay *dispPtr; - TkWindow *winPtr; - - switch (eventPtr->eKind) { - case kEventWindowActivated: - case kEventWindowDeactivated: - case kEventWindowUpdate: - case kEventWindowExpanding: - case kEventWindowBoundsChanged: - case kEventWindowDragStarted: - case kEventWindowDragCompleted: - case kEventWindowConstrain: - case kEventWindowGetRegion: - case kEventWindowDrawContent: - break; - default: - return 0; - break; - } - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamDirectObject, typeWindowRef, NULL, sizeof(whichWindow), - NULL, &whichWindow); - if (err != noErr) { - return 0; +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + NSWindow *w = [notification object]; + TkWindow *winPtr = TkMacOSXGetTkWindow(w); + + if (winPtr) { + Tk_UnmapWindow((Tk_Window) winPtr); } +} - window = TkMacOSXGetXWindow(whichWindow); - dispPtr = TkGetDisplayList(); - winPtr = (TkWindow *)Tk_IdToWindow(dispPtr->display, window); +- (BOOL) windowShouldClose: (NSWindow *) w +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, w); +#endif + TkWindow *winPtr = TkMacOSXGetTkWindow(w); - switch (eventPtr->eKind) { - case kEventWindowActivated: - case kEventWindowDeactivated: - if (window != None) { - int activate = (eventPtr->eKind == kEventWindowActivated); + if (winPtr) { + TkGenWMDestroyEvent((Tk_Window) winPtr); + } - eventFound |= GenerateActivateEvents(window, activate); - eventFound |= TkMacOSXGenerateFocusEvent(window, activate); - if (winPtr) { - TkMacOSXEnterExitFullscreen(winPtr, activate); - } - statusPtr->stopProcessing = 1; - } - break; - case kEventWindowUpdate: - if (window != None && GenerateUpdateEvent(window)) { - eventFound = true; - statusPtr->stopProcessing = 1; - } - break; - case kEventWindowExpanding: - if (winPtr) { - winPtr->wmInfoPtr->hints.initial_state = - TkMacOSXIsWindowZoomed(winPtr) ? ZoomState : - NormalState; - Tk_MapWindow((Tk_Window) winPtr); - /* - * Need to process all Tk events generated by Tk_MapWindow() - * before returning to ensure all children are mapped, as - * otherwise the Activate event that follows Expanding would - * not be processed by any unmapped children. - */ - while (Tcl_ServiceEvent(TCL_WINDOW_EVENTS)) {}; - while (Tcl_DoOneEvent(TCL_IDLE_EVENTS)) {}; - } - break; - case kEventWindowBoundsChanged: - if (winPtr) { - WmInfo *wmPtr = winPtr->wmInfoPtr; - UInt32 attr; - Rect bounds; - int x = -1, y = -1, width = -1, height = -1, flags = 0; - - ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamAttributes, typeUInt32, - NULL, sizeof(attr), NULL, &attr); - ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamCurrentBounds, typeQDRectangle, - NULL, sizeof(bounds), NULL, &bounds); - if (attr & kWindowBoundsChangeOriginChanged) { - x = bounds.left - wmPtr->xInParent; - y = bounds.top - wmPtr->yInParent; - flags |= TK_LOCATION_CHANGED; - } - if (attr & kWindowBoundsChangeSizeChanged) { - width = bounds.right - bounds.left; - height = bounds.bottom - bounds.top; - flags |= TK_SIZE_CHANGED; - } - TkMacOSXInvalClipRgns((Tk_Window) winPtr); - TkMacOSXInvalidateWindow((MacDrawable *) window, - TK_PARENT_WINDOW); - TkGenWMConfigureEvent((Tk_Window)winPtr, x, y, width, - height, flags); - if (attr & kWindowBoundsChangeUserResize || - attr & kWindowBoundsChangeUserDrag) { - TkMacOSXRunTclEventLoop(); - } - if (wmPtr->attributes & kWindowResizableAttribute) { - HIViewRef growBoxView; - - err = HIViewFindByID(HIViewGetRoot(whichWindow), - kHIViewWindowGrowBoxID, &growBoxView); - if (err == noErr) { - ChkErr(HIViewSetNeedsDisplay, growBoxView, true); - } - } - } - break; - case kEventWindowDragStarted: - if (!(TkMacOSXModifierState() & cmdKey)) { - TkMacOSXBringWindowForward(whichWindow); - } - TkMacOSXTrackingLoop(1); - break; - case kEventWindowDragCompleted: { - Rect maxBounds, bounds, strWidths; - int h = 0, v = 0; - - TkMacOSXTrackingLoop(0); - ChkErr(GetWindowGreatestAreaDevice, whichWindow, - kWindowDragRgn, NULL, &maxBounds); - ChkErr(GetWindowBounds, whichWindow, kWindowStructureRgn, - &bounds); - ChkErr(GetWindowStructureWidths, whichWindow, &strWidths); - if (bounds.left > maxBounds.right - strWidths.left) { - h = maxBounds.right - - (strWidths.left ? strWidths.left : 40) - - bounds.left; - } else if (bounds.right < maxBounds.left - + strWidths.right) { - h = maxBounds.left - + (strWidths.right ? strWidths.right : 40) - - bounds.right; - } - if (bounds.top > maxBounds.bottom - strWidths.top) { - v = maxBounds.bottom - - (strWidths.top ? strWidths.top : 40) - - bounds.top; - } else if (bounds.bottom < maxBounds.top - + strWidths.bottom) { - v = maxBounds.top - + (strWidths.bottom ? strWidths.bottom : 40) - - bounds.bottom; - } else if (strWidths.top && bounds.top < maxBounds.top) { - v = maxBounds.top - bounds.top; - } - if (h || v) { - OffsetRect(&bounds, h, v); - ChkErr(SetWindowBounds, whichWindow, - kWindowStructureRgn, &bounds); - } - break; - } - case kEventWindowConstrain: - if (winPtr && (winPtr->wmInfoPtr->flags & WM_FULLSCREEN) && - TkMacOSXMakeFullscreen(winPtr, whichWindow, 1, - NULL) == TCL_OK) { - statusPtr->stopProcessing = 1; - } - break; - case kEventWindowGetRegion: - if (winPtr && (winPtr->wmInfoPtr->flags & WM_TRANSPARENT)) { - WindowRegionCode code; - - statusPtr->stopProcessing = (CallNextEventHandler( - eventPtr->callRef, eventPtr->eventRef) == noErr); - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamWindowRegionCode, typeWindowRegionCode, - NULL, sizeof(code), NULL, &code); - if (err == noErr && code == kWindowOpaqueRgn) { - RgnHandle rgn; - - err = ChkErr(GetEventParameter, eventPtr->eventRef, - kEventParamRgnHandle, typeQDRgnHandle, NULL, - sizeof(rgn), NULL, &rgn); - if (err == noErr) { - SetEmptyRgn(rgn); - statusPtr->stopProcessing = 1; - } - } - } - break; - case kEventWindowDrawContent: - if (winPtr && (winPtr->wmInfoPtr->flags & WM_TRANSPARENT)) { - CGrafPtr port; + /* + * If necessary, TkGenWMDestroyEvent() handles [close]ing the window, + * so can always return NO from -windowShouldClose: for a Tk window. + */ - GetPort(&port); - ClearPort(port, NULL); - } - break; + return (winPtr ? NO : YES); +} + +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + +- (void) windowDragStart: (NSNotification *) notification +{ + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +} + +- (void) windowLiveResize: (NSNotification *) notification +{ + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); + //BOOL start = [[notification name] isEqualToString:NSWindowWillStartLiveResizeNotification]; +} + +- (void) windowMapped: (NSNotification *) notification +{ + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); + NSWindow *w = [notification object]; + TkWindow *winPtr = TkMacOSXGetTkWindow(w); + + if (winPtr) { + //Tk_MapWindow((Tk_Window) winPtr); } +} - return eventFound; +- (void) windowBecameVisible: (NSNotification *) notification +{ + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); } + +- (void) windowUnmapped: (NSNotification *) notification +{ + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); + NSWindow *w = [notification object]; + TkWindow *winPtr = TkMacOSXGetTkWindow(w); + + if (winPtr) { + //Tk_UnmapWindow((Tk_Window) winPtr); + } +} +#endif /* TK_MAC_DEBUG_NOTIFICATIONS */ + +- (void) _setupWindowNotifications +{ + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + +#define observe(n, s) \ + [nc addObserver:self selector:@selector(s) name:(n) object:nil] + observe(NSWindowDidBecomeKeyNotification, windowActivation:); + observe(NSWindowDidResignKeyNotification, windowActivation:); + observe(NSWindowDidMoveNotification, windowBoundsChanged:); + observe(NSWindowDidResizeNotification, windowBoundsChanged:); + observe(NSWindowDidDeminiaturizeNotification, windowExpanded:); + observe(NSWindowDidMiniaturizeNotification, windowCollapsed:); +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + observe(NSWindowWillMoveNotification, windowDragStart:); + observe(NSWindowWillStartLiveResizeNotification, windowLiveResize:); + observe(NSWindowDidEndLiveResizeNotification, windowLiveResize:); + observe(NSWindowWillOrderOnScreenNotification, windowMapped:); + observe(NSWindowDidOrderOnScreenNotification, windowBecameVisible:); + observe(NSWindowDidOrderOffScreenNotification, windowUnmapped:); +#endif +#undef observe +} +@end -/* - *---------------------------------------------------------------------- - * - * GenerateUpdateEvent -- - * - * Given a Macintosh window update event this function generates - * all the Expose XEvents needed by Tk. - * - * Results: - * True if event(s) are generated - false otherwise. - * - * Side effects: - * Additional events may be place on the Tk event queue. - * - *---------------------------------------------------------------------- - */ -static int -GenerateUpdateEvent(Window window) +#pragma mark TKApplication(TKApplicationEvent) + +@implementation TKApplication(TKApplicationEvent) + +- (void) applicationActivate: (NSNotification *) notification { - WindowRef macWindow; - TkDisplay *dispPtr; - TkWindow *winPtr; - int result = 0; - CGRect updateBounds; - HIShapeRef rgn; - HIMutableShapeRef updateRgn; - int dx, dy; - - dispPtr = TkGetDisplayList(); - winPtr = (TkWindow *)Tk_IdToWindow(dispPtr->display, window); - - if (winPtr ==NULL ){ - return result; - } - macWindow = TkMacOSXDrawableWindow(window); - TK_IF_MAC_OS_X_API (5, HIWindowCopyShape, - ChkErr(HIWindowCopyShape, macWindow, kWindowUpdateRgn, - kHICoordSpaceWindow, &rgn); - dx = -winPtr->wmInfoPtr->xInParent; - dy = -winPtr->wmInfoPtr->yInParent; - ) TK_ELSE_MAC_OS_X (5, - Rect bounds; - - TkMacOSXCheckTmpQdRgnEmpty(); - ChkErr(GetWindowRegion, macWindow, kWindowUpdateRgn, tkMacOSXtmpQdRgn); - rgn = HIShapeCreateWithQDRgn(tkMacOSXtmpQdRgn); - SetEmptyRgn(tkMacOSXtmpQdRgn); - ChkErr(GetWindowBounds, macWindow, kWindowContentRgn, &bounds); - dx = -bounds.left; - dy = -bounds.top; - ) TK_ENDIF - updateRgn = HIShapeCreateMutableCopy(rgn); - CFRelease(rgn); - ChkErr(HIShapeOffset, updateRgn, dx, dy); - HIShapeGetBounds(updateRgn, &updateBounds); -#ifdef TK_MAC_DEBUG_CLIP_REGIONS - TkMacOSXDebugFlashRegion(window, updateRgn); -#endif /* TK_MAC_DEBUG_CLIP_REGIONS */ - BeginUpdate(macWindow); - if (winPtr->wmInfoPtr->flags & WM_TRANSPARENT) { - ClearPort(TkMacOSXGetDrawablePort(window), updateRgn); - } - result = GenerateUpdates(updateRgn, &updateBounds, winPtr); - EndUpdate(macWindow); - CFRelease(updateRgn); - if (result) { - /* - * Ensure there are no pending idle-time redraws that could prevent - * the just posted Expose events from generating new redraws. - */ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + [NSApp tkCheckPasteboard]; +} - Tcl_DoOneEvent(TCL_IDLE_EVENTS|TCL_DONT_WAIT); +- (void) applicationDeactivate: (NSNotification *) notification +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + TkSuspendClipboard(); +} + +- (void) applicationShowHide: (NSNotification *) notification +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + const char *cmd = ([[notification name] isEqualToString: + NSApplicationDidUnhideNotification] ? + "::tk::mac::OnShow" : "::tk::mac::OnHide"); + Tcl_CmdInfo dummy; + + if (_eventInterp && Tcl_GetCommandInfo(_eventInterp, cmd, &dummy)) { + int code = Tcl_EvalEx(_eventInterp, cmd, -1, TCL_EVAL_GLOBAL); + + if (code != TCL_OK) { + Tcl_BackgroundError(_eventInterp); + } + Tcl_ResetResult(_eventInterp); } - return result; - } +} + +- (void) displayChanged: (NSNotification *) notification +{ +#ifdef TK_MAC_DEBUG_NOTIFICATIONS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, notification); +#endif + TkDisplay *dispPtr = TkGetDisplayList(); + + if (dispPtr) { + TkMacOSXDisplayChanged(dispPtr->display); + } +} +@end + +#pragma mark - /* *---------------------------------------------------------------------- * * GenerateUpdates -- * - * Given a Macintosh update region and a Tk window this function - * geneates a X Expose event for the window if it is within the - * update region. The function will then recursivly have each - * damaged window generate Expose events for its child windows. + * Given a Macintosh update region and a Tk window this function geneates + * a X Expose event for the window if it is within the update region. The + * function will then recursivly have each damaged window generate Expose + * events for its child windows. * * Results: * True if event(s) are generated - false otherwise. @@ -529,11 +327,9 @@ GenerateUpdates( if (!CGRectIntersectsRect(bounds, *updateBounds)) { return 0; } - TK_IF_MAC_OS_X_API (4, HIShapeIntersectsRect, - if (!HIShapeIntersectsRect(updateRgn, &bounds)) { - return 0; - } - ) TK_ENDIF + if (!HIShapeIntersectsRect(updateRgn, &bounds)) { + return 0; + } /* * Compute the bounding box of the area that the damage occured in. @@ -547,12 +343,11 @@ GenerateUpdates( return 0; } HIShapeGetBounds(damageRgn, &damageBounds); - ChkErr(TkMacOSHIShapeUnion, boundsRgn, updateRgn, updateRgn); - HIShapeGetBounds(updateRgn, updateBounds); + CFRelease(damageRgn); CFRelease(boundsRgn); - event.xany.serial = Tk_Display(winPtr)->request; + event.xany.serial = LastKnownRequestProcessed(Tk_Display(winPtr)); event.xany.send_event = false; event.xany.window = Tk_WindowId(winPtr); event.xany.display = Tk_Display(winPtr); @@ -563,6 +358,10 @@ GenerateUpdates( event.xexpose.height = damageBounds.size.height; event.xexpose.count = 0; Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); +#ifdef TK_MAC_DEBUG_DRAWING + TKLog(@"Expose %p {{%d, %d}, {%d, %d}}", event.xany.window, event.xexpose.x, + event.xexpose.y, event.xexpose.width, event.xexpose.height); +#endif /* * Generate updates for the children of this window @@ -593,7 +392,7 @@ GenerateUpdates( return 1; } - + /* *---------------------------------------------------------------------- * @@ -613,29 +412,44 @@ GenerateUpdates( int GenerateActivateEvents( - Window window, /* Root X window for event. */ - int activeFlag ) + TkWindow *winPtr, + int activeFlag) { - TkWindow *winPtr; - TkDisplay *dispPtr; - - dispPtr = TkGetDisplayList(); - winPtr = (TkWindow *) Tk_IdToWindow(dispPtr->display, window); - if (winPtr == NULL || winPtr->window == None) { - return false; - } - - TkGenerateActivateEvents(winPtr,activeFlag); + TkGenerateActivateEvents(winPtr, activeFlag); + TkMacOSXGenerateFocusEvent(winPtr, activeFlag); return true; } + +/* + *---------------------------------------------------------------------- + * + * DoWindowActivate -- + * + * Idle handler that calls GenerateActivateEvents(). + * + * Results: + * None. + * + * Side effects: + * Additional events may be place on the Tk event queue. + * + *---------------------------------------------------------------------- + */ +void +DoWindowActivate( + ClientData clientData) +{ + GenerateActivateEvents(clientData, 1); +} + /* *---------------------------------------------------------------------- * * TkMacOSXGenerateFocusEvent -- * - * Given a Macintosh window activate event this function generates all the - * X Focus events needed by Tk. + * Given a Macintosh window activate event this function generates all + * the X Focus events needed by Tk. * * Results: * True if event(s) are generated - false otherwise. @@ -648,32 +462,24 @@ GenerateActivateEvents( MODULE_SCOPE int TkMacOSXGenerateFocusEvent( - Window window, /* Root X window for event. */ - int activeFlag ) + TkWindow *winPtr, /* Root X window for event. */ + int activeFlag) { XEvent event; - Tk_Window tkwin; - TkDisplay *dispPtr; - - dispPtr = TkGetDisplayList(); - tkwin = Tk_IdToWindow(dispPtr->display, window); - if (tkwin == NULL) { - return false; - } /* - * Don't send focus events to windows of class help or to - * windows with the kWindowNoActivatesAttribute. + * Don't send focus events to windows of class help or to windows with the + * kWindowNoActivatesAttribute. */ - if (((TkWindow *)tkwin)->wmInfoPtr->macClass == kHelpWindowClass || - ((TkWindow *)tkwin)->wmInfoPtr->attributes & - kWindowNoActivatesAttribute) { + + if (winPtr->wmInfoPtr && (winPtr->wmInfoPtr->macClass == kHelpWindowClass || + winPtr->wmInfoPtr->attributes & kWindowNoActivatesAttribute)) { return false; } /* - * Generate FocusIn and FocusOut events. This event - * is only sent to the toplevel window. + * Generate FocusIn and FocusOut events. This event is only sent to the + * toplevel window. */ if (activeFlag) { @@ -682,10 +488,10 @@ TkMacOSXGenerateFocusEvent( event.xany.type = FocusOut; } - event.xany.serial = dispPtr->display->request; + event.xany.serial = LastKnownRequestProcessed(Tk_Display(winPtr)); event.xany.send_event = False; - event.xfocus.display = dispPtr->display; - event.xfocus.window = window; + event.xfocus.display = Tk_Display(winPtr); + event.xfocus.window = winPtr->window; event.xfocus.mode = NotifyNormal; event.xfocus.detail = NotifyDetailNone; @@ -698,9 +504,8 @@ TkMacOSXGenerateFocusEvent( * * TkGenWMConfigureEvent -- * - * Generate a ConfigureNotify event for Tk. Depending on the - * value of flag the values of width/height, x/y, or both may - * be changed. + * Generate a ConfigureNotify event for Tk. Depending on the value of flag + * the values of width/height, x/y, or both may be changed. * * Results: * None. @@ -714,10 +519,8 @@ TkMacOSXGenerateFocusEvent( void TkGenWMConfigureEvent( Tk_Window tkwin, - int x, - int y, - int width, - int height, + int x, int y, + int width, int height, int flags) { XEvent event; @@ -729,7 +532,7 @@ TkGenWMConfigureEvent( } event.type = ConfigureNotify; - event.xconfigure.serial = Tk_Display(tkwin)->request; + event.xconfigure.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); event.xconfigure.send_event = False; event.xconfigure.display = Tk_Display(tkwin); event.xconfigure.event = Tk_WindowId(tkwin); @@ -755,11 +558,16 @@ TkGenWMConfigureEvent( event.xconfigure.width = width; event.xconfigure.height = height; - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); + if (flags & TK_MACOSX_HANDLE_EVENT_IMMEDIATELY) { + Tk_HandleEvent(&event); + } else { + Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); + } /* * Update window manager information. */ + if (Tk_IsTopLevel(winPtr)) { wmPtr = winPtr->wmInfoPtr; if (flags & TK_LOCATION_CHANGED) { @@ -774,33 +582,31 @@ TkGenWMConfigureEvent( * Don't set external width, since the user didn't change it * from what the widgets asked for. */ - } else { - if (wmPtr->gridWin != NULL) { - wmPtr->width = wmPtr->reqGridWidth + } else if (wmPtr->gridWin != NULL) { + wmPtr->width = wmPtr->reqGridWidth + (width - winPtr->reqWidth)/wmPtr->widthInc; - if (wmPtr->width < 0) { - wmPtr->width = 0; - } - } else { - wmPtr->width = width; + if (wmPtr->width < 0) { + wmPtr->width = 0; } + } else { + wmPtr->width = width; } + if ((wmPtr->height == -1) && (height == winPtr->reqHeight)) { /* * Don't set external height, since the user didn't change it * from what the widgets asked for. */ - } else { - if (wmPtr->gridWin != NULL) { - wmPtr->height = wmPtr->reqGridHeight + } else if (wmPtr->gridWin != NULL) { + wmPtr->height = wmPtr->reqGridHeight + (height - winPtr->reqHeight)/wmPtr->heightInc; - if (wmPtr->height < 0) { - wmPtr->height = 0; - } - } else { - wmPtr->height = height; + if (wmPtr->height < 0) { + wmPtr->height = 0; } + } else { + wmPtr->height = height; } + wmPtr->configWidth = width; wmPtr->configHeight = height; } @@ -809,10 +615,11 @@ TkGenWMConfigureEvent( /* * Now set up the changes structure. Under X we wait for the * ConfigureNotify to set these values. On the Mac we know imediatly that - * this is what we want - so we just set them. However, we need to - * make sure the windows clipping region is marked invalid so the - * change is visible to the subwindow. + * this is what we want - so we just set them. However, we need to make + * sure the windows clipping region is marked invalid so the change is + * visible to the subwindow. */ + winPtr->changes.x = x; winPtr->changes.y = y; winPtr->changes.width = width; @@ -842,7 +649,7 @@ TkGenWMDestroyEvent( { XEvent event; - event.xany.serial = Tk_Display(tkwin)->request; + event.xany.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); event.xany.send_event = False; event.xany.display = Tk_Display(tkwin); @@ -851,7 +658,7 @@ TkGenWMDestroyEvent( event.xclient.message_type = Tk_InternAtom(tkwin, "WM_PROTOCOLS"); event.xclient.format = 32; event.xclient.data.l[0] = Tk_InternAtom(tkwin, "WM_DELETE_WINDOW"); - Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); + Tk_HandleEvent(&event); } /* @@ -859,17 +666,15 @@ TkGenWMDestroyEvent( * * TkWmProtocolEventProc -- * - * This procedure is called by the Tk_HandleEvent whenever a - * ClientMessage event arrives whose type is "WM_PROTOCOLS". - * This procedure handles the message from the window manager - * in an appropriate fashion. + * This procedure is called by the Tk_HandleEvent whenever a ClientMessage + * event arrives whose type is "WM_PROTOCOLS". This procedure handles the + * message from the window manager in an appropriate fashion. * * Results: * None. * * Side effects: - * Depends on what sort of handler, if any, was set up for the - * protocol. + * Depends on what sort of handler, if any, was set up for the protocol. * *---------------------------------------------------------------------- */ @@ -891,28 +696,28 @@ TkWmProtocolEventProc( } protocol = (Atom) eventPtr->xclient.data.l[0]; for (protPtr = wmPtr->protPtr; protPtr != NULL; - protPtr = protPtr->nextPtr) { + protPtr = protPtr->nextPtr) { if (protocol == protPtr->protocol) { - Tcl_Preserve((ClientData) protPtr); + Tcl_Preserve(protPtr); interp = protPtr->interp; - Tcl_Preserve((ClientData) interp); + Tcl_Preserve(interp); result = Tcl_EvalEx(interp, protPtr->command, -1, TCL_EVAL_GLOBAL); if (result != TCL_OK) { Tcl_AddErrorInfo(interp, "\n (command for \""); Tcl_AddErrorInfo(interp, Tk_GetAtomName((Tk_Window) winPtr, protocol)); Tcl_AddErrorInfo(interp, "\" window manager protocol)"); - Tk_BackgroundError(interp); + Tcl_BackgroundError(interp); } - Tcl_Release((ClientData) interp); - Tcl_Release((ClientData) protPtr); + Tcl_Release(interp); + Tcl_Release(protPtr); return; } } /* - * No handler was present for this protocol. If this is a - * WM_DELETE_WINDOW message then just destroy the window. + * No handler was present for this protocol. If this is a WM_DELETE_WINDOW + * message then just destroy the window. */ if (protocol == Tk_InternAtom((Tk_Window) winPtr, "WM_DELETE_WINDOW")) { @@ -947,44 +752,354 @@ Tk_MacOSXIsAppInFront(void) if (err == noErr) { ChkErr(SameProcess, &frontPsn, &ourPsn, &isFrontProcess); } - + return (isFrontProcess == true); } +#pragma mark TKContentView + +#import <ApplicationServices/ApplicationServices.h> + /* - *---------------------------------------------------------------------- - * - * ClearPort -- - * - * Clear (i.e. fill with transparent color) the given port. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- + * Custom content view for Tk NSWindows, containing standard NSView subviews. + * The goal is to emulate X11-style drawing in response to Expose events: + * during the normal AppKit drawing cycle, we supress drawing of all subviews + * (using a technique adapted from WebKit's WebHTMLView) and instead send + * Expose events about the subviews that would be redrawn. Tk Expose event + * handling and drawing handlers then draw the subviews manually via their + * -displayRectIgnoringOpacity: + */ + +@interface TKContentView(TKWindowEvent) +- (void) drawRect: (NSRect) rect; +- (void) generateExposeEvents: (HIMutableShapeRef) shape; +- (BOOL) isOpaque; +- (BOOL) wantsDefaultClipping; +- (BOOL) acceptsFirstResponder; +- (void) keyDown: (NSEvent *) theEvent; +@end + +@implementation TKContentView +@end + +static Tk_RestrictAction +ExposeRestrictProc( + ClientData arg, + XEvent *eventPtr) +{ + return (eventPtr->type==Expose && eventPtr->xany.serial==PTR2UINT(arg) + ? TK_PROCESS_EVENT : TK_DEFER_EVENT); +} + +@implementation TKContentView(TKWindowEvent) + +- (void) drawRect: (NSRect) rect +{ + const NSRect *rectsBeingDrawn; + NSInteger rectsBeingDrawnCount; + + [self getRectsBeingDrawn:&rectsBeingDrawn count:&rectsBeingDrawnCount]; +#ifdef TK_MAC_DEBUG_DRAWING + TKLog(@"-[%@(%p) %s%@]", [self class], self, _cmd, NSStringFromRect(rect)); + [[NSColor colorWithDeviceRed:0.0 green:1.0 blue:0.0 alpha:.1] setFill]; + NSRectFillListUsingOperation(rectsBeingDrawn, rectsBeingDrawnCount, + NSCompositeSourceOver); +#endif + + NSWindow *w = [self window]; + + if ([self isOpaque] && [w showsResizeIndicator]) { + NSRect bounds = [self convertRect:[w _growBoxRect] fromView:nil]; + + if ([self needsToDrawRect:bounds]) { + NSEraseRect(bounds); + } + } + + CGFloat height = [self bounds].size.height; + HIMutableShapeRef drawShape = HIShapeCreateMutable(); + + while (rectsBeingDrawnCount--) { + CGRect r = NSRectToCGRect(*rectsBeingDrawn++); + + r.origin.y = height - (r.origin.y + r.size.height); + HIShapeUnionWithRect(drawShape, &r); + } + if (CFRunLoopGetMain() == CFRunLoopGetCurrent()) { + [self generateExposeEvents:drawShape]; + } else { + [self performSelectorOnMainThread:@selector(generateExposeEvents:) + withObject:(id)drawShape waitUntilDone:NO + modes:[NSArray arrayWithObjects:NSRunLoopCommonModes, + NSEventTrackingRunLoopMode, NSModalPanelRunLoopMode, + nil]]; + } + CFRelease(drawShape); +} + +- (void) generateExposeEvents: (HIMutableShapeRef) shape +{ + TkWindow *winPtr = TkMacOSXGetTkWindow([self window]); + unsigned long serial; + CGRect updateBounds; + + if (!winPtr) { + return; + } + HIShapeGetBounds(shape, &updateBounds); + serial = LastKnownRequestProcessed(Tk_Display(winPtr)); + if (GenerateUpdates(shape, &updateBounds, winPtr) && + ![[NSRunLoop currentRunLoop] currentMode] && + Tcl_GetServiceMode() != TCL_SERVICE_NONE) { + /* + * Ensure there are no pending idle-time redraws that could prevent the + * just posted Expose events from generating new redraws. + */ + + while (Tcl_DoOneEvent(TCL_IDLE_EVENTS|TCL_DONT_WAIT)) {} + + /* + * For smoother drawing, process Expose events and resulting redraws + * immediately instead of at idle time. + */ + + ClientData oldArg; + Tk_RestrictProc *oldProc = Tk_RestrictEvents(ExposeRestrictProc, + UINT2PTR(serial), &oldArg); + + while (Tcl_ServiceEvent(TCL_WINDOW_EVENTS)) {} + Tk_RestrictEvents(oldProc, oldArg, &oldArg); + while (Tcl_DoOneEvent(TCL_IDLE_EVENTS|TCL_DONT_WAIT)) {} + } +} + +- (void) tkToolbarButton: (id) sender +{ +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd); +#endif + XVirtualEvent event; + int x, y; + TkWindow *winPtr = TkMacOSXGetTkWindow([self window]); + Tk_Window tkwin = (Tk_Window) winPtr; + + bzero(&event, sizeof(XVirtualEvent)); + event.type = VirtualEvent; + event.serial = LastKnownRequestProcessed(Tk_Display(tkwin)); + event.send_event = false; + event.display = Tk_Display(tkwin); + event.event = Tk_WindowId(tkwin); + event.root = XRootWindow(Tk_Display(tkwin), 0); + event.subwindow = None; + event.time = TkpGetMS(); + XQueryPointer(NULL, winPtr->window, NULL, NULL, + &event.x_root, &event.y_root, &x, &y, &event.state); + Tk_TopCoordsToWindow(tkwin, x, y, &event.x, &event.y); + event.same_screen = true; + event.name = Tk_GetUid("ToolbarButton"); + Tk_QueueWindowEvent((XEvent *) &event, TCL_QUEUE_TAIL); +} + +#ifdef TK_MAC_DEBUG_DRAWING +- (void) setFrameSize: (NSSize) newSize +{ + TKLog(@"-[%@(%p) %s%@]", [self class], self, _cmd, + NSStringFromSize(newSize)); + [super setFrameSize:newSize]; +} + +- (void) setNeedsDisplayInRect: (NSRect) invalidRect +{ + TKLog(@"-[%@(%p) %s%@]", [self class], self, _cmd, + NSStringFromRect(invalidRect)); + [super setNeedsDisplayInRect:invalidRect]; +} +#endif + +- (BOOL) isOpaque +{ + NSWindow *w = [self window]; + + if (opaqueTag != NULL) { + return YES; + } else { + + return (w && (([w styleMask] & NSTexturedBackgroundWindowMask) || + ![w isOpaque]) ? NO : YES); + } +} + +- (BOOL) wantsDefaultClipping +{ + return NO; +} + +- (BOOL) acceptsFirstResponder +{ + return YES; +} + +- (void) keyDown: (NSEvent *) theEvent +{ +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, theEvent); +#endif +} + +@end + +#pragma mark TKContentViewPrivate + +/* + * Technique adapted from WebKit/WebKit/mac/WebView/WebHTMLView.mm to supress + * normal AppKit subview drawing and make all drawing go through us. + * Overrides NSView internals. */ -static void -ClearPort( - CGrafPtr port, - HIShapeRef updateRgn) -{ - CGContextRef context; - Rect bounds; - CGRect rect; - - GetPortBounds(port, &bounds); - QDBeginCGContext(port, &context); - SyncCGContextOriginWithPort(context, port); - CGContextConcatCTM(context, CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, - bounds.bottom - bounds.top)); - if (updateRgn) { - ChkErr(HIShapeReplacePathInCGContext, updateRgn, context); - CGContextEOClip(context); - } - rect = CGRectMake(0, 0, bounds.right, bounds.bottom); - CGContextClearRect(context, rect); - QDEndCGContext(port, &context); + +@interface TKContentView(TKContentViewPrivate) +- (id) initWithFrame: (NSRect) frame; +- (void) _setAsideSubviews; +- (void) _restoreSubviews; +@end + +@interface NSView(TKContentViewPrivate) +- (void) _recursiveDisplayRectIfNeededIgnoringOpacity: (NSRect) rect + isVisibleRect: (BOOL) isVisibleRect + rectIsVisibleRectForView: (NSView *) visibleView + topView: (BOOL) topView; +- (void) _recursiveDisplayAllDirtyWithLockFocus: (BOOL) needsLockFocus + visRect: (NSRect) visRect; +- (void) _recursive: (BOOL) recurse + displayRectIgnoringOpacity: (NSRect) displayRect + inContext: (NSGraphicsContext *) context topView: (BOOL) topView; +- (void) _lightWeightRecursiveDisplayInRect: (NSRect) visRect; +- (BOOL) _drawRectIfEmpty; +- (void) _drawRect: (NSRect) inRect clip: (BOOL) clip; +- (void) _setDrawsOwnDescendants: (BOOL) drawsOwnDescendants; +@end + +@implementation TKContentView(TKContentViewPrivate) + +- (id) initWithFrame: (NSRect) frame +{ + self = [super initWithFrame:frame]; + if (self) { + _savedSubviews = nil; + _subviewsSetAside = NO; + [self _setDrawsOwnDescendants:YES]; + } + return self; +} + +- (void) _setAsideSubviews +{ +#ifdef TK_MAC_DEBUG + if (_subviewsSetAside || _savedSubviews) { + Tcl_Panic("TKContentView _setAsideSubviews called incorrectly"); + } +#endif + _savedSubviews = _subviews; + _subviews = nil; + _subviewsSetAside = YES; +} + +- (void) _restoreSubviews +{ +#ifdef TK_MAC_DEBUG + if (!_subviewsSetAside || _subviews) { + Tcl_Panic("TKContentView _restoreSubviews called incorrectly"); + } +#endif + _subviews = _savedSubviews; + _savedSubviews = nil; + _subviewsSetAside = NO; +} + +- (void) _recursiveDisplayRectIfNeededIgnoringOpacity: (NSRect) rect + isVisibleRect: (BOOL) isVisibleRect + rectIsVisibleRectForView: (NSView *) visibleView + topView: (BOOL) topView +{ + [self _setAsideSubviews]; + [super _recursiveDisplayRectIfNeededIgnoringOpacity:rect + isVisibleRect:isVisibleRect rectIsVisibleRectForView:visibleView + topView:topView]; + [self _restoreSubviews]; } + +- (void) _recursiveDisplayAllDirtyWithLockFocus: (BOOL) needsLockFocus + visRect: (NSRect) visRect +{ + BOOL needToSetAsideSubviews = !_subviewsSetAside; + + if (needToSetAsideSubviews) { + [self _setAsideSubviews]; + } + [super _recursiveDisplayAllDirtyWithLockFocus:needsLockFocus + visRect:visRect]; + if (needToSetAsideSubviews) { + [self _restoreSubviews]; + } +} + +- (void) _recursive: (BOOL) recurse + displayRectIgnoringOpacity: (NSRect) displayRect + inContext: (NSGraphicsContext *) context topView: (BOOL) topView +{ + [self _setAsideSubviews]; + [super _recursive:recurse + displayRectIgnoringOpacity:displayRect inContext:context + topView:topView]; + [self _restoreSubviews]; +} + +- (void) _lightWeightRecursiveDisplayInRect: (NSRect) visRect +{ + BOOL needToSetAsideSubviews = !_subviewsSetAside; + + if (needToSetAsideSubviews) { + [self _setAsideSubviews]; + } + [super _lightWeightRecursiveDisplayInRect:visRect]; + if (needToSetAsideSubviews) { + [self _restoreSubviews]; + } +} + +- (BOOL) _drawRectIfEmpty +{ + /* + * Our -drawRect manages subview drawing directly, so it needs to be called + * even if the area to be redrawn is completely obscured by subviews. + */ + + return YES; +} + +- (void) _drawRect: (NSRect) inRect clip: (BOOL) clip +{ +#ifdef TK_MAC_DEBUG_DRAWING + TKLog(@"-[%@(%p) %s%@]", [self class], self, _cmd, + NSStringFromRect(inRect)); +#endif + BOOL subviewsWereSetAside = _subviewsSetAside; + + if (subviewsWereSetAside) { + [self _restoreSubviews]; + } + [super _drawRect:inRect clip:clip]; + if (subviewsWereSetAside) { + [self _setAsideSubviews]; + } +} + +@end + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c index 7b95a2e..cb6e3c4 100644 --- a/macosx/tkMacOSXWm.c +++ b/macosx/tkMacOSXWm.c @@ -2,13 +2,14 @@ * tkMacOSXWm.c -- * * This module takes care of the interactions between a Tk-based - * application and the window manager. Among other things, it - * implements the "wm" command and passes geometry information - * to the window manager. + * application and the window manager. Among other things, it implements + * the "wm" command and passes geometry information to the window + * manager. * * Copyright (c) 1994-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright (c) 2010 Kevin Walzer/WordTech Communications LLC. * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -27,57 +28,165 @@ */ /* + * Window attributes and classes + */ + +#define WM_NSMASK_SHIFT 36 +#define tkWindowDoesNotHideAttribute \ + ((UInt64) 1 << kHIWindowBitDoesNotHide) +#define tkCanJoinAllSpacesAttribute \ + ((UInt64) NSWindowCollectionBehaviorCanJoinAllSpaces << 34) +#define tkMoveToActiveSpaceAttribute \ + ((UInt64) NSWindowCollectionBehaviorMoveToActiveSpace << 34) +#define tkNonactivatingPanelAttribute \ + ((UInt64) NSNonactivatingPanelMask << WM_NSMASK_SHIFT) +#define tkHUDWindowAttribute \ + ((UInt64) NSHUDWindowMask << WM_NSMASK_SHIFT) +#define tkAlwaysValidAttributes (kWindowNoUpdatesAttribute \ + | kWindowNoActivatesAttribute | kWindowHideOnSuspendAttribute \ + | kWindowHideOnFullScreenAttribute | kWindowNoConstrainAttribute \ + | kWindowNoShadowAttribute | kWindowLiveResizeAttribute \ + | kWindowOpaqueForEventsAttribute | kWindowIgnoreClicksAttribute \ + | kWindowDoesNotCycleAttribute | tkWindowDoesNotHideAttribute \ + | tkCanJoinAllSpacesAttribute | tkMoveToActiveSpaceAttribute \ + | tkNonactivatingPanelAttribute | tkHUDWindowAttribute) + + +/*Objects for use in setting background color and opacity of window.*/ +NSColor *colorName = NULL; +NSString *opaqueTag = NULL; + +static const struct { + const UInt64 validAttrs, defaultAttrs, forceOnAttrs, forceOffAttrs; + int flags; NSUInteger styleMask; +} macClassAttrs[] = { + [kAlertWindowClass] = { + .defaultAttrs = kWindowDoesNotCycleAttribute, }, + [kMovableAlertWindowClass] = { + .defaultAttrs = kWindowDoesNotCycleAttribute, }, + [kModalWindowClass] = { + .defaultAttrs = kWindowDoesNotCycleAttribute, }, + [kMovableModalWindowClass] = { + .validAttrs = kWindowCloseBoxAttribute | kWindowMetalAttribute | + kWindowFullZoomAttribute | kWindowResizableAttribute, + .defaultAttrs = kWindowDoesNotCycleAttribute, }, + [kFloatingWindowClass] = { + .validAttrs = kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute | + kWindowMetalAttribute | kWindowToolbarButtonAttribute | + kWindowNoTitleBarAttribute | kWindowFullZoomAttribute | + kWindowResizableAttribute | kWindowSideTitlebarAttribute, + .defaultAttrs = kWindowStandardFloatingAttributes | + kWindowHideOnSuspendAttribute | kWindowDoesNotCycleAttribute, + .forceOnAttrs = kWindowResizableAttribute, + .forceOffAttrs = kWindowCollapseBoxAttribute, + .styleMask = NSUtilityWindowMask, }, + [kDocumentWindowClass] = { + .validAttrs = kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute | + kWindowMetalAttribute | kWindowToolbarButtonAttribute | + kWindowNoTitleBarAttribute | + kWindowUnifiedTitleAndToolbarAttribute | + kWindowInWindowMenuAttribute | kWindowFullZoomAttribute | + kWindowResizableAttribute, + .forceOnAttrs = kWindowResizableAttribute, + .defaultAttrs = kWindowStandardDocumentAttributes | + kWindowLiveResizeAttribute | kWindowInWindowMenuAttribute, }, + [kUtilityWindowClass] = { + .validAttrs = kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute | + kWindowMetalAttribute | kWindowToolbarButtonAttribute | + kWindowNoTitleBarAttribute | kWindowFullZoomAttribute | + kWindowResizableAttribute | kWindowSideTitlebarAttribute, + .defaultAttrs = kWindowStandardFloatingAttributes | + kWindowHideOnFullScreenAttribute | + tkWindowDoesNotHideAttribute | tkNonactivatingPanelAttribute | + kWindowDoesNotCycleAttribute, + .forceOnAttrs = kWindowResizableAttribute, + .forceOffAttrs = kWindowCollapseBoxAttribute, + .flags = WM_TOPMOST, + .styleMask = NSUtilityWindowMask, }, + [kHelpWindowClass] = { + .defaultAttrs = kWindowHideOnSuspendAttribute, + .forceOnAttrs = kWindowNoTitleBarAttribute | + kWindowDoesNotCycleAttribute, + .flags = WM_TOPMOST, }, + [kSheetWindowClass] = { + .validAttrs = kWindowResizableAttribute, + .forceOnAttrs = kWindowNoTitleBarAttribute | + kWindowDoesNotCycleAttribute, + .styleMask = NSDocModalWindowMask, }, + [kToolbarWindowClass] = { + .defaultAttrs = kWindowHideOnSuspendAttribute, + .forceOnAttrs = kWindowNoTitleBarAttribute | + kWindowDoesNotCycleAttribute, + .styleMask = NSUtilityWindowMask, }, + [kPlainWindowClass] = { + .defaultAttrs = kWindowDoesNotCycleAttribute, + .forceOnAttrs = kWindowNoTitleBarAttribute, }, + [kOverlayWindowClass] = { + .forceOnAttrs = kWindowNoTitleBarAttribute | + kWindowDoesNotCycleAttribute, + .flags = WM_TOPMOST | WM_TRANSPARENT, }, + [kSheetAlertWindowClass] = { + .forceOnAttrs = kWindowNoTitleBarAttribute | + kWindowDoesNotCycleAttribute, + .styleMask = NSDocModalWindowMask, }, + [kAltPlainWindowClass] = { + .defaultAttrs = kWindowDoesNotCycleAttribute, + .forceOnAttrs = kWindowNoTitleBarAttribute, }, + [kSimpleWindowClass] = { + .defaultAttrs = kWindowDoesNotCycleAttribute, + .forceOnAttrs = kWindowNoTitleBarAttribute, }, + [kDrawerWindowClass] = { + .validAttrs = kWindowMetalAttribute | kWindowResizableAttribute, + .forceOnAttrs = kWindowNoTitleBarAttribute | + kWindowDoesNotCycleAttribute, }, +}; + +#define ForceAttributes(attributes, class) \ + ((attributes) & (~macClassAttrs[(class)].forceOffAttrs | \ + (macClassAttrs[(class)].forceOnAttrs & ~kWindowResizableAttribute))) + +/* * Data for [wm attributes] command: */ + typedef enum { - WMATT_ALPHA, WMATT_FULLSCREEN, WMATT_MODIFIED,/* WMATT_NOTIFY,*/ + WMATT_ALPHA, WMATT_FULLSCREEN, WMATT_MODIFIED, WMATT_NOTIFY, WMATT_TITLEPATH, WMATT_TOPMOST, WMATT_TRANSPARENT, _WMATT_LAST_ATTRIBUTE } WmAttribute; -static const char *WmAttributeNames[] = { - "-alpha", "-fullscreen", "-modified",/* "-notify",*/ +static const char *const WmAttributeNames[] = { + "-alpha", "-fullscreen", "-modified", "-notify", "-titlepath", "-topmost", "-transparent", NULL }; /* - * This is a list of all of the toplevels that have been mapped so far. It is - * used by the menu code to inval windows that were damaged by menus, and will - * eventually also be used to keep track of floating windows. - */ - -TkMacOSXWindowList *tkMacOSXWindowListPtr = NULL; - -/* - * The variable below is used to enable or disable tracing in this - * module. If tracing is enabled, then information is printed on - * standard output about interesting interactions with the window - * manager. + * The variable below is used to enable or disable tracing in this module. If + * tracing is enabled, then information is printed on standard output about + * interesting interactions with the window manager. */ static int wmTracing = 0; /* - * The following structure is the official type record for geometry - * management of top-level windows. + * The following structure is the official type record for geometry management + * of top-level windows. */ static void TopLevelReqProc(ClientData dummy, Tk_Window tkwin); -static /* const */ Tk_GeomMgr wmMgrType = { - "wm", /* name */ - TopLevelReqProc, /* requestProc */ - (Tk_GeomLostSlaveProc *) NULL, /* lostSlaveProc */ +static const Tk_GeomMgr wmMgrType = { + "wm", /* name */ + TopLevelReqProc, /* requestProc */ + NULL, /* lostSlaveProc */ }; /* * The following keeps state for Aqua dock icon bounce notification. */ -#if 0 static int tkMacOSXWmAttrNotifyVal = 0; -#endif /* * Hash table for Mac Window -> TkWindow mapping. @@ -90,106 +199,299 @@ static int windowHashInit = false; * Forward declarations for procedures defined in this file: */ -static void InitialWindowBounds(TkWindow *winPtr, WindowRef macWindow, - Rect *geometry); -static int ParseGeometry(Tcl_Interp *interp, char *string, TkWindow *winPtr); -static void TopLevelEventProc(ClientData clientData, XEvent *eventPtr); -static void WmStackorderToplevelWrapperMap(TkWindow *winPtr, Display *display, - Tcl_HashTable *table); -static void UpdateGeometryInfo(ClientData clientData); -static void UpdateSizeHints(TkWindow *winPtr); -static void UpdateVRootGeometry(WmInfo *wmPtr); -static int WmAspectCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmAttributesCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmClientCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmColormapwindowsCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmCommandCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmDeiconifyCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmFocusmodelCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -#if 0 -static int WmForgetCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -#endif -static int WmFrameCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmGeometryCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmGridCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmGroupCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmIconbitmapCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmIconifyCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmIconmaskCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmIconnameCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmIconphotoCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmIconpositionCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmIconwindowCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -#if 0 -static int WmManageCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); +static NSRect InitialWindowBounds(TkWindow *winPtr, + NSWindow *macWindow); +static int ParseGeometry(Tcl_Interp *interp, char *string, + TkWindow *winPtr); +static void TopLevelEventProc(ClientData clientData, + XEvent *eventPtr); +static void WmStackorderToplevelWrapperMap(TkWindow *winPtr, + Display *display, Tcl_HashTable *table); +static void UpdateGeometryInfo(ClientData clientData); +static void UpdateSizeHints(TkWindow *winPtr); +static void UpdateVRootGeometry(WmInfo *wmPtr); +static int WmAspectCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmAttributesCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmClientCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmColormapwindowsCmd(Tk_Window tkwin, + TkWindow *winPtr, Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmCommandCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmDeiconifyCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmFocusmodelCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmForgetCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmFrameCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmGeometryCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmGridCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmGroupCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmIconbitmapCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmIconifyCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmIconmaskCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmIconnameCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmIconphotoCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmIconpositionCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmIconwindowCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmManageCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmMaxsizeCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmMinsizeCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmOverrideredirectCmd(Tk_Window tkwin, + TkWindow *winPtr, Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmPositionfromCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmProtocolCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmResizableCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmSizefromCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmStackorderCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmStateCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmTitleCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmTransientCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static int WmWithdrawCmd(Tk_Window tkwin, TkWindow *winPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj *const objv[]); +static void WmUpdateGeom(WmInfo *wmPtr, TkWindow *winPtr); +static int WmWinStyle(Tcl_Interp *interp, TkWindow *winPtr, + int objc, Tcl_Obj *const objv[]); +static void ApplyWindowAttributeFlagChanges(TkWindow *winPtr, + NSWindow *macWindow, UInt64 oldAttributes, + int oldFlags, int create, int initial); +static void ApplyMasterOverrideChanges(TkWindow *winPtr, + NSWindow *macWindow); +static void GetMinSize(TkWindow *winPtr, int *minWidthPtr, + int *minHeightPtr); +static void GetMaxSize(TkWindow *winPtr, int *maxWidthPtr, + int *maxHeightPtr); +static void RemapWindows(TkWindow *winPtr, + MacDrawable *parentWin); + +#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060 +#define TK_GOT_AT_LEAST_SNOW_LEOPARD 1 #endif -static int WmMaxsizeCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmMinsizeCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmOverrideredirectCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmPositionfromCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmProtocolCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmResizableCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmSizefromCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmStackorderCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmStateCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmTitleCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static int WmTransientCmd(Tk_Window tkwin, TkWindow *winPtr, - Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); -static int WmWithdrawCmd(Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, - int objc, Tcl_Obj *const objv[]); -static void WmUpdateGeom(WmInfo *wmPtr, TkWindow *winPtr); -static int WmWinStyle(Tcl_Interp *interp, TkWindow *winPtr, int objc, - Tcl_Obj * const objv[]); -static void ApplyWindowClassAttributeChanges(TkWindow *winPtr, - WindowRef macWindow, WindowClass oldClass, - WindowAttributes oldAttributes, int create); -static void ApplyMasterOverrideChanges(TkWindow *winPtr, WindowRef macWindow); -static WindowGroupRef WmGetWindowGroup(TkWindow *winPtr); -static void GetMinSize(TkWindow *winPtr, int *minWidthPtr, int *minHeightPtr); -static void GetMaxSize(TkWindow *winPtr, int *maxWidthPtr, int *maxHeightPtr); -#if 0 -static void RemapWindows(TkWindow *winPtr, MacDrawable *parentWin); + +#pragma mark TKWindow(TKWm) + +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 +@interface NSWindow(TkWm) +- (void) setCanCycle: (BOOL) canCycleFlag; +@end #endif +@interface NSDrawerWindow : NSWindow +{ + id _i1, _i2; +} +@end + +@implementation TKWindow +@end + +@implementation TKWindow(TKWm) +- (BOOL) canBecomeKeyWindow +{ + TkWindow *winPtr = TkMacOSXGetTkWindow(self); + + return (winPtr && winPtr->wmInfoPtr && (winPtr->wmInfoPtr->macClass == + kHelpWindowClass || winPtr->wmInfoPtr->attributes & + kWindowNoActivatesAttribute)) ? NO : YES; +} +@end + +#pragma mark - + +/* + *---------------------------------------------------------------------- + * + * SetWindowSizeLimits -- + * + * Sets NSWindow size limits + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +static void +SetWindowSizeLimits( + TkWindow *winPtr) +{ + NSWindow *macWindow = TkMacOSXDrawableWindow(winPtr->window); + WmInfo *wmPtr = winPtr->wmInfoPtr; + int minWidth, minHeight, maxWidth, maxHeight, base; + + if (!macWindow) { + return; + } + GetMinSize(winPtr, &minWidth, &minHeight); + GetMaxSize(winPtr, &maxWidth, &maxHeight); + if (wmPtr->gridWin) { + base = winPtr->reqWidth - (wmPtr->reqGridWidth * wmPtr->widthInc); + if (base < 0) { + base = 0; + } + minWidth = base + (minWidth * wmPtr->widthInc); + maxWidth = base + (maxWidth * wmPtr->widthInc); + base = winPtr->reqHeight - (wmPtr->reqGridHeight * wmPtr->heightInc); + if (base < 0) { + base = 0; + } + minHeight = base + (minHeight * wmPtr->heightInc); + maxHeight = base + (maxHeight * wmPtr->heightInc); + } + if (wmPtr->flags & WM_WIDTH_NOT_RESIZABLE) { + minWidth = maxWidth = wmPtr->configWidth; + } + if (wmPtr->flags & WM_HEIGHT_NOT_RESIZABLE) { + minHeight = maxHeight = wmPtr->configHeight; + } + if (wmPtr->gridWin) { + [macWindow setResizeIncrements:NSMakeSize(wmPtr->widthInc, + wmPtr->heightInc)]; + } else if (wmPtr->sizeHintsFlags & PAspect && wmPtr->minAspect.x == + wmPtr->maxAspect.x && wmPtr->minAspect.y == wmPtr->maxAspect.y) { + NSSize aspect = NSMakeSize(wmPtr->minAspect.x, wmPtr->minAspect.y); + CGFloat ratio = aspect.width/aspect.height; + [macWindow setContentAspectRatio:aspect]; + if ((CGFloat)minWidth/(CGFloat)minHeight > ratio) { + minHeight = lround(minWidth / ratio); + } else { + minWidth = lround(minHeight * ratio); + } + if ((CGFloat)maxWidth/(CGFloat)maxHeight > ratio) { + maxWidth = lround(maxHeight * ratio); + } else { + maxHeight = lround(maxWidth / ratio); + } + if ((CGFloat)wmPtr->configWidth/(CGFloat)wmPtr->configHeight > ratio) { + wmPtr->configWidth = lround(wmPtr->configHeight * ratio); + if (wmPtr->configWidth < minWidth) { + wmPtr->configWidth = minWidth; + wmPtr->configHeight = minHeight; + } + } else { + wmPtr->configHeight = lround(wmPtr->configWidth / ratio); + if (wmPtr->configHeight < minHeight) { + wmPtr->configWidth = minWidth; + wmPtr->configHeight = minHeight; + } + } + } else { + [macWindow setResizeIncrements:NSMakeSize(1.0, 1.0)]; + } + [macWindow setContentMinSize:NSMakeSize(minWidth, minHeight)]; + [macWindow setContentMaxSize:NSMakeSize(maxWidth, maxHeight)]; +} + +/* + *---------------------------------------------------------------------- + * + * FrontWindowAtPoint -- + * + * Find frontmost toplevel window at a given screen location. + * + * Results: + * TkWindow*. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +static TkWindow* +FrontWindowAtPoint( + int x, int y) +{ + + NSPoint p = NSMakePoint(x, tkMacOSXZeroScreenHeight - y); + NSWindow *win = nil; + NSInteger windowCount; + NSInteger *windowNumbers; + + NSCountWindows(&windowCount); + if (windowCount) { + windowNumbers = (NSInteger *) ckalloc(windowCount * sizeof(NSInteger)); + NSWindowList(windowCount, windowNumbers); + for (NSInteger index = 0; index < windowCount; index++) { + NSWindow *w = [NSApp windowWithWindowNumber:windowNumbers[index]]; + if (w && NSMouseInRect(p, [w frame], NO)) { + win = w; + break; + } + } + ckfree((char *) windowNumbers); + } + return (win ? TkMacOSXGetTkWindow(win) : NULL); +} + /* *---------------------------------------------------------------------- * * TkWmNewWindow -- * - * This procedure is invoked whenever a new top-level - * window is created. Its job is to initialize the WmInfo - * structure for the window. + * This procedure is invoked whenever a new top-level window is created. + * Its job is to initialize the WmInfo structure for the window. * * Results: * None. @@ -204,9 +506,8 @@ void TkWmNewWindow( TkWindow *winPtr) /* Newly-created top-level window. */ { - WmInfo *wmPtr; + WmInfo *wmPtr = (WmInfo *) ckalloc(sizeof(WmInfo)); - wmPtr = (WmInfo *) ckalloc(sizeof(WmInfo)); wmPtr->winPtr = winPtr; wmPtr->reparent = None; wmPtr->titleUid = NULL; @@ -239,9 +540,9 @@ TkWmNewWindow( wmPtr->x = winPtr->changes.x; wmPtr->y = winPtr->changes.y; wmPtr->parentWidth = winPtr->changes.width - + 2*winPtr->changes.border_width; + + 2*winPtr->changes.border_width; wmPtr->parentHeight = winPtr->changes.height - + 2*winPtr->changes.border_width; + + 2*winPtr->changes.border_width; wmPtr->xInParent = 0; wmPtr->yInParent = 0; wmPtr->cmapList = NULL; @@ -255,26 +556,27 @@ TkWmNewWindow( wmPtr->cmdArgv = NULL; wmPtr->clientMachine = NULL; wmPtr->flags = WM_NEVER_MAPPED; - wmPtr->style = -1; wmPtr->macClass = kDocumentWindowClass; - wmPtr->attributes = kWindowStandardDocumentAttributes - | kWindowLiveResizeAttribute; + wmPtr->attributes = macClassAttrs[kDocumentWindowClass].defaultAttrs; wmPtr->scrollWinPtr = NULL; + wmPtr->menuPtr = NULL; + wmPtr->window = nil; winPtr->wmInfoPtr = wmPtr; UpdateVRootGeometry(wmPtr); + /* - * Tk must monitor structure events for top-level windows, in order - * to detect size and position changes caused by window managers. + * Tk must monitor structure events for top-level windows, in order to + * detect size and position changes caused by window managers. */ Tk_CreateEventHandler((Tk_Window) winPtr, StructureNotifyMask, - TopLevelEventProc, (ClientData) winPtr); + TopLevelEventProc, winPtr); /* - * Arrange for geometry requests to be reflected from the window - * to the window manager. + * Arrange for geometry requests to be reflected from the window to the + * window manager. */ Tk_ManageGeometry((Tk_Window) winPtr, &wmMgrType, (ClientData) 0); @@ -285,51 +587,52 @@ TkWmNewWindow( * * TkWmMapWindow -- * - * This procedure is invoked to map a top-level window. This - * module gets a chance to update all window-manager-related - * information in properties before the window manager sees - * the map event and checks the properties. It also gets to - * decide whether or not to even map the window after all. + * This procedure is invoked to map a top-level window. This module gets + * a chance to update all window-manager-related information in + * properties before the window manager sees the map event and checks the + * properties. It also gets to decide whether or not to even map the + * window after all. * * Results: * None. * * Side effects: - * Properties of winPtr may get updated to provide up-to-date - * information to the window manager. The window may also get - * mapped, but it may not be if this procedure decides that - * isn't appropriate (e.g. because the window is withdrawn). + * Properties of winPtr may get updated to provide up-to-date information + * to the window manager. The window may also get mapped, but it may not + * be if this procedure decides that isn't appropriate (e.g. because the + * window is withdrawn). * *---------------------------------------------------------------------- */ void TkWmMapWindow( - TkWindow *winPtr) /* Top-level window that's about to - * be mapped. */ + TkWindow *winPtr) /* Top-level window that's about to be + * mapped. */ { WmInfo *wmPtr = winPtr->wmInfoPtr; if (wmPtr->flags & WM_NEVER_MAPPED) { - wmPtr->flags &= ~WM_NEVER_MAPPED; - /* * Create the underlying Mac window for this Tk window. */ + if (!TkMacOSXHostToplevelExists(winPtr)) { TkMacOSXMakeRealWindowExist(winPtr); } + wmPtr->flags &= ~WM_NEVER_MAPPED; + /* * Generate configure event when we first map the window. */ + TkGenWMConfigureEvent((Tk_Window) winPtr, wmPtr->x, wmPtr->y, -1, -1, TK_LOCATION_CHANGED); /* - * This is the first time this window has ever been mapped. - * Store all the window-manager-related information for the - * window. + * This is the first time this window has ever been mapped. Store all + * the window-manager-related information for the window. */ if (wmPtr->titleUid == NULL) { @@ -363,11 +666,12 @@ TkWmMapWindow( /* * Update geometry information. */ + wmPtr->flags |= WM_ABOUT_TO_MAP; if (wmPtr->flags & WM_UPDATE_PENDING) { - Tk_CancelIdleCall(UpdateGeometryInfo, (ClientData) winPtr); + Tk_CancelIdleCall(UpdateGeometryInfo, winPtr); } - UpdateGeometryInfo((ClientData) winPtr); + UpdateGeometryInfo(winPtr); wmPtr->flags &= ~WM_ABOUT_TO_MAP; /* @@ -382,8 +686,8 @@ TkWmMapWindow( * * TkWmUnmapWindow -- * - * This procedure is invoked to unmap a top-level window. - * On the Macintosh all we do is call XUnmapWindow. + * This procedure is invoked to unmap a top-level window. On the + * Macintosh all we do is call XUnmapWindow. * * Results: * None. @@ -396,8 +700,8 @@ TkWmMapWindow( void TkWmUnmapWindow( - TkWindow *winPtr) /* Top-level window that's about to - * be mapped. */ + TkWindow *winPtr) /* Top-level window that's about to be + * mapped. */ { XUnmapWindow(winPtr->display, winPtr->window); } @@ -407,9 +711,8 @@ TkWmUnmapWindow( * * TkWmDeadWindow -- * - * This procedure is invoked when a top-level window is - * about to be deleted. It cleans up the wm-related data - * structures for the window. + * This procedure is invoked when a top-level window is about to be + * deleted. It cleans up the wm-related data structures for the window. * * Results: * None. @@ -424,12 +727,14 @@ void TkWmDeadWindow( TkWindow *winPtr) /* Top-level window that's being deleted. */ { - WmInfo *wmPtr = winPtr->wmInfoPtr; - WmInfo *wmPtr2; + WmInfo *wmPtr = winPtr->wmInfoPtr, *wmPtr2; if (wmPtr == NULL) { return; } + Tk_ManageGeometry((Tk_Window) winPtr, NULL, NULL); + Tk_DeleteEventHandler((Tk_Window) winPtr, StructureNotifyMask, + TopLevelEventProc, winPtr); if (wmPtr->hints.flags & IconPixmapHint) { Tk_FreeBitmap(winPtr->display, wmPtr->hints.icon_pixmap); } @@ -459,17 +764,36 @@ TkWmDeadWindow( protPtr = wmPtr->protPtr; wmPtr->protPtr = protPtr->nextPtr; - Tcl_EventuallyFree((ClientData) protPtr, TCL_DYNAMIC); + Tcl_EventuallyFree(protPtr, TCL_DYNAMIC); } if (wmPtr->cmdArgv != NULL) { ckfree((char *) wmPtr->cmdArgv); } if (wmPtr->clientMachine != NULL) { - ckfree((char *) wmPtr->clientMachine); + ckfree(wmPtr->clientMachine); } if (wmPtr->flags & WM_UPDATE_PENDING) { - Tk_CancelIdleCall(UpdateGeometryInfo, (ClientData) winPtr); + Tk_CancelIdleCall(UpdateGeometryInfo, winPtr); + } + + /* + * Delete the Mac window and remove it from the windowTable. The window + * could be nil if the window was never mapped. However, we don't do this + * for embedded windows, they don't go in the window list, and they do not + * own their portPtr's. + */ + + NSWindow *window = wmPtr->window; + if (window && !Tk_IsEmbedded(winPtr) ) { + [[window parentWindow] removeChildWindow:window]; + [window close]; + TkMacOSXUnregisterMacWindow(window); + if (winPtr->window) { + ((MacDrawable *)winPtr->window)->view = nil; + } + TkMacOSXMakeCollectableAndRelease(wmPtr->window); } + ckfree((char *) wmPtr); winPtr->wmInfoPtr = NULL; } @@ -479,11 +803,10 @@ TkWmDeadWindow( * * TkWmSetClass -- * - * This procedure is invoked whenever a top-level window's - * class is changed. If the window has been mapped then this - * procedure updates the window manager property for the - * class. If the window hasn't been mapped, the update is - * deferred until just before the first mapping. + * This procedure is invoked whenever a top-level window's class is + * changed. If the window has been mapped then this procedure updates the + * window manager property for the class. If the window hasn't been + * mapped, the update is deferred until just before the first mapping. * * Results: * None. @@ -506,8 +829,8 @@ TkWmSetClass( * * Tk_WmObjCmd -- * - * This procedure is invoked to process the "wm" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm" Tcl command. See the + * user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -527,23 +850,23 @@ Tk_WmObjCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { Tk_Window tkwin = (Tk_Window) clientData; - static const char *optionStrings[] = { + static const char *const optionStrings[] = { "aspect", "attributes", "client", "colormapwindows", - "command", "deiconify", "focusmodel",/* "forget",*/ + "command", "deiconify", "focusmodel", "forget", "frame", "geometry", "grid", "group", "iconbitmap", "iconify", "iconmask", "iconname", "iconphoto", "iconposition", "iconwindow", - /*"manage", */"maxsize", "minsize", "overrideredirect", + "manage", "maxsize", "minsize", "overrideredirect", "positionfrom", "protocol", "resizable", "sizefrom", "stackorder", "state", "title", "transient", "withdraw", NULL }; enum options { WMOPT_ASPECT, WMOPT_ATTRIBUTES, WMOPT_CLIENT, WMOPT_COLORMAPWINDOWS, - WMOPT_COMMAND, WMOPT_DEICONIFY, WMOPT_FOCUSMODEL,/* WMOPT_FORGET,*/ + WMOPT_COMMAND, WMOPT_DEICONIFY, WMOPT_FOCUSMODEL, WMOPT_FORGET, WMOPT_FRAME, WMOPT_GEOMETRY, WMOPT_GRID, WMOPT_GROUP, WMOPT_ICONBITMAP, WMOPT_ICONIFY, WMOPT_ICONMASK, WMOPT_ICONNAME, WMOPT_ICONPHOTO, WMOPT_ICONPOSITION, WMOPT_ICONWINDOW, - /*WMOPT_MANAGE, */WMOPT_MAXSIZE, WMOPT_MINSIZE, WMOPT_OVERRIDEREDIRECT, + WMOPT_MANAGE, WMOPT_MAXSIZE, WMOPT_MINSIZE, WMOPT_OVERRIDEREDIRECT, WMOPT_POSITIONFROM, WMOPT_PROTOCOL, WMOPT_RESIZABLE, WMOPT_SIZEFROM, WMOPT_STACKORDER, WMOPT_STATE, WMOPT_TITLE, WMOPT_TRANSIENT, WMOPT_WITHDRAW }; @@ -552,7 +875,7 @@ Tk_WmObjCmd( TkWindow *winPtr; if (objc < 2) { -wrongNumArgs: + wrongNumArgs: Tcl_WrongNumArgs(interp, 1, objv, "option window ?arg ...?"); return TCL_ERROR; } @@ -572,7 +895,7 @@ wrongNumArgs: } if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, - &index) != TCL_OK) { + &index) != TCL_OK) { return TCL_ERROR; } @@ -585,84 +908,77 @@ wrongNumArgs: return TCL_ERROR; } if (!Tk_IsTopLevel(winPtr) -#if 0 - && (index != WMOPT_MANAGE) && (index != WMOPT_FORGET) -#endif - ) { + && (index != WMOPT_MANAGE) && (index != WMOPT_FORGET)) { Tcl_AppendResult(interp, "window \"", winPtr->pathName, "\" isn't a top-level window", NULL); return TCL_ERROR; } switch ((enum options) index) { - case WMOPT_ASPECT: - return WmAspectCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ATTRIBUTES: - return WmAttributesCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_CLIENT: - return WmClientCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_COLORMAPWINDOWS: - return WmColormapwindowsCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_COMMAND: - return WmCommandCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_DEICONIFY: - return WmDeiconifyCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_FOCUSMODEL: - return WmFocusmodelCmd(tkwin, winPtr, interp, objc, objv); -#if 0 - case WMOPT_FORGET: - return WmForgetCmd(tkwin, winPtr, interp, objc, objv); -#endif - case WMOPT_FRAME: - return WmFrameCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_GEOMETRY: - return WmGeometryCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_GRID: - return WmGridCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_GROUP: - return WmGroupCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ICONBITMAP: - return WmIconbitmapCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ICONIFY: - return WmIconifyCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ICONMASK: - return WmIconmaskCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ICONNAME: - return WmIconnameCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ICONPHOTO: - return WmIconphotoCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ICONPOSITION: - return WmIconpositionCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_ICONWINDOW: - return WmIconwindowCmd(tkwin, winPtr, interp, objc, objv); -#if 0 - case WMOPT_MANAGE: - return WmManageCmd(tkwin, winPtr, interp, objc, objv); -#endif - case WMOPT_MAXSIZE: - return WmMaxsizeCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_MINSIZE: - return WmMinsizeCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_OVERRIDEREDIRECT: - return WmOverrideredirectCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_POSITIONFROM: - return WmPositionfromCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_PROTOCOL: - return WmProtocolCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_RESIZABLE: - return WmResizableCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_SIZEFROM: - return WmSizefromCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_STACKORDER: - return WmStackorderCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_STATE: - return WmStateCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_TITLE: - return WmTitleCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_TRANSIENT: - return WmTransientCmd(tkwin, winPtr, interp, objc, objv); - case WMOPT_WITHDRAW: - return WmWithdrawCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ASPECT: + return WmAspectCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ATTRIBUTES: + return WmAttributesCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_CLIENT: + return WmClientCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_COLORMAPWINDOWS: + return WmColormapwindowsCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_COMMAND: + return WmCommandCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_DEICONIFY: + return WmDeiconifyCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_FOCUSMODEL: + return WmFocusmodelCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_FORGET: + return WmForgetCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_FRAME: + return WmFrameCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_GEOMETRY: + return WmGeometryCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_GRID: + return WmGridCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_GROUP: + return WmGroupCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONBITMAP: + return WmIconbitmapCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONIFY: + return WmIconifyCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONMASK: + return WmIconmaskCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONNAME: + return WmIconnameCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONPHOTO: + return WmIconphotoCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONPOSITION: + return WmIconpositionCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONWINDOW: + return WmIconwindowCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_MANAGE: + return WmManageCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_MAXSIZE: + return WmMaxsizeCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_MINSIZE: + return WmMinsizeCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_OVERRIDEREDIRECT: + return WmOverrideredirectCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_POSITIONFROM: + return WmPositionfromCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_PROTOCOL: + return WmProtocolCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_RESIZABLE: + return WmResizableCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_SIZEFROM: + return WmSizefromCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_STACKORDER: + return WmStackorderCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_STATE: + return WmStateCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_TITLE: + return WmTitleCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_TRANSIENT: + return WmTransientCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_WITHDRAW: + return WmWithdrawCmd(tkwin, winPtr, interp, objc, objv); } /* This should not happen */ @@ -674,8 +990,8 @@ wrongNumArgs: * * WmAspectCmd -- * - * This procedure is invoked to process the "wm aspect" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm aspect" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -717,15 +1033,14 @@ WmAspectCmd( wmPtr->sizeHintsFlags &= ~PAspect; } else { if ((Tcl_GetIntFromObj(interp, objv[3], &numer1) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[4], &denom1) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[5], &numer2) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[6], &denom2) != TCL_OK)) { + || (Tcl_GetIntFromObj(interp, objv[4], &denom1) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[5], &numer2) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[6], &denom2) != TCL_OK)) { return TCL_ERROR; } if ((numer1 <= 0) || (denom1 <= 0) || (numer2 <= 0) || - (denom2 <= 0)) { - Tcl_SetResult(interp, "aspect number can't be <= 0", - TCL_STATIC); + (denom2 <= 0)) { + Tcl_SetResult(interp, "aspect number can't be <= 0", TCL_STATIC); return TCL_ERROR; } wmPtr->minAspect.x = numer1; @@ -744,19 +1059,21 @@ WmAspectCmd( * * WmSetAttribute -- * - * Helper routine for WmAttributesCmd. Sets the value - * of the specified attribute. + * Helper routine for WmAttributesCmd. Sets the value of the specified + * attribute. * * Returns: * - * TCL_OK if successful, TCL_ERROR otherwise. In case of an - * error, leaves a message in the interpreter's result. + * TCL_OK if successful, TCL_ERROR otherwise. In case of an error, leaves + * a message in the interpreter's result. * *---------------------------------------------------------------------- */ -static int WmSetAttribute( + +static int +WmSetAttribute( TkWindow *winPtr, /* Toplevel to work with */ - WindowRef macWindow, + NSWindow *macWindow, Tcl_Interp *interp, /* Current interpreter */ WmAttribute attribute, /* Code of attribute to set */ Tcl_Obj *value) /* New value */ @@ -765,154 +1082,113 @@ static int WmSetAttribute( int boolean; switch (attribute) { - case WMATT_ALPHA: { - double dval; + case WMATT_ALPHA: { + double dval; - if (Tcl_GetDoubleFromObj(interp, value, &dval) != TCL_OK) { - return TCL_ERROR; - } - /* - * The user should give (transparent) 0 .. 1.0 (opaque) - */ - if (dval < 0.0) { - dval = 0.0; - } else if (dval > 1.0) { - dval = 1.0; - } - ChkErr(SetWindowAlpha, macWindow, dval); - break; + if (Tcl_GetDoubleFromObj(interp, value, &dval) != TCL_OK) { + return TCL_ERROR; } - case WMATT_FULLSCREEN: - if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { - return TCL_ERROR; - } - if (boolean != ((wmPtr->flags & WM_FULLSCREEN) != 0)) { - if(TkMacOSXMakeFullscreen(winPtr, macWindow, boolean, interp) - != TCL_OK) { - return TCL_ERROR; - } - } - break; - case WMATT_MODIFIED: - if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { - return TCL_ERROR; - } - if (boolean != IsWindowModified(macWindow)) { - ChkErr(SetWindowModified, macWindow, boolean); - } - break; -#if 0 - case WMATT_NOTIFY: - if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { + + /* + * The user should give (transparent) 0 .. 1.0 (opaque) + */ + + if (dval < 0.0) { + dval = 0.0; + } else if (dval > 1.0) { + dval = 1.0; + } + [macWindow setAlphaValue:dval]; + break; + } + case WMATT_FULLSCREEN: + if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { + return TCL_ERROR; + } + if (boolean != ((wmPtr->flags & WM_FULLSCREEN) != 0)) { + if (TkMacOSXMakeFullscreen(winPtr, macWindow, boolean, interp) + != TCL_OK) { return TCL_ERROR; } - if (boolean == !tkMacOSXWmAttrNotifyVal) { - static NMRec notifyRec; - - if (boolean) { - bzero(¬ifyRec, sizeof(notifyRec)); - notifyRec.qType = nmType; - notifyRec.nmMark = 1; - ChkErr(NMInstall, ¬ifyRec); - } else { - ChkErr(NMRemove, ¬ifyRec); - } - tkMacOSXWmAttrNotifyVal = boolean; - } - break; -#endif - case WMATT_TITLEPATH: { - const char *path; - OSStatus err; - - path = Tcl_FSGetNativePath(value); - if (path && *path) { - FSRef ref; - Boolean d; - - err = ChkErr(FSPathMakeRef, (const unsigned char*) path, &ref, - &d); - if (err == noErr) { - TK_IF_MAC_OS_X_API (4, HIWindowSetProxyFSRef, - err = ChkErr(HIWindowSetProxyFSRef, macWindow, &ref); - ) TK_ELSE_MAC_OS_X (4, - AliasHandle alias; - - err = ChkErr(FSNewAlias, NULL, &ref, &alias); - if (err == noErr) { - err = ChkErr(SetWindowProxyAlias, macWindow, - alias); - DisposeHandle((Handle) alias); - } - ) TK_ENDIF - } - } else { - int len; + } + break; + case WMATT_MODIFIED: + if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { + return TCL_ERROR; + } + if (boolean != [macWindow isDocumentEdited]) { + [macWindow setDocumentEdited:boolean]; + } + break; + case WMATT_NOTIFY: + if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { + return TCL_ERROR; + } + if (boolean == !tkMacOSXWmAttrNotifyVal) { + static NSInteger request = -1; - Tcl_GetStringFromObj(value, &len); - if (!len) { - err = ChkErr(RemoveWindowProxy, macWindow); - } else { - err = fnfErr; - } + if (request >= 0) { + [NSApp cancelUserAttentionRequest:request]; + request = -1; } - if (err != noErr) { - return TCL_ERROR; + if (boolean) { + request = [NSApp requestUserAttention:NSCriticalRequest]; } - break; + tkMacOSXWmAttrNotifyVal = boolean; } - case WMATT_TOPMOST: { - if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { - return TCL_ERROR; - } - if (boolean != ((wmPtr->flags & WM_TOPMOST) != 0)) { - WindowGroupRef group; + break; + case WMATT_TITLEPATH: { + const char *path = Tcl_FSGetNativePath(value); + NSString *filename = @""; - if (boolean) { - wmPtr->flags |= WM_TOPMOST; - } else { - wmPtr->flags &= ~WM_TOPMOST; - } - group = WmGetWindowGroup(winPtr); - if (group && group != GetWindowGroup(macWindow)) { - ChkErr(SetWindowGroup, macWindow, group); - } + if (path && *path) { + filename = [NSString stringWithUTF8String:path]; + } + [macWindow setRepresentedFilename:filename]; + break; + } + case WMATT_TOPMOST: + if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { + return TCL_ERROR; + } + if (boolean != ((wmPtr->flags & WM_TOPMOST) != 0)) { + int oldFlags = wmPtr->flags; + + if (boolean) { + wmPtr->flags |= WM_TOPMOST; + } else { + wmPtr->flags &= ~WM_TOPMOST; } - break; + ApplyWindowAttributeFlagChanges(winPtr, macWindow, + wmPtr->attributes, oldFlags, 1, 0); } - case WMATT_TRANSPARENT: - if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { - return TCL_ERROR; + break; + case WMATT_TRANSPARENT: + if (Tcl_GetBooleanFromObj(interp, value, &boolean) != TCL_OK) { + return TCL_ERROR; + } + if (boolean != ((wmPtr->flags & WM_TRANSPARENT) != 0)) { + UInt64 oldAttributes = wmPtr->attributes; + int oldFlags = wmPtr->flags; + + if (boolean) { + wmPtr->flags |= WM_TRANSPARENT; + wmPtr->attributes |= kWindowNoShadowAttribute; + } else { + wmPtr->flags &= ~WM_TRANSPARENT; + wmPtr->attributes &= ~kWindowNoShadowAttribute; } - if (boolean != ((wmPtr->flags & WM_TRANSPARENT) != 0)) { - WindowAttributes oldAttributes = wmPtr->attributes; - - if (boolean) { - wmPtr->flags |= WM_TRANSPARENT; - wmPtr->attributes |= kWindowNoShadowAttribute; - TK_IF_MAC_OS_X_API (3, HIWindowChangeFeatures, - UInt32 features; - - ChkErr(GetWindowFeatures, macWindow, &features); - if (features & kWindowIsOpaque) { - ChkErr(HIWindowChangeFeatures, macWindow, 0, - kWindowIsOpaque); - } - ) TK_ENDIF - } else { - wmPtr->flags &= ~WM_TRANSPARENT; - wmPtr->attributes &= ~kWindowNoShadowAttribute; - } - ApplyWindowClassAttributeChanges(winPtr, macWindow, - wmPtr->macClass, oldAttributes, 1); - ChkErr(ReshapeCustomWindow, macWindow); - TkMacOSXInvalidateWindow((MacDrawable *)(winPtr->window), - TK_PARENT_WINDOW); + ApplyWindowAttributeFlagChanges(winPtr, macWindow, oldAttributes, + oldFlags, 1, 0); + [macWindow setBackgroundColor:boolean ? [NSColor clearColor] : nil]; + [macWindow setOpaque:!boolean]; + TkMacOSXInvalidateWindow((MacDrawable *) winPtr->window, + TK_PARENT_WINDOW); } - break; - case _WMATT_LAST_ATTRIBUTE: - default: - return TCL_ERROR; + break; + case _WMATT_LAST_ATTRIBUTE: + default: + return TCL_ERROR; } return TCL_OK; } @@ -922,73 +1198,47 @@ static int WmSetAttribute( * * WmGetAttribute -- * - * Helper routine for WmAttributesCmd. Returns the current value - * of the specified attribute. + * Helper routine for WmAttributesCmd. Returns the current value of the + * specified attribute. * *---------------------------------------------------------------------- */ -static Tcl_Obj *WmGetAttribute( + +static Tcl_Obj * +WmGetAttribute( TkWindow *winPtr, /* Toplevel to work with */ - WindowRef macWindow, + NSWindow *macWindow, WmAttribute attribute) /* Code of attribute to get */ { - WmInfo *wmPtr = winPtr->wmInfoPtr; Tcl_Obj *result = NULL; + WmInfo *wmPtr = winPtr->wmInfoPtr; switch (attribute) { - case WMATT_ALPHA: { - float fval = 1.0; - - ChkErr(GetWindowAlpha, macWindow, &fval); - result = Tcl_NewDoubleObj(fval); - break; - } - case WMATT_FULLSCREEN: - result = Tcl_NewBooleanObj(wmPtr->flags & WM_FULLSCREEN); - break; - case WMATT_MODIFIED: - result = Tcl_NewBooleanObj(IsWindowModified(macWindow)); - break; -#if 0 - case WMATT_NOTIFY: - result = Tcl_NewBooleanObj(tkMacOSXWmAttrNotifyVal); - break; -#endif - case WMATT_TITLEPATH: { - FSRef ref; - UInt8 path[PATH_MAX+1]; - OSStatus err; - - TK_IF_MAC_OS_X_API (4, HIWindowSetProxyFSRef, - err = ChkErr(HIWindowGetProxyFSRef, macWindow, &ref); - ) TK_ELSE_MAC_OS_X (4, - Boolean wasChanged; - AliasHandle alias; - - err = ChkErr(GetWindowProxyAlias, macWindow, &alias); - if (err == noErr) { - err = ChkErr(FSResolveAlias, NULL, alias, &ref, - &wasChanged); - } - ) TK_ENDIF - if (err == noErr) { - err = ChkErr(FSRefMakePath, &ref, path, PATH_MAX); - } - if (err != noErr) { - *path = 0; - } - result = Tcl_NewStringObj((char*) path, -1); - break; - } - case WMATT_TOPMOST: - result = Tcl_NewBooleanObj(wmPtr->flags & WM_TOPMOST); - break; - case WMATT_TRANSPARENT: - result = Tcl_NewBooleanObj(wmPtr->flags & WM_TRANSPARENT); - break; - case _WMATT_LAST_ATTRIBUTE: - default: - break; + case WMATT_ALPHA: + result = Tcl_NewDoubleObj([macWindow alphaValue]); + break; + case WMATT_FULLSCREEN: + result = Tcl_NewBooleanObj(wmPtr->flags & WM_FULLSCREEN); + break; + case WMATT_MODIFIED: + result = Tcl_NewBooleanObj([macWindow isDocumentEdited]); + break; + case WMATT_NOTIFY: + result = Tcl_NewBooleanObj(tkMacOSXWmAttrNotifyVal); + break; + case WMATT_TITLEPATH: + result = Tcl_NewStringObj([[macWindow representedFilename] UTF8String], + -1); + break; + case WMATT_TOPMOST: + result = Tcl_NewBooleanObj(wmPtr->flags & WM_TOPMOST); + break; + case WMATT_TRANSPARENT: + result = Tcl_NewBooleanObj(wmPtr->flags & WM_TRANSPARENT); + break; + case _WMATT_LAST_ATTRIBUTE: + default: + break; } return result; } @@ -1019,7 +1269,7 @@ WmAttributesCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { int attribute = 0; - WindowRef macWindow; + NSWindow *macWindow; if (winPtr->window == None) { Tk_MakeWindowExist((Tk_Window) winPtr); @@ -1070,8 +1320,8 @@ WmAttributesCmd( * * WmClientCmd -- * - * This procedure is invoked to process the "wm client" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm client" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -1107,16 +1357,15 @@ WmClientCmd( argv3 = Tcl_GetStringFromObj(objv[3], &length); if (argv3[0] == 0) { if (wmPtr->clientMachine != NULL) { - ckfree((char *) wmPtr->clientMachine); + ckfree(wmPtr->clientMachine); wmPtr->clientMachine = NULL; } return TCL_OK; } if (wmPtr->clientMachine != NULL) { - ckfree((char *) wmPtr->clientMachine); + ckfree(wmPtr->clientMachine); } - wmPtr->clientMachine = (char *) - ckalloc((unsigned) (length + 1)); + wmPtr->clientMachine = ckalloc(length + 1); strcpy(wmPtr->clientMachine, argv3); return TCL_OK; } @@ -1126,9 +1375,8 @@ WmClientCmd( * * WmColormapwindowsCmd -- * - * This procedure is invoked to process the "wm colormapwindows" - * Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm colormapwindows" Tcl + * command. See the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -1172,12 +1420,10 @@ WmColormapwindowsCmd( != TCL_OK) { return TCL_ERROR; } - cmapList = (TkWindow **) ckalloc((unsigned) - ((windowObjc+1)*sizeof(TkWindow*))); + cmapList = (TkWindow **) ckalloc((windowObjc+1) * sizeof(TkWindow*)); for (i = 0; i < windowObjc; i++) { if (TkGetWindowFromObj(interp, tkwin, windowObjv[i], - (Tk_Window *) &winPtr2) != TCL_OK) - { + (Tk_Window *) &winPtr2) != TCL_OK) { ckfree((char *) cmapList); return TCL_ERROR; } @@ -1198,15 +1444,14 @@ WmColormapwindowsCmd( } wmPtr->flags |= WM_COLORMAPS_EXPLICIT; if (wmPtr->cmapList != NULL) { - ckfree((char *)wmPtr->cmapList); + ckfree((char *) wmPtr->cmapList); } wmPtr->cmapList = cmapList; wmPtr->cmapCount = windowObjc; /* - * On the Macintosh all of this is just an excercise - * in compatability as we don't support colormaps. If - * we did they would be installed here. + * On the Macintosh all of this is just an excercise in compatability as + * we don't support colormaps. If we did they would be installed here. */ return TCL_OK; @@ -1217,8 +1462,8 @@ WmColormapwindowsCmd( * * WmCommandCmd -- * - * This procedure is invoked to process the "wm command" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm command" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -1248,9 +1493,9 @@ WmCommandCmd( } if (objc == 3) { if (wmPtr->cmdArgv != NULL) { - Tcl_SetResult(interp, - Tcl_Merge(wmPtr->cmdArgc, wmPtr->cmdArgv), - TCL_DYNAMIC); + argv3 = Tcl_Merge(wmPtr->cmdArgc, wmPtr->cmdArgv); + Tcl_SetResult(interp, argv3, TCL_VOLATILE); + ckfree(argv3); } return TCL_OK; } @@ -1299,6 +1544,7 @@ WmDeiconifyCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { register WmInfo *wmPtr = winPtr->wmInfoPtr; + if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "window"); return TCL_ERROR; @@ -1344,7 +1590,7 @@ WmFocusmodelCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { register WmInfo *wmPtr = winPtr->wmInfoPtr; - static const char *optionStrings[] = { + static const char *const optionStrings[] = { "active", "passive", NULL }; enum options { OPT_ACTIVE, OPT_PASSIVE }; @@ -1361,7 +1607,7 @@ WmFocusmodelCmd( } if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, - &index) != TCL_OK) { + &index) != TCL_OK) { return TCL_ERROR; } if (index == OPT_ACTIVE) { @@ -1371,7 +1617,6 @@ WmFocusmodelCmd( } return TCL_OK; } -#if 0 /* *---------------------------------------------------------------------- @@ -1391,57 +1636,56 @@ WmFocusmodelCmd( */ static int -WmForgetCmd(tkwin, winPtr, interp, objc, objv) - Tk_Window tkwin; /* Main window of the application. */ - TkWindow *winPtr; /* Toplevel or Frame to work with */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj *CONST objv[]; /* Argument objects. */ +WmForgetCmd( + Tk_Window tkwin, /* Main window of the application. */ + TkWindow *winPtr, /* Toplevel or Frame to work with */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { -#if 1 - Tcl_AppendResult(interp, "wm forget is not yet supported", (char*)NULL); - return TCL_ERROR; -#else + register Tk_Window frameWin = (Tk_Window)winPtr; - char *oldClass = (char*)Tk_Class(frameWin); if (Tk_IsTopLevel(frameWin)) { - MacDrawable *macWin = (MacDrawable *) winPtr->window; - CGrafPtr destPort = TkMacOSXGetDrawablePort(winPtr->window); + + MacDrawable *macWin; + + Tk_MakeWindowExist(winPtr); + Tk_MakeWindowExist(winPtr->parentPtr); + + macWin = (MacDrawable *) winPtr->window; TkFocusJoin(winPtr); Tk_UnmapWindow(frameWin); - if (destPort != NULL) { - WindowRef winRef; - winRef = GetWindowFromPort(destPort); - TkMacOSXUnregisterMacWindow(winRef); - DisposeWindow(winRef); - } - macWin->grafPtr = NULL; + macWin->toplevel->referenceCount--; macWin->toplevel = winPtr->parentPtr->privatePtr->toplevel; + macWin->toplevel->referenceCount++; macWin->flags &= ~TK_HOST_EXISTS; - RemapWindows(winPtr, macWin); TkWmDeadWindow(winPtr); - winPtr->flags &= ~(TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED); + RemapWindows(winPtr, (MacDrawable *) winPtr->parentPtr->window); + + winPtr->flags &=~(TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED); + + /* + * Flags (above) must be cleared before calling TkMapTopFrame (below). + */ TkMapTopFrame(frameWin); } else { - /* Already not managed by wm - ignore it */ + /* Already not managed by wm - ignore it */ } return TCL_OK; -#endif } -#endif /* *---------------------------------------------------------------------- * * WmFrameCmd -- * - * This procedure is invoked to process the "wm frame" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm frame" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -1472,7 +1716,7 @@ WmFrameCmd( if (window == None) { window = Tk_WindowId((Tk_Window) winPtr); } - sprintf(buf, "0x%x", (unsigned int) window); + sprintf(buf, "0x%x", (unsigned) window); Tcl_SetResult(interp, buf, TCL_VOLATILE); return TCL_OK; } @@ -1525,8 +1769,8 @@ WmGeometryCmd( width = winPtr->changes.width; height = winPtr->changes.height; } - sprintf(buf, "%dx%d%c%d%c%d", width, height, xSign, wmPtr->x, - ySign, wmPtr->y); + sprintf(buf, "%dx%d%c%d%c%d", + width, height, xSign, wmPtr->x, ySign, wmPtr->y); Tcl_SetResult(interp, buf, TCL_VOLATILE); return TCL_OK; } @@ -1545,8 +1789,8 @@ WmGeometryCmd( * * WmGridCmd -- * - * This procedure is invoked to process the "wm grid" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm grid" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -1586,8 +1830,8 @@ WmGridCmd( } if (*Tcl_GetString(objv[3]) == '\0') { /* - * Turn off gridding and reset the width and height - * to make sense as ungridded numbers. + * Turn off gridding and reset the width and height to make sense as + * ungridded numbers. */ wmPtr->sizeHintsFlags &= ~(PBaseSize|PResizeInc); @@ -1601,9 +1845,9 @@ WmGridCmd( wmPtr->heightInc = 1; } else { if ((Tcl_GetIntFromObj(interp, objv[3], &reqWidth) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[4], &reqHeight) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[5], &widthInc) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[6], &heightInc) != TCL_OK)) { + || (Tcl_GetIntFromObj(interp, objv[4], &reqHeight) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[5], &widthInc) != TCL_OK) + || (Tcl_GetIntFromObj(interp, objv[6], &heightInc)!=TCL_OK)) { return TCL_ERROR; } if (reqWidth < 0) { @@ -1635,8 +1879,8 @@ WmGridCmd( * * WmGroupCmd -- * - * This procedure is invoked to process the "wm group" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm group" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -1687,7 +1931,7 @@ WmGroupCmd( } wmPtr->hints.window_group = Tk_WindowId(tkwin2); wmPtr->hints.flags |= WindowGroupHint; - wmPtr->leaderName = ckalloc((unsigned) (length + 1)); + wmPtr->leaderName = ckalloc(length + 1); strcpy(wmPtr->leaderName, argv3); } return TCL_OK; @@ -1766,8 +2010,8 @@ WmIconbitmapCmd( * * WmIconifyCmd -- * - * This procedure is invoked to process the "wm iconify" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm iconify" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -1850,8 +2094,7 @@ WmIconmaskCmd( } if (objc == 3) { if (wmPtr->hints.flags & IconMaskHint) { - Tcl_SetResult(interp, - (char*)Tk_NameOfBitmap(winPtr->display, + Tcl_SetResult(interp, (char *) Tk_NameOfBitmap(winPtr->display, wmPtr->hints.icon_mask), TCL_STATIC); } return TCL_OK; @@ -1907,20 +2150,20 @@ WmIconnameCmd( return TCL_ERROR; } if (objc == 3) { - Tcl_SetResult(interp, - (char*)((wmPtr->iconName != NULL) ? - wmPtr->iconName : ""), TCL_STATIC); - return TCL_OK; - } else { if (wmPtr->iconName != NULL) { - ckfree((char *) wmPtr->iconName); - } - argv3 = Tcl_GetStringFromObj(objv[3], &length); - wmPtr->iconName = ckalloc((unsigned) (length + 1)); - strcpy(wmPtr->iconName, argv3); - if (!(wmPtr->flags & WM_NEVER_MAPPED)) { - XSetIconName(winPtr->display, winPtr->window, wmPtr->iconName); + Tcl_SetObjResult(interp, Tcl_NewStringObj(wmPtr->iconName, -1)); } + return TCL_OK; + } + + if (wmPtr->iconName != NULL) { + ckfree(wmPtr->iconName); + } + argv3 = Tcl_GetStringFromObj(objv[3], &length); + wmPtr->iconName = ckalloc(length + 1); + strcpy(wmPtr->iconName, argv3); + if (!(wmPtr->flags & WM_NEVER_MAPPED)) { + XSetIconName(winPtr->display, winPtr->window, wmPtr->iconName); } return TCL_OK; } @@ -1930,10 +2173,9 @@ WmIconnameCmd( * * WmIconphotoCmd -- * - * This procedure is invoked to process the "wm iconphoto" - * Tcl command. - * See the user documentation for details on what it does. - * Not yet implemented for OS X. + * This procedure is invoked to process the "wm iconphoto" Tcl command. + * See the user documentation for details on what it does. Not yet + * implemented for OS X. * * Results: * A standard Tcl result. @@ -1968,10 +2210,12 @@ WmIconphotoCmd( return TCL_ERROR; } } + /* * Iterate over all images to retrieve their sizes, in order to allocate a * buffer large enough to hold all images. */ + for (i = 3 + isDefault; i < objc; i++) { photo = Tk_FindPhoto(interp, Tcl_GetString(objv[i])); if (photo == NULL) { @@ -1981,10 +2225,12 @@ WmIconphotoCmd( } Tk_PhotoGetSize(photo, &width, &height); } + /* - * This requires implementation for OS X, but we silently return - * for now. + * TODO: This requires implementation for OS X, but we silently return for + * now. */ + return TCL_OK; } @@ -1993,9 +2239,8 @@ WmIconphotoCmd( * * WmIconpositionCmd -- * - * This procedure is invoked to process the "wm iconposition" - * Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm iconposition" Tcl + * command. See the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2127,15 +2372,14 @@ WmIconwindowCmd( } return TCL_OK; } -#if 0 /* *---------------------------------------------------------------------- * * WmManageCmd -- * - * This procedure is invoked to process the "wm manage" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm manage" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2152,12 +2396,9 @@ WmManageCmd( TkWindow *winPtr, /* Toplevel or Frame to work with */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj *CONST objv[]) /* Argument objects. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { -#if 1 - Tcl_AppendResult(interp, "wm manage is not yet supported", (char*)NULL); - return TCL_ERROR; -#else + register Tk_Window frameWin = (Tk_Window)winPtr; register WmInfo *wmPtr = winPtr->wmInfoPtr; char *oldClass = (char*)Tk_Class(frameWin); @@ -2165,6 +2406,12 @@ WmManageCmd( if (!Tk_IsTopLevel(frameWin)) { MacDrawable *macWin = (MacDrawable *) winPtr->window; + if (!Tk_IsManageable(frameWin)) { + Tcl_AppendResult(interp, "window \"", + Tk_PathName(frameWin), "\" is not manageable: must be " + "a frame, labelframe or toplevel", NULL); + return TCL_ERROR; + } TkFocusSplit(winPtr); Tk_UnmapWindow(frameWin); if (wmPtr == NULL) { @@ -2178,26 +2425,26 @@ WmManageCmd( } wmPtr = winPtr->wmInfoPtr; winPtr->flags &= ~TK_MAPPED; - macWin->grafPtr = NULL; + macWin->toplevel->referenceCount--; macWin->toplevel = macWin; + macWin->toplevel->referenceCount++; RemapWindows(winPtr, macWin); - winPtr->flags |= (TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED); - TkMapTopFrame (frameWin); + winPtr->flags |= + (TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED); + TkMapTopFrame(frameWin); } else if (Tk_IsTopLevel(frameWin)) { /* Already managed by wm - ignore it */ } return TCL_OK; -#endif } -#endif /* *---------------------------------------------------------------------- * * WmMaxsizeCmd -- * - * This procedure is invoked to process the "wm maxsize" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm maxsize" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2247,8 +2494,8 @@ WmMaxsizeCmd( * * WmMinsizeCmd -- * - * This procedure is invoked to process the "wm minsize" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm minsize" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2283,7 +2530,7 @@ WmMinsizeCmd( return TCL_OK; } if ((Tcl_GetIntFromObj(interp, objv[3], &width) != TCL_OK) - || (Tcl_GetIntFromObj(interp, objv[4], &height) != TCL_OK)) { + || (Tcl_GetIntFromObj(interp, objv[4], &height) != TCL_OK)) { return TCL_ERROR; } wmPtr->minWidth = width; @@ -2298,9 +2545,8 @@ WmMinsizeCmd( * * WmOverrideredirectCmd -- * - * This procedure is invoked to process the "wm overrideredirect" - * Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm overrideredirect" Tcl + * command. See the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2327,8 +2573,8 @@ WmOverrideredirectCmd( return TCL_ERROR; } if (objc == 3) { - Tcl_SetBooleanObj(Tcl_GetObjResult(interp), - Tk_Attributes((Tk_Window) winPtr)->override_redirect); + Tcl_SetObjResult(interp, Tcl_NewBooleanObj( + Tk_Attributes((Tk_Window) winPtr)->override_redirect)); return TCL_OK; } if (Tcl_GetBooleanFromObj(interp, objv[3], &boolean) != TCL_OK) { @@ -2345,9 +2591,8 @@ WmOverrideredirectCmd( * * WmPositionfromCmd -- * - * This procedure is invoked to process the "wm positionfrom" - * Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm positionfrom" Tcl + * command. See the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2367,7 +2612,7 @@ WmPositionfromCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { register WmInfo *wmPtr = winPtr->wmInfoPtr; - static const char *optionStrings[] = { + static const char *const optionStrings[] = { "program", "user", NULL }; enum options { OPT_PROGRAM, OPT_USER }; @@ -2389,7 +2634,7 @@ WmPositionfromCmd( wmPtr->sizeHintsFlags &= ~(USPosition|PPosition); } else { if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, - &index) != TCL_OK) { + &index) != TCL_OK) { return TCL_ERROR; } if (index == OPT_USER) { @@ -2444,6 +2689,7 @@ WmProtocolCmd( /* * Return a list of all defined protocols for the window. */ + for (protPtr = wmPtr->protPtr; protPtr != NULL; protPtr = protPtr->nextPtr) { Tcl_AppendElement(interp, @@ -2468,9 +2714,8 @@ WmProtocolCmd( } /* - * Delete any current protocol handler, then create a new - * one with the specified command, unless the command is - * empty. + * Delete any current protocol handler, then create a new one with the + * specified command, unless the command is empty. */ for (protPtr = wmPtr->protPtr, prevPtr = NULL; protPtr != NULL; @@ -2481,7 +2726,7 @@ WmProtocolCmd( } else { prevPtr->nextPtr = protPtr->nextPtr; } - Tcl_EventuallyFree((ClientData) protPtr, TCL_DYNAMIC); + Tcl_EventuallyFree(protPtr, TCL_DYNAMIC); break; } } @@ -2524,7 +2769,8 @@ WmResizableCmd( { register WmInfo *wmPtr = winPtr->wmInfoPtr; int width, height; - WindowAttributes oldAttributes = wmPtr->attributes; + UInt64 oldAttributes = wmPtr->attributes; + int oldFlags = wmPtr->flags; if ((objc != 3) && (objc != 5)) { Tcl_WrongNumArgs(interp, 2, objv, "window ?width height?"); @@ -2568,8 +2814,7 @@ WmResizableCmd( wmPtr->scrollWinPtr->instanceData); } WmUpdateGeom(wmPtr, winPtr); - ApplyWindowClassAttributeChanges(winPtr, NULL, wmPtr->macClass, - oldAttributes, 1); + ApplyWindowAttributeFlagChanges(winPtr, NULL, oldAttributes, oldFlags, 1,0); return TCL_OK; } @@ -2599,7 +2844,7 @@ WmSizefromCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { register WmInfo *wmPtr = winPtr->wmInfoPtr; - static const char *optionStrings[] = { + static const char *const optionStrings[] = { "program", "user", NULL }; enum options { OPT_PROGRAM, OPT_USER }; @@ -2622,7 +2867,7 @@ WmSizefromCmd( wmPtr->sizeHintsFlags &= ~(USSize|PSize); } else { if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, - &index) != TCL_OK) { + &index) != TCL_OK) { return TCL_ERROR; } if (index == OPT_USER) { @@ -2664,7 +2909,7 @@ WmStackorderCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { TkWindow **windows, **window_ptr; - static const char *optionStrings[] = { + static const char *const optionStrings[] = { "isabove", "isbelow", NULL }; enum options { OPT_ISABOVE, OPT_ISBELOW }; @@ -2679,13 +2924,13 @@ WmStackorderCmd( windows = TkWmStackorderToplevel(winPtr); if (windows == NULL) { Tcl_Panic("TkWmStackorderToplevel failed"); - } else { - for (window_ptr = windows; *window_ptr ; window_ptr++) { - Tcl_AppendElement(interp, (*window_ptr)->pathName); - } - ckfree((char *) windows); - return TCL_OK; } + + for (window_ptr = windows; *window_ptr ; window_ptr++) { + Tcl_AppendElement(interp, (*window_ptr)->pathName); + } + ckfree((char *) windows); + return TCL_OK; } else { TkWindow *winPtr2; int index1=-1, index2=-1, result; @@ -2714,33 +2959,35 @@ WmStackorderCmd( } /* - * Lookup stacking order of all toplevels that are children - * of "." and find the position of winPtr and winPtr2 - * in the stacking order. + * Lookup stacking order of all toplevels that are children of "." and + * find the position of winPtr and winPtr2 in the stacking order. */ windows = TkWmStackorderToplevel(winPtr->mainPtr->winPtr); - if (windows == NULL) { Tcl_AppendResult(interp, "TkWmStackorderToplevel failed", NULL); return TCL_ERROR; - } else { - for (window_ptr = windows; *window_ptr ; window_ptr++) { - if (*window_ptr == winPtr) - index1 = (window_ptr - windows); - if (*window_ptr == winPtr2) - index2 = (window_ptr - windows); - } - if (index1 == -1) - Tcl_Panic("winPtr window not found"); - if (index2 == -1) - Tcl_Panic("winPtr2 window not found"); + } - ckfree((char *) windows); + for (window_ptr = windows; *window_ptr ; window_ptr++) { + if (*window_ptr == winPtr) { + index1 = (window_ptr - windows); + } + if (*window_ptr == winPtr2) { + index2 = (window_ptr - windows); + } + } + if (index1 == -1) { + Tcl_Panic("winPtr window not found"); + } + if (index2 == -1) { + Tcl_Panic("winPtr2 window not found"); } + ckfree((char *) windows); + if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, - &index) != TCL_OK) { + &index) != TCL_OK) { return TCL_ERROR; } if (index == OPT_ISABOVE) { @@ -2748,7 +2995,7 @@ WmStackorderCmd( } else { /* OPT_ISBELOW */ result = index1 < index2; } - Tcl_SetIntObj(Tcl_GetObjResult(interp), result); + Tcl_SetObjResult(interp, Tcl_NewBooleanObj(result)); return TCL_OK; } return TCL_OK; @@ -2759,8 +3006,8 @@ WmStackorderCmd( * * WmStateCmd -- * - * This procedure is invoked to process the "wm state" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm state" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2780,7 +3027,7 @@ WmStateCmd( Tcl_Obj *const objv[]) /* Argument objects. */ { register WmInfo *wmPtr = winPtr->wmInfoPtr; - static const char *optionStrings[] = { + static const char *const optionStrings[] = { "normal", "iconic", "withdrawn", "zoomed", NULL }; enum options { OPT_NORMAL, OPT_ICONIC, OPT_WITHDRAWN, OPT_ZOOMED }; @@ -2810,9 +3057,10 @@ WmStateCmd( if (index == OPT_NORMAL) { TkpWmSetState(winPtr, NormalState); + /* - * This varies from 'wm deiconify' because it does not - * force the window to be raised and receive focus + * This varies from 'wm deiconify' because it does not force the + * window to be raised and receive focus */ } else if (index == OPT_ICONIC) { if (Tk_Attributes((Tk_Window) winPtr)->override_redirect) { @@ -2831,29 +3079,27 @@ WmStateCmd( } else { /* OPT_ZOOMED */ TkpWmSetState(winPtr, ZoomState); } + } else if (wmPtr->iconFor != NULL) { + Tcl_SetResult(interp, "icon", TCL_STATIC); } else { - if (wmPtr->iconFor != NULL) { - Tcl_SetResult(interp, "icon", TCL_STATIC); - } else { - if (wmPtr->hints.initial_state == NormalState || - wmPtr->hints.initial_state == ZoomState) { - wmPtr->hints.initial_state = (TkMacOSXIsWindowZoomed(winPtr) ? - ZoomState : NormalState); - } - switch (wmPtr->hints.initial_state) { - case NormalState: - Tcl_SetResult(interp, "normal", TCL_STATIC); - break; - case IconicState: - Tcl_SetResult(interp, "iconic", TCL_STATIC); - break; - case WithdrawnState: - Tcl_SetResult(interp, "withdrawn", TCL_STATIC); - break; - case ZoomState: - Tcl_SetResult(interp, "zoomed", TCL_STATIC); - break; - } + if (wmPtr->hints.initial_state == NormalState || + wmPtr->hints.initial_state == ZoomState) { + wmPtr->hints.initial_state = (TkMacOSXIsWindowZoomed(winPtr) ? + ZoomState : NormalState); + } + switch (wmPtr->hints.initial_state) { + case NormalState: + Tcl_SetResult(interp, "normal", TCL_STATIC); + break; + case IconicState: + Tcl_SetResult(interp, "iconic", TCL_STATIC); + break; + case WithdrawnState: + Tcl_SetResult(interp, "withdrawn", TCL_STATIC); + break; + case ZoomState: + Tcl_SetResult(interp, "zoomed", TCL_STATIC); + break; } } return TCL_OK; @@ -2864,8 +3110,8 @@ WmStateCmd( * * WmTitleCmd -- * - * This procedure is invoked to process the "wm title" Tcl command. - * See the user documentation for details on what it does. + * This procedure is invoked to process the "wm title" Tcl command. See + * the user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -2933,7 +3179,7 @@ WmTransientCmd( register WmInfo *wmPtr = winPtr->wmInfoPtr; Tk_Window master; WmInfo *wmPtr2; - char *argv3; + char *masterWindowName; int length; if ((objc != 3) && (objc != 4)) { @@ -2981,13 +3227,13 @@ WmTransientCmd( return TCL_ERROR; } - argv3 = Tcl_GetStringFromObj(objv[3], &length); wmPtr->master = Tk_WindowId(master); + masterWindowName = Tcl_GetStringFromObj(objv[3], &length); if (wmPtr->masterWindowName != NULL) { ckfree(wmPtr->masterWindowName); } - wmPtr->masterWindowName = ckalloc((unsigned) length+1); - strcpy(wmPtr->masterWindowName, argv3); + wmPtr->masterWindowName = ckalloc(length+1); + strcpy(wmPtr->masterWindowName, masterWindowName); } ApplyMasterOverrideChanges(winPtr, NULL); return TCL_OK; @@ -3037,13 +3283,14 @@ WmWithdrawCmd( * Invoked by those wm subcommands that affect geometry. * Schedules a geometry update. */ + static void -WmUpdateGeom(wmPtr, winPtr) -WmInfo *wmPtr; -TkWindow *winPtr; +WmUpdateGeom( + WmInfo *wmPtr, + TkWindow *winPtr) { if (!(wmPtr->flags & (WM_UPDATE_PENDING|WM_NEVER_MAPPED))) { - Tcl_DoWhenIdle(UpdateGeometryInfo, (ClientData) winPtr); + Tcl_DoWhenIdle(UpdateGeometryInfo, winPtr); wmPtr->flags |= WM_UPDATE_PENDING; } } @@ -3054,33 +3301,33 @@ TkWindow *winPtr; * Tk_SetGrid -- * * This procedure is invoked by a widget when it wishes to set a grid - * coordinate system that controls the size of a top-level window. - * It provides a C interface equivalent to the "wm grid" command and - * is usually asscoiated with the -setgrid option. + * coordinate system that controls the size of a top-level window. It + * provides a C interface equivalent to the "wm grid" command and is + * usually asscoiated with the -setgrid option. * * Results: * None. * * Side effects: - * Grid-related information will be passed to the window manager, so - * that the top-level window associated with tkwin will resize on - * even grid units. If some other window already controls gridding - * for the top-level window then this procedure call has no effect. + * Grid-related information will be passed to the window manager, so that + * the top-level window associated with tkwin will resize on even grid + * units. If some other window already controls gridding for the + * top-level window then this procedure call has no effect. * *---------------------------------------------------------------------- */ void Tk_SetGrid( - Tk_Window tkwin, /* Token for window. New window mgr info - * will be posted for the top-level window + Tk_Window tkwin, /* Token for window. New window mgr info will + * be posted for the top-level window * associated with this window. */ - int reqWidth, /* Width (in grid units) corresponding to - * the requested geometry for tkwin. */ - int reqHeight, /* Height (in grid units) corresponding to - * the requested geometry for tkwin. */ - int widthInc, int heightInc)/* Pixel increments corresponding to a - * change of one grid unit. */ + int reqWidth, /* Width (in grid units) corresponding to the + * requested geometry for tkwin. */ + int reqHeight, /* Height (in grid units) corresponding to the + * requested geometry for tkwin. */ + int widthInc, int heightInc)/* Pixel increments corresponding to a change + * of one grid unit. */ { TkWindow *winPtr = (TkWindow *) tkwin; WmInfo *wmPtr; @@ -3120,15 +3367,15 @@ Tk_SetGrid( } /* - * If gridding was previously off, then forget about any window - * size requests made by the user or via "wm geometry": these are - * in pixel units and there's no easy way to translate them to - * grid units since the new requested size of the top-level window in - * pixels may not yet have been registered yet (it may filter up - * the hierarchy in DoWhenIdle handlers). However, if the window - * has never been mapped yet then just leave the window size alone: - * assume that it is intended to be in grid units but just happened - * to have been specified before this procedure was called. + * If gridding was previously off, then forget about any window size + * requests made by the user or via "wm geometry": these are in pixel + * units and there's no easy way to translate them to grid units since the + * new requested size of the top-level window in pixels may not yet have + * been registered yet (it may filter up the hierarchy in DoWhenIdle + * handlers). However, if the window has never been mapped yet then just + * leave the window size alone: assume that it is intended to be in grid + * units but just happened to have been specified before this procedure + * was called. */ if ((wmPtr->gridWin == NULL) && !(wmPtr->flags & WM_NEVER_MAPPED)) { @@ -3137,8 +3384,8 @@ Tk_SetGrid( } /* - * Set the new gridding information, and start the process of passing - * all of this information to the window manager. + * Set the new gridding information, and start the process of passing all + * of this information to the window manager. */ wmPtr->gridWin = tkwin; @@ -3149,7 +3396,7 @@ Tk_SetGrid( wmPtr->sizeHintsFlags |= PBaseSize|PResizeInc; wmPtr->flags |= WM_UPDATE_SIZE_HINTS; if (!(wmPtr->flags & (WM_UPDATE_PENDING|WM_NEVER_MAPPED))) { - Tcl_DoWhenIdle(UpdateGeometryInfo, (ClientData) winPtr); + Tcl_DoWhenIdle(UpdateGeometryInfo, winPtr); wmPtr->flags |= WM_UPDATE_PENDING; } } @@ -3159,16 +3406,15 @@ Tk_SetGrid( * * Tk_UnsetGrid -- * - * This procedure cancels the effect of a previous call - * to Tk_SetGrid. + * This procedure cancels the effect of a previous call to Tk_SetGrid. * * Results: * None. * * Side effects: * If tkwin currently controls gridding for its top-level window, - * gridding is cancelled for that top-level window; if some other - * window controls gridding then this procedure has no effect. + * gridding is cancelled for that top-level window; if some other window + * controls gridding then this procedure has no effect. * *---------------------------------------------------------------------- */ @@ -3207,7 +3453,7 @@ Tk_UnsetGrid( wmPtr->flags |= WM_UPDATE_SIZE_HINTS; if (!(wmPtr->flags & (WM_UPDATE_PENDING|WM_NEVER_MAPPED))) { - Tcl_DoWhenIdle(UpdateGeometryInfo, (ClientData) winPtr); + Tcl_DoWhenIdle(UpdateGeometryInfo, winPtr); wmPtr->flags |= WM_UPDATE_PENDING; } } @@ -3224,8 +3470,8 @@ Tk_UnsetGrid( * None. * * Side effects: - * Tk's internal data structures for the window get modified to - * reflect the structural change. + * Tk's internal data structures for the window get modified to reflect + * the structural change. * *---------------------------------------------------------------------- */ @@ -3235,7 +3481,7 @@ TopLevelEventProc( ClientData clientData, /* Window for which event occurred. */ XEvent *eventPtr) /* Event that just happened. */ { - TkWindow *winPtr = (TkWindow *) clientData; + TkWindow *winPtr = clientData; winPtr->wmInfoPtr->flags |= WM_VROOT_OFFSET_STALE; if (eventPtr->type == DestroyNotify) { @@ -3249,7 +3495,8 @@ TopLevelEventProc( */ Tk_ErrorHandler handler = Tk_CreateErrorHandler(winPtr->display, - -1, -1, -1, (Tk_ErrorProc *) NULL, (ClientData) NULL); + -1, -1, -1, NULL, NULL); + Tk_DestroyWindow((Tk_Window) winPtr); Tk_DeleteErrorHandler(handler); } @@ -3266,15 +3513,15 @@ TopLevelEventProc( * * TopLevelReqProc -- * - * This procedure is invoked by the geometry manager whenever - * the requested size for a top-level window is changed. + * This procedure is invoked by the geometry manager whenever the + * requested size for a top-level window is changed. * * Results: * None. * * Side effects: - * Arrange for the window to be resized to satisfy the request - * (this happens as a when-idle action). + * Arrange for the window to be resized to satisfy the request (this + * happens as a when-idle action). * *---------------------------------------------------------------------- */ @@ -3291,7 +3538,7 @@ TopLevelReqProc( wmPtr = winPtr->wmInfoPtr; wmPtr->flags |= WM_UPDATE_SIZE_HINTS; if (!(wmPtr->flags & (WM_UPDATE_PENDING|WM_NEVER_MAPPED))) { - Tcl_DoWhenIdle(UpdateGeometryInfo, (ClientData) winPtr); + Tcl_DoWhenIdle(UpdateGeometryInfo, winPtr); wmPtr->flags |= WM_UPDATE_PENDING; } } @@ -3301,19 +3548,18 @@ TopLevelReqProc( * * UpdateGeometryInfo -- * - * This procedure is invoked when a top-level window is first - * mapped, and also as a when-idle procedure, to bring the - * geometry and/or position of a top-level window back into - * line with what has been requested by the user and/or widgets. - * This procedure doesn't return until the window manager has - * responded to the geometry change. + * This procedure is invoked when a top-level window is first mapped, and + * also as a when-idle procedure, to bring the geometry and/or position + * of a top-level window back into line with what has been requested by + * the user and/or widgets. This procedure doesn't return until the + * window manager has responded to the geometry change. * * Results: * None. * * Side effects: - * The window's size and location may change, unless the WM prevents - * that from happening. + * The window's size and location may change, unless the WM prevents that + * from happening. * *---------------------------------------------------------------------- */ @@ -3322,10 +3568,9 @@ static void UpdateGeometryInfo( ClientData clientData) /* Pointer to the window's record. */ { - TkWindow *winPtr = (TkWindow *) clientData; + TkWindow *winPtr = clientData; WmInfo *wmPtr = winPtr->wmInfoPtr; int x, y, width, height, min, max; - unsigned long serial; wmPtr->flags &= ~WM_UPDATE_PENDING; @@ -3334,14 +3579,12 @@ UpdateGeometryInfo( } /* - * Compute the new size for the top-level window. See the - * user documentation for details on this, but the size - * requested depends on (a) the size requested internally - * by the window's widgets, (b) the size requested by the - * user in a "wm geometry" command or via wm-based interactive - * resizing (if any), and (c) whether or not the window is - * gridded. Don't permit sizes <= 0 because this upsets - * the X server. + * Compute the new size for the top-level window. See the user + * documentation for details on this, but the size requested depends on + * (a) the size requested internally by the window's widgets, (b) the size + * requested by the user in a "wm geometry" command or via wm-based + * interactive resizing (if any), and (c) whether or not the window is + * gridded. Don't permit sizes <= 0 because this upsets the X server. */ if (wmPtr->width == -1) { @@ -3416,10 +3659,10 @@ UpdateGeometryInfo( /* * Compute the new position for the upper-left pixel of the window's - * decorative frame. This is tricky, because we need to include the - * border widths supplied by a reparented parent in this calculation, - * but can't use the parent's current overall size since that may - * change as a result of this code. + * decorative frame. This is tricky, because we need to include the border + * widths supplied by a reparented parent in this calculation, but can't + * use the parent's current overall size since that may change as a result + * of this code. */ if (wmPtr->flags & WM_NEGATIVE_X) { @@ -3436,10 +3679,10 @@ UpdateGeometryInfo( } /* - * If the window's size is going to change and the window is - * supposed to not be resizable by the user, then we have to - * update the size hints. There may also be a size-hint-update - * request pending from somewhere else, too. + * If the window's size is going to change and the window is supposed to + * not be resizable by the user, then we have to update the size hints. + * There may also be a size-hint-update request pending from somewhere + * else, too. */ if (((width != winPtr->changes.width) @@ -3453,22 +3696,21 @@ UpdateGeometryInfo( } /* - * Reconfigure the window if it isn't already configured correctly. - * A few tricky points: + * Reconfigure the window if it isn't already configured correctly. A few + * tricky points: * - * 1. If the window is embedded and the container is also in this - * process, don't actually reconfigure the window; just pass the - * desired size on to the container. Also, zero out any position - * information, since embedded windows are not allowed to move. - * 2. Sometimes the window manager will give us a different size - * than we asked for (e.g. mwm has a minimum size for windows), so - * base the size check on what we *asked for* last time, not what we - * got. - * 3. Don't move window unless a new position has been requested for - * it. This is because of "features" in some window managers (e.g. - * twm, as of 4/24/91) where they don't interpret coordinates - * according to ICCCM. Moving a window to its current location may - * cause it to shift position on the screen. + * 1. If the window is embedded and the container is also in this process, + * don't actually reconfigure the window; just pass the desired size on + * to the container. Also, zero out any position information, since + * embedded windows are not allowed to move. + * 2. Sometimes the window manager will give us a different size than we + * asked for (e.g. mwm has a minimum size for windows), so base the + * size check on what we *asked for* last time, not what we got. + * 3. Don't move window unless a new position has been requested for it. + * This is because of "features" in some window managers (e.g. twm, as + * of 4/24/91) where they don't interpret coordinates according to + * ICCCM. Moving a window to its current location may cause it to shift + * position on the screen. */ if (Tk_IsEmbedded(winPtr)) { @@ -3482,9 +3724,9 @@ UpdateGeometryInfo( /* * This window is embedded and the container is also in this * process, so we don't need to do anything special about the - * geometry, except to make sure that the desired size is known - * by the container. Also, zero out any position information, - * since embedded windows are not allowed to move. + * geometry, except to make sure that the desired size is known by + * the container. Also, zero out any position information, since + * embedded windows are not allowed to move. */ wmPtr->x = wmPtr->y = 0; @@ -3493,7 +3735,6 @@ UpdateGeometryInfo( } return; } - serial = NextRequest(winPtr->display); if (wmPtr->flags & WM_MOVE_PENDING) { wmPtr->configWidth = width; wmPtr->configHeight = height; @@ -3501,9 +3742,10 @@ UpdateGeometryInfo( TkMacOSXDbgMsg("Moving to %d %d, resizing to %d x %d", x, y, width, height); } + SetWindowSizeLimits(winPtr); wmPtr->flags |= WM_SYNC_PENDING; XMoveResizeWindow(winPtr->display, winPtr->window, x, y, - (unsigned) width, (unsigned) height); + wmPtr->configWidth, wmPtr->configHeight); wmPtr->flags &= ~WM_SYNC_PENDING; } else if ((width != wmPtr->configWidth) || (height != wmPtr->configHeight)) { @@ -3512,10 +3754,13 @@ UpdateGeometryInfo( if (wmTracing) { TkMacOSXDbgMsg("Resizing to %d x %d\n", width, height); } + SetWindowSizeLimits(winPtr); wmPtr->flags |= WM_SYNC_PENDING; - XResizeWindow(winPtr->display, winPtr->window, (unsigned) width, - (unsigned) height); + XResizeWindow(winPtr->display, winPtr->window, wmPtr->configWidth, + wmPtr->configHeight); wmPtr->flags &= ~WM_SYNC_PENDING; + } else { + SetWindowSizeLimits(winPtr); } } @@ -3524,9 +3769,8 @@ UpdateGeometryInfo( * * UpdateSizeHints -- * - * This procedure is called to update the window manager's - * size hints information from the information in a WmInfo - * structure. + * This procedure is called to update the window manager's size hints + * information from the information in a WmInfo structure. * * Results: * None. @@ -3544,8 +3788,6 @@ UpdateSizeHints( WmInfo *wmPtr = winPtr->wmInfoPtr; wmPtr->flags &= ~WM_UPDATE_SIZE_HINTS; - - return; } /* @@ -3553,13 +3795,12 @@ UpdateSizeHints( * * ParseGeometry -- * - * This procedure parses a geometry string and updates - * information used to control the geometry of a top-level - * window. + * This procedure parses a geometry string and updates information used + * to control the geometry of a top-level window. * * Results: - * A standard Tcl return value, plus an error message in - * the interp's result if an error occurs. + * A standard Tcl return value, plus an error message in the interp's + * result if an error occurs. * * Side effects: * The size and/or location of winPtr may change. @@ -3572,8 +3813,8 @@ ParseGeometry( Tcl_Interp *interp, /* Used for error reporting. */ char *string, /* String containing new geometry. Has the * standard form "=wxh+x+y". */ - TkWindow *winPtr) /* Pointer to top-level window whose - * geometry is to be changed. */ + TkWindow *winPtr) /* Pointer to top-level window whose geometry + * is to be changed. */ { WmInfo *wmPtr = winPtr->wmInfoPtr; int x, y, width, height, flags; @@ -3589,9 +3830,9 @@ ParseGeometry( } /* - * Parse the width and height, if they are present. Don't - * actually update any of the fields of wmPtr until we've - * successfully parsed the entire geometry string. + * Parse the width and height, if they are present. Don't actually update + * any of the fields of wmPtr until we've successfully parsed the entire + * geometry string. */ width = wmPtr->width; @@ -3645,10 +3886,10 @@ ParseGeometry( } /* - * Assume that the geometry information came from the user, - * unless an explicit source has been specified. Otherwise - * most window managers assume that the size hints were - * program-specified and they ignore them. + * Assume that the geometry information came from the user, unless an + * explicit source has been specified. Otherwise most window managers + * assume that the size hints were program-specified and they ignore + * them. */ if ((wmPtr->sizeHintsFlags & (USPosition|PPosition)) == 0) { @@ -3658,9 +3899,9 @@ ParseGeometry( } /* - * Everything was parsed OK. Update the fields of *wmPtr and - * arrange for the appropriate information to be percolated out - * to the window manager at the next idle moment. + * Everything was parsed OK. Update the fields of *wmPtr and arrange for + * the appropriate information to be percolated out to the window manager + * at the next idle moment. */ wmPtr->width = width; @@ -3680,12 +3921,12 @@ ParseGeometry( wmPtr->flags = flags; if (!(wmPtr->flags & (WM_UPDATE_PENDING|WM_NEVER_MAPPED))) { - Tcl_DoWhenIdle(UpdateGeometryInfo, (ClientData) winPtr); + Tcl_DoWhenIdle(UpdateGeometryInfo, winPtr); wmPtr->flags |= WM_UPDATE_PENDING; } return TCL_OK; -error: + error: Tcl_AppendResult(interp, "bad geometry specifier \"", string, "\"", NULL); return TCL_ERROR; } @@ -3695,15 +3936,15 @@ error: * * Tk_GetRootCoords -- * - * Given a token for a window, this procedure traces through the - * window's lineage to find the (virtual) root-window coordinates - * corresponding to point (0,0) in the window. + * Given a token for a window, this procedure traces through the window's + * lineage to find the (virtual) root-window coordinates corresponding to + * point (0,0) in the window. * * Results: - * The locations pointed to by xPtr and yPtr are filled in with - * the root coordinates of the (0,0) point in tkwin. If a virtual - * root window is in effect for the window, then the coordinates - * in the virtual root are returned. + * The locations pointed to by xPtr and yPtr are filled in with the root + * coordinates of the (0,0) point in tkwin. If a virtual root window is + * in effect for the window, then the coordinates in the virtual root are + * returned. * * Side effects: * None. @@ -3721,9 +3962,8 @@ Tk_GetRootCoords( TkWindow *winPtr = (TkWindow *) tkwin; /* - * Search back through this window's parents all the way to a - * top-level window, combining the offsets of each window within - * its parent. + * Search back through this window's parents all the way to a top-level + * window, combining the offsets of each window within its parent. */ x = y = 0; @@ -3731,54 +3971,55 @@ Tk_GetRootCoords( x += winPtr->changes.x + winPtr->changes.border_width; y += winPtr->changes.y + winPtr->changes.border_width; if (winPtr->flags & TK_TOP_LEVEL) { + TkWindow *otherPtr; + if (!(Tk_IsEmbedded(winPtr))) { x += winPtr->wmInfoPtr->xInParent; y += winPtr->wmInfoPtr->yInParent; break; - } else { - TkWindow *otherPtr = TkpGetOtherWindow(winPtr); + } - if (otherPtr != NULL) { - /* - * The container window is in the same application. - * Query its coordinates. - */ - winPtr = otherPtr; + otherPtr = TkpGetOtherWindow(winPtr); + if (otherPtr == NULL) { + if (tkMacOSXEmbedHandler->getOffsetProc != NULL) { + Point theOffset; /* - * Remember to offset by the container window here, - * since at the end of this if branch, we will - * pop out to the container's parent... + * We do not require that the changes.x & changes.y for a + * non-Tk master window be kept up to date. So we first + * subtract off the possibly bogus values that have been + * added on at the top of this pass through the loop, and + * then call out to the getOffsetProc to give us the + * correct offset. */ - x += winPtr->changes.x + winPtr->changes.border_width; - y += winPtr->changes.y + winPtr->changes.border_width; + x -= winPtr->changes.x + winPtr->changes.border_width; + y -= winPtr->changes.y + winPtr->changes.border_width; - } else { - Point theOffset; + tkMacOSXEmbedHandler->getOffsetProc((Tk_Window) winPtr, + &theOffset); - if (tkMacOSXEmbedHandler->getOffsetProc != NULL) { - /* - * We do not require that the changes.x & changes.y for - * a non-Tk master window be kept up to date. So we - * first subtract off the possibly bogus values that - * have been added on at the top of this pass through - * the loop, and then call out to the getOffsetProc to - * give us the correct offset. - */ + x += theOffset.h; + y += theOffset.v; + } + break; + } - x -= winPtr->changes.x + winPtr->changes.border_width; - y -= winPtr->changes.y + winPtr->changes.border_width; + /* + * The container window is in the same application. Query its + * coordinates. + */ - tkMacOSXEmbedHandler->getOffsetProc((Tk_Window) winPtr, - &theOffset); + winPtr = otherPtr; - x += theOffset.h; - y += theOffset.v; - } - break; - } - } + /* + * Remember to offset by the container window here, since at the + * end of this if branch, we will pop out to the container's + * parent... + */ + + x += winPtr->changes.x + winPtr->changes.border_width; + y += winPtr->changes.y + winPtr->changes.border_width; } winPtr = winPtr->parentPtr; } @@ -3791,14 +4032,14 @@ Tk_GetRootCoords( * * Tk_CoordsToWindow -- * - * This is a Macintosh specific implementation of this function. - * Given the root coordinates of a point, this procedure returns - * the token for the top-most window covering that point, if - * there exists such a window in this application. + * This is a Macintosh specific implementation of this function. Given + * the root coordinates of a point, this procedure returns the token for + * the top-most window covering that point, if there exists such a window + * in this application. * * Results: - * The return result is either a token for the window corresponding - * to rootX and rootY, or else NULL to indicate that there is no such + * The return result is either a token for the window corresponding to + * rootX and rootY, or else NULL to indicate that there is no such * window. * * Side effects: @@ -3809,45 +4050,33 @@ Tk_GetRootCoords( Tk_Window Tk_CoordsToWindow( - int rootX, int rootY, /* Coordinates of point in root window. If - * a virtual-root window manager is in use, + int rootX, int rootY, /* Coordinates of point in root window. If a + * virtual-root window manager is in use, * these coordinates refer to the virtual * root, not the real root. */ - Tk_Window tkwin) /* Token for any window in application; - * used to identify the display. */ + Tk_Window tkwin) /* Token for any window in application; used + * to identify the display. */ { - WindowPtr whichWin; - Point where; - Window rootChild; TkWindow *winPtr, *childPtr; - TkWindow *nextPtr; /* Coordinates of highest child found so - * far that contains point. */ + TkWindow *nextPtr; /* Coordinates of highest child found so far + * that contains point. */ int x, y; /* Coordinates in winPtr. */ int tmpx, tmpy, bd; - TkDisplay *dispPtr; /* * Step 1: find the top-level window that contains the desired point. */ - where.h = rootX; - where.v = rootY; - FindWindow(where, &whichWin); - if (whichWin == NULL) { - return NULL; - } - rootChild = TkMacOSXGetXWindow(whichWin); - dispPtr = TkGetDisplayList(); - winPtr = (TkWindow *) Tk_IdToWindow(dispPtr->display, rootChild); - if (winPtr == NULL) { + winPtr = FrontWindowAtPoint(rootX, rootY); + if (!winPtr) { return NULL; } /* - * Step 2: work down through the hierarchy underneath this window. - * At each level, scan through all the children to find the highest - * one in the stacking order that contains the point. Then repeat - * the whole process on that child. + * Step 2: work down through the hierarchy underneath this window. At each + * level, scan through all the children to find the highest one in the + * stacking order that contains the point. Then repeat the whole process + * on that child. */ x = rootX - winPtr->wmInfoPtr->xInParent; @@ -3871,8 +4100,8 @@ Tk_CoordsToWindow( bd = childPtr->changes.border_width; if ((tmpx >= -bd) && (tmpy >= -bd) - && (tmpx < (childPtr->changes.width + bd)) - && (tmpy < (childPtr->changes.height + bd))) { + && (tmpx < (childPtr->changes.width + bd)) + && (tmpy < (childPtr->changes.height + bd))) { nextPtr = childPtr; } } @@ -3914,13 +4143,12 @@ Tk_CoordsToWindow( * Given a Tk Window, and coordinates of a point relative to that window * this procedure returns the top-most child of the window (excluding * toplevels) covering that point, if there exists such a window in this - * application. - * It also sets newX, and newY to the coords of the point relative to the - * window returned. + * application. It also sets newX, and newY to the coords of the point + * relative to the window returned. * * Results: - * The return result is either a token for the window corresponding - * to rootX and rootY, or else NULL to indicate that there is no such + * The return result is either a token for the window corresponding to + * rootX and rootY, or else NULL to indicate that there is no such * window. newX and newY are also set to the coords of the point relative * to the returned window. * @@ -3932,15 +4160,15 @@ Tk_CoordsToWindow( Tk_Window Tk_TopCoordsToWindow( - Tk_Window tkwin, /* Token for a Tk Window which defines the; + Tk_Window tkwin, /* Token for a Tk Window which defines the * coordinates for rootX & rootY */ int rootX, int rootY, /* Coordinates of a point in tkWin. */ int *newX, int *newY) /* Coordinates of point in the upperMost child * of tkWin containing (rootX,rootY) */ { TkWindow *winPtr, *childPtr; - TkWindow *nextPtr; /* Coordinates of highest child found so - * far that contains point. */ + TkWindow *nextPtr; /* Coordinates of highest child found so far + * that contains point. */ int x, y; /* Coordinates in winPtr. */ Window *children; /* Children of winPtr, or NULL. */ @@ -4005,24 +4233,23 @@ Tk_TopCoordsToWindow( * * UpdateVRootGeometry -- * - * This procedure is called to update all the virtual root - * geometry information in wmPtr. + * This procedure is called to update all the virtual root geometry + * information in wmPtr. * * Results: * None. * * Side effects: - * The vRootX, vRootY, vRootWidth, and vRootHeight fields in - * wmPtr are filled with the most up-to-date information. + * The vRootX, vRootY, vRootWidth, and vRootHeight fields in wmPtr are + * filled with the most up-to-date information. * *---------------------------------------------------------------------- */ static void UpdateVRootGeometry( - WmInfo *wmPtr) /* Window manager information to be - * updated. The wmPtr->vRoot field must - * be valid. */ + WmInfo *wmPtr) /* Window manager information to be updated. + * The wmPtr->vRoot field must be valid. */ { TkWindow *winPtr = wmPtr->winPtr; unsigned int bd, dummy; @@ -4048,8 +4275,7 @@ UpdateVRootGeometry( * Refresh the virtual root information if it's out of date. */ - handler = Tk_CreateErrorHandler(winPtr->display, -1, -1, -1, - (Tk_ErrorProc *) NULL, (ClientData) NULL); + handler = Tk_CreateErrorHandler(winPtr->display, -1, -1, -1, NULL, NULL); status = XGetGeometry(winPtr->display, wmPtr->vRoot, &dummy2, &wmPtr->vRootX, &wmPtr->vRootY, &wmPtr->vRootWidth, &wmPtr->vRootHeight, &bd, &dummy); @@ -4061,7 +4287,7 @@ UpdateVRootGeometry( Tk_DeleteErrorHandler(handler); if (status == 0) { /* - * The virtual root is gone! Pretend that it never existed. + * The virtual root is gone! Pretend that it never existed. */ wmPtr->vRoot = None; @@ -4074,16 +4300,15 @@ UpdateVRootGeometry( * * Tk_GetVRootGeometry -- * - * This procedure returns information about the virtual root - * window corresponding to a particular Tk window. + * This procedure returns information about the virtual root window + * corresponding to a particular Tk window. * * Results: - * The values at xPtr, yPtr, widthPtr, and heightPtr are set - * with the offset and dimensions of the root window corresponding - * to tkwin. If tkwin is being managed by a virtual root window - * manager these values correspond to the virtual root window being - * used for tkwin; otherwise the offsets will be 0 and the - * dimensions will be those of the screen. + * The values at xPtr, yPtr, widthPtr, and heightPtr are set with the + * offset and dimensions of the root window corresponding to tkwin. If + * tkwin is being managed by a virtual root window manager these values + * correspond to the virtual root window being used for tkwin; otherwise + * the offsets will be 0 and the dimensions will be those of the screen. * * Side effects: * Vroot window information is refreshed if it is out of date. @@ -4114,8 +4339,8 @@ Tk_GetVRootGeometry( wmPtr = winPtr->wmInfoPtr; /* - * Make sure that the geometry information is up-to-date, then copy - * it out to the caller. + * Make sure that the geometry information is up-to-date, then copy it out + * to the caller. */ if (wmPtr->flags & WM_VROOT_OFFSET_STALE) { @@ -4132,18 +4357,17 @@ Tk_GetVRootGeometry( * * Tk_MoveToplevelWindow -- * - * This procedure is called instead of Tk_MoveWindow to adjust - * the x-y location of a top-level window. It delays the actual - * move to a later time and keeps window-manager information - * up-to-date with the move + * This procedure is called instead of Tk_MoveWindow to adjust the x-y + * location of a top-level window. It delays the actual move to a later + * time and keeps window-manager information up-to-date with the move. * * Results: * None. * * Side effects: * The window is eventually moved so that its upper-left corner - * (actually, the upper-left corner of the window's decorative - * frame, if there is one) is at (x,y). + * (actually, the upper-left corner of the window's decorative frame, if + * there is one) is at (x,y). * *---------------------------------------------------------------------- */ @@ -4151,8 +4375,7 @@ Tk_GetVRootGeometry( void Tk_MoveToplevelWindow( Tk_Window tkwin, /* Window to move. */ - int x, int y) /* New location for window (within - * parent). */ + int x, int y) /* New location for window (within parent). */ { TkWindow *winPtr = (TkWindow *) tkwin; WmInfo *wmPtr = winPtr->wmInfoPtr; @@ -4171,16 +4394,15 @@ Tk_MoveToplevelWindow( /* * If the window has already been mapped, must bring its geometry - * up-to-date immediately, otherwise an event might arrive from the - * server that would overwrite wmPtr->x and wmPtr->y and lose the - * new position. + * up-to-date immediately, otherwise an event might arrive from the server + * that would overwrite wmPtr->x and wmPtr->y and lose the new position. */ if (!(wmPtr->flags & WM_NEVER_MAPPED)) { if (wmPtr->flags & WM_UPDATE_PENDING) { - Tk_CancelIdleCall(UpdateGeometryInfo, (ClientData) winPtr); + Tk_CancelIdleCall(UpdateGeometryInfo, winPtr); } - UpdateGeometryInfo((ClientData) winPtr); + UpdateGeometryInfo(winPtr); } } @@ -4195,9 +4417,9 @@ Tk_MoveToplevelWindow( * None. * * Side effects: - * WinPtr gets restacked as specified by aboveBelow and otherPtr. - * This procedure doesn't return until the restack has taken - * effect and the ConfigureNotify event for it has been received. + * WinPtr gets restacked as specified by aboveBelow and otherPtr. This + * procedure doesn't return until the restack has taken effect and the + * ConfigureNotify event for it has been received. * *---------------------------------------------------------------------- */ @@ -4207,28 +4429,25 @@ TkWmRestackToplevel( TkWindow *winPtr, /* Window to restack. */ int aboveBelow, /* Gives relative position for restacking; * must be Above or Below. */ - TkWindow *otherPtr) /* Window relative to which to restack; - * if NULL, then winPtr gets restacked - * above or below *all* siblings. */ + TkWindow *otherPtr) /* Window relative to which to restack; if + * NULL, then winPtr gets restacked above or + * below *all* siblings. */ { - WmInfo *wmPtr; - - WindowRef macWindow, otherMacWindow, frontWindow, tmpWindow; - - wmPtr = winPtr->wmInfoPtr; + NSWindow *macWindow; + NSInteger otherMacWindowNumber; /* * Get the mac window. Make sure it exists & is mapped. */ + if (winPtr->window == None) { Tk_MakeWindowExist((Tk_Window) winPtr); } if (winPtr->wmInfoPtr->flags & WM_NEVER_MAPPED) { - /* - * Can't set stacking order properly until the window is on the - * screen (mapping it may give it a reparent window), so make sure - * it's on the screen. + * Can't set stacking order properly until the window is on the screen + * (mapping it may give it a reparent window), so make sure it's on + * the screen. */ TkWmMapWindow(winPtr); @@ -4238,6 +4457,7 @@ TkWmRestackToplevel( /* * Get the window in which a raise or lower is in relation to. */ + if (otherPtr != NULL) { if (otherPtr->window == None) { Tk_MakeWindowExist((Tk_Window) otherPtr); @@ -4245,56 +4465,13 @@ TkWmRestackToplevel( if (otherPtr->wmInfoPtr->flags & WM_NEVER_MAPPED) { TkWmMapWindow(otherPtr); } - otherMacWindow = TkMacOSXDrawableWindow(otherPtr->window); + otherMacWindowNumber = [TkMacOSXDrawableWindow(otherPtr->window) + windowNumber]; } else { - otherMacWindow = NULL; - } - - frontWindow = ActiveNonFloatingWindow(); - - if (aboveBelow == Above) { - if (macWindow == frontWindow) { - /* - * Do nothing - it's already at the top. - */ - } else if (otherMacWindow == frontWindow || otherMacWindow == NULL) { - /* - * Raise the window to the top. If the window is visible then - * we also make it the active window. - */ - - if (wmPtr->hints.initial_state == WithdrawnState) { - BringToFront(macWindow); - } else { - SelectWindow(macWindow); - } - } else { - /* - * Find the window to be above. (Front window will actually be the - * window to be behind.) Front window is NULL if no other windows. - */ - - while (frontWindow != NULL && - (tmpWindow=GetNextWindow(frontWindow)) != otherMacWindow) { - frontWindow = tmpWindow; - } - if (frontWindow != NULL) { - SendBehind(macWindow, frontWindow); - } - } - } else { - /* - * Send behind. If it was in front find another window to make active. - */ - - if (macWindow == frontWindow) { - tmpWindow = GetNextWindow(macWindow); - if (tmpWindow != NULL) { - SelectWindow(tmpWindow); - } - } - SendBehind(macWindow, otherMacWindow); + otherMacWindowNumber = 0; } + [macWindow orderWindow:(aboveBelow == Above ? NSWindowAbove : NSWindowBelow) + relativeTo:otherMacWindowNumber]; } /* @@ -4303,27 +4480,26 @@ TkWmRestackToplevel( * TkWmAddToColormapWindows -- * * This procedure is called to add a given window to the - * WM_COLORMAP_WINDOWS property for its top-level, if it - * isn't already there. It is invoked by the Tk code that - * creates a new colormap, in order to make sure that colormap - * information is propagated to the window manager by default. + * WM_COLORMAP_WINDOWS property for its top-level, if it isn't already + * there. It is invoked by the Tk code that creates a new colormap, in + * order to make sure that colormap information is propagated to the + * window manager by default. * * Results: * None. * * Side effects: - * WinPtr's window gets added to the WM_COLORMAP_WINDOWS - * property of its nearest top-level ancestor, unless the - * colormaps have been set explicitly with the - * "wm colormapwindows" command. + * WinPtr's window gets added to the WM_COLORMAP_WINDOWS property of its + * nearest top-level ancestor, unless the colormaps have been set + * explicitly with the "wm colormapwindows" command. * *---------------------------------------------------------------------- */ void TkWmAddToColormapWindows( - TkWindow *winPtr) /* Window with a non-default colormap. - * Should not be a top-level window. */ + TkWindow *winPtr) /* Window with a non-default colormap. Should + * not be a top-level window. */ { TkWindow *topPtr; TkWindow **oldPtr, **newPtr; @@ -4363,14 +4539,13 @@ TkWmAddToColormapWindows( } /* - * Make a new bigger array and use it to reset the property. - * Automatically add the toplevel itself as the last element - * of the list. + * Make a new bigger array and use it to reset the property. Automatically + * add the toplevel itself as the last element of the list. */ - newPtr = (TkWindow **) ckalloc((unsigned) ((count+2)*sizeof(TkWindow*))); + newPtr = (TkWindow**)ckalloc((count+2) * sizeof(TkWindow *)); if (count > 0) { - memcpy(newPtr, oldPtr, count * sizeof(TkWindow*)); + memcpy(newPtr, oldPtr, count * sizeof(TkWindow *)); } if (count == 0) { count++; @@ -4385,9 +4560,8 @@ TkWmAddToColormapWindows( topPtr->wmInfoPtr->cmapCount = count+1; /* - * On the Macintosh all of this is just an excercise - * in compatability as we don't support colormaps. If - * we did they would be installed here. + * On the Macintosh all of this is just an excercise in compatability as + * we don't support colormaps. If we did they would be installed here. */ } @@ -4397,16 +4571,16 @@ TkWmAddToColormapWindows( * TkWmRemoveFromColormapWindows -- * * This procedure is called to remove a given window from the - * WM_COLORMAP_WINDOWS property for its top-level. It is invoked - * when windows are deleted. + * WM_COLORMAP_WINDOWS property for its top-level. It is invoked when + * windows are deleted. * * Results: * None. * * Side effects: - * WinPtr's window gets removed from the WM_COLORMAP_WINDOWS - * property of its nearest top-level ancestor, unless the - * top-level itself is being deleted too. + * WinPtr's window gets removed from the WM_COLORMAP_WINDOWS property of + * its nearest top-level ancestor, unless the top-level itself is being + * deleted too. * *---------------------------------------------------------------------- */ @@ -4424,8 +4598,8 @@ TkWmRemoveFromColormapWindows( for (topPtr = winPtr->parentPtr; ; topPtr = topPtr->parentPtr) { if (topPtr == NULL) { /* - * Ancestors have been deleted, so skip the whole operation. - * Seems like this can't ever happen? + * Ancestors have been deleted, so skip the whole operation. Seems + * like this can't ever happen? */ return; @@ -4436,16 +4610,15 @@ TkWmRemoveFromColormapWindows( } if (topPtr->flags & TK_ALREADY_DEAD) { /* - * Top-level is being deleted, so there's no need to cleanup - * the WM_COLORMAP_WINDOWS property. + * Top-level is being deleted, so there's no need to cleanup the + * WM_COLORMAP_WINDOWS property. */ return; } /* - * Find the window and slide the following ones down to cover - * it up. + * Find the window and slide the following ones down to cover it up. */ count = topPtr->wmInfoPtr->cmapCount; @@ -4469,10 +4642,10 @@ TkWmRemoveFromColormapWindows( * Fetch the position of the mouse pointer. * * Results: - * *xPtr and *yPtr are filled in with the (virtual) root coordinates - * of the mouse pointer for tkwin's display. If the pointer isn't - * on tkwin's screen, then -1 values are returned for both - * coordinates. The argument tkwin must be a toplevel window. + * *xPtr and *yPtr are filled in with the (virtual) root coordinates of + * the mouse pointer for tkwin's display. If the pointer isn't on tkwin's + * screen, then -1 values are returned for both coordinates. The argument + * tkwin must be a toplevel window. * * Side effects: * None. @@ -4482,8 +4655,8 @@ TkWmRemoveFromColormapWindows( void TkGetPointerCoords( - Tk_Window tkwin, /* Toplevel window that identifies screen - * on which lookup is to be done. */ + Tk_Window tkwin, /* Toplevel window that identifies screen on + * which lookup is to be done. */ int *xPtr, int *yPtr) /* Store pointer coordinates here. */ { XQueryPointer(NULL, None, NULL, NULL, xPtr, yPtr, NULL, NULL, NULL); @@ -4494,13 +4667,13 @@ TkGetPointerCoords( * * InitialWindowBounds -- * - * This function calculates the initial bounds for a new Mac - * toplevel window. Unless the geometry is specified by the user - * this code will auto place the windows in a cascade diagonially - * across the main monitor of the Mac. + * This function calculates the initial bounds for a new Mac toplevel + * window. Unless the geometry is specified by the user this code will + * auto place the windows in a cascade diagonially across the main + * monitor of the Mac. * * Results: - * The bounds are returned in geometry. + * Window bounds. * * Side effects: * None. @@ -4508,44 +4681,25 @@ TkGetPointerCoords( *---------------------------------------------------------------------- */ -static void +static NSRect InitialWindowBounds( TkWindow *winPtr, /* Window to get initial bounds for. */ - WindowRef macWindow, - Rect *geometry) /* On return the initial bounds. */ + NSWindow *macWindow) { WmInfo *wmPtr = winPtr->wmInfoPtr; if (!(wmPtr->sizeHintsFlags & (USPosition | PPosition))) { - WindowRef parent; + static NSPoint cascadePoint = { .x = 0, .y = 0 }; + NSRect frame; - parent = GetFrontWindowOfClass(wmPtr->macClass, false); - if (parent && parent == macWindow) { - parent = GetNextWindowOfClass(parent, wmPtr->macClass, false); - } - if (parent && parent != macWindow) { - Rect bounds; - - ChkErr(RepositionWindow, macWindow, parent, - kWindowCascadeOnParentWindowScreen); - ChkErr(GetWindowBounds, macWindow, kWindowStructureRgn, &bounds); - wmPtr->x = bounds.left; - wmPtr->y = bounds.top; - } else { - static SInt16 menuBarHeight = 0; - - if (!menuBarHeight) { - ChkErr(GetThemeMenuBarHeight, &menuBarHeight); - } - wmPtr->x = 5; - wmPtr->y = menuBarHeight + 5; - } + cascadePoint = [macWindow cascadeTopLeftFromPoint:cascadePoint]; + frame = [macWindow frame]; + wmPtr->x = frame.origin.x; + wmPtr->y = tkMacOSXZeroScreenHeight - (frame.origin.y + + frame.size.height); } - - geometry->left = wmPtr->x; - geometry->top = wmPtr->y; - geometry->right = wmPtr->x + winPtr->changes.width; - geometry->bottom = wmPtr->y + winPtr->changes.height; + return NSMakeRect(wmPtr->x, wmPtr->y, winPtr->changes.width, + winPtr->changes.height); } /* @@ -4553,9 +4707,9 @@ InitialWindowBounds( * * TkMacOSXResizable -- * - * This function determines if the passed in window is part of - * a toplevel window that is resizable. If the window is - * resizable in the x, y or both directions, true is returned. + * This function determines if the passed in window is part of a toplevel + * window that is resizable. If the window is resizable in the x, y or + * both directions, true is returned. * * Results: * True if resizable, false otherwise. @@ -4593,10 +4747,10 @@ TkMacOSXResizable( * * TkMacOSXGrowToplevel -- * - * The function is invoked when the user clicks in the grow region - * of a Tk window. The function will handle the dragging - * procedure and not return until completed. Finally, the function - * may place information Tk's event queue is the window was resized. + * The function is invoked when the user clicks in the grow region of a + * Tk window. The function will handle the dragging procedure and not + * return until completed. Finally, the function may place information + * Tk's event queue is the window was resized. * * Results: * True if events were placed on event queue, false otherwise. @@ -4609,104 +4763,9 @@ TkMacOSXResizable( int TkMacOSXGrowToplevel( - WindowRef whichWindow, - Point start) + void *whichWindow, + XPoint start) { - Point where = start; - TkDisplay *dispPtr; - Rect portRect; - CGrafPtr destPort = GetWindowPort(whichWindow); - - QDGlobalToLocalPoint(destPort, &where); - GetPortBounds(destPort, &portRect); - if (where.h > (portRect.right - 16) && - where.v > (portRect.bottom - 16)) { - Window window; - TkWindow *winPtr; - WmInfo *wmPtr; - int minWidth, minHeight, maxWidth, maxHeight; - Rect limits, bounds, *maxBounds; - Boolean resizeResult; - - window = TkMacOSXGetXWindow(whichWindow); - dispPtr = TkGetDisplayList(); - winPtr = (TkWindow *) Tk_IdToWindow(dispPtr->display, window); - wmPtr = winPtr->wmInfoPtr; - maxBounds = (Rect*)(dispPtr->display->screens->ext_data); - - if ((wmPtr->flags & WM_WIDTH_NOT_RESIZABLE) && - (wmPtr->flags & WM_HEIGHT_NOT_RESIZABLE)) { - return false; - } - GetMinSize(winPtr, &minWidth, &minHeight); - GetMaxSize(winPtr, &maxWidth, &maxHeight); - if (wmPtr->gridWin != NULL) { - int base = winPtr->reqWidth - (wmPtr->reqGridWidth - * wmPtr->widthInc); - - if (base < 0) { - base = 0; - } - limits.left = base + (minWidth * wmPtr->widthInc); - limits.right = base + (maxWidth * wmPtr->widthInc); - base = winPtr->reqHeight - (wmPtr->reqGridHeight - * wmPtr->heightInc); - if (base < 0) { - base = 0; - } - limits.top = base + (minHeight * wmPtr->heightInc); - limits.bottom = base + (maxHeight * wmPtr->heightInc); - } else { - limits.left = minWidth; - limits.right = maxWidth; - limits.top = minHeight; - limits.bottom = maxHeight; - } - if (wmPtr->flags & WM_WIDTH_NOT_RESIZABLE) { - limits.left = limits.right = winPtr->changes.width; - } - if (wmPtr->flags & WM_HEIGHT_NOT_RESIZABLE) { - limits.top = limits.bottom = winPtr->changes.height; - } - if (PtInRect(start, maxBounds)) { - Rect strBounds, strWidths, limitBounds; - - ChkErr(GetWindowBounds, whichWindow, kWindowStructureRgn, - &strBounds); - ChkErr(GetWindowStructureWidths, whichWindow, &strWidths); - - limitBounds.left = limits.left + (strBounds.left + strWidths.left); - limitBounds.right = limits.right + - (strBounds.left + strWidths.left + strWidths.right); - limitBounds.top = limits.top + (strBounds.top + strWidths.top); - limitBounds.bottom = limits.bottom + - (strBounds.top + strWidths.top + strWidths.bottom); - if (limitBounds.left < maxBounds->left) { - limitBounds.left = maxBounds->left; - } - if (limitBounds.right > maxBounds->right) { - limitBounds.right = maxBounds->right; - } - if (limitBounds.top < maxBounds->top) { - limitBounds.top = maxBounds->top; - } - if (limitBounds.bottom > maxBounds->bottom) { - limitBounds.bottom = maxBounds->bottom; - } - limits.left = limitBounds.left - (strBounds.left + strWidths.left); - limits.right = limitBounds.right - - (strBounds.left + strWidths.left + strWidths.right); - limits.top = limitBounds.top - (strBounds.top + strWidths.top); - limits.bottom = limitBounds.bottom - - (strBounds.top + strWidths.top + strWidths.bottom); - } - TkMacOSXTrackingLoop(1); - resizeResult = ResizeWindow(whichWindow, start, &limits, &bounds); - TkMacOSXTrackingLoop(0); - if (resizeResult) { - return true; - } - } return false; } @@ -4715,8 +4774,8 @@ TkMacOSXGrowToplevel( * * TkSetWMName -- * - * Set the title for a toplevel window. If the window is embedded, - * do not change the window title. + * Set the title for a toplevel window. If the window is embedded, do not + * change the window title. * * Results: * None. @@ -4732,20 +4791,13 @@ TkSetWMName( TkWindow *winPtr, Tk_Uid titleUid) { - CFStringRef title; - if (Tk_IsEmbedded(winPtr)) { return; } - title = CFStringCreateWithBytes(NULL, (const unsigned char*) titleUid, - strlen(titleUid), kCFStringEncodingUTF8, false); - if (title) { - WindowRef macWin = TkMacOSXDrawableWindow(winPtr->window); - - SetWindowTitleWithCFString(macWin, title); - CFRelease(title); - } + NSString *title = [[NSString alloc] initWithUTF8String:titleUid]; + [TkMacOSXDrawableWindow(winPtr->window) setTitle:title]; + [title release]; } /* @@ -4753,8 +4805,8 @@ TkSetWMName( * * TkGetTransientMaster -- * - * If the passed window has the TRANSIENT_FOR property set this - * will return the master window. Otherwise it will return None. + * If the passed window has the TRANSIENT_FOR property set this will + * return the master window. Otherwise it will return None. * * Results: * The master window or None. @@ -4780,7 +4832,7 @@ TkGetTransientMaster( * * TkMacOSXGetXWindow -- * - * Returns the X window Id associated with the given WindowRef. + * Returns the X window Id associated with the given NSWindow*. * * Results: * The window id is returned. None is returned if not a Tk window. @@ -4793,14 +4845,14 @@ TkGetTransientMaster( Window TkMacOSXGetXWindow( - WindowRef macWinPtr) + void *macWinPtr) { Tcl_HashEntry *hPtr; - if ((macWinPtr == NULL) || !windowHashInit) { + if (!macWinPtr || !windowHashInit) { return None; } - hPtr = Tcl_FindHashEntry(&windowTable, (char *) macWinPtr); + hPtr = Tcl_FindHashEntry(&windowTable, macWinPtr); if (hPtr == NULL) { return None; } @@ -4810,12 +4862,38 @@ TkMacOSXGetXWindow( /* *---------------------------------------------------------------------- * + * TkMacOSXGetTkWindow -- + * + * Returns the TkWindow* associated with the given NSWindow*. + * + * Results: + * The TkWindow* returned. NULL is returned if not a Tk window. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +TkWindow* +TkMacOSXGetTkWindow( + NSWindow *w) +{ + Window window = TkMacOSXGetXWindow(w); + TkDisplay *dispPtr = TkGetDisplayList(); + + return (window != None ? + (TkWindow *)Tk_IdToWindow(dispPtr->display, window) : NULL); +} + +/* + *---------------------------------------------------------------------- + * * TkMacOSXIsWindowZoomed -- * - * Ask Carbon if the given window is in the zoomed out state. - * Because dragging & growing a window can change the Carbon - * zoom state, we cannot rely on wmInfoPtr->hints.initial_state - * for this information. + * Ask Carbon if the given window is in the zoomed out state. Because + * dragging & growing a window can change the Carbon zoom state, we + * cannot rely on wmInfoPtr->hints.initial_state for this information. * * Results: * True if window is zoomed out, false otherwise. @@ -4830,41 +4908,7 @@ MODULE_SCOPE int TkMacOSXIsWindowZoomed( TkWindow *winPtr) { - WmInfo *wmPtr = winPtr->wmInfoPtr; - int maxWidth, maxHeight; - Point idealSize; - - if ((wmPtr->flags & WM_WIDTH_NOT_RESIZABLE) && - (wmPtr->flags & WM_HEIGHT_NOT_RESIZABLE)) { - return false; - } - GetMaxSize(winPtr, &maxWidth, &maxHeight); - if (wmPtr->gridWin != NULL) { - int base = winPtr->reqWidth - (wmPtr->reqGridWidth * wmPtr->widthInc); - - if (base < 0) { - base = 0; - } - maxWidth = base + (maxWidth * wmPtr->widthInc); - base = winPtr->reqHeight - (wmPtr->reqGridHeight * wmPtr->heightInc); - if (base < 0) { - base = 0; - } - maxHeight = base + (maxHeight * wmPtr->heightInc); - } - if (wmPtr->flags & WM_WIDTH_NOT_RESIZABLE) { - idealSize.h = winPtr->changes.width; - } else { - idealSize.h = maxWidth; - } - if (wmPtr->flags & WM_HEIGHT_NOT_RESIZABLE) { - idealSize.v = winPtr->changes.height; - } else { - idealSize.v = maxHeight; - } - - return IsWindowInStandardState(TkMacOSXDrawableWindow(winPtr->window), - &idealSize, NULL); + return [TkMacOSXDrawableWindow(winPtr->window) isZoomed]; } /* @@ -4872,11 +4916,10 @@ TkMacOSXIsWindowZoomed( * * TkMacOSXZoomToplevel -- * - * The function is invoked when the user clicks in the zoom region - * of a Tk window or when the window state is set/unset to "zoomed" - * manually. If the window is to be zoomed (in or out), the window - * size is changed and events are generated to let Tk know what - * happened. + * The function is invoked when the user clicks in the zoom region of a + * Tk window or when the window state is set/unset to "zoomed" manually. + * If the window is to be zoomed (in or out), the window size is changed + * and events are generated to let Tk know what happened. * * Results: * True if events were placed on event queue, false otherwise. @@ -4889,65 +4932,33 @@ TkMacOSXIsWindowZoomed( int TkMacOSXZoomToplevel( - WindowRef whichWindow, /* The Macintosh window to zoom. */ + void *whichWindow, /* The Macintosh window to zoom. */ short zoomPart) /* Either inZoomIn or inZoomOut */ { - Window window; - TkDisplay *dispPtr; - TkWindow *winPtr; + NSWindow *window = whichWindow; + TkWindow *winPtr = TkMacOSXGetTkWindow(window); WmInfo *wmPtr; - Point idealSize; - int maxWidth, maxHeight; - OSStatus err; - window = TkMacOSXGetXWindow(whichWindow); - dispPtr = TkGetDisplayList(); - winPtr = (TkWindow *) Tk_IdToWindow(dispPtr->display, window); + if (!winPtr || !winPtr->wmInfoPtr) { + return false; + } wmPtr = winPtr->wmInfoPtr; - if ((wmPtr->flags & WM_WIDTH_NOT_RESIZABLE) && (wmPtr->flags & WM_HEIGHT_NOT_RESIZABLE)) { return false; } - GetMaxSize(winPtr, &maxWidth, &maxHeight); - if (wmPtr->gridWin != NULL) { - int base = winPtr->reqWidth - (wmPtr->reqGridWidth * wmPtr->widthInc); - - if (base < 0) { - base = 0; - } - maxWidth = base + (maxWidth * wmPtr->widthInc); - base = winPtr->reqHeight - (wmPtr->reqGridHeight * wmPtr->heightInc); - if (base < 0) { - base = 0; - } - maxHeight = base + (maxHeight * wmPtr->heightInc); - } - if (wmPtr->flags & WM_WIDTH_NOT_RESIZABLE) { - idealSize.h = winPtr->changes.width; - } else { - idealSize.h = maxWidth; - } - if (wmPtr->flags & WM_HEIGHT_NOT_RESIZABLE) { - idealSize.v = winPtr->changes.height; - } else { - idealSize.v = maxHeight; - } - /* Do nothing if already in desired zoom state */ - if (!IsWindowInStandardState(whichWindow, &idealSize, NULL) == - (zoomPart == inZoomIn)) { - return false; - } + /* + * Do nothing if already in desired zoom state. + */ - err = ChkErr(ZoomWindowIdeal, whichWindow, zoomPart, &idealSize); - if (err == noErr) { - wmPtr->hints.initial_state = - (zoomPart == inZoomIn ? NormalState : ZoomState); - return true; - } else { + if (![window isZoomed] == (zoomPart == inZoomIn)) { return false; } + [window zoom:NSApp]; + wmPtr->hints.initial_state = + (zoomPart == inZoomIn ? NormalState : ZoomState); + return true; } /* @@ -4956,9 +4967,8 @@ TkMacOSXZoomToplevel( * TkUnsupported1Cmd -- * * This procedure is invoked to process the - * "::tk::unsupported::MacWindowStyle" Tcl command. - * This command allows you to set the style of decoration - * for a Macintosh window. + * "::tk::unsupported::MacWindowStyle" Tcl command. This command allows + * you to set the style of decoration for a Macintosh window. * * Results: * A standard Tcl result. @@ -4972,19 +4982,18 @@ TkMacOSXZoomToplevel( /* ARGSUSED */ int TkUnsupported1ObjCmd( - ClientData clientData, /* Main window associated with - * interpreter. */ + ClientData clientData, /* Main window associated with interpreter. */ Tcl_Interp *interp, /* Current interpreter. */ int objc, /* Number of arguments. */ - Tcl_Obj * const objv[]) /* Argument objects. */ + Tcl_Obj *const objv[]) /* Argument objects. */ { - static const char *subcmds[] = { + static const char *const subcmds[] = { "style", NULL }; enum SubCmds { TKMWS_STYLE }; - Tk_Window tkwin = (Tk_Window) clientData; + Tk_Window tkwin = clientData; TkWindow *winPtr; int index; @@ -4993,8 +5002,64 @@ TkUnsupported1ObjCmd( return TCL_ERROR; } - winPtr = (TkWindow *) Tk_NameToWindow(interp, - Tcl_GetString(objv[2]), tkwin); + + /* Iterate through objc/objv to set correct background color and toggle opacity of window. */ + int i; + for (i= 0; i < objc; i++) { + + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*black*") == 1) { + colorName = [NSColor blackColor]; // use #000000 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*dark*") == 1) { + colorName = [NSColor darkGrayColor]; //use #545454 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*light*") == 1) { + colorName = [NSColor lightGrayColor]; //use #ababab in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*white*") == 1) { + colorName = [NSColor whiteColor]; //use #ffffff in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "gray*") == 1) { + colorName = [NSColor grayColor]; //use #7f7f7f in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*red*") == 1) { + colorName = [NSColor redColor]; //use #ff0000 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*green*") == 1) { + colorName = [NSColor greenColor]; //use #00ff00 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*blue*") == 1) { + colorName = [NSColor blueColor]; //use #0000ff in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*cyan*") == 1) { + colorName = [NSColor cyanColor]; //use #00ffff in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*yellow*") == 1) { + colorName = [NSColor yellowColor]; //use #ffff00 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*magenta*") == 1) { + colorName = [NSColor magentaColor]; //use #ff00ff in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*orange*") == 1) { + colorName = [NSColor orangeColor]; //use #ff8000 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*purple*") == 1) { + colorName = [NSColor purpleColor]; //use #800080 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*brown*") == 1){ + colorName = [NSColor brownColor]; //use #996633 in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*clear*") == 1) { + colorName = [NSColor clearColor]; //use systemTransparent in Tk scripts to match + } + if (Tcl_StringMatch(Tcl_GetString(objv[i]), "*opacity*") == 1) { + opaqueTag=@"YES"; + } + } + + + winPtr = (TkWindow *) + Tk_NameToWindow(interp, Tcl_GetString(objv[2]), tkwin); if (winPtr == NULL) { return TCL_ERROR; } @@ -5005,8 +5070,8 @@ TkUnsupported1ObjCmd( return TCL_ERROR; } - if (Tcl_GetIndexFromObj(interp, objv[1], subcmds, "option", - 0, &index) != TCL_OK) { + if (Tcl_GetIndexFromObj(interp, objv[1], subcmds, "option", 0, + &index) != TCL_OK) { return TCL_ERROR; } if (((enum SubCmds) index) == TKMWS_STYLE) { @@ -5026,9 +5091,8 @@ TkUnsupported1ObjCmd( * WmWinStyle -- * * This procedure is invoked to process the - * "::tk::unsupported::MacWindowStyle style" subcommand. - * This command allows you to set the style of decoration - * for a Macintosh window. + * "::tk::unsupported::MacWindowStyle style" subcommand. This command + * allows you to set the style of decoration for a Macintosh window. * * Results: * A standard Tcl result. @@ -5038,6 +5102,7 @@ TkUnsupported1ObjCmd( * *---------------------------------------------------------------------- */ + static int WmWinStyle( Tcl_Interp *interp, /* Current interpreter. */ @@ -5047,53 +5112,37 @@ WmWinStyle( { struct StrIntMap { const char *strValue; - UInt32 intValue; - }; - static const struct StrIntMap styleMap[] = { - { "documentProc", documentProc }, - { "noGrowDocProc", documentProc }, - { "dBoxProc", dBoxProc }, - { "plainDBox", plainDBox }, - { "altDBoxProc", altDBoxProc }, - { "movableDBoxProc", movableDBoxProc }, - { "zoomDocProc", zoomDocProc }, - { "zoomNoGrow", zoomNoGrow }, - { "floatProc", floatGrowProc }, - { "floatGrowProc", floatGrowProc }, - { "floatZoomProc", floatZoomGrowProc }, - { "floatZoomGrowProc", floatZoomGrowProc }, - { "floatSideProc", floatSideGrowProc }, - { "floatSideGrowProc", floatSideGrowProc }, - { "floatSideZoomProc", floatSideZoomGrowProc }, - { "floatSideZoomGrowProc", floatSideZoomGrowProc }, - { NULL, 0 } + UInt64 intValue; }; static const struct StrIntMap classMap[] = { - { "alert", kAlertWindowClass }, - { "moveableAlert", kMovableAlertWindowClass }, - { "modal", kModalWindowClass }, - { "moveableModal", kMovableModalWindowClass }, - { "floating", kFloatingWindowClass }, - { "document", kDocumentWindowClass }, - { "utility", kUtilityWindowClass }, - { "help", kHelpWindowClass }, - { "sheet", kSheetWindowClass }, - { "toolbar", kToolbarWindowClass }, - { "plain", kPlainWindowClass }, - { "overlay", kOverlayWindowClass }, - { "sheetAlert", kSheetAlertWindowClass }, - { "altPlain", kAltPlainWindowClass }, - { "simple", kSimpleWindowClass }, - { "drawer", kDrawerWindowClass }, - { NULL, 0 } + { "alert", kAlertWindowClass }, + { "moveableAlert", kMovableAlertWindowClass }, + { "modal", kModalWindowClass }, + { "moveableModal", kMovableModalWindowClass }, + { "floating", kFloatingWindowClass }, + { "document", kDocumentWindowClass }, + { "utility", kUtilityWindowClass }, + { "help", kHelpWindowClass }, + { "sheet", kSheetWindowClass }, + { "toolbar", kToolbarWindowClass }, + { "plain", kPlainWindowClass }, + { "overlay", kOverlayWindowClass }, + { "sheetAlert", kSheetAlertWindowClass }, + { "altPlain", kAltPlainWindowClass }, + { "simple", kSimpleWindowClass }, + { "drawer", kDrawerWindowClass }, + { NULL } }; static const struct StrIntMap compositeAttrMap[] = { - { "none", kWindowNoAttributes }, - { "standardDocument", kWindowStandardDocumentAttributes }, - { "standardFloating", kWindowStandardFloatingAttributes }, - { "fullZoom", kWindowFullZoomAttribute }, - { NULL, 0 } + { "none", kWindowNoAttributes }, + { "standardDocument", kWindowStandardDocumentAttributes }, + { "standardFloating", kWindowStandardFloatingAttributes }, + { "fullZoom", kWindowFullZoomAttribute }, + { NULL } }; + + /* Map window attributes. Color and opacity are mapped to NULL; these are parsed from the objv in TkUnsupported1ObjCmd.*/ + static const struct StrIntMap attrMap[] = { { "closeBox", kWindowCloseBoxAttribute }, { "horizontalZoom", kWindowHorizontalZoomAttribute }, @@ -5118,107 +5167,120 @@ WmWinStyle( { "liveResize", kWindowLiveResizeAttribute }, { "ignoreClicks", kWindowIgnoreClicksAttribute }, { "noConstrain", kWindowNoConstrainAttribute }, - { NULL, 0 } + { "doesNotHide", tkWindowDoesNotHideAttribute }, + { "canJoinAllSpaces", tkCanJoinAllSpacesAttribute }, + { "moveToActiveSpace", tkMoveToActiveSpaceAttribute }, + { "nonActivating", tkNonactivatingPanelAttribute }, + { "hud", tkHUDWindowAttribute }, + { "black", NULL }, + { "dark", NULL }, + { "light", NULL }, + { "gray", NULL }, + { "red", NULL }, + { "green", NULL }, + { "blue", NULL }, + { "cyan", NULL }, + { "yellow", NULL }, + { "magenta", NULL }, + { "orange", NULL }, + { "purple", NULL }, + { "brown", NULL }, + { "clear", NULL }, + { "opacity", NULL }, + { NULL } }; + int index, i; WmInfo *wmPtr = winPtr->wmInfoPtr; if (objc == 3) { - if (wmPtr->style != -1) { - for (i = 0; styleMap[i].strValue != NULL; i++) { - if (wmPtr->style == (short)(styleMap[i].intValue)) { - Tcl_SetObjResult(interp, - Tcl_NewStringObj(styleMap[i].strValue, -1)); - return TCL_OK; - } - } - Tcl_Panic("invalid style"); - } else { - Tcl_Obj *attributeList, *newResult = NULL; - WindowAttributes attributes; + Tcl_Obj *attributeList, *newResult = NULL; + UInt64 attributes; - for (i = 0; classMap[i].strValue != NULL; i++) { - if (wmPtr->macClass == classMap[i].intValue) { - newResult = Tcl_NewStringObj(classMap[i].strValue, -1); - break; - } - } - if (newResult == NULL) { - Tcl_Panic("invalid class"); + for (i = 0; classMap[i].strValue != NULL; i++) { + if (wmPtr->macClass == classMap[i].intValue) { + newResult = Tcl_NewStringObj(classMap[i].strValue, -1); + break; } + } + if (newResult == NULL) { + Tcl_Panic("invalid class"); + } - attributeList = Tcl_NewListObj(0, NULL); - attributes = wmPtr->attributes; - for (i = 0; compositeAttrMap[i].strValue != NULL; i++) { - UInt32 intValue = compositeAttrMap[i].intValue; + attributeList = Tcl_NewListObj(0, NULL); + attributes = wmPtr->attributes; - if (intValue && (attributes & intValue) == intValue) { - Tcl_ListObjAppendElement(interp, attributeList, - Tcl_NewStringObj(compositeAttrMap[i].strValue, - -1)); - attributes &= ~intValue; - break; - } - } - for (i = 0; attrMap[i].strValue != NULL; i++) { - if (attributes & attrMap[i].intValue) { - Tcl_ListObjAppendElement(interp, attributeList, - Tcl_NewStringObj(attrMap[i].strValue, -1)); - } + for (i = 0; compositeAttrMap[i].strValue != NULL; i++) { + UInt64 intValue = compositeAttrMap[i].intValue; + + if (intValue && (attributes & intValue) == intValue) { + Tcl_ListObjAppendElement(interp, attributeList, + Tcl_NewStringObj(compositeAttrMap[i].strValue, + -1)); + attributes &= ~intValue; + break; } - Tcl_ListObjAppendElement(interp, newResult, attributeList); - Tcl_SetObjResult(interp, newResult); } - } else if (objc == 4) { - if (Tcl_GetIndexFromObjStruct(interp, objv[3], styleMap, - sizeof(struct StrIntMap), "style", 0, &index) != TCL_OK) { - return TCL_ERROR; + for (i = 0; attrMap[i].strValue != NULL; i++) { + if (attributes & attrMap[i].intValue) { + Tcl_ListObjAppendElement(interp, attributeList, + Tcl_NewStringObj(attrMap[i].strValue, -1)); + } } - wmPtr->style = styleMap[index].intValue; - } else if (objc == 5) { + Tcl_ListObjAppendElement(interp, newResult, attributeList); + Tcl_SetObjResult(interp, newResult); + } else { int attrObjc; Tcl_Obj **attrObjv = NULL; - WindowClass oldClass = wmPtr->macClass; - WindowAttributes oldAttributes = wmPtr->attributes; + WindowClass macClass; + UInt64 oldAttributes = wmPtr->attributes; + int oldFlags = wmPtr->flags; if (Tcl_GetIndexFromObjStruct(interp, objv[3], classMap, sizeof(struct StrIntMap), "class", 0, &index) != TCL_OK) { goto badClassAttrs; } - wmPtr->macClass = classMap[index].intValue; - if (!IsValidWindowClass(wmPtr->macClass)) { - goto badClassAttrs; - } - if (Tcl_ListObjGetElements(interp, objv[4], &attrObjc, &attrObjv) - != TCL_OK) { - goto badClassAttrs; - } - wmPtr->attributes = kWindowNoAttributes; - for (i = 0; i < attrObjc; i++) { - if (Tcl_GetIndexFromObjStruct(interp, attrObjv[i], - compositeAttrMap, sizeof(struct StrIntMap), - "attribute", 0, &index) == TCL_OK) { - wmPtr->attributes |= compositeAttrMap[index].intValue; - } else if (Tcl_GetIndexFromObjStruct(interp, attrObjv[i], - attrMap, sizeof(struct StrIntMap), - "attribute", 0, &index) == TCL_OK) { - Tcl_ResetResult(interp); - wmPtr->attributes |= attrMap[index].intValue; - } else { + macClass = classMap[index].intValue; + if (objc == 5) { + if (Tcl_ListObjGetElements(interp, objv[4], &attrObjc, &attrObjv) + != TCL_OK) { goto badClassAttrs; } + wmPtr->attributes = kWindowNoAttributes; + for (i = 0; i < attrObjc; i++) { + if (Tcl_GetIndexFromObjStruct(interp, attrObjv[i], + compositeAttrMap, sizeof(struct StrIntMap), + "attribute", 0, &index) == TCL_OK) { + wmPtr->attributes |= compositeAttrMap[index].intValue; + } else if (Tcl_GetIndexFromObjStruct(interp, attrObjv[i], + attrMap, sizeof(struct StrIntMap), + "attribute", 0, &index) == TCL_OK) { + Tcl_ResetResult(interp); + wmPtr->attributes |= attrMap[index].intValue; + } else { + goto badClassAttrs; + } + } + } else { + wmPtr->attributes = macClassAttrs[macClass].defaultAttrs; } - ApplyWindowClassAttributeChanges(winPtr, NULL, oldClass, oldAttributes, - 0); - wmPtr->style = -1; + wmPtr->attributes &= (tkAlwaysValidAttributes | + macClassAttrs[macClass].validAttrs); + wmPtr->flags |= macClassAttrs[macClass].flags; + wmPtr->macClass = macClass; + + ApplyWindowAttributeFlagChanges(winPtr, NULL, oldAttributes, oldFlags, + 0, 1); + return TCL_OK; badClassAttrs: - wmPtr->macClass = oldClass; wmPtr->attributes = oldAttributes; return TCL_ERROR; } + + return TCL_OK; } @@ -5227,8 +5289,8 @@ WmWinStyle( * * TkpMakeMenuWindow -- * - * Configure the window to be either a undecorated pull-down - * (or pop-up) menu, or as a toplevel floating menu (palette). + * Configure the window to be either a undecorated pull-down (or pop-up) + * menu, or as a toplevel floating menu (palette). * * Results: * None. @@ -5242,10 +5304,10 @@ WmWinStyle( void TkpMakeMenuWindow( Tk_Window tkwin, /* New window. */ - int transient) /* 1 means menu is only posted briefly as - * a popup or pulldown or cascade. 0 means - * menu is always visible, e.g. as a - * floating menu. */ + int transient) /* 1 means menu is only posted briefly as a + * popup or pulldown or cascade. 0 means menu + * is always visible, e.g. as a floating + * menu. */ { TkWindow *winPtr = (TkWindow *) tkwin; @@ -5265,8 +5327,8 @@ TkpMakeMenuWindow( * * TkMacOSXMakeRealWindowExist -- * - * This function finally creates the real Macintosh window that - * the Mac actually understands. + * This function finally creates the real Macintosh window that the Mac + * actually understands. * * Results: * None. @@ -5282,13 +5344,7 @@ TkMacOSXMakeRealWindowExist( TkWindow *winPtr) /* Tk window. */ { WmInfo *wmPtr = winPtr->wmInfoPtr; - WindowRef newWindow = NULL; - ControlRef rootControl = NULL; MacDrawable *macWin; - Rect initialBounds = {42, 0, 43, 1}, geometry, strWidths; - short structureW, structureH; - TkMacOSXWindowList *listPtr; - OSStatus err; if (TkMacOSXHostToplevelExists(winPtr)) { return; @@ -5315,8 +5371,8 @@ TkMacOSXMakeRealWindowExist( Tcl_Panic("TkMacOSXMakeRealWindowExist could not find container"); } if (tkMacOSXEmbedHandler->containerExistProc && - tkMacOSXEmbedHandler->containerExistProc((Tk_Window) winPtr) != - TCL_OK) { + tkMacOSXEmbedHandler->containerExistProc((Tk_Window) winPtr) + != TCL_OK) { Tcl_Panic("ContainerExistProc could not make container"); } return; @@ -5326,89 +5382,90 @@ TkMacOSXMakeRealWindowExist( */ } - if (wmPtr->style == -1) { - if (!IsValidWindowClass(wmPtr->macClass)) { - TkMacOSXDbgMsg("Invalid window class: %ld", wmPtr->macClass); - wmPtr->macClass = kPlainWindowClass; - } - wmPtr->attributes = (wmPtr->attributes | kWindowAsyncDragAttribute) & - GetAvailableWindowAttributes(wmPtr->macClass); - err = ChkErr(CreateNewWindow, wmPtr->macClass, wmPtr->attributes, - &initialBounds, &newWindow); - if (err != noErr) { - newWindow = NULL; - } - } else { - TkMacOSXDbgMsg("Window creation via NewCWindow API is deprecated, " - "use a window class instead of style %d", wmPtr->style); - newWindow = NewCWindow(NULL, &initialBounds, "\p", false, - wmPtr->style, (WindowRef) -1, true, 0); - } - - if (newWindow == NULL) { + WindowClass macClass = wmPtr->macClass; + wmPtr->attributes &= (tkAlwaysValidAttributes | + macClassAttrs[macClass].validAttrs); + wmPtr->flags |= macClassAttrs[macClass].flags | + ((wmPtr->attributes & kWindowResizableAttribute) ? 0 : + WM_WIDTH_NOT_RESIZABLE|WM_HEIGHT_NOT_RESIZABLE); + UInt64 attributes = (wmPtr->attributes & + ~macClassAttrs[macClass].forceOffAttrs) | + macClassAttrs[macClass].forceOnAttrs; + NSUInteger styleMask = macClassAttrs[macClass].styleMask | + ((attributes & kWindowNoTitleBarAttribute) ? 0 : NSTitledWindowMask) | + ((attributes & kWindowCloseBoxAttribute) ? NSClosableWindowMask : 0) | + ((attributes & kWindowCollapseBoxAttribute) ? + NSMiniaturizableWindowMask : 0) | + ((attributes & kWindowResizableAttribute) ? NSResizableWindowMask : 0) | + ((attributes & kWindowMetalAttribute) ? + NSTexturedBackgroundWindowMask : 0) | + ((attributes & kWindowUnifiedTitleAndToolbarAttribute) ? + NSUnifiedTitleAndToolbarWindowMask : 0) | + ((attributes & kWindowSideTitlebarAttribute) ? 1 << 9 : 0) | + (attributes >> WM_NSMASK_SHIFT); + Class winClass = (macClass == kDrawerWindowClass ? [NSDrawerWindow class] : + (styleMask & (NSUtilityWindowMask|NSDocModalWindowMask| + NSNonactivatingPanelMask|NSHUDWindowMask)) ? [NSPanel class] : + [TKWindow class]); + NSRect structureRect = [winClass frameRectForContentRect:NSZeroRect + styleMask:styleMask]; + NSRect contentRect = NSMakeRect(5 - structureRect.origin.x, + tkMacOSXZeroScreenHeight - (tkMacOSXZeroScreenTop + 5 + + structureRect.origin.y + structureRect.size.height + 200), 200, 200); + NSWindow *window = [[winClass alloc] initWithContentRect:contentRect + styleMask:styleMask backing:NSBackingStoreBuffered defer:YES]; + if (!window) { Tcl_Panic("couldn't allocate new Mac window"); } - - ChkErr(GetWindowStructureWidths, newWindow, &strWidths); - if (wmPtr->macClass == kFloatingWindowClass) { - /* - * Workaround GetWindowStructureWidths() Carbon bug: + TkMacOSXMakeUncollectable(window); + TKContentView *contentView = [[TKContentView alloc] + initWithFrame:NSZeroRect]; + [window setContentView:contentView]; + [contentView release]; + [window setDelegate:NSApp]; + [window setAcceptsMouseMovedEvents:YES]; + [window setReleasedWhenClosed:NO]; + [window setAutodisplay:NO]; + if (styleMask & NSUtilityWindowMask) { + [(NSPanel*)window setFloatingPanel:YES]; + } + if ((styleMask & (NSTexturedBackgroundWindowMask|NSHUDWindowMask)) && + !(styleMask & NSDocModalWindowMask)) { + /* + * Workaround for [Bug 2824538]: Texured windows are draggable + * from opaque content. */ - - strWidths.top = 16; + [window setMovableByWindowBackground:NO]; } - wmPtr->xInParent = strWidths.left; - wmPtr->yInParent = strWidths.top; - structureW = strWidths.left + strWidths.right; - structureH = strWidths.top + strWidths.bottom; - wmPtr->parentWidth = winPtr->changes.width + structureW; - wmPtr->parentHeight = winPtr->changes.height + structureH; - InitialWindowBounds(winPtr, newWindow, &geometry); - geometry.right += structureW; - geometry.bottom += structureH; - ChkErr(SetWindowBounds, newWindow, kWindowStructureRgn, &geometry); - TkMacOSXInstallWindowCarbonEventHandler(NULL, newWindow); - if (ChkErr(CreateRootControl, newWindow, &rootControl) != noErr ) { - Tcl_Panic("couldn't create root control for new Mac window"); - } - if (wmPtr->attributes & kWindowResizableAttribute) { - HIViewRef growBoxView; - err = HIViewFindByID(HIViewGetRoot(newWindow), - kHIViewWindowGrowBoxID, &growBoxView); - if (err == noErr && !HIGrowBoxViewIsTransparent(growBoxView)) { - ChkErr(HIGrowBoxViewSetTransparent, growBoxView, true); - } + /* Set background color and opacity of window if those flags are set. */ + if (colorName != NULL) { + [window setBackgroundColor: colorName]; } - /* - * Add this window to the list of toplevel windows. - */ + if (opaqueTag != NULL) { +#ifdef TK_GOT_AT_LEAST_SNOW_LEOPARD + [window setOpaque: opaqueTag]; +#else + [window setOpaque: YES]; +#endif + } - listPtr = (TkMacOSXWindowList *) ckalloc(sizeof(TkMacOSXWindowList)); - listPtr->nextPtr = tkMacOSXWindowListPtr; - listPtr->winPtr = winPtr; - tkMacOSXWindowListPtr = listPtr; + [window setDocumentEdited:NO]; + wmPtr->window = window; + macWin->view = contentView; + TkMacOSXApplyWindowAttributes(winPtr, window); - macWin->grafPtr = GetWindowPort(newWindow); - macWin->rootControl = rootControl; + NSRect geometry = InitialWindowBounds(winPtr, window); + geometry.size.width += structureRect.size.width; + geometry.size.height += structureRect.size.height; + geometry.origin.y = tkMacOSXZeroScreenHeight - (geometry.origin.y + + geometry.size.height); + [window setFrame:geometry display:NO]; - if (wmPtr->master != None || winPtr->atts.override_redirect) { - ApplyMasterOverrideChanges(winPtr, newWindow); - } - SetWindowModified(newWindow, false); - TkMacOSXRegisterOffScreenWindow((Window) macWin, (GWorldPtr) newWindow); + TkMacOSXRegisterOffScreenWindow((Window) macWin, window); macWin->flags |= TK_HOST_EXISTS; - ChkErr(GetWindowClass, newWindow, &(wmPtr->macClass)); - ChkErr(GetWindowAttributes, newWindow, &(wmPtr->attributes)); - -#ifdef TK_MAC_DEBUG_WINDOWS - TkMacOSXInitNamedDebugSymbol(HIToolbox, void, DebugPrintWindow, WindowRef); - if (DebugPrintWindow) { - DebugPrintWindow(newWindow); - } -#endif /* TK_MAC_DEBUG_WINDOWS */ } /* @@ -5416,8 +5473,8 @@ TkMacOSXMakeRealWindowExist( * * TkMacOSXRegisterOffScreenWindow -- * - * This function adds the passed in Off Screen Port to the - * hash table that maps Mac windows to root X windows. + * This function adds the passed in Off Screen Port to the hash table + * that maps Mac windows to root X windows. * * Results: * None. @@ -5431,7 +5488,7 @@ TkMacOSXMakeRealWindowExist( void TkMacOSXRegisterOffScreenWindow( Window window, /* Window structure. */ - GWorldPtr portPtr) /* Pointer to a Mac GWorld. */ + void *portPtr) /* Pointer to a Mac Window. */ { Tcl_HashEntry *valueHashPtr; int isNew; @@ -5452,9 +5509,8 @@ TkMacOSXRegisterOffScreenWindow( * * TkMacOSXUnregisterMacWindow -- * - * Given a macintosh port window, this function removes the - * association between this window and the root X window that - * Tk cares about. + * Given a macintosh port window, this function removes the association + * between this window and the root X window that Tk cares about. * * Results: * None. @@ -5467,16 +5523,16 @@ TkMacOSXRegisterOffScreenWindow( void TkMacOSXUnregisterMacWindow( - WindowRef macWinPtr) /* Reference to a Mac Window */ + void *macWinPtr) /* Reference to a Mac Window */ { Tcl_HashEntry *entryPtr; if (!windowHashInit) { Tcl_Panic("TkMacOSXUnregisterMacWindow: unmapping before inited"); } - entryPtr = Tcl_FindHashEntry(&windowTable,(char *) macWinPtr); + entryPtr = Tcl_FindHashEntry(&windowTable, macWinPtr); if (!entryPtr) { - TkMacOSXDbgMsg("Failed to find window %08x", (int) macWinPtr); + TkMacOSXDbgMsg("Failed to find window %p", macWinPtr); } else { Tcl_DeleteHashEntry(entryPtr); } @@ -5487,9 +5543,8 @@ TkMacOSXUnregisterMacWindow( * * TkMacOSXSetScrollbarGrow -- * - * Sets a flag for a toplevel window indicating that the passed - * Tk scrollbar window will display the grow region for the - * toplevel window. + * Sets a flag for a toplevel window indicating that the passed Tk + * scrollbar window will display the grow region for the toplevel window. * * Results: * None. @@ -5521,15 +5576,15 @@ TkMacOSXSetScrollbarGrow( * TkWmFocusToplevel -- * * This is a utility procedure invoked by focus-management code. It - * exists because of the extra wrapper windows that exist under - * Unix; its job is to map from wrapper windows to the - * corresponding toplevel windows. On PCs and Macs there are no - * wrapper windows so no mapping is necessary; this procedure just - * determines whether a window is a toplevel or not. + * exists because of the extra wrapper windows that exist under Unix; its + * job is to map from wrapper windows to the corresponding toplevel + * windows. On PCs and Macs there are no wrapper windows so no mapping is + * necessary; this procedure just determines whether a window is a + * toplevel or not. * * Results: - * If winPtr is a toplevel window, returns the pointer to the - * window; otherwise returns NULL. + * If winPtr is a toplevel window, returns the pointer to the window; + * otherwise returns NULL. * * Side effects: * None. @@ -5553,13 +5608,13 @@ TkWmFocusToplevel( * * TkpGetWrapperWindow -- * - * This is a utility procedure invoked by focus-management code. It - * maps to the wrapper for a top-level, which is just the same - * as the top-level on Macs and PCs. + * This is a utility procedure invoked by focus-management code. It maps + * to the wrapper for a top-level, which is just the same as the + * top-level on Macs and PCs. * * Results: - * If winPtr is a toplevel window, returns the pointer to the - * window; otherwise returns NULL. + * If winPtr is a toplevel window, returns the pointer to the window; + * otherwise returns NULL. * * Side effects: * None. @@ -5583,8 +5638,8 @@ TkpGetWrapperWindow( * * TkpWmSetState -- * - * Sets the window manager state for the wrapper window of a - * given toplevel window. + * Sets the window manager state for the wrapper window of a given + * toplevel window. * * Results: * None. @@ -5596,13 +5651,13 @@ TkpGetWrapperWindow( */ void -TkpWmSetState(winPtr, state) - TkWindow *winPtr; /* Toplevel window to operate on. */ - int state; /* One of IconicState, ZoomState, NormalState, +TkpWmSetState( + TkWindow *winPtr, /* Toplevel window to operate on. */ + int state) /* One of IconicState, ZoomState, NormalState, * or WithdrawnState. */ { WmInfo *wmPtr = winPtr->wmInfoPtr; - WindowRef macWin; + NSWindow *macWin; wmPtr->hints.initial_state = state; if (wmPtr->flags & WM_NEVER_MAPPED) { @@ -5615,25 +5670,23 @@ TkpWmSetState(winPtr, state) Tk_UnmapWindow((Tk_Window) winPtr); } else if (state == IconicState) { /* - * The window always gets unmapped. If we can show the - * icon version of the window we also collapse it. + * The window always gets unmapped. If we can show the icon version of + * the window we also collapse it. */ - if (IsWindowCollapsable(macWin) && !IsWindowCollapsed(macWin)) { - CollapseWindow(macWin, true); + + if (macWin && ([macWin styleMask] & NSMiniaturizableWindowMask) && + ![macWin isMiniaturized]) { + [macWin miniaturize:NSApp]; } Tk_UnmapWindow((Tk_Window) winPtr); - } else if (state == NormalState) { - Tk_MapWindow((Tk_Window) winPtr); - if (IsWindowCollapsable(macWin) && IsWindowCollapsed(macWin)) { - CollapseWindow(macWin, false); - } - TkMacOSXZoomToplevel(macWin, inZoomIn); - } else if (state == ZoomState) { + } else if (state == NormalState || state == ZoomState) { Tk_MapWindow((Tk_Window) winPtr); - if (IsWindowCollapsable(macWin) && IsWindowCollapsed(macWin)) { - CollapseWindow(macWin, false); + if (macWin && ([macWin styleMask] & NSMiniaturizableWindowMask) && + [macWin isMiniaturized]) { + [macWin deminiaturize:NSApp]; } - TkMacOSXZoomToplevel(macWin, inZoomOut); + TkMacOSXZoomToplevel(macWin, state == NormalState ? inZoomIn : + inZoomOut); } } @@ -5655,16 +5708,9 @@ TkpWmSetState(winPtr, state) int TkpIsWindowFloating( - WindowRef wRef) + void *wRef) { - WindowClass class; - - if (wRef == NULL) { - return 0; - } - - GetWindowClass(wRef, &class); - return (class == kFloatingWindowClass); + return [(NSWindow *)wRef level] == kCGFloatingWindowLevel; } /* @@ -5695,9 +5741,9 @@ TkMacOSXWindowClass( * * TkMacOSXWindowOffset -- * - * Determines the x and y offset from the orgin of the toplevel - * window dressing (the structure region, ie. title bar) and the - * orgin of the content area. + * Determines the x and y offset from the orgin of the toplevel window + * dressing (the structure region, i.e. title bar) and the orgin of the + * content area. * * Results: * The x & y offset in pixels. @@ -5710,19 +5756,19 @@ TkMacOSXWindowClass( void TkMacOSXWindowOffset( - WindowRef wRef, + void *wRef, int *xOffset, int *yOffset) { - Window window; - TkDisplay *dispPtr; - TkWindow *winPtr; + TkWindow *winPtr = TkMacOSXGetTkWindow(wRef); - window = TkMacOSXGetXWindow(wRef); - dispPtr = TkGetDisplayList(); - winPtr = (TkWindow *) Tk_IdToWindow(dispPtr->display, window); - *xOffset = winPtr->wmInfoPtr->xInParent; - *yOffset = winPtr->wmInfoPtr->yInParent; + if (winPtr && winPtr->wmInfoPtr) { + *xOffset = winPtr->wmInfoPtr->xInParent; + *yOffset = winPtr->wmInfoPtr->yInParent; + } else { + *xOffset = 0; + *yOffset = 0; + } } /* @@ -5730,8 +5776,8 @@ TkMacOSXWindowOffset( * * TkpGetMS -- * - * Return a relative time in milliseconds. It doesn't matter - * when the epoch was. + * Return a relative time in milliseconds. It doesn't matter when the + * epoch was. * * Results: * Number of milliseconds. @@ -5784,15 +5830,14 @@ XSetInputFocus( * * TkpChangeFocus -- * - * This procedure is a stub on the Mac because we always own the - * focus if we are a front most application. + * This procedure is a stub on the Mac because we always own the focus if + * we are a front most application. * * Results: - * The return value is the serial number of the command that - * changed the focus. It may be needed by the caller to filter - * out focus change events that were queued before the command. - * If the procedure doesn't actually change the focus then - * it returns 0. + * The return value is the serial number of the command that changed the + * focus. It may be needed by the caller to filter out focus change + * events that were queued before the command. If the procedure doesn't + * actually change the focus then it returns 0. * * Side effects: * None. @@ -5801,15 +5846,15 @@ XSetInputFocus( */ int -TkpChangeFocus(winPtr, force) - TkWindow *winPtr; /* Window that is to receive the X focus. */ - int force; /* Non-zero means claim the focus even - * if it didn't originally belong to - * topLevelPtr's application. */ +TkpChangeFocus( + TkWindow *winPtr, /* Window that is to receive the X focus. */ + int force) /* Non-zero means claim the focus even if it + * didn't originally belong to topLevelPtr's + * application. */ { /* - * We don't really need to do anything on the Mac. Tk will - * keep all this state for us. + * We don't really need to do anything on the Mac. Tk will keep all this + * state for us. */ if (winPtr->atts.override_redirect) { @@ -5817,10 +5862,10 @@ TkpChangeFocus(winPtr, force) } /* - * Remember the current serial number for the X server and issue - * a dummy server request. This marks the position at which we - * changed the focus, so we can distinguish FocusIn and FocusOut - * events on either side of the mark. + * Remember the current serial number for the X server and issue a dummy + * server request. This marks the position at which we changed the focus, + * so we can distinguish FocusIn and FocusOut events on either side of the + * mark. */ return NextRequest(winPtr->display); @@ -5831,13 +5876,12 @@ TkpChangeFocus(winPtr, force) * * WmStackorderToplevelWrapperMap -- * - * This procedure will create a table that maps the reparent wrapper - * X id for a toplevel to the TkWindow structure that is wraps. - * Tk keeps track of a mapping from the window X id to the TkWindow - * structure but that does us no good here since we only get the X - * id of the wrapper window. Only those toplevel windows that are - * mapped have a position in the stacking order. - * + * This procedure will create a table that maps the reparent wrapper X id + * for a toplevel to the TkWindow structure that is wraps. Tk keeps track + * of a mapping from the window X id to the TkWindow structure but that + * does us no good here since we only get the X id of the wrapper window. + * Only those toplevel windows that are mapped have a position in the + * stacking order. * * Results: * None. @@ -5856,15 +5900,12 @@ WmStackorderToplevelWrapperMap( { TkWindow *childPtr; Tcl_HashEntry *hPtr; - WindowRef macWindow; int newEntry; if (Tk_IsMapped(winPtr) && Tk_IsTopLevel(winPtr) && (winPtr->display == display)) { - macWindow = TkMacOSXDrawableWindow(winPtr->window); - hPtr = Tcl_CreateHashEntry(table, - (const char *) macWindow, &newEntry); + (char*) TkMacOSXDrawableWindow(winPtr->window), &newEntry); Tcl_SetHashValue(hPtr, winPtr); } @@ -5882,8 +5923,8 @@ WmStackorderToplevelWrapperMap( * This procedure returns the stack order of toplevel windows. * * Results: - * An array of pointers to tk window objects in stacking order - * or else NULL if there was an error. + * An array of pointers to tk window objects in stacking order or else + * NULL if there was an error. * * Side effects: * None. @@ -5892,14 +5933,15 @@ WmStackorderToplevelWrapperMap( */ TkWindow ** -TkWmStackorderToplevel(parentPtr) - TkWindow *parentPtr; /* Parent toplevel window. */ +TkWmStackorderToplevel( + TkWindow *parentPtr) /* Parent toplevel window. */ { - WindowRef frontWindow; TkWindow *childWinPtr, **windows, **window_ptr; Tcl_HashTable table; Tcl_HashEntry *hPtr; Tcl_HashSearch search; + NSInteger windowCount; + NSInteger *windowNumbers; /* * Map mac windows to a TkWindow of the wrapped toplevel. @@ -5908,12 +5950,11 @@ TkWmStackorderToplevel(parentPtr) Tcl_InitHashTable(&table, TCL_ONE_WORD_KEYS); WmStackorderToplevelWrapperMap(parentPtr, parentPtr->display, &table); - windows = (TkWindow **) ckalloc((table.numEntries+1) - * sizeof(TkWindow *)); + windows = (TkWindow**)ckalloc((table.numEntries+1) * sizeof(TkWindow *)); /* - * Special cases: If zero or one toplevels were mapped - * there is no need to enumerate Windows. + * Special cases: If zero or one toplevels were mapped there is no need to + * enumerate Windows. */ switch (table.numEntries) { @@ -5922,32 +5963,39 @@ TkWmStackorderToplevel(parentPtr) goto done; case 1: hPtr = Tcl_FirstHashEntry(&table, &search); - windows[0] = (TkWindow *) Tcl_GetHashValue(hPtr); + windows[0] = Tcl_GetHashValue(hPtr); windows[1] = NULL; goto done; } - frontWindow = GetFrontWindowOfClass(kAllWindowClasses, false); - if (frontWindow == NULL) { + NSCountWindows(&windowCount); + if (!windowCount) { ckfree((char *) windows); windows = NULL; } else { window_ptr = windows + table.numEntries; *window_ptr-- = NULL; - while (frontWindow != NULL) { - hPtr = Tcl_FindHashEntry(&table, (char *) frontWindow); + windowNumbers = (NSInteger*)ckalloc(windowCount * sizeof(NSInteger)); + NSWindowList(windowCount, windowNumbers); + for (NSInteger index = 0; index < windowCount; index++) { + NSWindow *w = [NSApp windowWithWindowNumber:windowNumbers[index]]; + + if (w) { + hPtr = Tcl_FindHashEntry(&table, (char*) w); if (hPtr != NULL) { - childWinPtr = (TkWindow *) Tcl_GetHashValue(hPtr); + childWinPtr = Tcl_GetHashValue(hPtr); *window_ptr-- = childWinPtr; } - frontWindow = GetNextWindow(frontWindow); } - if (window_ptr != (windows-1)) + } + if (window_ptr != (windows-1)) { Tcl_Panic("num matched toplevel windows does not equal num " "children"); + } + ckfree((char *) windowNumbers); } - done: + done: Tcl_DeleteHashTable(&table); return windows; } @@ -5955,9 +6003,9 @@ TkWmStackorderToplevel(parentPtr) /* *---------------------------------------------------------------------- * - * ApplyWindowClassAttributeChanges -- + * TkMacOSXApplyWindowAttributes -- * - * This procedure applies carbon window class and attribute changes. + * This procedure applies all window attributes to the NSWindow. * * Results: * None. @@ -5968,21 +6016,49 @@ TkWmStackorderToplevel(parentPtr) *---------------------------------------------------------------------- */ -static void -ApplyWindowClassAttributeChanges( +void +TkMacOSXApplyWindowAttributes( TkWindow *winPtr, - WindowRef macWindow, - WindowClass oldClass, - WindowAttributes oldAttributes, - int create) + NSWindow *macWindow) { WmInfo *wmPtr = winPtr->wmInfoPtr; - WindowAttributes newAttributes = wmPtr->attributes | - kWindowAsyncDragAttribute; + ApplyWindowAttributeFlagChanges(winPtr, macWindow, 0, 0, 0, 1); + if (wmPtr->master != None || winPtr->atts.override_redirect) { + ApplyMasterOverrideChanges(winPtr, macWindow); + } +} + +/* + *---------------------------------------------------------------------- + * + * ApplyWindowAttributeFlagChanges -- + * + * This procedure applies window attribute and flag changes. + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ - if (wmPtr->macClass != oldClass || newAttributes != oldAttributes) { - Rect strWidths; +static void +ApplyWindowAttributeFlagChanges( + TkWindow *winPtr, + NSWindow *macWindow, + UInt64 oldAttributes, + int oldFlags, + int create, + int initial) +{ + WmInfo *wmPtr = winPtr->wmInfoPtr; + UInt64 newAttributes = ForceAttributes(wmPtr->attributes, wmPtr->macClass); + UInt64 changedAttributes = newAttributes ^ ForceAttributes(oldAttributes, + wmPtr->macClass); + if (changedAttributes || wmPtr->flags != oldFlags || initial) { if (!macWindow) { if (winPtr->window == None) { if (create) { @@ -6000,45 +6076,110 @@ ApplyWindowClassAttributeChanges( } macWindow = TkMacOSXDrawableWindow(winPtr->window); } - if (wmPtr->macClass != oldClass) { - TK_IF_MAC_OS_X_API (4, HIWindowChangeClass, - ChkErr(HIWindowChangeClass, macWindow, wmPtr->macClass); - ) TK_ENDIF - ChkErr(GetWindowClass, macWindow, &(wmPtr->macClass)); - } - if (newAttributes != oldAttributes) { - newAttributes &= GetAvailableWindowAttributes(wmPtr->macClass); - ChkErr(ChangeWindowAttributes, macWindow, - newAttributes & (newAttributes ^ oldAttributes), - oldAttributes & (newAttributes ^ oldAttributes)); - } - ChkErr(GetWindowAttributes, macWindow, &(wmPtr->attributes)); - if ((wmPtr->attributes ^ oldAttributes) & kWindowResizableAttribute) { - if (wmPtr->attributes & kWindowResizableAttribute) { - HIViewRef growBoxView; - OSStatus err = HIViewFindByID(HIViewGetRoot(macWindow), - kHIViewWindowGrowBoxID, &growBoxView); - - if (err == noErr && !HIGrowBoxViewIsTransparent(growBoxView)) { - ChkErr(HIGrowBoxViewSetTransparent, growBoxView, true); - } + if ((changedAttributes & kWindowCloseBoxAttribute) || initial) { + [[macWindow standardWindowButton:NSWindowCloseButton] + setEnabled:!!(newAttributes & kWindowCloseBoxAttribute)]; + } + if ((changedAttributes & kWindowCollapseBoxAttribute) || initial) { + [[macWindow standardWindowButton:NSWindowMiniaturizeButton] + setEnabled:!!(newAttributes & kWindowCollapseBoxAttribute)]; + } + if ((changedAttributes & (kWindowResizableAttribute | + kWindowFullZoomAttribute)) || initial) { + [macWindow setShowsResizeIndicator: + !!(newAttributes & kWindowResizableAttribute)]; + [[macWindow standardWindowButton:NSWindowZoomButton] + setEnabled:(newAttributes & kWindowResizableAttribute) && + (newAttributes & kWindowFullZoomAttribute)]; + if (newAttributes & kWindowResizableAttribute) { + wmPtr->flags &= ~(WM_WIDTH_NOT_RESIZABLE | + WM_HEIGHT_NOT_RESIZABLE); + } else { + wmPtr->flags |= (WM_WIDTH_NOT_RESIZABLE | + WM_HEIGHT_NOT_RESIZABLE); } - TkMacOSXInvalClipRgns((Tk_Window) winPtr); - TkMacOSXInvalidateWindow((MacDrawable *)(winPtr->window), - TK_PARENT_WINDOW); + WmUpdateGeom(wmPtr, winPtr); + } + if ((changedAttributes & kWindowToolbarButtonAttribute) || initial) { + [macWindow setShowsToolbarButton: + !!(newAttributes & kWindowToolbarButtonAttribute)]; + if ((newAttributes & kWindowToolbarButtonAttribute) && + ![macWindow toolbar]) { + NSToolbar *toolbar = [[NSToolbar alloc] initWithIdentifier:@""]; + [toolbar setVisible:NO]; + [macWindow setToolbar:toolbar]; + [toolbar release]; + NSCell *toolbarButtonCell = [[macWindow standardWindowButton: + NSWindowToolbarButton] cell]; + [toolbarButtonCell setTarget:[macWindow contentView]]; + [toolbarButtonCell setAction:@selector(tkToolbarButton:)]; + } + } + if ((changedAttributes & kWindowNoShadowAttribute) || initial) { + [macWindow setHasShadow: + !(newAttributes & kWindowNoShadowAttribute)]; + } + if ((changedAttributes & kWindowHideOnSuspendAttribute) || initial) { + [macWindow setHidesOnDeactivate: + !!(newAttributes & kWindowHideOnSuspendAttribute)]; + } + if ((changedAttributes & kWindowInWindowMenuAttribute) || initial) { + [macWindow setExcludedFromWindowsMenu: + !(newAttributes & kWindowInWindowMenuAttribute)]; + } + if ((changedAttributes & kWindowIgnoreClicksAttribute) || initial) { + [macWindow setIgnoresMouseEvents: + !!(newAttributes & kWindowIgnoreClicksAttribute)]; + } + if ((changedAttributes & tkWindowDoesNotHideAttribute) || initial) { + [macWindow setCanHide: + !(newAttributes & tkWindowDoesNotHideAttribute)]; + } + if ((changedAttributes & (kWindowDoesNotCycleAttribute | + tkCanJoinAllSpacesAttribute | tkMoveToActiveSpaceAttribute)) || + initial) { + NSWindowCollectionBehavior b = NSWindowCollectionBehaviorDefault; + if (newAttributes & tkCanJoinAllSpacesAttribute) { + b |= NSWindowCollectionBehaviorCanJoinAllSpaces; + } else if (newAttributes & tkMoveToActiveSpaceAttribute) { + b |= NSWindowCollectionBehaviorMoveToActiveSpace; + } +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 + if (newAttributes & kWindowDoesNotCycleAttribute) { + b |= NSWindowCollectionBehaviorIgnoresCycle; + } else { + b |= NSWindowCollectionBehaviorParticipatesInCycle; + } +#endif + [macWindow setCollectionBehavior:b]; +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060 + if (((changedAttributes & kWindowDoesNotCycleAttribute) || initial) +#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 + && tkMacOSXMacOSXVersion < 1060 +#endif + ) { + [macWindow setCanCycle: + !(newAttributes & kWindowDoesNotCycleAttribute)]; + } +#endif + } + if ((wmPtr->flags & WM_TOPMOST) != (oldFlags & WM_TOPMOST)) { + [macWindow setLevel:(wmPtr->flags & WM_TOPMOST) ? + kCGUtilityWindowLevel : ([macWindow isKindOfClass: + [NSPanel class]] && [macWindow isFloatingPanel] ? + kCGFloatingWindowLevel : kCGNormalWindowLevel)]; } /* * The change of window class/attributes might have changed the window * structure widths: */ - GetWindowStructureWidths(macWindow, &strWidths); - wmPtr->xInParent = strWidths.left; - wmPtr->yInParent = strWidths.top; - wmPtr->parentWidth = winPtr->changes.width + strWidths.left - + strWidths.right; - wmPtr->parentHeight = winPtr->changes.height + strWidths.top - + strWidths.bottom; + + NSRect structureRect = [macWindow frameRectForContentRect:NSZeroRect]; + wmPtr->xInParent = -structureRect.origin.x; + wmPtr->yInParent = structureRect.origin.y + structureRect.size.height; + wmPtr->parentWidth = winPtr->changes.width + structureRect.size.width; + wmPtr->parentHeight = winPtr->changes.height + structureRect.size.height; } } @@ -6061,28 +6202,28 @@ ApplyWindowClassAttributeChanges( static void ApplyMasterOverrideChanges( TkWindow *winPtr, - WindowRef macWindow) + NSWindow *macWindow) { WmInfo *wmPtr = winPtr->wmInfoPtr; - WindowClass oldClass = wmPtr->macClass; - WindowAttributes oldAttributes = wmPtr->attributes; + UInt64 oldAttributes = wmPtr->attributes; + int oldFlags = wmPtr->flags; /* * FIX: We need an UpdateWrapper equivalent to make this 100% correct */ if (winPtr->atts.override_redirect) { - if (oldClass == kDocumentWindowClass) { + if (wmPtr->macClass == kDocumentWindowClass) { wmPtr->macClass = kSimpleWindowClass; - wmPtr->attributes = kWindowNoAttributes; + wmPtr->attributes = macClassAttrs[kSimpleWindowClass].defaultAttrs; } wmPtr->attributes |= kWindowNoActivatesAttribute; } else { - if (oldClass == kSimpleWindowClass && + if (wmPtr->macClass == kSimpleWindowClass && oldAttributes == kWindowNoActivatesAttribute) { wmPtr->macClass = kDocumentWindowClass; - wmPtr->attributes = kWindowStandardDocumentAttributes - | kWindowLiveResizeAttribute; + wmPtr->attributes = + macClassAttrs[kDocumentWindowClass].defaultAttrs; } wmPtr->attributes &= ~kWindowNoActivatesAttribute; } @@ -6091,75 +6232,40 @@ ApplyMasterOverrideChanges( macWindow = TkMacOSXDrawableWindow(winPtr->window); } if (macWindow) { - WindowGroupRef group; - - ApplyWindowClassAttributeChanges(winPtr, macWindow, oldClass, - oldAttributes, 0); - if (winPtr->atts.override_redirect && wmPtr->master != None) { wmPtr->flags |= WM_TOPMOST; } else { wmPtr->flags &= ~WM_TOPMOST; } - group = WmGetWindowGroup(winPtr); - if (group && group != GetWindowGroup(macWindow)) { - ChkErr(SetWindowGroup, macWindow, group); - } - } -} - -/* - *---------------------------------------------------------------------- - * - * WmGetWindowGroup -- - * - * Gets the window group a toplevel should be placed in. - * - * Results: - * A WindowGroupRef. - * - * Side effects: - * A transient window group for the master (if any) may be created. - * - *---------------------------------------------------------------------- - */ - -static WindowGroupRef -WmGetWindowGroup( - TkWindow *winPtr) -{ - WmInfo *wmPtr = winPtr->wmInfoPtr; - WindowGroupRef group = NULL; - - if (wmPtr->flags & WM_TOPMOST) { - group = GetWindowGroupOfClass(kUtilityWindowClass); - } else if (wmPtr->master != None) { - TkDisplay *dispPtr = TkGetDisplayList(); - TkWindow *masterWinPtr = (TkWindow *)Tk_IdToWindow(dispPtr->display, - wmPtr->master); - - if (masterWinPtr && masterWinPtr->window != None && - TkMacOSXHostToplevelExists(masterWinPtr)) { - WindowRef masterMacWin = - TkMacOSXDrawableWindow(masterWinPtr->window); - - if (masterMacWin && GetWindowProperty(masterMacWin, 'Tk ', 'TsGp', - sizeof(group), NULL, &group) != noErr) { - ChkErr(CreateWindowGroup, 0, &group); - if (group) { - ChkErr(SetWindowGroupParent, group, - GetWindowGroup(masterMacWin)); - ChkErr(SetWindowGroupOwner, group, masterMacWin); - ChkErr(SetWindowProperty, masterMacWin, 'Tk ', 'TsGp', - sizeof(group), &group); + NSWindow *parentWindow = [macWindow parentWindow]; + if (wmPtr->master != None) { + TkDisplay *dispPtr = TkGetDisplayList(); + TkWindow *masterWinPtr = (TkWindow *) + Tk_IdToWindow(dispPtr->display, wmPtr->master); + + if (masterWinPtr && masterWinPtr->window != None && + TkMacOSXHostToplevelExists(masterWinPtr)) { + NSWindow *masterMacWin = + TkMacOSXDrawableWindow(masterWinPtr->window); + + if (masterMacWin && masterMacWin != parentWindow && + (winPtr->flags & TK_MAPPED)) { + if (parentWindow) { + [parentWindow removeChildWindow:macWindow]; + } + [masterMacWin addChildWindow:macWindow + ordered:NSWindowAbove]; + if (wmPtr->flags & WM_TOPMOST) { + [macWindow setLevel:kCGUtilityWindowLevel]; + } } } + } else if (parentWindow) { + [parentWindow removeChildWindow:macWindow]; } + ApplyWindowAttributeFlagChanges(winPtr, macWindow, oldAttributes, + oldFlags, 0, 0); } - if (!group) { - group = GetWindowGroupOfClass(wmPtr->macClass); - } - return group; } /* @@ -6181,19 +6287,25 @@ WmGetWindowGroup( int TkMacOSXMakeFullscreen( TkWindow *winPtr, - WindowRef window, + NSWindow *window, int fullscreen, Tcl_Interp *interp) { WmInfo *wmPtr = winPtr->wmInfoPtr; int result = TCL_OK, wasFullscreen = (wmPtr->flags & WM_FULLSCREEN); +#ifdef TK_GOT_AT_LEAST_SNOW_LEOPARD + static unsigned long prevMask = 0, prevPres = 0; +#endif /*TK_GOT_AT_LEAST_SNOW_LEOPARD*/ + if (fullscreen) { int screenWidth = WidthOfScreen(Tk_Screen(winPtr)); int screenHeight = HeightOfScreen(Tk_Screen(winPtr)); + /* * Check max width and height if set by the user. */ + if ((wmPtr->maxWidth > 0 && wmPtr->maxWidth < screenWidth) || (wmPtr->maxHeight > 0 && wmPtr->maxHeight < screenHeight)) { if (interp) { @@ -6205,101 +6317,73 @@ TkMacOSXMakeFullscreen( result = TCL_ERROR; wmPtr->flags &= ~WM_FULLSCREEN; } else { - Rect bounds, screenBounds = {0, 0, screenHeight, screenWidth}; - - ChkErr(GetWindowBounds, window, kWindowContentRgn, &bounds); - if (!EqualRect(&bounds, &screenBounds)) { - if (!wasFullscreen) { - wmPtr->configX = wmPtr->x; - wmPtr->configY = wmPtr->y; - wmPtr->configAttributes = wmPtr->attributes; - wmPtr->attributes &= ~kWindowResizableAttribute; - ApplyWindowClassAttributeChanges(winPtr, window, - wmPtr->macClass, wmPtr->configAttributes, 0); - } + NSRect bounds = [window contentRectForFrameRect:[window frame]]; + NSRect screenBounds = NSMakeRect(0, 0, screenWidth, screenHeight); + + if (!NSEqualRects(bounds, screenBounds) && !wasFullscreen) { + wmPtr->configX = wmPtr->x; + wmPtr->configY = wmPtr->y; + wmPtr->configAttributes = wmPtr->attributes; + wmPtr->attributes &= ~kWindowResizableAttribute; + ApplyWindowAttributeFlagChanges(winPtr, window, + wmPtr->configAttributes, wmPtr->flags, 1, 0); wmPtr->flags |= WM_SYNC_PENDING; - ChkErr(SetWindowBounds, window, kWindowContentRgn, - &screenBounds); + [window setFrame:[window frameRectForContentRect: + screenBounds] display:YES]; wmPtr->flags &= ~WM_SYNC_PENDING; } wmPtr->flags |= WM_FULLSCREEN; } + +#ifdef TK_GOT_AT_LEAST_SNOW_LEOPARD + /* + * We can't set these features on Leopard or earlier, as they don't + * exist (neither options nor API that uses them). This formally means + * that there's a bug with full-screen windows with Tk on old OSX, but + * it isn't worth blocking a build just for this. + */ + + prevMask = [window styleMask]; + prevPres = [NSApp presentationOptions]; + [window setStyleMask: NSBorderlessWindowMask]; + [NSApp setPresentationOptions: NSApplicationPresentationAutoHideDock + | NSApplicationPresentationAutoHideMenuBar]; +#endif /*TK_GOT_AT_LEAST_SNOW_LEOPARD*/ } else { wmPtr->flags &= ~WM_FULLSCREEN; +#ifdef TK_GOT_AT_LEAST_SNOW_LEOPARD + [NSApp setPresentationOptions: prevPres]; + [window setStyleMask: prevMask]; +#endif /*TK_GOT_AT_LEAST_SNOW_LEOPARD*/ } + if (wasFullscreen && !(wmPtr->flags & WM_FULLSCREEN)) { - WindowAttributes oldAttributes = wmPtr->attributes; - Rect bounds = {wmPtr->configY, wmPtr->configX, - wmPtr->configY + wmPtr->yInParent + wmPtr->configHeight, - wmPtr->configX + wmPtr->xInParent + wmPtr->configWidth}; + UInt64 oldAttributes = wmPtr->attributes; + NSRect bounds = NSMakeRect(wmPtr->configX, tkMacOSXZeroScreenHeight - + (wmPtr->configY + wmPtr->yInParent + wmPtr->configHeight), + wmPtr->xInParent + wmPtr->configWidth, + wmPtr->yInParent + wmPtr->configHeight); wmPtr->attributes |= wmPtr->configAttributes & kWindowResizableAttribute; - ApplyWindowClassAttributeChanges(winPtr, window, wmPtr->macClass, - oldAttributes, 0); + ApplyWindowAttributeFlagChanges(winPtr, window, oldAttributes, + wmPtr->flags, 1, 0); wmPtr->flags |= WM_SYNC_PENDING; - ChkErr(SetWindowBounds, window, kWindowStructureRgn, &bounds); + [window setFrame:[window frameRectForContentRect:bounds] display:YES]; wmPtr->flags &= ~WM_SYNC_PENDING; } - TkMacOSXEnterExitFullscreen(winPtr, IsWindowActive(window)); return result; } -/* - *---------------------------------------------------------------------- - * - * TkMacOSXEnterExitFullscreen -- - * - * This procedure enters or exits fullscreen mode if required. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ -void -TkMacOSXEnterExitFullscreen( - TkWindow *winPtr, - int active) -{ - WmInfo *wmPtr = winPtr->wmInfoPtr; - SystemUIMode mode; - SystemUIOptions options; - - GetSystemUIMode(&mode, &options); - if (wmPtr->flags & WM_FULLSCREEN && active) { - static SystemUIMode fullscreenMode = 0; - static SystemUIOptions fullscreenOptions = 0; - - if (!fullscreenMode) { - TK_IF_HI_TOOLBOX (3, - fullscreenMode = kUIModeAllSuppressed; - ) TK_ELSE_HI_TOOLBOX (3, - fullscreenMode = kUIModeAllHidden; - fullscreenOptions = kUIOptionAutoShowMenuBar; - ) TK_ENDIF - } - if (mode != fullscreenMode) { - ChkErr(SetSystemUIMode, fullscreenMode, fullscreenOptions); - } - } else { - if (mode != kUIModeNormal) { - ChkErr(SetSystemUIMode, kUIModeNormal, 0); - } - } -} /* *---------------------------------------------------------------------- * * GetMinSize -- * - * This function computes the current minWidth and minHeight values for - * a window, taking into account the possibility that they may be + * This function computes the current minWidth and minHeight values for a + * window, taking into account the possibility that they may be * defaulted. * * Results: @@ -6333,41 +6417,43 @@ GetMinSize( */ switch (wmPtr->macClass) { - case kDocumentWindowClass: - case kMovableAlertWindowClass: - case kMovableModalWindowClass: - minWidth = 72; - if (wmPtr->attributes & kWindowResizableAttribute) { - minHeight = 15; - } - if (wmPtr->attributes & kWindowToolbarButtonAttribute) { - minWidth += 29; - } - break; - case kFloatingWindowClass: - case kUtilityWindowClass: - minWidth = 59; - if (wmPtr->attributes & kWindowResizableAttribute) { - minHeight = 11; - } - if (wmPtr->attributes & kWindowSideTitlebarAttribute) { - int tmp = minWidth; - minWidth = minHeight; - minHeight = tmp; - } else if (wmPtr->attributes & kWindowToolbarButtonAttribute) { - minWidth += 29; - } - break; - default: - if (wmPtr->attributes & kWindowResizableAttribute) { - minWidth = 15; - minHeight = 15; - } - break; + case kDocumentWindowClass: + case kMovableAlertWindowClass: + case kMovableModalWindowClass: + minWidth = 72; + if (wmPtr->attributes & kWindowResizableAttribute) { + minHeight = 15; + } + if (wmPtr->attributes & kWindowToolbarButtonAttribute) { + minWidth += 29; + } + break; + case kFloatingWindowClass: + case kUtilityWindowClass: + minWidth = 59; + if (wmPtr->attributes & kWindowResizableAttribute) { + minHeight = 11; + } + if (wmPtr->attributes & kWindowSideTitlebarAttribute) { + int tmp = minWidth; + + minWidth = minHeight; + minHeight = tmp; + } else if (wmPtr->attributes & kWindowToolbarButtonAttribute) { + minWidth += 29; + } + break; + default: + if (wmPtr->attributes & kWindowResizableAttribute) { + minWidth = 15; + minHeight = 15; + } + break; } if (wmPtr->gridWin != NULL) { int base = winPtr->reqWidth - (wmPtr->reqGridWidth * wmPtr->widthInc); + if (base < 0) { base = 0; } @@ -6393,8 +6479,8 @@ GetMinSize( * * GetMaxSize -- * - * This function computes the current maxWidth and maxHeight values for - * a window, taking into account the possibility that they may be + * This function computes the current maxWidth and maxHeight values for a + * window, taking into account the possibility that they may be * defaulted. * * Results: @@ -6418,12 +6504,13 @@ GetMaxSize( * of the window. */ { WmInfo *wmPtr = winPtr->wmInfoPtr; - Rect *maxBounds = (Rect*)(winPtr->display->screens->ext_data); + NSRect *maxBounds = (NSRect*)(winPtr->display->screens->ext_data); if (wmPtr->maxWidth > 0) { *maxWidthPtr = wmPtr->maxWidth; } else { - int maxWidth = maxBounds->right - maxBounds->left - wmPtr->xInParent; + int maxWidth = maxBounds->size.width - wmPtr->xInParent; + if (wmPtr->gridWin != NULL) { maxWidth = wmPtr->reqGridWidth + (maxWidth - winPtr->reqWidth)/wmPtr->widthInc; @@ -6433,7 +6520,8 @@ GetMaxSize( if (wmPtr->maxHeight > 0) { *maxHeightPtr = wmPtr->maxHeight; } else { - int maxHeight = maxBounds->bottom - maxBounds->top - wmPtr->yInParent; + int maxHeight = maxBounds->size.height - wmPtr->yInParent; + if (wmPtr->gridWin != NULL) { maxHeight = wmPtr->reqGridHeight + (maxHeight - winPtr->reqHeight)/wmPtr->heightInc; @@ -6441,15 +6529,13 @@ GetMaxSize( *maxHeightPtr = maxHeight; } } -#if 0 /* *---------------------------------------------------------------------- * * RemapWindows * - * Adjust parent/child relation ships of - * the given window hierarchy. + * Adjust parent/child relation ships of the given window hierarchy. * * Results: * none @@ -6459,18 +6545,25 @@ GetMaxSize( * *---------------------------------------------------------------------- */ + static void -RemapWindows(TkWindow *winPtr, MacDrawable *parentWin) +RemapWindows( + TkWindow *winPtr, + MacDrawable *parentWin) { TkWindow *childPtr; - /* Remove the OS specific window. - * It will get rebuilt when the window gets Mapped. + /* + * Remove the OS specific window. It will get rebuilt when the window gets + * Mapped. */ + if (winPtr->window != None) { MacDrawable *macWin = (MacDrawable *) winPtr->window; - macWin->grafPtr = NULL; + + macWin->toplevel->referenceCount--; macWin->toplevel = parentWin->toplevel; + macWin->toplevel->referenceCount++; winPtr->flags &= ~TK_MAPPED; #ifdef TK_REBUILD_TOPLEVEL winPtr->flags |= TK_REBUILD_TOPLEVEL; @@ -6479,8 +6572,18 @@ RemapWindows(TkWindow *winPtr, MacDrawable *parentWin) /* Repeat for all the children */ for (childPtr = winPtr->childList; childPtr != NULL; - childPtr = childPtr->nextPtr) { + childPtr = childPtr->nextPtr) { RemapWindows(childPtr, (MacDrawable *) winPtr->window); } } -#endif + + + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/tkMacOSXWm.h b/macosx/tkMacOSXWm.h index ce4bede..bfc7fac 100644 --- a/macosx/tkMacOSXWm.h +++ b/macosx/tkMacOSXWm.h @@ -3,61 +3,18 @@ * * Declarations of Macintosh specific window manager structures. * - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2006-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> * - * See the file "license.terms" for information on usage and redistribution of - * this file, and for a DISCLAIMER OF ALL WARRANTIES. - * - * The following terms apply to all files originating from Apple - * Computer, Inc. ("Apple") and associated with the software - * unless explicitly disclaimed in individual files. - * - * - * Apple hereby grants permission to use, copy, modify, - * distribute, and license this software and its documentation - * for any purpose, provided that existing copyright notices are - * retained in all copies and that this notice is included - * verbatim in any distributions. No written agreement, license, - * or royalty fee is required for any of the authorized - * uses. Modifications to this software may be copyrighted by - * their authors and need not follow the licensing terms - * described here, provided that the new terms are clearly - * indicated on the first page of each file where they apply. - * - * - * IN NO EVENT SHALL APPLE, THE AUTHORS OR DISTRIBUTORS OF THE - * SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - * INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF - * THIS SOFTWARE, ITS DOCUMENTATION, OR ANY DERIVATIVES THEREOF, - * EVEN IF APPLE OR THE AUTHORS HAVE BEEN ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. APPLE, THE AUTHORS AND - * DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS - * SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, AND APPLE,THE - * AUTHORS AND DISTRIBUTORS HAVE NO OBLIGATION TO PROVIDE - * MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * GOVERNMENT USE: If you are acquiring this software on behalf - * of the U.S. government, the Government shall have only - * "Restricted Rights" in the software and related documentation - * as defined in the Federal Acquisition Regulations (FARs) in - * Clause 52.227.19 (c) (2). If you are acquiring the software - * on behalf of the Department of Defense, the software shall be - * classified as "Commercial Computer Software" and the - * Government shall have only "Restricted Rights" as defined in - * Clause 252.227-7013 (c) (1) of DFARs. Notwithstanding the - * foregoing, the authors grant the U.S. Government and others - * acting in its behalf permission to use and distribute the - * software in accordance with the terms specified in this - * license. + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #ifndef _TKMACWM #define _TKMACWM #include "tkMacOSXInt.h" +#include "tkMenu.h" /* * A data structure of the following type holds information for @@ -232,9 +189,10 @@ typedef struct TkWmInfo { * Macintosh information. */ WindowClass macClass; - WindowAttributes attributes, configAttributes; + UInt64 attributes, configAttributes; TkWindow *scrollWinPtr; /* Ptr to scrollbar handling grow widget. */ - short style; /* Legacy window style. */ + TkMenu *menuPtr; + NSWindow *window; } WmInfo; diff --git a/macosx/tkMacOSXXCursors.h b/macosx/tkMacOSXXCursors.h new file mode 100644 index 0000000..1363bee --- /dev/null +++ b/macosx/tkMacOSXXCursors.h @@ -0,0 +1,711 @@ +/* + * tkMacOSXXCursors.h -- + * + * This file defines a set of Macintosh cursors that + * emulate the X cursor set. All of these cursors were + * constructed and donated by Grant Neufeld. (gneufeld@ccs.carleton.ca) + * + * Copyright (c) 1995-1996 Sun Microsystems, Inc. + * Copyright 2008-2009, Apple Inc. + * Copyright (c) 2008-2009 Daniel A. Steffen <das@users.sourceforge.net> + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +static const unsigned char tkMacOSXXCursors[][68] = { + +#define TK_MAC_XCURSOR_X_cursor 0 +[TK_MAC_XCURSOR_X_cursor] = { + 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0x7C, 0x3E, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, 0x07, 0xE0, + 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3E, 0x7C, 0x7C, 0x3E, 0xF8, 0x1F, 0xF0, 0x0F, 0xE0, 0x07, + 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0x7C, 0x3E, 0x3E, 0x7C, 0x1F, 0xF8, 0x0F, 0xF0, 0x07, 0xE0, + 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3E, 0x7C, 0x7C, 0x3E, 0xF8, 0x1F, 0xF0, 0x0F, 0xE0, 0x07, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_arrow 1 +[TK_MAC_XCURSOR_arrow] = { + 0x00, 0x00, 0x00, 0x06, 0x00, 0x1E, 0x00, 0x7C, 0x01, 0xFC, 0x07, 0xF8, 0x00, 0xF8, 0x01, 0xF0, + 0x03, 0xB0, 0x07, 0x20, 0x0E, 0x20, 0x1C, 0x00, 0x38, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x1F, 0x00, 0x7F, 0x01, 0xFE, 0x07, 0xFE, 0x1F, 0xFC, 0x7F, 0xFC, 0x03, 0xF8, + 0x07, 0xF8, 0x0F, 0xF0, 0x1F, 0x70, 0x3E, 0x60, 0x7C, 0x60, 0xF8, 0x40, 0x70, 0x40, 0x20, 0x00, + 0x00, 0x01, 0x00, 0x0E, +}, + +#define TK_MAC_XCURSOR_based_arrow_down 2 +[TK_MAC_XCURSOR_based_arrow_down] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x03, 0x00, 0x03, 0x00, + 0x03, 0x00, 0x0B, 0x40, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x07, 0x80, 0x07, 0x80, + 0x3F, 0xF0, 0x1F, 0xE0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0B, 0x00, 0x06, +}, + +#define TK_MAC_XCURSOR_based_arrow_up 3 +[TK_MAC_XCURSOR_based_arrow_up] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x0B, 0x40, 0x03, 0x00, + 0x03, 0x00, 0x03, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x80, 0x0F, 0xC0, 0x1F, 0xE0, 0x3F, 0xF0, + 0x07, 0x80, 0x07, 0x80, 0x1F, 0xE0, 0x00, 0x00, 0x1F, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x06, +}, + +#define TK_MAC_XCURSOR_boat 4 +[TK_MAC_XCURSOR_boat] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0xC0, 0x84, 0x60, 0xFF, 0xFF, + 0x00, 0x18, 0x00, 0x20, 0x00, 0x40, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0xC0, 0x87, 0xE0, 0xFF, 0xFF, + 0xFF, 0xF8, 0xFF, 0xE0, 0xFF, 0xC0, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x0F, +}, + +#define TK_MAC_XCURSOR_bogosity 5 +[TK_MAC_XCURSOR_bogosity] = { + 0x00, 0x00, 0x71, 0x1C, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x7F, 0xFC, 0x51, 0x14, 0x51, 0x14, + 0x51, 0x14, 0x51, 0x14, 0x7F, 0xFC, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x71, 0x1C, 0x00, 0x00, + 0x00, 0x00, 0x71, 0x1C, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, + 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x71, 0x1C, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_bottom_left_corner 6 +[TK_MAC_XCURSOR_bottom_left_corner] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x20, 0xC8, 0x40, 0xC8, 0x80, + 0xC9, 0x00, 0xCA, 0x00, 0xCC, 0x00, 0xCF, 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0xF0, 0xFF, 0xF0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x20, 0xC8, 0x40, 0xC8, 0x80, + 0xC9, 0x00, 0xCA, 0x00, 0xCC, 0x00, 0xCF, 0xC0, 0xC0, 0x00, 0xC0, 0x00, 0xFF, 0xF0, 0xFF, 0xF0, + 0x00, 0x0F, 0x00, 0x00, +}, + +#define TK_MAC_XCURSOR_bottom_right_corner 7 +[TK_MAC_XCURSOR_bottom_right_corner] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x03, 0x02, 0x13, 0x01, 0x13, + 0x00, 0x93, 0x00, 0x53, 0x00, 0x33, 0x03, 0xF3, 0x00, 0x03, 0x00, 0x03, 0x0F, 0xFF, 0x0F, 0xFF, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x03, 0x02, 0x13, 0x01, 0x13, + 0x00, 0x93, 0x00, 0x53, 0x00, 0x33, 0x03, 0xF3, 0x00, 0x03, 0x00, 0x03, 0x0F, 0xFF, 0x0F, 0xFF, + 0x00, 0x0F, 0x00, 0x0F, +}, + +#define TK_MAC_XCURSOR_bottom_side 8 +[TK_MAC_XCURSOR_bottom_side] = { + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x11, 0x10, + 0x09, 0x20, 0x05, 0x40, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x11, 0x10, + 0x09, 0x20, 0x05, 0x40, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x00, + 0x00, 0x0B, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_bottom_tee 9 +[TK_MAC_XCURSOR_bottom_tee] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, + 0x01, 0x80, 0x01, 0x80, 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, + 0x01, 0x80, 0x01, 0x80, 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0B, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_box_spiral 10 +[TK_MAC_XCURSOR_box_spiral] = { + 0xFF, 0xFE, 0x80, 0x00, 0xBF, 0xFE, 0xA0, 0x02, 0xAF, 0xFA, 0xA8, 0x0A, 0xAB, 0xEA, 0xAA, 0x2A, + 0xAA, 0xAA, 0xAB, 0xAA, 0xA8, 0x2A, 0xAF, 0xEA, 0xA0, 0x0A, 0xBF, 0xFA, 0x80, 0x02, 0xFF, 0xFE, + 0xFF, 0xFE, 0x80, 0x00, 0xBF, 0xFE, 0xA0, 0x02, 0xAF, 0xFA, 0xA8, 0x0A, 0xAB, 0xEA, 0xAA, 0x2A, + 0xAA, 0xAA, 0xAB, 0xAA, 0xA8, 0x2A, 0xAF, 0xEA, 0xA0, 0x0A, 0xBF, 0xFA, 0x80, 0x02, 0xFF, 0xFE, + 0x00, 0x08, 0x00, 0x08, +}, + +#define TK_MAC_XCURSOR_center_ptr 11 +[TK_MAC_XCURSOR_center_ptr] = { + 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x0F, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, + 0x1F, 0xE0, 0x33, 0x30, 0x23, 0x10, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x07, 0x80, 0x07, 0x80, 0x0F, 0xC0, 0x0F, 0xC0, 0x1F, 0xE0, 0x1F, 0xE0, 0x3F, 0xF0, + 0x3F, 0xF0, 0x7F, 0xF8, 0x77, 0xB8, 0x67, 0x98, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, 0x07, 0x80, + 0x00, 0x01, 0x00, 0x06, +}, + +#define TK_MAC_XCURSOR_circle 12 +[TK_MAC_XCURSOR_circle] = { + 0x00, 0x00, 0x03, 0xC0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3C, 0x3C, 0x38, 0x1C, 0x70, 0x0E, 0x70, 0x0E, + 0x70, 0x0E, 0x70, 0x0E, 0x38, 0x1C, 0x3C, 0x3C, 0x1F, 0xF8, 0x0F, 0xF0, 0x03, 0xC0, 0x00, 0x00, + 0x03, 0xC0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7C, 0x3E, 0xF8, 0x1F, 0xF8, 0x1F, + 0xF8, 0x1F, 0xF8, 0x1F, 0x7C, 0x3E, 0x7F, 0xFE, 0x3F, 0xFC, 0x1F, 0xF8, 0x0F, 0xF0, 0x03, 0xC0, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_clock 13 +[TK_MAC_XCURSOR_clock] = { + 0x1F, 0xF8, 0x33, 0xCC, 0x64, 0x66, 0x49, 0x92, 0x4F, 0x12, 0x44, 0x22, 0x63, 0xC6, 0x3F, 0xFC, + 0x29, 0x94, 0x29, 0x94, 0x29, 0x94, 0x2B, 0xD4, 0x69, 0x96, 0x78, 0x1E, 0x7F, 0xFE, 0x7F, 0xFE, + 0x1F, 0xF8, 0x3F, 0xFC, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x3F, 0xFC, + 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, + 0x00, 0x04, 0x00, 0x08, +}, + +#define TK_MAC_XCURSOR_coffee_mug 14 +[TK_MAC_XCURSOR_coffee_mug] = { + 0x03, 0xF8, 0x0C, 0x06, 0x10, 0x01, 0x1C, 0x07, 0x33, 0xF9, 0x70, 0x01, 0xD0, 0x01, 0x90, 0x01, + 0x96, 0x0D, 0xDA, 0x55, 0x7A, 0x55, 0x36, 0xED, 0x10, 0xA1, 0x10, 0x01, 0x08, 0x02, 0x07, 0xFC, + 0x03, 0xF8, 0x0F, 0xFE, 0x1F, 0xFF, 0x1F, 0xFF, 0x3F, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0x3F, 0xFF, 0x1F, 0xFF, 0x1F, 0xFF, 0x0F, 0xFE, 0x07, 0xFC, + 0x00, 0x04, 0x00, 0x03, +}, + +#define TK_MAC_XCURSOR_cross 15 +[TK_MAC_XCURSOR_cross] = { + 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0xFE, 0xFE, 0x00, 0x00, + 0xFE, 0xFE, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x00, 0x00, + 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_cross_reverse 16 +[TK_MAC_XCURSOR_cross_reverse] = { + 0x42, 0x84, 0xA2, 0x8A, 0x52, 0x94, 0x2A, 0xA8, 0x16, 0xD0, 0x0A, 0xA0, 0xFD, 0x7E, 0x02, 0x80, + 0xFD, 0x7E, 0x0A, 0xA0, 0x16, 0xD0, 0x2A, 0xA8, 0x52, 0x94, 0xA2, 0x8A, 0x42, 0x84, 0x00, 0x00, + 0x43, 0x84, 0xE3, 0x8E, 0x73, 0x9C, 0x3B, 0xB8, 0x1F, 0xF0, 0x0F, 0xE0, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0x0F, 0xE0, 0x1F, 0xF0, 0x3B, 0xB8, 0x73, 0x9C, 0xE3, 0x8E, 0x43, 0x84, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_crosshair 17 +[TK_MAC_XCURSOR_crosshair] = { + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFE, 0xFE, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFE, 0xFE, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_diamond_cross 18 +[TK_MAC_XCURSOR_diamond_cross] = { + 0x02, 0x80, 0x06, 0xC0, 0x0A, 0xA0, 0x12, 0x90, 0x22, 0x88, 0x42, 0x84, 0xFE, 0xFE, 0x00, 0x00, + 0xFE, 0xFE, 0x42, 0x84, 0x22, 0x88, 0x12, 0x90, 0x0A, 0xA0, 0x06, 0xC0, 0x02, 0x80, 0x00, 0x00, + 0x02, 0x80, 0x06, 0xC0, 0x0E, 0xE0, 0x1E, 0xF0, 0x3E, 0xF8, 0x7E, 0xFC, 0xFE, 0xFE, 0x00, 0x00, + 0xFE, 0xFE, 0x7E, 0xFC, 0x3E, 0xF8, 0x1E, 0xF0, 0x0E, 0xE0, 0x06, 0xC0, 0x02, 0x80, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_dot 19 +[TK_MAC_XCURSOR_dot] = { + 0x00, 0x00, 0x00, 0x00, 0x07, 0x80, 0x1F, 0xE0, 0x1F, 0xE0, 0x3F, 0xF0, 0x3F, 0xF0, 0x3F, 0xF0, + 0x3F, 0xF0, 0x1F, 0xE0, 0x1F, 0xE0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x07, 0x80, 0x1F, 0xE0, 0x3F, 0xF0, 0x3F, 0xF0, 0x7F, 0xF8, 0x7F, 0xF8, 0x7F, 0xF8, + 0x7F, 0xF8, 0x3F, 0xF0, 0x3F, 0xF0, 0x1F, 0xE0, 0x07, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x06, +}, + +#define TK_MAC_XCURSOR_dotbox 20 +[TK_MAC_XCURSOR_dotbox] = { + 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x21, 0x84, + 0x21, 0x84, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x20, 0x04, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x3F, 0xFC, 0x30, 0x0C, 0x30, 0x0C, 0x31, 0x8C, 0x33, 0xCC, + 0x33, 0xCC, 0x31, 0x8C, 0x30, 0x0C, 0x30, 0x0C, 0x3F, 0xFC, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_double_arrow 21 +[TK_MAC_XCURSOR_double_arrow] = { + 0x00, 0x00, 0x01, 0x80, 0x03, 0xC0, 0x07, 0xE0, 0x0D, 0xB0, 0x19, 0x98, 0x01, 0x80, 0x01, 0x80, + 0x01, 0x80, 0x01, 0x80, 0x19, 0x98, 0x0D, 0xB0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, + 0x01, 0x80, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3F, 0xFC, 0x3B, 0xDC, 0x03, 0xC0, + 0x03, 0xC0, 0x3B, 0xDC, 0x3F, 0xFC, 0x1F, 0xF8, 0x0F, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_draft_large 22 +[TK_MAC_XCURSOR_draft_large] = { + 0x00, 0x00, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF8, 0x03, 0xF8, 0x0F, 0xF0, 0x00, 0xF0, + 0x01, 0x60, 0x02, 0x60, 0x04, 0x40, 0x08, 0x40, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x0F, 0x00, 0x3E, 0x00, 0xFE, 0x03, 0xFC, 0x0F, 0xFC, 0x3F, 0xF8, 0xFF, 0xF8, + 0x03, 0xF0, 0x07, 0xF0, 0x0E, 0xE0, 0x1C, 0xE0, 0x38, 0xC0, 0x70, 0xC0, 0xE0, 0x80, 0x40, 0x80, + 0x00, 0x01, 0x00, 0x0E, +}, + +#define TK_MAC_XCURSOR_draft_small 23 +[TK_MAC_XCURSOR_draft_small] = { + 0x00, 0x00, 0x00, 0x02, 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF8, 0x03, 0xF8, 0x00, 0x70, 0x00, 0xB0, + 0x01, 0x20, 0x02, 0x20, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x0F, 0x00, 0x3E, 0x00, 0xFE, 0x03, 0xFC, 0x0F, 0xFC, 0x3F, 0xF8, 0x01, 0xF8, + 0x03, 0xF0, 0x07, 0x70, 0x0E, 0x60, 0x1C, 0x60, 0x38, 0x40, 0x70, 0x40, 0xE0, 0x00, 0x40, 0x00, + 0x00, 0x01, 0x00, 0x0E, +}, + +#define TK_MAC_XCURSOR_draped_box 24 +[TK_MAC_XCURSOR_draped_box] = { + 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x22, 0x44, 0x26, 0x64, 0x2C, 0x34, 0x38, 0x1C, 0x21, 0x84, + 0x21, 0x84, 0x38, 0x1C, 0x2C, 0x34, 0x26, 0x64, 0x22, 0x44, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFC, 0x3E, 0x7C, 0x3E, 0x7C, 0x3C, 0x3C, 0x39, 0x9C, 0x23, 0xC4, + 0x23, 0xC4, 0x39, 0x9C, 0x3C, 0x3C, 0x3E, 0x7C, 0x3E, 0x7C, 0x3F, 0xFC, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_exchange 25 +[TK_MAC_XCURSOR_exchange] = { + 0x00, 0x00, 0x47, 0xC0, 0x6F, 0xE0, 0x7C, 0x30, 0x48, 0x10, 0x4C, 0x00, 0x7E, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xFC, 0x00, 0x64, 0x10, 0x24, 0x18, 0x7C, 0x0F, 0xEC, 0x07, 0xC4, 0x00, 0x00, + 0xC7, 0xC0, 0xEF, 0xE0, 0xFF, 0xF0, 0xFF, 0xF8, 0xFC, 0x38, 0xFE, 0x10, 0xFF, 0x00, 0xFF, 0x80, + 0x03, 0xFE, 0x01, 0xFE, 0x10, 0xFE, 0x38, 0x7E, 0x3F, 0xFE, 0x1F, 0xFE, 0x0F, 0xEE, 0x07, 0xC6, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_fleur 26 +[TK_MAC_XCURSOR_fleur] = { + 0x00, 0x00, 0x01, 0x80, 0x03, 0xC0, 0x07, 0xE0, 0x01, 0x80, 0x11, 0x88, 0x31, 0x8C, 0x7F, 0xFE, + 0x7F, 0xFE, 0x31, 0x8C, 0x11, 0x88, 0x01, 0x80, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, 0x00, 0x00, + 0x01, 0x80, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x17, 0xE8, 0x3B, 0xDC, 0x7F, 0xFE, 0xFF, 0xFF, + 0xFF, 0xFF, 0x7F, 0xFE, 0x3B, 0xDC, 0x17, 0xE8, 0x0F, 0xF0, 0x07, 0xE0, 0x03, 0xC0, 0x01, 0x80, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_gobbler 27 +[TK_MAC_XCURSOR_gobbler] = { + 0x00, 0x00, 0x00, 0x78, 0x00, 0x70, 0x40, 0x36, 0x4F, 0xB0, 0x7F, 0xF0, 0x7E, 0x30, 0x7C, 0x30, + 0x30, 0x38, 0x00, 0xF0, 0x0F, 0xE0, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x0F, 0x00, 0x00, 0x00, + 0x00, 0xFC, 0x00, 0xFC, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xF8, 0xFF, 0xF8, + 0xFF, 0xFC, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0E, 0x00, 0x1F, 0x80, 0x1F, 0x80, 0x1F, 0x80, + 0x00, 0x03, 0x00, 0x0E, +}, + +#define TK_MAC_XCURSOR_gumby 28 +[TK_MAC_XCURSOR_gumby] = { + 0x3F, 0x00, 0x10, 0xC0, 0xC8, 0x20, 0xEA, 0xA0, 0xC8, 0x20, 0xCB, 0xA0, 0xF8, 0x38, 0x38, 0x3E, + 0x08, 0x26, 0x08, 0x26, 0x09, 0x2E, 0x09, 0x26, 0x09, 0x20, 0x11, 0x10, 0x21, 0x08, 0x3E, 0xF8, + 0x3F, 0x00, 0x1F, 0xC0, 0xCF, 0xE0, 0xEF, 0xE0, 0xCF, 0xE0, 0xCF, 0xE0, 0xFF, 0xF8, 0x3F, 0xFE, + 0x0F, 0xE6, 0x0F, 0xE6, 0x0F, 0xEE, 0x0F, 0xE6, 0x0F, 0xE0, 0x1F, 0xF0, 0x3F, 0xF8, 0x3E, 0xF8, + 0x00, 0x00, 0x00, 0x02, +}, + +#define TK_MAC_XCURSOR_hand1 29 +[TK_MAC_XCURSOR_hand1] = { + 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x2F, 0xE0, + 0x7F, 0xF0, 0x5F, 0xF0, 0x07, 0xE0, 0x07, 0xC0, 0x4A, 0x00, 0x62, 0x00, 0x34, 0x00, 0x18, 0x00, + 0x00, 0x0C, 0x00, 0x3C, 0x00, 0xF0, 0x01, 0xE0, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x2F, 0xE0, + 0x7F, 0xF0, 0x7F, 0xF0, 0x7F, 0xE0, 0x7F, 0xC0, 0x7E, 0x00, 0x7E, 0x00, 0x3C, 0x00, 0x18, 0x00, + 0x00, 0x00, 0x00, 0x0D, +}, + +#define TK_MAC_XCURSOR_hand2 30 +[TK_MAC_XCURSOR_hand2] = { + 0x00, 0x00, 0x3F, 0xC0, 0x40, 0x20, 0x3F, 0x10, 0x08, 0x08, 0x07, 0x08, 0x08, 0x08, 0x07, 0x14, + 0x08, 0x22, 0x06, 0x41, 0x01, 0x82, 0x01, 0x24, 0x00, 0x88, 0x00, 0x50, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x00, 0x3F, 0xC0, 0x7F, 0xE0, 0x3F, 0xF0, 0x0F, 0xF8, 0x07, 0xF8, 0x0F, 0xF8, 0x07, 0xFC, + 0x0F, 0xFE, 0x07, 0xFF, 0x01, 0xFE, 0x01, 0xFC, 0x00, 0xF8, 0x00, 0x70, 0x00, 0x20, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x01, +}, + +#define TK_MAC_XCURSOR_heart 31 +[TK_MAC_XCURSOR_heart] = { + 0x00, 0x00, 0x3E, 0xF8, 0x63, 0x8C, 0xC1, 0x06, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, + 0xC0, 0x06, 0x60, 0x0C, 0x30, 0x18, 0x18, 0x30, 0x0C, 0x60, 0x06, 0xC0, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x3E, 0xF8, 0x7F, 0xFC, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_icon 32 +[TK_MAC_XCURSOR_icon] = { + 0xFF, 0xFF, 0xD5, 0x55, 0xAA, 0xAB, 0xD5, 0x55, 0xA0, 0x0B, 0xD0, 0x05, 0xA0, 0x0B, 0xD0, 0x05, + 0xA0, 0x0B, 0xD0, 0x05, 0xA0, 0x0B, 0xD0, 0x05, 0xAA, 0xAB, 0xD5, 0x55, 0xAA, 0xAB, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, + 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_iron_cross 33 +[TK_MAC_XCURSOR_iron_cross] = { + 0x00, 0x00, 0x3F, 0xFC, 0x1F, 0xF8, 0x4F, 0xF2, 0x67, 0xE6, 0x73, 0xCE, 0x79, 0x9E, 0x7F, 0xFE, + 0x7F, 0xFE, 0x79, 0x9E, 0x73, 0xCE, 0x67, 0xE6, 0x4F, 0xF2, 0x1F, 0xF8, 0x3F, 0xFC, 0x00, 0x00, + 0x7F, 0xFE, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, + 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xFE, 0x7F, 0xFE, + 0x00, 0x07, 0x00, 0x06, +}, + +#define TK_MAC_XCURSOR_left_ptr 34 +[TK_MAC_XCURSOR_left_ptr] = { + 0x00, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x0E, 0x00, 0x0F, 0x00, 0x0F, 0x80, 0x0F, 0xC0, 0x0F, 0xE0, + 0x0F, 0xF0, 0x0F, 0x80, 0x0D, 0x80, 0x08, 0xC0, 0x00, 0xC0, 0x00, 0x60, 0x00, 0x60, 0x00, 0x00, + 0x18, 0x00, 0x1C, 0x00, 0x1E, 0x00, 0x1F, 0x00, 0x1F, 0x80, 0x1F, 0xC0, 0x1F, 0xE0, 0x1F, 0xF0, + 0x1F, 0xF8, 0x1F, 0xFC, 0x1F, 0xC0, 0x1D, 0xE0, 0x19, 0xE0, 0x10, 0xF0, 0x00, 0xF0, 0x00, 0x70, + 0x00, 0x01, 0x00, 0x04, +}, + +#define TK_MAC_XCURSOR_left_side 35 +[TK_MAC_XCURSOR_left_side] = { + 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x80, 0x61, 0x00, 0x62, 0x00, 0x64, 0x00, 0x6F, 0xFC, + 0x64, 0x00, 0x62, 0x00, 0x61, 0x00, 0x60, 0x80, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x60, 0x00, 0x60, 0x00, 0x60, 0x80, 0x61, 0x00, 0x62, 0x00, 0x64, 0x00, 0x6F, 0xFC, + 0x64, 0x00, 0x62, 0x00, 0x61, 0x00, 0x60, 0x80, 0x60, 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x04, +}, + +#define TK_MAC_XCURSOR_left_tee 36 +[TK_MAC_XCURSOR_left_tee] = { + 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0F, 0xF8, + 0x0F, 0xF8, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0F, 0xF8, + 0x0F, 0xF8, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x04, +}, + +#define TK_MAC_XCURSOR_leftbutton 37 +[TK_MAC_XCURSOR_leftbutton] = { + 0x80, 0x02, 0x7F, 0xFC, 0x7F, 0xFC, 0x44, 0x44, 0x45, 0x54, 0x45, 0x54, 0x45, 0x54, 0x45, 0x54, + 0x44, 0x44, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x80, 0x02, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0x00, 0x04, 0x00, 0x03, +}, + +#define TK_MAC_XCURSOR_ll_angle 38 +[TK_MAC_XCURSOR_ll_angle] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, + 0x0C, 0x00, 0x0C, 0x00, 0x0F, 0xF8, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, + 0x0C, 0x00, 0x0C, 0x00, 0x0F, 0xF8, 0x0F, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0B, 0x00, 0x04, +}, + +#define TK_MAC_XCURSOR_lr_angle 39 +[TK_MAC_XCURSOR_lr_angle] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x30, 0x1F, 0xF0, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x30, 0x1F, 0xF0, 0x1F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x0B, 0x00, 0x0B, +}, + +#define TK_MAC_XCURSOR_man 40 +[TK_MAC_XCURSOR_man] = { + 0x03, 0x80, 0x1E, 0xF0, 0x02, 0x80, 0x81, 0x00, 0x43, 0x87, 0x24, 0x4B, 0x1D, 0x70, 0x05, 0x40, + 0x04, 0x40, 0x02, 0x80, 0x04, 0x40, 0x09, 0x20, 0x12, 0x90, 0x14, 0x50, 0x78, 0x3C, 0xF8, 0x3F, + 0x03, 0x80, 0x1F, 0xF0, 0x03, 0x80, 0x81, 0x00, 0x43, 0x87, 0x27, 0xCB, 0x1F, 0xF0, 0x07, 0xC0, + 0x07, 0xC0, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1E, 0xF0, 0x1C, 0x70, 0x78, 0x3C, 0xF8, 0x3F, + 0x00, 0x01, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_middlebutton 41 +[TK_MAC_XCURSOR_middlebutton] = { + 0x80, 0x02, 0x7F, 0xFC, 0x7F, 0xFC, 0x44, 0x44, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, + 0x44, 0x44, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x80, 0x02, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0x00, 0x04, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_mouse 42 +[TK_MAC_XCURSOR_mouse] = { + 0x06, 0x00, 0x01, 0x00, 0x01, 0x80, 0x0F, 0xF0, 0x10, 0x08, 0x17, 0xE8, 0x14, 0x28, 0x14, 0x28, + 0x17, 0xE8, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x10, 0x08, 0x0F, 0xF0, + 0x06, 0x00, 0x01, 0x00, 0x01, 0x80, 0x0F, 0xF0, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, + 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xF8, 0x0F, 0xF0, + 0x00, 0x00, 0x00, 0x00, +}, + +#define TK_MAC_XCURSOR_pencil 43 +[TK_MAC_XCURSOR_pencil] = { + 0x00, 0x00, 0x00, 0xF0, 0x00, 0x88, 0x01, 0x08, 0x01, 0x90, 0x02, 0x70, 0x02, 0x20, 0x04, 0x40, + 0x04, 0x40, 0x08, 0x80, 0x08, 0x80, 0x11, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x10, 0x00, + 0x00, 0x00, 0x00, 0xF0, 0x00, 0xF8, 0x01, 0xF8, 0x01, 0xF0, 0x03, 0xF0, 0x03, 0xE0, 0x07, 0xC0, + 0x07, 0xC0, 0x0F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x1E, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x10, 0x00, + 0x00, 0x0F, 0x00, 0x03, +}, + +#define TK_MAC_XCURSOR_pirate 44 +[TK_MAC_XCURSOR_pirate] = { + 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x19, 0x98, 0x19, 0x98, 0x0F, 0xF0, 0x07, 0xE0, 0x03, 0xC0, + 0x43, 0xC2, 0x43, 0xC3, 0x21, 0x84, 0x1C, 0x38, 0x03, 0xC0, 0x0F, 0xF1, 0x78, 0x1F, 0x40, 0x02, + 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3F, 0xFC, 0x3F, 0xFC, 0x1F, 0xF8, 0x0F, 0xF0, 0x47, 0xE2, + 0xE7, 0xE7, 0xE7, 0xE7, 0x7F, 0xFF, 0x3F, 0xFC, 0x1F, 0xF9, 0x7F, 0xFF, 0xFF, 0xFF, 0xF8, 0x1F, + 0x00, 0x0A, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_plus 45 +[TK_MAC_XCURSOR_plus] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x1F, 0xF8, + 0x1F, 0xF8, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x1F, 0xF8, + 0x1F, 0xF8, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_question_arrow 46 +[TK_MAC_XCURSOR_question_arrow] = { + 0x07, 0xC0, 0x0F, 0xE0, 0x1C, 0x70, 0x18, 0x30, 0x1C, 0x30, 0x0C, 0x70, 0x00, 0xE0, 0x03, 0xC0, + 0x03, 0x80, 0x02, 0x80, 0x02, 0x80, 0x0E, 0xE0, 0x06, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x07, 0xC0, 0x0F, 0xE0, 0x1C, 0x70, 0x18, 0x30, 0x1C, 0x30, 0x0C, 0x70, 0x00, 0xE0, 0x03, 0xC0, + 0x03, 0x80, 0x02, 0x80, 0x3F, 0xF8, 0x1F, 0xF0, 0x0F, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, + 0x00, 0x0E, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_right_ptr 47 +[TK_MAC_XCURSOR_right_ptr] = { + 0x00, 0x00, 0x00, 0x10, 0x00, 0x30, 0x00, 0x70, 0x00, 0xF0, 0x01, 0xF0, 0x03, 0xF0, 0x07, 0xF0, + 0x0F, 0xF0, 0x01, 0xF0, 0x01, 0xB0, 0x03, 0x10, 0x03, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x18, 0x00, 0x38, 0x00, 0x78, 0x00, 0xF8, 0x01, 0xF8, 0x03, 0xF8, 0x07, 0xF8, 0x0F, 0xF8, + 0x1F, 0xF8, 0x3F, 0xF8, 0x03, 0xF8, 0x07, 0xB8, 0x07, 0x98, 0x0F, 0x08, 0x0F, 0x00, 0x0E, 0x00, + 0x00, 0x01, 0x00, 0x0B, +}, + +#define TK_MAC_XCURSOR_right_side 48 +[TK_MAC_XCURSOR_right_side] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x01, 0x06, 0x00, 0x86, 0x00, 0x46, 0x00, 0x26, + 0x3F, 0xF6, 0x00, 0x26, 0x00, 0x46, 0x00, 0x86, 0x01, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x01, 0x06, 0x00, 0x86, 0x00, 0x46, 0x00, 0x26, + 0x3F, 0xF6, 0x00, 0x26, 0x00, 0x46, 0x00, 0x86, 0x01, 0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x0B, +}, + +#define TK_MAC_XCURSOR_right_tee 49 +[TK_MAC_XCURSOR_right_tee] = { + 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x1F, 0xF0, + 0x1F, 0xF0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x1F, 0xF0, + 0x1F, 0xF0, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x0A, +}, + +#define TK_MAC_XCURSOR_rightbutton 50 +[TK_MAC_XCURSOR_rightbutton] = { + 0x80, 0x02, 0x7F, 0xFC, 0x7F, 0xFC, 0x44, 0x44, 0x55, 0x44, 0x55, 0x44, 0x55, 0x44, 0x55, 0x44, + 0x44, 0x44, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x80, 0x02, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, 0xFF, 0xFE, + 0x00, 0x04, 0x00, 0x03, +}, + +#define TK_MAC_XCURSOR_rtl_logo 51 +[TK_MAC_XCURSOR_rtl_logo] = { + 0x00, 0x00, 0x7F, 0xFE, 0x40, 0x22, 0x40, 0x22, 0x40, 0x22, 0x7F, 0xE2, 0x44, 0x22, 0x44, 0x22, + 0x44, 0x22, 0x44, 0x22, 0x47, 0xFE, 0x44, 0x02, 0x44, 0x02, 0x44, 0x02, 0x7F, 0xFE, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, 0x60, 0x76, 0x7F, 0xF6, 0x7F, 0xF6, 0x7C, 0x36, 0x6C, 0x36, + 0x6C, 0x36, 0x6C, 0x3E, 0x6F, 0xFE, 0x6F, 0xFE, 0x6E, 0x06, 0x7F, 0xFE, 0x7F, 0xFE, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_sailboat 52 +[TK_MAC_XCURSOR_sailboat] = { + 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x01, 0x60, 0x01, 0x60, 0x03, 0x60, 0x03, 0x70, 0x07, 0x70, + 0x07, 0x70, 0x0F, 0x78, 0x0F, 0x78, 0x1F, 0x78, 0x1F, 0x7C, 0x3E, 0x38, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x00, 0xE0, 0x01, 0xE0, 0x03, 0xF0, 0x03, 0xF0, 0x07, 0xF0, 0x07, 0xF8, 0x0F, 0xF8, + 0x0F, 0xF8, 0x1F, 0xFC, 0x1F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFE, 0x7F, 0x7C, 0x7E, 0x38, 0x00, 0x00, + 0x00, 0x0C, 0x00, 0x08, +}, + +#define TK_MAC_XCURSOR_sb_down_arrow 53 +[TK_MAC_XCURSOR_sb_down_arrow] = { + 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, + 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x0F, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, + 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x1F, 0xF0, 0x0F, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, + 0x00, 0x0E, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_sb_h_double_arrow 54 +[TK_MAC_XCURSOR_sb_h_double_arrow] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x18, 0x18, 0x3F, 0xFC, 0x78, 0x1E, + 0x3F, 0xFC, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x18, 0x18, 0x38, 0x1C, 0x7F, 0xFE, 0xFF, 0xFF, + 0x7F, 0xFE, 0x38, 0x1C, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_sb_left_arrow 55 +[TK_MAC_XCURSOR_sb_left_arrow] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x3F, 0xFF, 0x78, 0x00, + 0x3F, 0xFF, 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x38, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, + 0x7F, 0xFF, 0x38, 0x00, 0x18, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x01, +}, + +#define TK_MAC_XCURSOR_sb_right_arrow 56 +[TK_MAC_XCURSOR_sb_right_arrow] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0xFF, 0xFC, + 0x00, 0x1E, 0xFF, 0xFC, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x18, 0x00, 0x1C, 0xFF, 0xFE, + 0xFF, 0xFF, 0xFF, 0xFE, 0x00, 0x1C, 0x00, 0x18, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x0E, +}, + +#define TK_MAC_XCURSOR_sb_up_arrow 57 +[TK_MAC_XCURSOR_sb_up_arrow] = { + 0x00, 0x00, 0x00, 0x80, 0x01, 0xC0, 0x03, 0xE0, 0x07, 0xF0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, + 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, + 0x00, 0x80, 0x01, 0xC0, 0x03, 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, + 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, 0x01, 0xC0, + 0x00, 0x01, 0x00, 0x08, +}, + +#define TK_MAC_XCURSOR_sb_v_double_arrow 58 +[TK_MAC_XCURSOR_sb_v_double_arrow] = { + 0x00, 0x00, 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, + 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x0F, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0xF0, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, + 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x1F, 0xF0, 0x0F, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_shuttle 59 +[TK_MAC_XCURSOR_shuttle] = { + 0x00, 0x20, 0x00, 0x70, 0x00, 0xF8, 0x01, 0xDE, 0x05, 0xDE, 0x09, 0xDE, 0x11, 0xDE, 0x11, 0xDE, + 0x11, 0xDE, 0x11, 0xDE, 0x31, 0xDE, 0x71, 0xDE, 0xFD, 0xDE, 0x18, 0x88, 0x00, 0x78, 0x00, 0x30, + 0x00, 0x20, 0x00, 0x70, 0x00, 0xF8, 0x01, 0xFE, 0x07, 0xFE, 0x0F, 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, + 0x1F, 0xFE, 0x1F, 0xFE, 0x3F, 0xFE, 0x7F, 0xFE, 0xFF, 0xFE, 0x18, 0xF8, 0x00, 0x78, 0x00, 0x30, + 0x00, 0x00, 0x00, 0x0A, +}, + +#define TK_MAC_XCURSOR_sizing 60 +[TK_MAC_XCURSOR_sizing] = { + 0x00, 0x00, 0x7F, 0x80, 0x40, 0x00, 0x40, 0x00, 0x40, 0x00, 0x47, 0xE0, 0x44, 0x20, 0x44, 0x22, + 0x44, 0x22, 0x04, 0x22, 0x07, 0xE2, 0x00, 0x12, 0x00, 0x0A, 0x00, 0x06, 0x01, 0xFE, 0x00, 0x00, + 0xFF, 0xC0, 0xFF, 0xC0, 0xFF, 0xC0, 0xE0, 0x00, 0xEF, 0xF0, 0xEF, 0xF0, 0xEC, 0x37, 0xEC, 0x37, + 0xEC, 0x37, 0xEC, 0x37, 0x0F, 0xF7, 0x0F, 0xFF, 0x00, 0x1F, 0x03, 0xFF, 0x03, 0xFF, 0x03, 0xFF, + 0x00, 0x0E, 0x00, 0x0E, +}, + +#define TK_MAC_XCURSOR_spider 61 +[TK_MAC_XCURSOR_spider] = { + 0x20, 0x10, 0x10, 0x20, 0x10, 0x20, 0x08, 0x40, 0x08, 0x40, 0x87, 0x87, 0x67, 0x98, 0x1F, 0xE0, + 0x1F, 0xE0, 0x67, 0x98, 0x87, 0x87, 0x08, 0x40, 0x08, 0x40, 0x10, 0x20, 0x10, 0x20, 0x20, 0x10, + 0x70, 0x38, 0x38, 0x70, 0x38, 0x70, 0x1C, 0xE0, 0x9F, 0xE7, 0xEF, 0xDF, 0xFF, 0xFF, 0x7F, 0xF8, + 0x7F, 0xF8, 0xFF, 0xFF, 0xEF, 0xDF, 0x9F, 0xE7, 0x1C, 0xE0, 0x38, 0x70, 0x38, 0x70, 0x70, 0x38, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_spraycan 62 +[TK_MAC_XCURSOR_spraycan] = { + 0x00, 0x18, 0x00, 0x40, 0x0D, 0x18, 0x1E, 0x40, 0x1A, 0x18, 0x3F, 0x00, 0x21, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x39, 0x00, 0x29, 0x00, 0x39, 0x00, 0x39, 0x00, 0x21, 0x00, 0x21, 0x00, 0x3F, 0x00, + 0x00, 0x18, 0x00, 0x40, 0x0D, 0x18, 0x1E, 0x40, 0x1E, 0x18, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, + 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, 0x3F, 0x00, + 0x00, 0x02, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_star 63 +[TK_MAC_XCURSOR_star] = { + 0x01, 0x00, 0x02, 0x80, 0x02, 0x80, 0x02, 0x80, 0x04, 0x40, 0x04, 0x40, 0x04, 0x40, 0x39, 0x38, + 0xC0, 0x06, 0x38, 0x38, 0x09, 0x20, 0x12, 0x90, 0x24, 0x48, 0x28, 0x28, 0x30, 0x18, 0x20, 0x08, + 0x01, 0x00, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x07, 0xC0, 0x3F, 0xF8, + 0xFF, 0xFE, 0x3F, 0xF8, 0x0F, 0xE0, 0x1E, 0xF0, 0x3C, 0x78, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_target 64 +[TK_MAC_XCURSOR_target] = { + 0x00, 0x00, 0x03, 0x80, 0x0F, 0xE0, 0x1C, 0x70, 0x30, 0x18, 0x60, 0x0C, 0xC1, 0x06, 0xC2, 0x86, + 0xC1, 0x06, 0x60, 0x0C, 0x30, 0x18, 0x1C, 0x70, 0x0F, 0xE0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x80, 0x0F, 0xE0, 0x1F, 0xF0, 0x3C, 0x78, 0x70, 0x1C, 0xE3, 0x8E, 0xE3, 0x8E, + 0xE3, 0x8E, 0x70, 0x1C, 0x3C, 0x78, 0x1F, 0xF0, 0x0F, 0xE0, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_tcross 65 +[TK_MAC_XCURSOR_tcross] = { + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFE, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0xFF, 0xFE, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_top_left_arrow 66 +[TK_MAC_XCURSOR_top_left_arrow] = { + 0x00, 0x00, 0x60, 0x00, 0x78, 0x00, 0x3E, 0x00, 0x3F, 0x80, 0x1F, 0xE0, 0x1E, 0x00, 0x0D, 0x00, + 0x0C, 0x80, 0x04, 0x40, 0x04, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, + 0xE0, 0x00, 0xF8, 0x00, 0xFE, 0x00, 0x7F, 0x80, 0x7F, 0xE0, 0x3F, 0xF8, 0x3F, 0xFE, 0x1F, 0x80, + 0x1F, 0xC0, 0x0E, 0xE0, 0x0E, 0x70, 0x06, 0x38, 0x06, 0x1C, 0x02, 0x0E, 0x02, 0x04, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x01, +}, + +#define TK_MAC_XCURSOR_top_left_corner 67 +[TK_MAC_XCURSOR_top_left_corner] = { + 0xFF, 0xF0, 0xFF, 0xF0, 0xC0, 0x00, 0xC0, 0x00, 0xCF, 0xC0, 0xCC, 0x00, 0xCA, 0x00, 0xC9, 0x00, + 0xC8, 0x80, 0xC8, 0x40, 0xC0, 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xF0, 0xFF, 0xF0, 0xC0, 0x00, 0xC0, 0x00, 0xCF, 0xC0, 0xCC, 0x00, 0xCA, 0x00, 0xC9, 0x00, + 0xC8, 0x80, 0xC8, 0x40, 0xC0, 0x20, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, +}, + +#define TK_MAC_XCURSOR_top_right_corner 68 +[TK_MAC_XCURSOR_top_right_corner] = { + 0x0F, 0xFF, 0x0F, 0xFF, 0x00, 0x03, 0x00, 0x03, 0x03, 0xF3, 0x00, 0x33, 0x00, 0x53, 0x00, 0x93, + 0x01, 0x13, 0x02, 0x13, 0x04, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x0F, 0xFF, 0x0F, 0xFF, 0x00, 0x03, 0x00, 0x03, 0x03, 0xF3, 0x00, 0x33, 0x00, 0x53, 0x00, 0x93, + 0x01, 0x13, 0x02, 0x13, 0x04, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0F, +}, + +#define TK_MAC_XCURSOR_top_side 69 +[TK_MAC_XCURSOR_top_side] = { + 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x00, 0x01, 0x00, 0x03, 0x80, 0x05, 0x40, 0x09, 0x20, + 0x11, 0x10, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x7F, 0xFC, 0x7F, 0xFC, 0x00, 0x00, 0x01, 0x00, 0x03, 0x80, 0x05, 0x40, 0x09, 0x20, + 0x11, 0x10, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_top_tee 70 +[TK_MAC_XCURSOR_top_tee] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, 0x01, 0x80, 0x01, 0x80, + 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFE, 0x7F, 0xFE, 0x01, 0x80, 0x01, 0x80, + 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_trek 71 +[TK_MAC_XCURSOR_trek] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x0E, 0xE0, 0x0F, 0xE0, 0x07, 0xC0, + 0x03, 0x80, 0x01, 0x00, 0x0B, 0xA0, 0x0D, 0x60, 0x09, 0x20, 0x08, 0x20, 0x08, 0x20, 0x00, 0x00, + 0x01, 0x00, 0x03, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1F, 0xF0, 0x1F, 0xF0, 0x1F, 0xF0, 0x0F, 0xE0, + 0x07, 0xC0, 0x0B, 0xA0, 0x1F, 0xF0, 0x1F, 0xF0, 0x1F, 0xF0, 0x1D, 0x70, 0x1C, 0x70, 0x08, 0x20, + 0x00, 0x00, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_ul_angle 72 +[TK_MAC_XCURSOR_ul_angle] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x0F, 0xF8, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, + 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xF8, 0x0F, 0xF8, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, + 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x04, +}, + +#define TK_MAC_XCURSOR_umbrella 73 +[TK_MAC_XCURSOR_umbrella] = { + 0x00, 0x00, 0x08, 0x90, 0x02, 0x28, 0x49, 0xA6, 0x27, 0xC8, 0x19, 0x30, 0x61, 0x0C, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x40, 0x01, 0x40, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x0F, 0xF0, 0x1F, 0xF8, 0x7F, 0xFE, 0x7F, 0xFC, 0xFF, 0xFE, 0xFB, 0xBE, 0xE3, 0x8E, + 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0xC0, 0x03, 0xE0, 0x03, 0xE0, 0x01, 0xC0, 0x00, 0x80, + 0x00, 0x04, 0x00, 0x07, +}, + +#define TK_MAC_XCURSOR_ur_angle 74 +[TK_MAC_XCURSOR_ur_angle] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x1F, 0xF0, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xF0, 0x1F, 0xF0, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x0B, +}, + +#define TK_MAC_XCURSOR_watch 75 +[TK_MAC_XCURSOR_watch] = { + 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x08, 0x10, 0x10, 0x88, 0x10, 0x88, 0x10, 0x8C, + 0x13, 0x8C, 0x10, 0x08, 0x10, 0x08, 0x08, 0x10, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, + 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, + 0x1F, 0xFC, 0x1F, 0xF8, 0x1F, 0xF8, 0x0F, 0xF0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, + 0x00, 0x08, 0x00, 0x0D, +}, + +#define TK_MAC_XCURSOR_xterm 76 +[TK_MAC_XCURSOR_xterm] = { + 0x0C, 0x60, 0x02, 0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x80, 0x0C, 0x60, + 0x0C, 0x60, 0x02, 0x80, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, + 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x80, 0x0C, 0x60, + 0x00, 0x0B, 0x00, 0x07, +}, + +}; diff --git a/macosx/tkMacOSXXCursors.r b/macosx/tkMacOSXXCursors.r deleted file mode 100644 index 81d2c00..0000000 --- a/macosx/tkMacOSXXCursors.r +++ /dev/null @@ -1,958 +0,0 @@ -/* - * tkMacOSXXCursors.r -- - * - * This file defines a set of Macintosh cursor resources that - * emulate the X cursor set. All of these cursors were - * constructed and donated by Grant Neufeld. (gneufeld@ccs.carleton.ca) - * - * Copyright (c) 1995-1996 Sun Microsystems, Inc. - * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. - */ - -/* - * All of the X cursors are defined as 'CURS' resources. However, a - * subset of the X cursors are also defined as 'crsr' resources. Tk - * will attempt to first use the color cursors ('crsr') if it doesn't - * exist it will attempt to use the black & white cursor ('CURS'). - */ - -data 'CURS' (3000, "X_cursor") { - $"E007 F00F F81F 7C3E 3E7C 1FF8 0FF0 07E0" - $"07E0 0FF0 1FF8 3E7C 7C3E F81F F00F E007" - $"0000 6006 700E 381C 1C38 0E70 07E0 03C0" - $"03C0 07E0 0E70 1C38 381C 700E 6006 0000" - $"0007 0007" -}; - -data 'CURS' (3001, "arrow") { - $"0000 0006 001E 007C 01FC 07F8 00F8 01F0" - $"03B0 0720 0E20 1C00 3800 7000 2000 0000" - $"0007 001F 007F 01FE 07FE 1FFC 7FFC 03F8" - $"07F8 0FF0 1F70 3E60 7C60 F840 7040 2000" - $"0001 000E" -}; - -data 'CURS' (3002, "based_arrow_down") { - $"0000 0000 0000 1FE0 0000 1FE0 0300 0300" - $"0300 0B40 0780 0300 0000 0000 0000 0000" - $"0000 0000 0000 1FE0 0000 1FE0 0780 0780" - $"3FF0 1FE0 0FC0 0780 0300 0000 0000 0000" - $"000B 0006" -}; - -data 'CURS' (3003, "based_arrow_up") { - $"0000 0000 0000 0000 0300 0780 0B40 0300" - $"0300 0300 1FE0 0000 1FE0 0000 0000 0000" - $"0000 0000 0000 0300 0780 0FC0 1FE0 3FF0" - $"0780 0780 1FE0 0000 1FE0 0000 0000 0000" - $"0004 0006" -}; - -data 'CURS' (3004, "boat") { - $"0000 0000 0000 0000 0100 03C0 8460 FFFF" - $"0018 0020 0040 FFC0 0000 0000 0000 0000" - $"0000 0000 0000 0000 0100 03C0 87E0 FFFF" - $"FFF8 FFE0 FFC0 FFC0 0000 0000 0000 0000" - $"0007 000F" -}; - -data 'CURS' (3005, "bogosity") { - $"0000 711C 1110 1110 1110 7FFC 5114 5114" - $"5114 5114 7FFC 1110 1110 1110 711C 0000" - $"0000 0000 0000 0000 0000 7FFC 7FFC 7FFC" - $"7FFC 7FFC 7FFC 0000 0000 0000 0000 0000" - $"0001 0007" -}; - -data 'CURS' (3006, "bottom_left_corner") { - $"0000 0000 0000 0000 C000 C020 C840 C880" - $"C900 CA00 CC00 CFC0 C000 C000 FFF0 FFF0" - $"0000 0000 0000 0000 0000 0020 0840 0880" - $"0900 0A00 0C00 0FC0 0000 0000 0000 0000" - $"000F 0000" -}; - -data 'CURS' (3007, "bottom_right_corner") { - $"0000 0000 0000 0000 0003 0403 0213 0113" - $"0093 0053 0033 03F3 0003 0003 0FFF 0FFF" - $"0000 0000 0000 0000 0000 0400 0210 0110" - $"0090 0050 0030 03F0 0000 0000 0000 0000" - $"000F 000F" -}; - -data 'CURS' (3008, "bottom_side") { - $"0000 0000 0100 0100 0100 0100 0100 1110" - $"0920 0540 0380 0100 0000 7FFC 7FFC 0000" - $"0000 0000 0100 0100 0100 0100 0100 1110" - $"0920 0540 0380 0100 0000 0000 0000 0000" - $"000B 0007" -}; - -data 'CURS' (3009, "bottom_tee") { - $"0000 0000 0000 0180 0180 0180 0180 0180" - $"0180 0180 7FFE 7FFE 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"000B 0007" -}; - -data 'CURS' (3010, "box_spiral") { - $"FFFE 8000 BFFE A002 AFFA A80A ABEA AA2A" - $"AAAA ABAA A82A AFEA A00A BFFA 8002 FFFE" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0008 0008" -}; - -data 'CURS' (3011, "center_ptr") { - $"0000 0300 0300 0780 0780 0FC0 0FC0 1FE0" - $"1FE0 3330 2310 0300 0300 0300 0300 0000" - $"0300 0780 0780 0FC0 0FC0 1FE0 1FE0 3FF0" - $"3FF0 7FF8 77B8 6798 0780 0780 0780 0780" - $"0001 0006" -}; - -data 'CURS' (3012, "circle") { - $"0000 03C0 0FF0 1FF8 3C3C 381C 700E 700E" - $"700E 700E 381C 3C3C 1FF8 0FF0 03C0 0000" - $"03C0 0FF0 1FF8 3FFC 7FFE 7C3E F81F F81F" - $"F81F F81F 7C3E 7FFE 3FFC 1FF8 0FF0 03C0" - $"0007 0007" -}; - -data 'CURS' (3013, "clock") { - $"1FF8 33CC 6466 4992 4F12 4422 63C6 3FFC" - $"2994 2994 2994 2BD4 6996 781E 7FFE 7FFE" - $"1FF8 3FFC 7FFE 7FFE 7FFE 7FFE 7FFE 3FFC" - $"3FFC 3FFC 3FFC 3FFC 7FFE 7FFE 7FFE 7FFE" - $"0004 0008" -}; - -data 'CURS' (3014, "coffee_mug") { - $"03F8 0C06 1001 1C07 33F9 7001 D001 9001" - $"960D DA55 7A55 36ED 10A1 1001 0802 07FC" - $"03F8 0FFE 1FFF 1FFF 3FFF 7FFF FFFF FFFF" - $"FFFF FFFF 7FFF 3FFF 1FFF 1FFF 0FFE 07FC" - $"0004 0003" -}; - -data 'CURS' (3015, "cross") { - $"0280 0280 0280 0280 0280 0280 FEFE 0000" - $"FEFE 0280 0280 0280 0280 0280 0280 0000" - $"0380 0380 0380 0380 0380 0380 FFFE FFFE" - $"FFFE 0380 0380 0380 0380 0380 0380 0000" - $"0007 0007" -}; - -data 'CURS' (3016, "cross_reverse") { - $"4284 A28A 5294 2AA8 16D0 0AA0 FD7E 0280" - $"FD7E 0AA0 16D0 2AA8 5294 A28A 4284 0000" - $"4384 E38E 739C 3BB8 1FF0 0FE0 FFFE FFFE" - $"FFFE 0FE0 1FF0 3BB8 739C E38E 4384 0000" - $"0007 0007" -}; - -data 'CURS' (3017, "crosshair") { - $"0100 0100 0100 0100 0100 0100 0100 FEFE" - $"0100 0100 0100 0100 0100 0100 0100 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0007 0007" -}; - -data 'CURS' (3018, "diamond_cross") { - $"0280 06C0 0AA0 1290 2288 4284 FEFE 0000" - $"FEFE 4284 2288 1290 0AA0 06C0 0280 0000" - $"0280 06C0 0EE0 1EF0 3EF8 7EFC FEFE 0000" - $"FEFE 7EFC 3EF8 1EF0 0EE0 06C0 0280 0000" - $"0007 0007" -}; - -data 'CURS' (3019, "dot") { - $"0000 0000 0780 1FE0 1FE0 3FF0 3FF0 3FF0" - $"3FF0 1FE0 1FE0 0780 0000 0000 0000 0000" - $"0000 0780 1FE0 3FF0 3FF0 7FF8 7FF8 7FF8" - $"7FF8 3FF0 3FF0 1FE0 0780 0000 0000 0000" - $"0006 0006" -}; - -data 'CURS' (3020, "dotbox") { - $"0000 0000 3FFC 2004 2004 2004 2004 2184" - $"2184 2004 2004 2004 2004 3FFC 0000 0000" - $"0000 0000 3FFC 3FFC 300C 300C 318C 33CC" - $"33CC 318C 300C 300C 3FFC 3FFC 0000 0000" - $"0007 0007" -}; - -data 'CURS' (3021, "double_arrow") { - $"0000 0180 03C0 07E0 0DB0 1998 0180 0180" - $"0180 0180 1998 0DB0 07E0 03C0 0180 0000" - $"0180 03C0 07E0 0FF0 1FF8 3FFC 3BDC 03C0" - $"03C0 3BDC 3FFC 1FF8 0FF0 07E0 03C0 0180" - $"0007 0007" -}; - -data 'CURS' (3022, "draft_large") { - $"0000 0002 000C 003C 00F8 03F8 0FF0 00F0" - $"0160 0260 0440 0840 1000 2000 4000 0000" - $"0003 000F 003E 00FE 03FC 0FFC 3FF8 FFF8" - $"03F0 07F0 0EE0 1CE0 38C0 70C0 E080 4080" - $"0001 000E" -}; - -data 'CURS' (3023, "draft_small") { - $"0000 0002 000C 003C 00F8 03F8 0070 00B0" - $"0120 0220 0400 0800 1000 2000 4000 0000" - $"0003 000F 003E 00FE 03FC 0FFC 3FF8 01F8" - $"03F0 0770 0E60 1C60 3840 7040 E000 4000" - $"0001 000E" -}; - -data 'CURS' (3024, "draped_box") { - $"0000 0000 3FFC 2244 2664 2C34 381C 2184" - $"2184 381C 2C34 2664 2244 3FFC 0000 0000" - $"0000 0000 3FFC 3E7C 3E7C 3C3C 399C 23C4" - $"23C4 399C 3C3C 3E7C 3E7C 3FFC 0000 0000" - $"0007 0007" -}; - -data 'CURS' (3025, "exchange") { - $"0000 47C0 6FE0 7C30 4810 4C00 7E00 0000" - $"0000 00FC 0064 1024 187C 0FEC 07C4 0000" - $"C7C0 EFE0 FFF0 FFF8 FC38 FE10 FF00 FF80" - $"03FE 01FE 10FE 387E 3FFE 1FFE 0FEE 07C6" - $"0007 0007" -}; - -data 'CURS' (3026, "fleur") { - $"0000 0180 03C0 07E0 0180 1188 318C 7FFE" - $"7FFE 318C 1188 0180 07E0 03C0 0180 0000" - $"0180 03C0 07E0 0FF0 17E8 3BDC 7FFE FFFF" - $"FFFF 7FFE 3BDC 17E8 0FF0 07E0 03C0 0180" - $"0007 0007" -}; - -data 'CURS' (3027, "gobbler") { - $"0000 0078 0070 4036 4FB0 7FF0 7E30 7C30" - $"3038 00F0 0FE0 0400 0400 0400 0F00 0000" - $"00FC 00FC E0FF FFFF FFFF FFF8 FFF8 FFF8" - $"FFFC 7FFC 3FF8 1FF0 0E00 1F80 1F80 1F80" - $"0003 000E" -}; - -data 'CURS' (3028, "gumby") { - $"3F00 10C0 C820 EAA0 C820 CBA0 F838 383E" - $"0826 0826 092E 0926 0920 1110 2108 3EF8" - $"3F00 1FC0 CFE0 EFE0 CFE0 CFE0 FFF8 3FFE" - $"0FE6 0FE6 0FEE 0FE6 0FE0 1FF0 3FF8 3EF8" - $"0000 0002" -}; - -data 'CURS' (3029, "hand1") { - $"000C 003C 00F0 01E0 03C0 07E0 0FF0 2FE0" - $"7FF0 5FF0 07E0 07C0 4A00 6200 3400 1800" - $"000C 003C 00F0 01E0 03C0 07E0 0FF0 2FE0" - $"7FF0 7FF0 7FE0 7FC0 7E00 7E00 3C00 1800" - $"0000 000D" -}; - -data 'CURS' (3030, "hand2") { - $"0000 3FC0 4020 3F10 0808 0708 0808 0714" - $"0822 0641 0182 0124 0088 0050 0020 0000" - $"0000 3FC0 7FE0 3FF0 0FF8 07F8 0FF8 07FC" - $"0FFE 07FF 01FE 01FC 00F8 0070 0020 0000" - $"0002 0001" -}; - -data 'CURS' (3031, "heart") { - $"0000 3EF8 638C C106 8002 8002 8002 8002" - $"C006 600C 3018 1830 0C60 06C0 0380 0000" - $"0000 3EF8 7FFC FFFE FFFE FFFE FFFE FFFE" - $"FFFE 7FFC 3FF8 1FF0 0FE0 07C0 0380 0000" - $"0003 0007" -}; - -data 'CURS' (3032, "icon") { - $"FFFF D555 AAAB D555 A00B D005 A00B D005" - $"A00B D005 A00B D005 AAAB D555 AAAB FFFF" - $"FFFF FFFF FFFF FFFF F00F F00F F00F F00F" - $"F00F F00F F00F F00F FFFF FFFF FFFF FFFF" - $"0007 0007" -}; - -data 'CURS' (3033, "iron_cross") { - $"0000 3FFC 1FF8 4FF2 67E6 73CE 799E 7FFE" - $"7FFE 799E 73CE 67E6 4FF2 1FF8 3FFC 0000" - $"7FFE 7FFE FFFF FFFF FFFF FFFF FFFF FFFF" - $"FFFF FFFF FFFF FFFF FFFF FFFF 7FFE 7FFE" - $"0007 0006" -}; - -data 'CURS' (3034, "left_ptr") { - $"0000 0800 0C00 0E00 0F00 0F80 0FC0 0FE0" - $"0FF0 0F80 0D80 08C0 00C0 0060 0060 0000" - $"1800 1C00 1E00 1F00 1F80 1FC0 1FE0 1FF0" - $"1FF8 1FFC 1FC0 1DE0 19E0 10F0 00F0 0070" - $"0001 0004" -}; - -data 'CURS' (3035, "left_side") { - $"0000 6000 6000 6080 6100 6200 6400 6FFC" - $"6400 6200 6100 6080 6000 6000 0000 0000" - $"0000 0000 0000 0080 0100 0200 0400 0FFC" - $"0400 0200 0100 0080 0000 0000 0000 0000" - $"0007 0004" -}; - -data 'CURS' (3036, "left_tee") { - $"0000 0C00 0C00 0C00 0C00 0C00 0C00 0FF8" - $"0FF8 0C00 0C00 0C00 0C00 0C00 0C00 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0007 0004" -}; - -data 'CURS' (3037, "leftbutton") { - $"8002 7FFC 7FFC 4444 4554 4554 4554 4554" - $"4444 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 8002" - $"FFFE FFFE FFFE FFFE FFFE FFFE FFFE FFFE" - $"FFFE FFFE FFFE FFFE FFFE FFFE FFFE FFFE" - $"0004 0003" -}; - -data 'CURS' (3038, "ll_angle") { - $"0000 0000 0000 0C00 0C00 0C00 0C00 0C00" - $"0C00 0C00 0FF8 0FF8 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"000B 0004" -}; - -data 'CURS' (3039, "lr_angle") { - $"0000 0000 0000 0030 0030 0030 0030 0030" - $"0030 0030 1FF0 1FF0 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"000B 000B" -}; - -data 'CURS' (3040, "man") { - $"0380 1EF0 0280 8100 4387 244B 1D70 0540" - $"0440 0280 0440 0920 1290 1450 783C F83F" - $"0380 1FF0 0380 8100 4387 27CB 1FF0 07C0" - $"07C0 0380 07C0 0FE0 1EF0 1C70 783C F83F" - $"0001 0007" -}; - -data 'CURS' (3041, "middlebutton") { - $"8002 7FFC 7FFC 4444 5454 5454 5454 5454" - $"4444 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 8002" - $"FFFE FFFE FFFE FFFE FFFE FFFE FFFE FFFE" - $"FFFE FFFE FFFE FFFE FFFE FFFE FFFE FFFE" - $"0004 0007" -}; - -data 'CURS' (3042, "mouse") { - $"0600 0100 0180 0FF0 1008 17E8 1428 1428" - $"17E8 1008 1008 1008 1008 1008 1008 0FF0" - $"0600 0100 0180 0FF0 1FF8 1FF8 1FF8 1FF8" - $"1FF8 1FF8 1FF8 1FF8 1FF8 1FF8 1FF8 0FF0" - $"0000 0000" -}; - -data 'CURS' (3043, "pencil") { - $"0000 00F0 0088 0108 0190 0270 0220 0440" - $"0440 0880 0880 1100 1E00 1C00 1800 1000" - $"0000 00F0 00F8 01F8 01F0 03F0 03E0 07C0" - $"07C0 0F80 0F80 1F00 1E00 1C00 1800 1000" - $"000F 0003" -}; - -data 'CURS' (3044, "pirate") { - $"03C0 07E0 0FF0 1998 1998 0FF0 07E0 03C0" - $"43C2 43C3 2184 1C38 03C0 0FF1 781F 4002" - $"07E0 0FF0 1FF8 3FFC 3FFC 1FF8 0FF0 47E2" - $"E7E7 E7E7 7FFF 3FFC 1FF9 7FFF FFFF F81F" - $"000A 0007" -}; - -data 'CURS' (3045, "plus") { - $"0000 0000 0000 0180 0180 0180 0180 1FF8" - $"1FF8 0180 0180 0180 0180 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0007 0007" -}; - -data 'CURS' (3046, "question_arrow") { - $"07C0 0FE0 1C70 1830 1C30 0C70 00E0 03C0" - $"0380 0280 0280 0EE0 06C0 0380 0100 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 3FF8 1FF0 0FE0 07C0 0380 0100" - $"000E 0007" -}; - -data 'CURS' (3047, "right_ptr") { - $"0000 0010 0030 0070 00F0 01F0 03F0 07F0" - $"0FF0 01F0 01B0 0310 0300 0600 0600 0000" - $"0018 0038 0078 00F8 01F8 03F8 07F8 0FF8" - $"1FF8 3FF8 03F8 07B8 0798 0F08 0F00 0E00" - $"0001 000B" -}; - -data 'CURS' (3048, "right_side") { - $"0000 0000 0006 0006 0106 0086 0046 0026" - $"3FF6 0026 0046 0086 0106 0006 0006 0000" - $"0000 0000 0000 0000 0100 0080 0040 0020" - $"3FF0 0020 0040 0080 0100 0000 0000 0000" - $"0008 000B" -}; - -data 'CURS' (3049, "right_tee") { - $"0000 0030 0030 0030 0030 0030 0030 1FF0" - $"1FF0 0030 0030 0030 0030 0030 0030 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0007 000A" -}; - -data 'CURS' (3050, "rightbutton") { - $"8002 7FFC 7FFC 4444 5544 5544 5544 5544" - $"4444 7FFC 7FFC 7FFC 7FFC 7FFC 7FFC 8002" - $"FFFE FFFE FFFE FFFE FFFE FFFE FFFE FFFE" - $"FFFE FFFE FFFE FFFE FFFE FFFE FFFE FFFE" - $"0004 0003" -}; - -data 'CURS' (3051, "rtl_logo") { - $"0000 7FFE 4022 4022 4022 7FE2 4422 4422" - $"4422 4422 47FE 4402 4402 4402 7FFE 0000" - $"0000 7FFE 7FFE 6076 7FF6 7FF6 7C36 6C36" - $"6C36 6C3E 6FFE 6FFE 6E06 7FFE 7FFE 0000" - $"0007 0007" -}; - -data 'CURS' (3052, "sailboat") { - $"0000 0040 0040 0160 0160 0360 0370 0770" - $"0770 0F78 0F78 1F78 1F7C 3E38 0000 0000" - $"0040 00E0 01E0 03F0 03F0 07F0 07F8 0FF8" - $"0FF8 1FFC 1FFC 3FFC 3FFE 7F7C 7E38 0000" - $"000C 0008" -}; - -data 'CURS' (3053, "sb_down_arrow") { - $"0280 0280 0280 0280 0280 0280 0280 0280" - $"0280 0280 0280 0FE0 07C0 0380 0100 0000" - $"0380 0380 0380 0380 0380 0380 0380 0380" - $"0380 0380 0380 1FF0 0FE0 07C0 0380 0100" - $"000E 0007" -}; - -data 'CURS' (3054, "sb_h_double_arrow") { - $"0000 0000 0000 0000 0810 1818 3FFC 781E" - $"3FFC 1818 0810 0000 0000 0000 0000 0000" - $"0000 0000 0000 0810 1818 381C 7FFE FFFF" - $"7FFE 381C 1818 0810 0000 0000 0000 0000" - $"0007 0007" -}; - -data 'CURS' (3055, "sb_left_arrow") { - $"0000 0000 0000 0000 0800 1800 3FFF 7800" - $"3FFF 1800 0800 0000 0000 0000 0000 0000" - $"0000 0000 0000 0800 1800 3800 7FFF FFFF" - $"7FFF 3800 1800 0800 0000 0000 0000 0000" - $"0007 0001" -}; - -data 'CURS' (3056, "sb_right_arrow") { - $"0000 0000 0000 0000 0000 0010 0018 FFFC" - $"001E FFFC 0018 0010 0000 0000 0000 0000" - $"0000 0000 0000 0000 0010 0018 001C FFFE" - $"FFFF FFFE 001C 0018 0010 0000 0000 0000" - $"0008 000E" -}; - -data 'CURS' (3057, "sb_up_arrow") { - $"0000 0080 01C0 03E0 07F0 0140 0140 0140" - $"0140 0140 0140 0140 0140 0140 0140 0140" - $"0080 01C0 03E0 07F0 0FF8 01C0 01C0 01C0" - $"01C0 01C0 01C0 01C0 01C0 01C0 01C0 01C0" - $"0001 0008" -}; - -data 'CURS' (3058, "sb_v_double_arrow") { - $"0000 0100 0380 07C0 0FE0 0280 0280 0280" - $"0280 0280 0280 0FE0 07C0 0380 0100 0000" - $"0100 0380 07C0 0FE0 1FF0 0380 0380 0380" - $"0380 0380 0380 1FF0 0FE0 07C0 0380 0100" - $"0007 0007" -}; - -data 'CURS' (3059, "shuttle") { - $"0020 0070 00F8 01DE 05DE 09DE 11DE 11DE" - $"11DE 11DE 31DE 71DE FDDE 1888 0078 0030" - $"0020 0070 00F8 01FE 07FE 0FFE 1FFE 1FFE" - $"1FFE 1FFE 3FFE 7FFE FFFE 18F8 0078 0030" - $"0000 000A" -}; - -data 'CURS' (3060, "sizing") { - $"0000 7F80 4000 4000 4000 47E0 4420 4422" - $"4422 0422 07E2 0012 000A 0006 01FE 0000" - $"FFC0 FFC0 FFC0 E000 EFF0 EFF0 EC37 EC37" - $"EC37 EC37 0FF7 0FFF 001F 03FF 03FF 03FF" - $"000E 000E" -}; - -data 'CURS' (3061, "spider") { - $"2010 1020 1020 0840 0840 8787 6798 1FE0" - $"1FE0 6798 8787 0840 0840 1020 1020 2010" - $"7038 3870 3870 1CE0 9FE7 EFDF FFFF 7FF8" - $"7FF8 FFFF EFDF 9FE7 1CE0 3870 3870 7038" - $"0007 0007" -}; - -data 'CURS' (3062, "spraycan") { - $"0018 0040 0D18 1E40 1A18 3F00 2100 3900" - $"2900 3900 2900 3900 3900 2100 2100 3F00" - $"0000 0000 0C00 1E00 1E00 3F00 3F00 3F00" - $"3F00 3F00 3F00 3F00 3F00 3F00 3F00 3F00" - $"0002 0007" -}; - -data 'CURS' (3063, "star") { - $"0100 0280 0280 0280 0440 0440 0440 3938" - $"C006 3838 0920 1290 2448 2828 3018 2008" - $"0100 0380 0380 0380 07C0 07C0 07C0 3FF8" - $"FFFE 3FF8 0FE0 1EF0 3C78 3838 3018 2008" - $"0007 0007" -}; - -data 'CURS' (3064, "target") { - $"0000 0380 0FE0 1C70 3018 600C C106 C286" - $"C106 600C 3018 1C70 0FE0 0380 0000 0000" - $"0000 0380 0FE0 1FF0 3C78 701C E38E E38E" - $"E38E 701C 3C78 1FF0 0FE0 0380 0000 0000" - $"0007 0007" -}; - -data 'CURS' (3065, "tcross") { - $"0100 0100 0100 0100 0100 0100 0100 FFFE" - $"0100 0100 0100 0100 0100 0100 0100 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0007 0007" -}; - -data 'CURS' (3066, "top_left_arrow") { - $"0000 6000 7800 3E00 3F80 1FE0 1E00 0D00" - $"0C80 0440 0420 0010 0008 0004 0000 0000" - $"E000 F800 FE00 7F80 7FE0 3FF8 3FFE 1F80" - $"1FC0 0EE0 0E70 0638 061C 020E 0204 0000" - $"0001 0001" -}; - -data 'CURS' (3067, "top_left_corner") { - $"FFF0 FFF0 C000 C000 CFC0 CC00 CA00 C900" - $"C880 C840 C020 C000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0FC0 0C00 0A00 0900" - $"0880 0840 0020 0000 0000 0000 0000 0000" - $"0000 0000" -}; - -data 'CURS' (3068, "top_right_corner") { - $"0FFF 0FFF 0003 0003 03F3 0033 0053 0093" - $"0113 0213 0403 0003 0000 0000 0000 0000" - $"0000 0000 0000 0000 03F0 0030 0050 0090" - $"0110 0210 0400 0000 0000 0000 0000 0000" - $"0000 000F" -}; - -data 'CURS' (3069, "top_side") { - $"0000 7FFC 7FFC 0000 0100 0380 0540 0920" - $"1110 0100 0100 0100 0100 0100 0000 0000" - $"0000 0000 0000 0000 0100 0380 0540 0920" - $"1110 0100 0100 0100 0100 0100 0000 0000" - $"0004 0007" -}; - -data 'CURS' (3070, "top_tee") { - $"0000 0000 0000 0000 7FFE 7FFE 0180 0180" - $"0180 0180 0180 0180 0180 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0004 0007" -}; - -data 'CURS' (3071, "trek") { - $"0100 0000 0380 07C0 0FE0 0EE0 0FE0 07C0" - $"0380 0100 0BA0 0D60 0920 0820 0820 0000" - $"0000 0380 07C0 0FE0 1FF0 1FF0 1FF0 0FE0" - $"07C0 0BA0 1FF0 1FF0 1FF0 1D70 1C70 0820" - $"0000 0007" -}; - -data 'CURS' (3072, "ul_angle") { - $"0000 0000 0000 0FF8 0FF8 0C00 0C00 0C00" - $"0C00 0C00 0C00 0C00 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0003 0004" -}; - -data 'CURS' (3073, "umbrella") { - $"0000 0890 0228 49A6 27C8 1930 610C 0100" - $"0100 0100 0100 0100 0140 0140 0080 0000" - $"0000 0FF0 1FF8 7FFE 7FFC FFFE FBBE E38E" - $"0380 0380 0380 03C0 03E0 03E0 01C0 0080" - $"0004 0007" -}; - -data 'CURS' (3074, "ur_angle") { - $"0000 0000 0000 0000 1FF0 1FF0 0030 0030" - $"0030 0030 0030 0030 0030 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0004 000B" -}; - -data 'CURS' (3075, "watch") { - $"07E0 07E0 07E0 07E0 0810 1088 1088 108C" - $"138C 1008 1008 0810 07E0 07E0 07E0 07E0" - $"07E0 07E0 07E0 07E0 0FF0 1FF8 1FF8 1FFC" - $"1FFC 1FF8 1FF8 0FF0 07E0 07E0 07E0 07E0" - $"0008 000D" -}; - -data 'CURS' (3076, "xterm") { - $"0C60 0280 0100 0100 0100 0100 0100 0100" - $"0100 0100 0100 0100 0100 0100 0280 0C60" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"000B 0007" -}; - -/* - * The following are color versions of some of the - * cursors defined above. The color cursors will be - * used if the exist in preference to the black & white - * cursors. - */ - -data 'crsr' (3004, "boat", purgeable) { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0100 03C0" - $"8460 FFFF 0018 0020 0040 FFC0 0000 0000" - $"0000 0000 0000 0000 0000 0000 0100 03C0" - $"87E0 FFFF FFF8 FFE0 FFC0 FFC0 0000 0000" - $"0000 0000 0007 000F 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 000F 0000 0000 0000 00FF FF00" - $"0000 F000 0F32 25F0 0000 6FFF FFFF FFFF" - $"FFFF 2222 2222 221F F000 2222 2222 21F0" - $"0000 3333 3333 4F00 0000 FFFF FFFF FF00" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0007 0000 FFFF FFFF" - $"FFFF 0001 BBBB BBBB BBBB 0002 EEEE EEEE" - $"EEEE 0003 DDDD DDDD DDDD 0004 CCCC CCCC" - $"CCCC 0005 4444 4444 4444 0006 1111 1111" - $"1111 000F 0000 0000 0000" -}; - -data 'crsr' (3013, "clock") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 1FF8 33CC 6466 4992 4F12 4422" - $"63C6 3FFC 2994 2994 2994 2BD4 6996 781E" - $"7FFE 7FFE 1FF8 3FFC 7FFE 7FFE 7FFE 7FFE" - $"7FFE 3FFC 3FFC 3FFC 3FFC 3FFC 7FFE 7FFE" - $"7FFE 7FFE 0004 0008 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 000F FFFF FFFF F000 00F6 05FF FF50" - $"6F00 0F60 5F00 56F5 06F0 0F00 F021 F30F" - $"00F0 0F00 F6F1 000F 00F0 0F00 5F00 00F5" - $"00F0 0F60 05FF FF50 06F0 00FF FFFF FFFF" - $"FF00 00F0 F001 100F 0F00 00F0 F001 100F" - $"0F00 00F0 F021 120F 0F00 00F0 F01F F10F" - $"0F00 0FF0 F021 120F 0FF0 0FF4 F500 005F" - $"4FF0 0FFF FFFF FFFF FFF0 0FFF FFFF FFFF" - $"FFF0 0000 0000 0000 0007 0000 FFFF FFFF" - $"FFFF 0001 4444 4444 4444 0002 AAAA AAAA" - $"AAAA 0003 EEEE EEEE EEEE 0004 5555 5555" - $"5555 0005 DDDD DDDD DDDD 0006 7777 7777" - $"7777 000F 0000 0000 0000" -}; - -data 'crsr' (3014, "coffee_mug") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 03F8 0C06 1001 1C07 33F9 7001" - $"D001 9001 960D DA55 7A55 36ED 10A1 1001" - $"0802 07FC 03F8 0FFE 1FFF 1FFF 3FFF 7FFF" - $"FFFF FFFF FFFF FFFF 7FFF 3FFF 1FFF 1FFF" - $"0FFE 07FC 0004 0003 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 00FF FFFF F000 0000 FF42 2222" - $"4FF0 000F 4221 1111 224F 000F FF11 1111" - $"1FFF 00FF 24FF FFFF F42F 0F5F 2222 2222" - $"222F F52F 2222 2222 222F F40F 2222 2222" - $"222F F40F 4FF2 2224 FF2F F52F F2F2 2F2F" - $"2F2F 0F5F F2F2 535F 2F2F 00FF 4FF2 F3F4" - $"FF2F 000F 2222 F2F2 222F 000F 4222 2222" - $"224F 0000 F422 2222 24F0 0000 0FFF FFFF" - $"FF00 0000 0000 0000 0006 0000 FFFF FFFF" - $"FFFF 0001 CCCC 9999 6666 0002 CCCC CCCC" - $"FFFF 0003 3333 3333 6666 0004 9999 9999" - $"FFFF 0005 6666 6666 CCCC 000F 0000 0000" - $"0000" -}; - -data 'crsr' (3027, "gobbler") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0000 0078 0070 4036 4FB0 7FF0" - $"7E30 7C30 3038 00F0 0FE0 0400 0400 0400" - $"0F00 0000 00FC 00FC E0FF FFFF FFFF FFF8" - $"FFF8 FFF8 FFFC 7FFC 3FF8 1FF0 0E00 1F80" - $"1F80 1F80 0003 000E 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 0000 0000 0000 0000 0000 0222" - $"2000 0000 0000 0111 0000 0300 0000 0011" - $"0220 0100 1616 1011 0000 0361 6111 1111" - $"0000 0111 1114 4415 0000 0311 1144 4451" - $"0000 0011 4444 4415 1000 0004 4444 5151" - $"0000 0000 1515 1510 0000 0000 0200 0000" - $"0000 0000 0300 0000 0000 0000 0200 0000" - $"0000 0000 2323 0000 0000 0000 0000 0000" - $"0000 0000 0000 0000 0006 0000 FFFF FFFF" - $"FFFF 0001 CCCC 9999 6666 0002 DDDD 0000" - $"0000 0003 FFFF 6666 3333 0004 CCCC CCCC" - $"CCCC 0005 8888 8888 8888 0006 FFFF CCCC" - $"9999" -}; - -data 'crsr' (3028, "gumby") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 3F00 10C0 C820 EAA0 C820 CBA0" - $"F838 383E 0826 0826 092E 0926 0920 1110" - $"2108 3EF8 3F00 1FC0 CFE0 EFE0 CFE0 CFE0" - $"FFF8 3FFE 0FE6 0FE6 0FEE 0FE6 0FE0 1FF0" - $"3FF8 3EF8 0000 0002 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 00FF FFFF 0000 0000 000F 1212 FF00" - $"0000 FF00 F131 31F0 0000 FFF0 F3F3 F3F0" - $"0000 FF00 F131 31F0 0000 FF00 F2FF F2F0" - $"0000 4FFF F121 21FF F000 00FF F212 12FF" - $"FF40 0000 F121 21F0 0FF0 0000 F212 12F0" - $"0FF0 0000 F12F 21F0 FFF0 0000 F21F 12F0" - $"0FF0 0000 F12F 21F0 0000 000F 121F 121F" - $"0000 00F1 212F 2121 F000 00FF FFF0 FFFF" - $"F000 0000 0000 0000 0005 0000 FFFF FFFF" - $"FFFF 0001 0000 BBBB 0000 0002 CCCC CCCC" - $"CCCC 0003 AAAA AAAA AAAA 0004 4444 4444" - $"4444 000F 0000 0000 0000" -}; - -data 'crsr' (3031, "heart") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0000 3EF8 638C C106 8002 8002" - $"8002 8002 C006 600C 3018 1830 0C60 06C0" - $"0380 0000 0000 3EF8 7FFC FFFE FFFE FFFE" - $"FFFE FFFE FFFE 7FFC 3FF8 1FF0 0FE0 07C0" - $"0380 0000 0003 0007 0000 0000 0000 0000" - $"0000 0000 8004 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0002 0001 0002 0000 0000 0000 00D2 0000" - $"0000 0000 0000 0FFC FFC0 3AAB AA70 E99B" - $"999C E665 A65C E999 999C E666 665C E999" - $"999C D666 665C 3599 9970 0D66 65C0 0359" - $"9700 00D6 5C00 0035 7000 000F C000 0000" - $"0000 0000 0000 0000 0003 0000 FFFF FFFF" - $"FFFF 0001 DDDD 0000 0000 0002 FFFF 6666" - $"CCCC 0003 0000 0000 0000" -}; - -data 'crsr' (3042, "mouse", purgeable) { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 BE00 0100 0180 0FF0 1008 17E8" - $"1428 1428 17E8 1008 1008 1008 1008 1008" - $"1008 0FF0 FE00 0100 0180 0FF0 1FF8 1FF8" - $"1FF8 1FF8 1FF8 1FF8 1FF8 1FF8 1FF8 1FF8" - $"1FF8 0FF0 0001 0007 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 1379 4AF0 0000 0000 0000 000F 0000" - $"0000 0000 000F F000 0000 0000 FFFF FFFF" - $"0000 000F 2111 1112 F000 000F 3655 5563" - $"F000 000F 3513 1351 F000 000F 3533 3351" - $"F000 000F 3655 5561 F000 000F 3311 1111" - $"F000 000F 3333 3333 F000 000F 3333 3333" - $"F000 000F 2222 2222 F000 000F 8888 8888" - $"F000 000F 7888 8887 F000 0000 FFFF FFFF" - $"0000 0000 0000 0000 000B 0000 FFFF FFFF" - $"FFFF 0001 EEEE EEEE EEEE 0002 CCCC CCCC" - $"CCCC 0003 DDDD DDDD DDDD 0004 4444 4444" - $"4444 0005 2222 2222 2222 0006 5555 5555" - $"5555 0007 AAAA AAAA AAAA 0008 BBBB BBBB" - $"BBBB 0009 7777 7777 7777 000A 1111 1111" - $"1111 000F 0000 0000 0000" -}; - -data 'crsr' (3043, "pencil", purgeable) { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0000 00F0 0088 0108 0190 0270" - $"0220 0440 0440 0880 0880 1100 1E00 1C00" - $"1800 1000 0000 00F0 00F8 01F8 01F0 03F0" - $"03E0 07C0 07C0 0F80 0F80 1F00 1E00 1C00" - $"1800 1000 000F 0003 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 0000 0000 0000 0000 0000 FFFF" - $"0000 0000 0000 F404 F000 0000 000F 4042" - $"F000 0000 000F F42F 0000 0000 00F5 3FFF" - $"0000 0000 00F3 52F0 0000 0000 0F35 1F00" - $"0000 0000 0F53 2F00 0000 0000 F532 F000" - $"0000 0000 F312 F000 0000 000F 352F 0000" - $"0000 000F FFF0 0000 0000 000F FF00 0000" - $"0000 000F F000 0000 0000 000F 0000 0000" - $"0000 0000 0000 0000 0006 0000 FFFF FFFF" - $"FFFF 0001 CCCC CCCC CCCC 0002 8888 8888" - $"8888 0003 FFFF FFFF 0000 0004 DDDD 0000" - $"0000 0005 FFFF 6666 3333 000F 0000 0000" - $"0000" -}; - -data 'crsr' (3059, "shuttle") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0020 0070 00F8 01DE 05DE 09DE" - $"11DE 11DE 11DE 11DE 31DE 71DE FDDE 1888" - $"0078 0030 0020 0070 00F8 01FE 07FE 0FFE" - $"1FFE 1FFE 1FFE 1FFE 3FFE 7FFE FFFE 18F8" - $"0078 0030 0000 000A 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 0000 00F0 0000 0000 0000 0F3F" - $"0000 0000 0000 F343 F000 0000 000F 3404" - $"3FF0 0000 0F4F 3404 3FF0 0000 F55F 3404" - $"3FF0 000F 505F 3404 3FF0 000F 005F 3404" - $"3FF0 000F 005F 3404 3FF0 000F 005F 3404" - $"3FF0 00F3 005F 3404 3FF0 0F33 505F 3404" - $"3FF0 FFF3 3F4F 3404 3FF0 000F F000 1222" - $"1000 0000 0000 0111 1000 0000 0000 0011" - $"0000 0000 0000 0000 0006 0000 FFFF FFFF" - $"FFFF 0001 FFFF 6666 3333 0002 DDDD 0000" - $"0000 0003 4444 4444 4444 0004 8888 8888" - $"8888 0005 DDDD DDDD DDDD 000F 0000 0000" - $"0000" -}; - -data 'crsr' (3062, "spraycan") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0018 0040 0D18 1E40 1A18 3F00" - $"2100 3900 2900 3900 2900 3900 3900 2100" - $"2100 3F00 0000 0000 0C00 1E00 1E00 3F00" - $"3F00 3F00 3F00 3F00 3F00 3F00 3F00 3F00" - $"3F00 3F00 0002 0007 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 0000 0005 2000 0000 0000 0460" - $"0000 0000 FF1F 6005 2000 000F 33F0 0460" - $"0000 000F 10F0 0005 2000 00FF FFFF 0000" - $"0000 00F8 170F 0000 0000 00F5 F70F 0000" - $"0000 00FA F70F 0000 0000 00F9 F70F 0000" - $"0000 00FA F70F 0000 0000 00F9 F70F 0000" - $"0000 00F5 F70F 0000 0000 00F8 170F 0000" - $"0000 00F8 170F 0000 0000 00FF FFFF 0000" - $"0000 0000 0000 0000 000B 0000 FFFF FFFF" - $"FFFF 0001 AAAA AAAA AAAA 0002 7777 7777" - $"7777 0003 5555 5555 5555 0004 2222 2222" - $"2222 0005 4444 4444 4444 0006 BBBB BBBB" - $"BBBB 0007 DDDD DDDD DDDD 0008 EEEE EEEE" - $"EEEE 0009 6666 6666 CCCC 000A CCCC CCCC" - $"FFFF 000F 0000 0000 0000" -}; - -data 'crsr' (3063, "star") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0100 0280 0280 0280 0440 0440" - $"0440 3938 C006 3838 0920 1290 2448 2828" - $"3018 2008 0100 0380 0380 0380 07C0 07C0" - $"07C0 3FF8 FFFE 3FF8 0FE0 1EF0 3C78 3838" - $"3018 2008 0007 0007 0000 0000 0000 0000" - $"0000 0000 8004 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0002 0001 0002 0000 0000 0000 00D2 0000" - $"0000 0003 0000 000D C000 000D C000 000D" - $"C000 0035 7000 0035 7000 0035 7000 0FD7" - $"5FC0 F555 557C 0FD5 5FC0 00D7 5C00 035C" - $"D700 0D70 35C0 0DC0 0DC0 0F00 03C0 0C00" - $"00C0 0000 0000 0000 0002 0000 FFFF FFFF" - $"FFFF 0001 FFFF FFFF 0000 0003 0000 0000" - $"0000" -}; - -data 'crsr' (3071, "trek") { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 0100 0000 0380 07C0 0FE0 0EE0" - $"0FE0 07C0 0380 0100 0BA0 0D60 0920 0820" - $"0820 0000 0000 0380 07C0 0FE0 1FF0 1FF0" - $"1FF0 0FE0 07C0 0BA0 1FF0 1FF0 1FF0 1D70" - $"1C70 0820 0000 0007 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 0005 0000 0000 0000 0005 0000" - $"0000 0000 00FF F000 0000 0000 0F31 3F00" - $"0000 0000 F322 23F0 0000 0000 F110 11F0" - $"0000 0000 F311 13F0 0000 0000 0F31 3F00" - $"0000 0000 00FF F000 0000 0000 000F 0000" - $"0000 0000 F0FF F0F0 0000 0000 FF0F 0FF0" - $"0000 0000 400F 0040 0000 0000 4000 0040" - $"0000 0000 4000 0040 0000 0000 0000 0000" - $"0000 0000 0000 0000 0006 0000 FFFF FFFF" - $"FFFF 0001 EEEE EEEE EEEE 0002 9999 9999" - $"FFFF 0003 DDDD DDDD DDDD 0004 3333 3333" - $"6666 0005 DDDD 0000 0000 000F 0000 0000" - $"0000" -}; - -data 'crsr' (3075, "watch", purgeable) { - $"8001 0000 0060 0000 0092 0000 0000 0000" - $"0000 0000 07E0 07E0 07E0 07E0 0810 1088" - $"1088 108C 138C 1008 1008 0810 07E0 07E0" - $"07E0 07E0 07E0 07E0 07E0 07E0 0FF0 1FF8" - $"1FF8 1FF8 1FF8 1FF8 1FF8 0FF0 07E0 07E0" - $"07E0 07E0 0008 000D 0000 0000 0000 0000" - $"0000 0000 8008 0000 0000 0010 0010 0000" - $"0000 0000 0000 0048 0000 0048 0000 0000" - $"0004 0001 0004 0000 0000 0000 0112 0000" - $"0000 0000 0FFF FFF0 0000 0000 0FFF FFF0" - $"0000 0000 0FFF FFF0 0000 0000 0FFF FFF0" - $"0000 0000 F020 202F 0000 000F 0222 F221" - $"F000 000F 2222 F123 F000 000F 0222 F121" - $"FF00 000F 22FF F123 FF00 000F 0222 2221" - $"F000 000F 2222 2213 F000 0000 F131 313F" - $"0000 0000 0FFF FFF0 0000 0000 0FFF FFF0" - $"0000 0000 0FFF FFF0 0000 0000 0FFF FFF0" - $"0000 0000 0000 0000 0004 0000 FFFF FFFF" - $"FFFF 0001 CCCC CCCC CCCC 0002 EEEE EEEE" - $"EEEE 0003 BBBB BBBB BBBB 000F 0000 0000" - $"0000" -}; - diff --git a/macosx/tkMacOSXXStubs.c b/macosx/tkMacOSXXStubs.c index 4845454..9594cd3 100644 --- a/macosx/tkMacOSXXStubs.c +++ b/macosx/tkMacOSXXStubs.c @@ -1,14 +1,14 @@ /* * tkMacOSXXStubs.c -- * - * This file contains most of the X calls called by Tk. Many of - * these calls are just stubs and either don't make sense on the - * Macintosh or thier implamentation just doesn't do anything. Other - * calls will eventually be moved into other files. + * This file contains most of the X calls called by Tk. Many of these + * calls are just stubs and either don't make sense on the Macintosh or + * their implamentation just doesn't do anything. Other calls will + * eventually be moved into other files. * * Copyright (c) 1995-1997 Sun Microsystems, Inc. - * Copyright 2001, Apple Computer, Inc. - * Copyright (c) 2005-2007 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> * * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. @@ -17,14 +17,13 @@ #include "tkMacOSXPrivate.h" #include "tkMacOSXEvent.h" -#if 0 #include <IOKit/IOKitLib.h> -#endif +#include <IOKit/hidsystem/IOHIDShared.h> /* * Because this file is still under major development Debugger statements are - * used through out this file. The define TCL_DEBUG will decide whether - * the debugger statements actually call the debugger or not. + * used through out this file. The define TCL_DEBUG will decide whether the + * debugger statements actually call the debugger or not. */ #ifndef TCL_DEBUG @@ -33,33 +32,34 @@ #define ROOT_ID 10 +CGFloat tkMacOSXZeroScreenHeight = 0; +CGFloat tkMacOSXZeroScreenTop = 0; + /* * Declarations of static variables used in this file. */ -static TkDisplay *gMacDisplay = NULL; /* Macintosh display. */ -static const char *macScreenName = ":0"; /* Default name of macintosh display. */ +static TkDisplay *gMacDisplay = NULL; + /* Macintosh display. */ +static const char *macScreenName = ":0"; + /* Default name of macintosh display. */ /* * Forward declarations of procedures used in this file. */ -static XID MacXIdAlloc(Display *display); -static int DefaultErrorHandler(Display* display, XErrorEvent* err_evt); +static XID MacXIdAlloc(Display *display); +static int DefaultErrorHandler(Display *display, + XErrorEvent *err_evt); /* * Other declarations */ -static int DestroyImage(XImage *image); -static unsigned long ImageGetPixel(XImage *image, int x, int y); -static int PutPixel(XImage *image, int x, int y, unsigned long pixel); -#if 0 -static XImage *SubImage(XImage *image, int x, int y, - unsigned int width, unsigned int height); -static int AddPixel(XImage *image, long value); -#endif - +static int DestroyImage(XImage *image); +static unsigned long ImageGetPixel(XImage *image, int x, int y); +static int ImagePutPixel(XImage *image, int x, int y, + unsigned long pixel); /* *---------------------------------------------------------------------- @@ -79,40 +79,38 @@ static int AddPixel(XImage *image, long value); */ void -TkMacOSXDisplayChanged(Display *display) +TkMacOSXDisplayChanged( + Display *display) { - GDHandle graphicsDevice; Screen *screen; - Rect bounds = {0, 0, 0, 0}, *maxBounds; + NSArray *nsScreens; + if (display == NULL || display->screens == NULL) { return; } screen = display->screens; - graphicsDevice = GetMainDevice(); - screen->root_depth = (*(*graphicsDevice)->gdPMap)->cmpSize * - (*(*graphicsDevice)->gdPMap)->cmpCount; - screen->height = (*graphicsDevice)->gdRect.bottom - - (*graphicsDevice)->gdRect.top; - screen->width = (*graphicsDevice)->gdRect.right - - (*graphicsDevice)->gdRect.left; - - screen->mwidth = (screen->width * 254 + 360) / 720; - screen->mheight = (screen->height * 254 + 360) / 720; - - maxBounds = (Rect*) screen->ext_data; - *maxBounds = bounds; - graphicsDevice = GetDeviceList(); - while (graphicsDevice) { - OSStatus err; - - err = ChkErr(GetAvailableWindowPositioningBounds, graphicsDevice, - &bounds); - if (err == noErr) { - UnionRect(&bounds, maxBounds, maxBounds); + nsScreens = [NSScreen screens]; + if (nsScreens && [nsScreens count]) { + NSScreen *s = [nsScreens objectAtIndex:0]; + NSRect bounds = [s frame], visible = [s visibleFrame]; + NSRect maxBounds = NSZeroRect; + + tkMacOSXZeroScreenHeight = bounds.size.height; + tkMacOSXZeroScreenTop = tkMacOSXZeroScreenHeight - + (visible.origin.y + visible.size.height); + + screen->root_depth = NSBitsPerPixelFromDepth([s depth]); + screen->width = bounds.size.width; + screen->height = bounds.size.height; + screen->mwidth = (bounds.size.width * 254 + 360) / 720; + screen->mheight = (bounds.size.height * 254 + 360) / 720; + + for (s in nsScreens) { + maxBounds = NSUnionRect(maxBounds, [s visibleFrame]); } - graphicsDevice = GetNextDevice(graphicsDevice); + *((NSRect *)screen->ext_data) = maxBounds; } } @@ -121,8 +119,8 @@ TkMacOSXDisplayChanged(Display *display) * * TkpOpenDisplay -- * - * Create the Display structure and fill it with device - * specific information. + * Create the Display structure and fill it with device specific + * information. * * Results: * Returns a Display structure on success or NULL on failure. @@ -135,12 +133,15 @@ TkMacOSXDisplayChanged(Display *display) TkDisplay * TkpOpenDisplay( - CONST char *display_name) + const char *display_name) { Display *display; Screen *screen; int fd = 0; - static Rect maxBounds = {0, 0, 0, 0}; + static NSRect maxBounds = {{0, 0}, {0, 0}}; + static char vendor[25] = ""; + NSArray *cgVers; + NSAutoreleasePool *pool; if (gMacDisplay != NULL) { if (strcmp(gMacDisplay->display->display_name, display_name) == 0) { @@ -162,13 +163,25 @@ TkpOpenDisplay( display->screens = screen; display->nscreens = 1; display->default_screen = 0; - display->display_name = (char*)macScreenName; - - Gestalt(gestaltQuickdrawVersion, (long*)&display->proto_minor_version); - display->proto_major_version = 10; - display->proto_minor_version -= gestaltMacOSXQD; - display->vendor = "Apple"; - Gestalt(gestaltSystemVersion, (long*)&display->release); + display->display_name = (char *) macScreenName; + + pool = [NSAutoreleasePool new]; + cgVers = [[[NSBundle bundleWithIdentifier:@"com.apple.CoreGraphics"] + objectForInfoDictionaryKey:@"CFBundleShortVersionString"] + componentsSeparatedByString:@"."]; + if ([cgVers count] >= 2) { + display->proto_major_version = [[cgVers objectAtIndex:1] integerValue]; + } + if ([cgVers count] >= 3) { + display->proto_minor_version = [[cgVers objectAtIndex:2] integerValue]; + } + if (!vendor[0]) { + snprintf(vendor, sizeof(vendor), "Apple AppKit %s %g", + ([NSGarbageCollector defaultCollector] ? "GC" : "RR"), + NSAppKitVersionNumber); + } + display->vendor = vendor; + Gestalt(gestaltSystemVersion, (SInt32 *) &display->release); /* * These screen bits never change @@ -177,7 +190,7 @@ TkpOpenDisplay( screen->display = display; screen->black_pixel = 0x00000000 | PIXEL_MAGIC << 24; screen->white_pixel = 0x00FFFFFF | PIXEL_MAGIC << 24; - screen->ext_data = (XExtData*) &maxBounds; + screen->ext_data = (XExtData *) &maxBounds; screen->root_visual = (Visual *) ckalloc(sizeof(Visual)); screen->root_visual->visualid = 0; @@ -191,17 +204,19 @@ TkpOpenDisplay( /* * Initialize screen bits that may change */ + TkMacOSXDisplayChanged(display); gMacDisplay = (TkDisplay *) ckalloc(sizeof(TkDisplay)); /* - * This is the quickest way to make sure that all the *Init - * flags get properly initialized + * This is the quickest way to make sure that all the *Init flags get + * properly initialized */ bzero(gMacDisplay, sizeof(TkDisplay)); gMacDisplay->display = display; + [pool drain]; return gMacDisplay; } @@ -226,13 +241,14 @@ TkpCloseDisplay( TkDisplay *displayPtr) { Display *display = displayPtr->display; + if (gMacDisplay != displayPtr) { Tcl_Panic("TkpCloseDisplay: tried to call TkpCloseDisplay on bad display"); } gMacDisplay = NULL; - if (display->screens != (Screen *) NULL) { - if (display->screens->root_visual != (Visual *) NULL) { + if (display->screens != NULL) { + if (display->screens->root_visual != NULL) { ckfree((char *) display->screens->root_visual); } ckfree((char *) display->screens); @@ -245,11 +261,10 @@ TkpCloseDisplay( * * TkClipCleanup -- * - * This procedure is called to cleanup resources associated with - * claiming clipboard ownership and for receiving selection get - * results. This function is called in tkWindow.c. This has to be - * called by the display cleanup function because we still need the - * access display elements. + * This procedure is called to cleanup resources associated with claiming + * clipboard ownership and for receiving selection get results. This + * function is called in tkWindow.c. This has to be called by the display + * cleanup function because we still need the access display elements. * * Results: * None. @@ -261,15 +276,15 @@ TkpCloseDisplay( */ void -TkClipCleanup(dispPtr) - TkDisplay *dispPtr; /* display associated with clipboard */ +TkClipCleanup( + TkDisplay *dispPtr) /* display associated with clipboard */ { /* - * Make sure that the local scrap is transfered to the global - * scrap if needed. + * Make sure that the local scrap is transfered to the global scrap if + * needed. */ - TkSuspendClipboard(); + [NSApp tkProvidePasteboard:dispPtr]; if (dispPtr->clipWindow != NULL) { Tk_DeleteSelHandler(dispPtr->clipWindow, dispPtr->clipboardAtom, @@ -278,7 +293,7 @@ TkClipCleanup(dispPtr) dispPtr->windowAtom); Tk_DestroyWindow(dispPtr->clipWindow); - Tcl_Release((ClientData) dispPtr->clipWindow); + Tcl_Release(dispPtr->clipWindow); dispPtr->clipWindow = NULL; } } @@ -288,31 +303,31 @@ TkClipCleanup(dispPtr) * * MacXIdAlloc -- * - * This procedure is invoked by Xlib as the resource allocator - * for a display. + * This procedure is invoked by Xlib as the resource allocator for a + * display. * * Results: - * The return value is an X resource identifier that isn't currently - * in use. + * The return value is an X resource identifier that isn't currently in + * use. * * Side effects: - * The identifier is removed from the stack of free identifiers, - * if it was previously on the stack. + * The identifier is removed from the stack of free identifiers, if it + * was previously on the stack. * *---------------------------------------------------------------------- */ static XID MacXIdAlloc( - Display *display) /* Display for which to allocate. */ + Display *display) /* Display for which to allocate. */ { - static long int cur_id = 100; - /* - * Some special XIds are reserved - * - this is why we start at 100 - */ + static long int cur_id = 100; + /* + * Some special XIds are reserved + * - this is why we start at 100 + */ - return ++cur_id; + return ++cur_id; } /* @@ -347,8 +362,8 @@ TkpWindowWasRecentlyDeleted( * * DefaultErrorHandler -- * - * This procedure is the default X error handler. Tk uses it's - * own error handler so this call should never be called. + * This procedure is the default X error handler. Tk uses it's own error + * handler so this call should never be called. * * Results: * None. @@ -365,14 +380,14 @@ DefaultErrorHandler( XErrorEvent* err_evt) { /* - * This call should never be called. Tk replaces - * it with its own error handler. + * This call should never be called. Tk replaces it with its own error + * handler. */ + Tcl_Panic("Warning hit bogus error handler!"); return 0; } - char * XGetAtomName( Display * display, @@ -383,7 +398,8 @@ XGetAtomName( } int -_XInitImageFuncPtrs(XImage *image) +_XInitImageFuncPtrs( + XImage *image) { return 0; } @@ -396,24 +412,25 @@ XSetErrorHandler( } Window -XRootWindow(Display *display, int screen_number) +XRootWindow( + Display *display, + int screen_number) { display->request++; return ROOT_ID; } int -XGetGeometry(display, d, root_return, x_return, y_return, width_return, - height_return, border_width_return, depth_return) - Display* display; - Drawable d; - Window* root_return; - int* x_return; - int* y_return; - unsigned int* width_return; - unsigned int* height_return; - unsigned int* border_width_return; - unsigned int* depth_return; +XGetGeometry( + Display *display, + Drawable d, + Window *root_return, + int *x_return, + int *y_return, + unsigned int *width_return, + unsigned int *height_return, + unsigned int *border_width_return, + unsigned int *depth_return) { TkWindow *winPtr = ((MacDrawable *) d)->winPtr; @@ -427,14 +444,11 @@ XGetGeometry(display, d, root_return, x_return, y_return, width_return, *border_width_return = winPtr->changes.border_width; *depth_return = Tk_Depth(winPtr); } else { - Rect boundsRect; - CGrafPtr destPort = TkMacOSXGetDrawablePort(d); - - GetPortBounds(destPort, &boundsRect); - *x_return = boundsRect.left; - *y_return = boundsRect.top; - *width_return = boundsRect.right - boundsRect.left; - *height_return = boundsRect.bottom - boundsRect.top; + CGSize size = ((MacDrawable *) d)->size; + *x_return = 0; + *y_return = 0; + *width_return = size.width; + *height_return = size.height; *border_width_return = 0; *depth_return = 32; } @@ -469,7 +483,7 @@ XBell( Display* display, int percent) { - SysBeep(percent); + NSBeep(); return Success; } @@ -489,8 +503,8 @@ XSizeHints * XAllocSizeHints(void) { /* - * Always return NULL. Tk code checks to see if NULL - * is returned & does nothing if it is. + * Always return NULL. Tk code checks to see if NULL is returned & does + * nothing if it is. */ return NULL; @@ -648,7 +662,8 @@ XGetWindowProperty( } void -XRefreshKeyboardMapping( XMappingEvent* x) +XRefreshKeyboardMapping( + XMappingEvent *x) { /* used by tkXEvent.c */ Debugger(); @@ -672,10 +687,11 @@ XForceScreenSaver( int mode) { /* - * This function is just a no-op. It is defined to - * reset the screen saver. However, there is no real - * way to do this on a Mac. Let me know if there is! + * This function is just a no-op. It is defined to reset the screen saver. + * However, there is no real way to do this on a Mac. Let me know if there + * is! */ + display->request++; } @@ -712,7 +728,7 @@ XSetClipRectangles( while (n--) { XRectangle rect = *rectangles; - + rect.x += clip_x_origin; rect.y += clip_y_origin; TkUnionRectWithRegion(&rect, clipRgn, clipRgn); @@ -729,9 +745,9 @@ XSetClipRectangles( * * TkGetServerInfo -- * - * Given a window, this procedure returns information about - * the window server for that window. This procedure provides - * the guts of the "winfo server" command. + * Given a window, this procedure returns information about the window + * server for that window. This procedure provides the guts of the "winfo + * server" command. * * Results: * None. @@ -744,22 +760,25 @@ XSetClipRectangles( void TkGetServerInfo( - Tcl_Interp *interp, /* The server information is returned in - * this interpreter's result. */ - Tk_Window tkwin) /* Token for window; this selects a - * particular display and server. */ + Tcl_Interp *interp, /* The server information is returned in this + * interpreter's result. */ + Tk_Window tkwin) /* Token for window; this selects a particular + * display and server. */ { - char buffer[8 + TCL_INTEGER_SPACE * 2]; - char buffer2[TCL_INTEGER_SPACE]; + char buffer[5 + TCL_INTEGER_SPACE * 2]; + char buffer2[11 + TCL_INTEGER_SPACE]; - sprintf(buffer, "QD%dR%x ", ProtocolVersion(Tk_Display(tkwin)), + snprintf(buffer, sizeof(buffer), "CG%d.%d ", + ProtocolVersion(Tk_Display(tkwin)), ProtocolRevision(Tk_Display(tkwin))); - sprintf(buffer2, " %x", VendorRelease(Tk_Display(tkwin))); + snprintf(buffer2, sizeof(buffer2), " Mac OS X %x", + VendorRelease(Tk_Display(tkwin))); Tcl_AppendResult(interp, buffer, ServerVendor(Tk_Display(tkwin)), buffer2, NULL); } #pragma mark XImage handling + /* *---------------------------------------------------------------------- * @@ -835,7 +854,7 @@ XCreateImage( ximage->f.create_image = NULL; ximage->f.destroy_image = DestroyImage; ximage->f.get_pixel = ImageGetPixel; - ximage->f.put_pixel = PutPixel; + ximage->f.put_pixel = ImagePutPixel; ximage->f.sub_image = NULL; ximage->f.add_pixel = NULL; @@ -870,44 +889,60 @@ XGetImage( unsigned long plane_mask, int format) { + MacDrawable *macDraw = (MacDrawable *) d; XImage * imagePtr = NULL; Pixmap pixmap = (Pixmap) NULL; - Tk_Window win = (Tk_Window) ((MacDrawable *) d)->winPtr; + Tk_Window win = (Tk_Window) macDraw->winPtr; GC gc; + char * data = NULL; int depth = 32; int offset = 0; - int bitmap_pad = 32; + int bitmap_pad = 0; int bytes_per_line = 0; - if (TkMacOSXGetDrawablePort(d)) { - if (format == ZPixmap) { - if (width > 0 && height > 0) { - /* Tk_GetPixmap fails for zero width or height */ - pixmap = Tk_GetPixmap(display, d, width, height, depth); - } - if (win) { - XGCValues values; - gc = Tk_GetGC(win, 0, &values); - } else { - gc = XCreateGC(display, pixmap, 0, NULL); - } - if (pixmap) { - XCopyArea(display, d, pixmap, gc, x, y, width, height, 0, 0); + if (format == ZPixmap) { + if (width > 0 && height > 0) { + /* + * Tk_GetPixmap fails for zero width or height. + */ + + pixmap = Tk_GetPixmap(display, d, width, height, depth); + } + if (win) { + XGCValues values; + + gc = Tk_GetGC(win, 0, &values); + } else { + gc = XCreateGC(display, pixmap, 0, NULL); + } + if (pixmap) { + CGContextRef context; + + XCopyArea(display, d, pixmap, gc, x, y, width, height, 0, 0); + context = ((MacDrawable *) pixmap)->context; + if (context) { + data = CGBitmapContextGetData(context); + bytes_per_line = CGBitmapContextGetBytesPerRow(context); } + } + if (data) { imagePtr = XCreateImage(display, NULL, depth, format, offset, - (char*)TkMacOSXGetDrawablePort(pixmap), - width, height, bitmap_pad, bytes_per_line); - /* Track Pixmap underlying the XImage in the unused obdata field * - * so that we can treat XImages coming from XGetImage specially. */ + data, width, height, bitmap_pad, bytes_per_line); + + /* + * Track Pixmap underlying the XImage in the unused obdata field + * so that we can treat XImages coming from XGetImage specially. + */ + imagePtr->obdata = (XPointer) pixmap; - if (!win) { - XFreeGC(display, gc); - } - } else { - TkpDisplayWarning( - "XGetImage: only ZPixmap types are implemented", - "XGetImage Failure"); + } else if (pixmap) { + Tk_FreePixmap(display, pixmap); } + if (!win) { + XFreeGC(display, gc); + } + } else { + TkMacOSXDbgMsg("Invalid image format"); } return imagePtr; } @@ -965,35 +1000,57 @@ ImageGetPixel( int x, int y) { - CGrafPtr destPort, savePort; - Boolean portChanged; - RGBColor cPix; - unsigned long r, g, b, c; - - destPort = (CGrafPtr)image->data; - portChanged = QDSwapPort(destPort, &savePort); - GetCPixel(x, y, &cPix); - if (image->obdata) { - /* Image from XGetImage, 16 bit color values */ - r = (cPix . red) >> 8; - g = (cPix . green) >> 8; - b = (cPix . blue) >> 8; - } else { - r = cPix . red; - g = cPix . green; - b = cPix . blue; - } - c = (r<<16)|(g<<8)|(b); - if (portChanged) { - QDSwapPort(savePort, NULL); + unsigned char r = 0, g = 0, b = 0; + + if (image && image->data) { + unsigned char *srcPtr = ((unsigned char*) image->data) + + (y * image->bytes_per_line) + + (((image->xoffset + x) * image->bits_per_pixel) / NBBY); + + switch (image->bits_per_pixel) { + case 32: { + r = (*((unsigned int*) srcPtr) >> 16) & 0xff; + g = (*((unsigned int*) srcPtr) >> 8) & 0xff; + b = (*((unsigned int*) srcPtr) ) & 0xff; + /*if (image->byte_order == LSBFirst) { + r = srcPtr[2]; g = srcPtr[1]; b = srcPtr[0]; + } else { + r = srcPtr[1]; g = srcPtr[2]; b = srcPtr[3]; + }*/ + break; + } + case 16: + r = (*((unsigned short*) srcPtr) >> 7) & 0xf8; + g = (*((unsigned short*) srcPtr) >> 2) & 0xf8; + b = (*((unsigned short*) srcPtr) << 3) & 0xf8; + break; + case 8: + r = (*srcPtr << 2) & 0xc0; + g = (*srcPtr << 4) & 0xc0; + b = (*srcPtr << 6) & 0xc0; + r |= r >> 2 | r >> 4 | r >> 6; + g |= g >> 2 | g >> 4 | g >> 6; + b |= b >> 2 | b >> 4 | b >> 6; + break; + case 4: { + unsigned char c = (x % 2) ? *srcPtr : (*srcPtr >> 4); + r = (c & 0x04) ? 0xff : 0; + g = (c & 0x02) ? 0xff : 0; + b = (c & 0x01) ? 0xff : 0; + break; + } + case 1: + r = g = b = ((*srcPtr) & (0x80 >> (x % 8))) ? 0xff : 0; + break; + } } - return c; + return (PIXEL_MAGIC << 24) | (r << 16) | (g << 8) | b; } /* *---------------------------------------------------------------------- * - * PutPixel -- + * ImagePutPixel -- * * Set a single pixel in an image. * @@ -1007,61 +1064,53 @@ ImageGetPixel( */ static int -PutPixel( +ImagePutPixel( XImage *image, int x, int y, unsigned long pixel) { - CGrafPtr destPort, savePort; - Boolean portChanged; - RGBColor cPix; - unsigned long r, g, b; - - destPort = (CGrafPtr)image->data; - portChanged = QDSwapPort(destPort, &savePort); - r = (pixel & image->red_mask)>>16; - g = (pixel & image->green_mask)>>8; - b = (pixel & image->blue_mask); - if (image->obdata) { - /* Image from XGetImage, 16 bit color values */ - cPix . red = r << 8; - cPix . green = g << 8; - cPix . blue = b << 8; - } else { - cPix . red = r; - cPix . green = g; - cPix . blue = b; - } - SetCPixel(x, y, &cPix); - if (portChanged) { - QDSwapPort(savePort, NULL); + if (image && image->data) { + unsigned char r = ((pixel & image->red_mask) >> 16) & 0xff; + unsigned char g = ((pixel & image->green_mask) >> 8) & 0xff; + unsigned char b = ((pixel & image->blue_mask) ) & 0xff; + unsigned char *dstPtr = ((unsigned char*) image->data) + + (y * image->bytes_per_line) + + (((image->xoffset + x) * image->bits_per_pixel) / NBBY); + + switch (image->bits_per_pixel) { + case 32: + *((unsigned int*) dstPtr) = (0xff << 24) | (r << 16) | + (g << 8) | b; + /*if (image->byte_order == LSBFirst) { + dstPtr[3] = 0xff; dstPtr[2] = r; dstPtr[1] = g; dstPtr[0] = b; + } else { + dstPtr[0] = 0xff; dstPtr[1] = r; dstPtr[2] = g; dstPtr[3] = b; + }*/ + break; + case 16: + *((unsigned short*) dstPtr) = ((r & 0xf8) << 7) | + ((g & 0xf8) << 2) | ((b & 0xf8) >> 3); + break; + case 8: + *dstPtr = ((r & 0xc0) >> 2) | ((g & 0xc0) >> 4) | + ((b & 0xc0) >> 6); + break; + case 4: { + unsigned char c = ((r & 0x80) >> 5) | ((g & 0x80) >> 6) | + ((b & 0x80) >> 7); + *dstPtr = (x % 2) ? ((*dstPtr & 0xf0) | (c & 0x0f)) : + ((*dstPtr & 0x0f) | ((c << 4) & 0xf0)); + break; + } + case 1: + *dstPtr = ((r|g|b) & 0x80) ? (*dstPtr | (0x80 >> (x % 8))) : + (*dstPtr & ~(0x80 >> (x % 8))); + break; + } } return 0; } - -#if 0 -static XImage * -SubImage( - XImage *image, - int x, - int y, - unsigned int width, - unsigned int height) -{ - Debugger(); - return NULL; -} - -static int -AddPixel( - XImage *image, - long value) -{ - Debugger(); - return 0; -} -#endif /* *---------------------------------------------------------------------- @@ -1070,8 +1119,8 @@ AddPixel( * XSetWindowBackgroundPixmap, XSetWindowBorder, XSetWindowBorderPixmap, * XSetWindowBorderWidth, XSetWindowColormap * - * These functions are all no-ops. They all have equivilent - * Tk calls that should always be used instead. + * These functions are all no-ops. They all have equivalent Tk calls that + * should always be used instead. * * Results: * None. @@ -1084,24 +1133,24 @@ AddPixel( void XChangeWindowAttributes( - Display* display, + Display *display, Window w, unsigned long value_mask, - XSetWindowAttributes* attributes) + XSetWindowAttributes *attributes) { } void XSetWindowBackground( - Display *display, - Window window, - unsigned long value) + Display *display, + Window window, + unsigned long value) { } void XSetWindowBackgroundPixmap( - Display* display, + Display *display, Window w, Pixmap background_pixmap) { @@ -1109,7 +1158,7 @@ XSetWindowBackgroundPixmap( void XSetWindowBorder( - Display* display, + Display *display, Window w, unsigned long border_pixel) { @@ -1117,7 +1166,7 @@ XSetWindowBorder( void XSetWindowBorderPixmap( - Display* display, + Display *display, Window w, Pixmap border_pixmap) { @@ -1125,7 +1174,7 @@ XSetWindowBorderPixmap( void XSetWindowBorderWidth( - Display* display, + Display *display, Window w, unsigned int width) { @@ -1133,7 +1182,7 @@ XSetWindowBorderWidth( void XSetWindowColormap( - Display* display, + Display *display, Window w, Colormap colormap) { @@ -1142,24 +1191,25 @@ XSetWindowColormap( Status XStringListToTextProperty( - char** list, + char **list, int count, - XTextProperty* text_prop_return) + XTextProperty *text_prop_return) { Debugger(); return (Status) 0; } + void XSetWMClientMachine( - Display* display, + Display *display, Window w, - XTextProperty* text_prop) + XTextProperty *text_prop) { Debugger(); } + XIC -XCreateIC( - void) +XCreateIC(void) { Debugger(); return (XIC) 0; @@ -1182,10 +1232,10 @@ XCreateIC( *---------------------------------------------------------------------- */ -CONST char * +const char * TkGetDefaultScreenName( Tcl_Interp *interp, /* Not used. */ - CONST char *screenName) /* If NULL, use default string. */ + const char *screenName) /* If NULL, use default string. */ { #if 0 if ((screenName == NULL) || (screenName[0] == '\0')) { @@ -1195,7 +1245,6 @@ TkGetDefaultScreenName( #endif return macScreenName; } -#if 0 /* *---------------------------------------------------------------------- @@ -1205,8 +1254,8 @@ TkGetDefaultScreenName( * Return the number of milliseconds the user was inactive. * * Results: - * The number of milliseconds the user has been inactive, - * or -1 if querying the inactive time is not supported. + * The number of milliseconds the user has been inactive, or -1 if + * querying the inactive time is not supported. * * Side effects: * None. @@ -1214,13 +1263,15 @@ TkGetDefaultScreenName( */ long -Tk_GetUserInactiveTime(Display *dpy) +Tk_GetUserInactiveTime( + Display *dpy) { io_registry_entry_t regEntry; CFMutableDictionaryRef props = NULL; CFTypeRef timeObj; long ret = -1l; uint64_t time; + IOReturn result; regEntry = IOServiceGetMatchingService(kIOMasterPortDefault, IOServiceMatching("IOHIDSystem")); @@ -1229,7 +1280,7 @@ Tk_GetUserInactiveTime(Display *dpy) return -1l; } - IOReturn result = IORegistryEntryCreateCFProperties(regEntry, &props, + result = IORegistryEntryCreateCFProperties(regEntry, &props, kCFAllocatorDefault, 0); IOObjectRelease(regEntry); @@ -1247,13 +1298,13 @@ Tk_GetUserInactiveTime(Display *dpy) CFRangeMake(0, sizeof(time)), (UInt8 *) &time); /* Convert nanoseconds to milliseconds. */ /* ret /= kMillisecondScale; */ - ret = (long)(time/kMillisecondScale); + ret = (long) (time/kMillisecondScale); } else if (type == CFNumberGetTypeID()) { /* Panther+ */ CFNumberGetValue((CFNumberRef)timeObj, kCFNumberSInt64Type, &time); /* Convert nanoseconds to milliseconds. */ /* ret /= kMillisecondScale; */ - ret = (long)(time/kMillisecondScale); + ret = (long) (time/kMillisecondScale); } else { ret = -1l; } @@ -1275,15 +1326,45 @@ Tk_GetUserInactiveTime(Display *dpy) * none * * Side effects: - * The user inactivity timer of the underlaying windowing system - * is reset to zero. + * The user inactivity timer of the underlaying windowing system is reset + * to zero. * *---------------------------------------------------------------------- */ void -Tk_ResetUserInactiveTime(Display *dpy) +Tk_ResetUserInactiveTime( + Display *dpy) { - UpdateSystemActivity(UsrActivity); + IOGPoint loc; + kern_return_t kr; + NXEvent nullEvent = {NX_NULLEVENT, {0, 0}, 0, -1, 0}; + enum { kNULLEventPostThrottle = 10 }; + static io_connect_t io_connection = MACH_PORT_NULL; + + if (io_connection == MACH_PORT_NULL) { + io_service_t service = IOServiceGetMatchingService( + kIOMasterPortDefault, IOServiceMatching(kIOHIDSystemClass)); + + if (service == MACH_PORT_NULL) { + return; + } + kr = IOServiceOpen(service, mach_task_self(), kIOHIDParamConnectType, + &io_connection); + IOObjectRelease(service); + if (kr != KERN_SUCCESS) { + return; + } + } + kr = IOHIDPostEvent(io_connection, NX_NULLEVENT, loc, &nullEvent.data, + FALSE, 0, FALSE); } -#endif + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ diff --git a/macosx/ttkMacOSXTheme.c b/macosx/ttkMacOSXTheme.c new file mode 100644 index 0000000..5752fb1 --- /dev/null +++ b/macosx/ttkMacOSXTheme.c @@ -0,0 +1,1203 @@ +/* + * ttkMacOSXTheme.c -- + * + * Tk theme engine for Mac OSX, using the Appearance Manager API. + * + * Copyright (c) 2004 Joe English + * Copyright (c) 2005 Neil Madden + * Copyright (c) 2006-2009 Daniel A. Steffen <das@users.sourceforge.net> + * Copyright 2008-2009, Apple Inc. + * Copyright 2009 Kevin Walzer/WordTech Communications LLC. + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * + * See also: + * + * <URL: http://developer.apple.com/documentation/Carbon/Reference/ + * Appearance_Manager/appearance_manager/APIIndex.html > + * + * Notes: + * "Active" means different things in Mac and Tk terminology -- + * On Aqua, widgets are "Active" if they belong to the foreground window, + * "Inactive" if they are in a background window. + * Tk uses the term "active" to mean that the mouse cursor + * is over a widget; aka "hover", "prelight", or "hot-tracked". + * Aqua doesn't use this kind of feedback. + * + * The QuickDraw/Carbon coordinate system is relative to the + * top-level window, not to the Tk_Window. BoxToRect() + * accounts for this. + */ + +#include "tkMacOSXPrivate.h" +#include "ttk/ttkTheme.h" + +/* + * Use this version in the core: + */ +#define BEGIN_DRAWING(d) { \ + TkMacOSXDrawingContext dc; \ + if (!TkMacOSXSetupDrawingContext((d), NULL, 1, &dc)) {return;} +#define END_DRAWING \ + TkMacOSXRestoreDrawingContext(&dc); } + +#define HIOrientation kHIThemeOrientationNormal + +#ifdef __LP64__ +#define RangeToFactor(maximum) (((double) (INT_MAX >> 1)) / (maximum)) +#else +#define RangeToFactor(maximum) (((double) (LONG_MAX >> 1)) / (maximum)) +#endif /* __LP64__ */ + +/*---------------------------------------------------------------------- + * +++ Utilities. + */ + +/* + * BoxToRect -- + * Convert a Ttk_Box in Tk coordinates relative to the given Drawable + * to a native Rect relative to the containing port. + */ +static inline CGRect BoxToRect(Drawable d, Ttk_Box b) +{ + MacDrawable *md = (MacDrawable*)d; + CGRect rect; + + rect.origin.y = b.y + md->yOff; + rect.origin.x = b.x + md->xOff; + rect.size.height = b.height; + rect.size.width = b.width; + + return rect; +} + +/* + * Table mapping Tk states to Appearance manager ThemeStates + */ + +static Ttk_StateTable ThemeStateTable[] = { + {kThemeStateUnavailable, TTK_STATE_DISABLED, 0}, + {kThemeStatePressed, TTK_STATE_PRESSED, 0}, + {kThemeStateInactive, TTK_STATE_BACKGROUND, 0}, + {kThemeStateActive, 0, 0} +/* Others: Not sure what these are supposed to mean. + Up/Down have something to do with "little arrow" increment controls... + Dunno what a "Rollover" is. + NEM: Rollover is TTK_STATE_ACTIVE... but we don't handle that yet, by the + looks of things + {kThemeStateRollover, 0, 0}, + {kThemeStateUnavailableInactive, 0, 0} + {kThemeStatePressedUp, 0, 0}, + {kThemeStatePressedDown, 0, 0} +*/ +}; + +/*---------------------------------------------------------------------- + * +++ Button element: Used for elements drawn with DrawThemeButton. + */ + +/* + * Extra margins to account for drop shadow. + */ +static Ttk_Padding ButtonMargins = {2,2,2,2}; + +#define NoThemeMetric 0xFFFFFFFF + +typedef struct { + ThemeButtonKind kind; + ThemeMetric heightMetric; +} ThemeButtonParams; + +static ThemeButtonParams + PushButtonParams = { kThemePushButton, kThemeMetricPushButtonHeight }, + CheckBoxParams = { kThemeCheckBox, kThemeMetricCheckBoxHeight }, + RadioButtonParams = { kThemeRadioButton, kThemeMetricRadioButtonHeight }, + BevelButtonParams = { kThemeBevelButton, NoThemeMetric }, + PopupButtonParams = { kThemePopupButton, kThemeMetricPopupButtonHeight }, + DisclosureParams = { kThemeDisclosureButton, kThemeMetricDisclosureTriangleHeight }, + ListHeaderParams = { kThemeListHeaderButton, kThemeMetricListHeaderHeight }; + +static Ttk_StateTable ButtonValueTable[] = { + { kThemeButtonMixed, TTK_STATE_ALTERNATE, 0 }, + { kThemeButtonOn, TTK_STATE_SELECTED, 0 }, + { kThemeButtonOff, 0, 0 } +/* Others: kThemeDisclosureRight, kThemeDisclosureDown, kThemeDisclosureLeft */ +}; + +static Ttk_StateTable ButtonAdornmentTable[] = { + { kThemeAdornmentDefault| kThemeAdornmentFocus, + TTK_STATE_ALTERNATE| TTK_STATE_FOCUS, 0 }, + { kThemeAdornmentDefault, TTK_STATE_ALTERNATE, 0 }, + { kThemeAdornmentFocus, TTK_STATE_FOCUS, 0 }, + { kThemeAdornmentNone, 0, 0 } +}; + +/* + * computeButtonDrawInfo -- + * Fill in an appearance manager HIThemeButtonDrawInfo record. + */ +static inline HIThemeButtonDrawInfo computeButtonDrawInfo( + ThemeButtonParams *params, Ttk_State state) +{ + const HIThemeButtonDrawInfo info = { + .version = 0, + .state = Ttk_StateTableLookup(ThemeStateTable, state), + .kind = params ? params->kind : 0, + .value = Ttk_StateTableLookup(ButtonValueTable, state), + .adornment = Ttk_StateTableLookup(ButtonAdornmentTable, state), + }; + return info; +} + +static void ButtonElementSizeNoPadding( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + ThemeButtonParams *params = clientData; + + if (params->heightMetric != NoThemeMetric) { + SInt32 height; + + ChkErr(GetThemeMetric, params->heightMetric, &height); + *heightPtr = height; + } +} + +static void ButtonElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + ThemeButtonParams *params = clientData; + const HIThemeButtonDrawInfo info = computeButtonDrawInfo(params, 0); + static const CGRect scratchBounds = {{0, 0}, {100, 100}}; + CGRect contentBounds; + + ButtonElementSizeNoPadding( + clientData, elementRecord, tkwin, + widthPtr, heightPtr, paddingPtr); + + /* + * To compute internal padding, query the appearance manager + * for the content bounds of a dummy rectangle, then use + * the difference as the padding. + */ + ChkErr(HIThemeGetButtonContentBounds, + &scratchBounds, &info, &contentBounds); + + paddingPtr->left = CGRectGetMinX(contentBounds); + paddingPtr->top = CGRectGetMinY(contentBounds); + paddingPtr->right = CGRectGetMaxX(scratchBounds) - CGRectGetMaxX(contentBounds) + 1; + paddingPtr->bottom = CGRectGetMaxY(scratchBounds) - CGRectGetMaxY(contentBounds); + + /* + * Now add a little extra padding to account for drop shadows. + * @@@ SHOULD: call GetThemeButtonBackgroundBounds() instead. + */ + + *paddingPtr = Ttk_AddPadding(*paddingPtr, ButtonMargins); + *widthPtr += Ttk_PaddingWidth(ButtonMargins); + *heightPtr += Ttk_PaddingHeight(ButtonMargins); +} + +static void ButtonElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + ThemeButtonParams *params = clientData; + CGRect bounds = BoxToRect(d, Ttk_PadBox(b, ButtonMargins)); + const HIThemeButtonDrawInfo info = computeButtonDrawInfo(params, state); + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL); + END_DRAWING +} + +static Ttk_ElementSpec ButtonElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + ButtonElementSize, + ButtonElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Notebook elements. + */ + + +/* Tab position logic, c.f. ttkNotebook.c TabState() */ + +#define TTK_STATE_NOTEBOOK_FIRST TTK_STATE_USER1 +#define TTK_STATE_NOTEBOOK_LAST TTK_STATE_USER2 +static Ttk_StateTable TabStyleTable[] = { + { kThemeTabFrontInactive, TTK_STATE_SELECTED|TTK_STATE_BACKGROUND}, + { kThemeTabNonFrontInactive, TTK_STATE_BACKGROUND}, + { kThemeTabFrontUnavailable, TTK_STATE_DISABLED|TTK_STATE_SELECTED}, + { kThemeTabNonFrontUnavailable, TTK_STATE_DISABLED}, + { kThemeTabFront, TTK_STATE_SELECTED}, + { kThemeTabNonFrontPressed, TTK_STATE_PRESSED}, + { kThemeTabNonFront, 0} +}; + +static Ttk_StateTable TabAdornmentTable[] = { + { kHIThemeTabAdornmentNone, + TTK_STATE_NOTEBOOK_FIRST|TTK_STATE_NOTEBOOK_LAST}, + {kHIThemeTabAdornmentTrailingSeparator, TTK_STATE_NOTEBOOK_FIRST}, + {kHIThemeTabAdornmentNone, TTK_STATE_NOTEBOOK_LAST}, + {kHIThemeTabAdornmentTrailingSeparator, 0 }, +}; + +static Ttk_StateTable TabPositionTable[] = { + { kHIThemeTabPositionOnly, + TTK_STATE_NOTEBOOK_FIRST|TTK_STATE_NOTEBOOK_LAST}, + { kHIThemeTabPositionFirst, TTK_STATE_NOTEBOOK_FIRST}, + { kHIThemeTabPositionLast, TTK_STATE_NOTEBOOK_LAST}, + { kHIThemeTabPositionMiddle, 0 }, +}; + +/* + * Apple XHIG Tab View Specifications: + * + * Control sizes: Tab views are available in regular, small, and mini sizes. + * The tab height is fixed for each size, but you control the size of the pane + * area. The tab heights for each size are listed below: + * - Regular size: 20 pixels. + * - Small: 17 pixels. + * - Mini: 15 pixels. + * + * Label spacing and fonts: The tab labels should be in a font that’s + * proportional to the size of the tab view control. In addition, the label + * should be placed so that there are equal margins of space before and after + * it. The guidelines below provide the specifications you should use for tab + * labels: + * - Regular size: System font. Center in tab, leaving 12 pixels on each side. + * - Small: Small system font. Center in tab, leaving 10 pixels on each side. + * - Mini: Mini system font. Center in tab, leaving 8 pixels on each side. + * + * Control spacing: Whether you decide to inset a tab view in a window or + * extend its edges to the window sides and bottom, you should place the top + * edge of the tab view 12 or 14 pixels below the bottom edge of the title bar + * (or toolbar, if there is one). If you choose to inset a tab view in a + * window, you should leave a margin of 20 pixels between the sides and bottom + * of the tab view and the sides and bottom of the window (although 16 pixels + * is also an acceptable margin-width). If you need to provide controls below + * the tab view, leave enough space below the tab view so the controls are 20 + * pixels above the bottom edge of the window and 12 pixels between the tab + * view and the controls. + * If you choose to extend the tab view sides and bottom so that they meet the + * window sides and bottom, you should leave a margin of at least 20 pixels + * between the content in the tab view and the tab-view edges. + * + * <URL: http://developer.apple.com/documentation/userexperience/Conceptual/ + * AppleHIGuidelines/XHIGControls/XHIGControls.html#//apple_ref/doc/uid/ + * TP30000359-TPXREF116> + */ + +static const int TAB_HEIGHT = 10; +static const int TAB_OVERLAP = 10; + +static void TabElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + *heightPtr = TAB_HEIGHT + TAB_OVERLAP - 1; +} + +static void TabElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + CGRect bounds = BoxToRect(d, b); + HIThemeTabDrawInfo info = { + .version = 1, + .style = Ttk_StateTableLookup(TabStyleTable, state), + .direction = kThemeTabNorth, + .size = kHIThemeTabSizeNormal, + .adornment = Ttk_StateTableLookup(TabAdornmentTable, state), + .kind = kHIThemeTabKindNormal, + .position = Ttk_StateTableLookup(TabPositionTable, state), + }; + + bounds.size.height += TAB_OVERLAP; + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawTab, &bounds, &info, dc.context, HIOrientation, NULL); + END_DRAWING +} + +static Ttk_ElementSpec TabElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + TabElementSize, + TabElementDraw +}; + +/* + * Notebook panes: + */ +static void PaneElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + *paddingPtr = Ttk_MakePadding(9, 5, 9, 9); +} + +static void PaneElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + CGRect bounds = BoxToRect(d, b); + HIThemeTabPaneDrawInfo info = { + .version = 1, + .state = Ttk_StateTableLookup(ThemeStateTable, state), + .direction = kThemeTabNorth, + .size = kHIThemeTabSizeNormal, + .kind = kHIThemeTabKindNormal, + .adornment = kHIThemeTabPaneAdornmentNormal, + }; + + bounds.origin.y -= TAB_OVERLAP; + bounds.size.height += TAB_OVERLAP; + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawTabPane, &bounds, &info, dc.context, HIOrientation); + END_DRAWING +} + +static Ttk_ElementSpec PaneElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + PaneElementSize, + PaneElementDraw +}; + +/* + * Labelframe borders: + * Use "primary group box ..." + * Quoth DrawThemePrimaryGroup reference: + * "The primary group box frame is drawn inside the specified + * rectangle and is a maximum of 2 pixels thick." + * + * "Maximum of 2 pixels thick" is apparently a lie; + * looks more like 4 to me with shading. + */ +static void GroupElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + *paddingPtr = Ttk_UniformPadding(4); +} + +static void GroupElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + CGRect bounds = BoxToRect(d, b); + const HIThemeGroupBoxDrawInfo info = { + .version = 0, + .state = Ttk_StateTableLookup(ThemeStateTable, state), + .kind = kHIThemeGroupBoxKindPrimaryOpaque, + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawGroupBox, &bounds, &info, dc.context, HIOrientation); + END_DRAWING +} + +static Ttk_ElementSpec GroupElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + GroupElementSize, + GroupElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Entry element -- + * 3 pixels padding for focus rectangle + * 2 pixels padding for EditTextFrame + */ + +typedef struct { + Tcl_Obj *backgroundObj; +} EntryElement; + +static Ttk_ElementOptionSpec EntryElementOptions[] = { + { "-background", TK_OPTION_BORDER, + Tk_Offset(EntryElement,backgroundObj), "white" }, + {0} +}; + +static void EntryElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + *paddingPtr = Ttk_UniformPadding(5); +} + +static void EntryElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + EntryElement *e = elementRecord; + Tk_3DBorder backgroundPtr = Tk_Get3DBorderFromObj(tkwin,e->backgroundObj); + Ttk_Box inner = Ttk_PadBox(b, Ttk_UniformPadding(3)); + CGRect bounds = BoxToRect(d, inner); + const HIThemeFrameDrawInfo info = { + .version = 0, + .kind = kHIThemeFrameTextFieldSquare, + .state = Ttk_StateTableLookup(ThemeStateTable, state), + .isFocused = state & TTK_STATE_FOCUS, + }; + + /* + * Erase w/background color: + */ + XFillRectangle(Tk_Display(tkwin), d, + Tk_3DBorderGC(tkwin, backgroundPtr, TK_3D_FLAT_GC), + inner.x,inner.y, inner.width, inner.height); + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawFrame, &bounds, &info, dc.context, HIOrientation); + /*if (state & TTK_STATE_FOCUS) { + ChkErr(DrawThemeFocusRect, &bounds, 1); + }*/ + END_DRAWING +} + +static Ttk_ElementSpec EntryElementSpec = { + TK_STYLE_VERSION_2, + sizeof(EntryElement), + EntryElementOptions, + EntryElementSize, + EntryElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Combobox: + * + * NOTES: + * kThemeMetricComboBoxLargeDisclosureWidth -> 17 + * Padding and margins guesstimated by trial-and-error. + */ + +static Ttk_Padding ComboboxPadding = { 2, 3, 17, 1 }; +static Ttk_Padding ComboboxMargins = { 3, 3, 4, 4 }; + +static void ComboboxElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + *widthPtr = 0; + *heightPtr = 0; + *paddingPtr = Ttk_AddPadding(ComboboxMargins, ComboboxPadding); +} + +static void ComboboxElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + CGRect bounds = BoxToRect(d, Ttk_PadBox(b, ComboboxMargins)); + const HIThemeButtonDrawInfo info = { + .version = 0, + .state = Ttk_StateTableLookup(ThemeStateTable, state), + .kind = kThemeComboBox, + .value = Ttk_StateTableLookup(ButtonValueTable, state), + .adornment = Ttk_StateTableLookup(ButtonAdornmentTable, state), + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL); + END_DRAWING +} + +static Ttk_ElementSpec ComboboxElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + ComboboxElementSize, + ComboboxElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Spinbuttons. + * + * From Apple HIG, part III, section "Controls", "The Stepper Control": + * there should be 2 pixels of space between the stepper control + * (AKA IncDecButton, AKA "little arrows") and the text field it modifies. + */ + +static Ttk_Padding SpinbuttonMargins = {2,0,2,0}; +static void SpinButtonElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + SInt32 s; + + ChkErr(GetThemeMetric, kThemeMetricLittleArrowsWidth, &s); + *widthPtr = s + Ttk_PaddingWidth(SpinbuttonMargins); + ChkErr(GetThemeMetric, kThemeMetricLittleArrowsHeight, &s); + *heightPtr = s + Ttk_PaddingHeight(SpinbuttonMargins); +} + +static void SpinButtonElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + CGRect bounds = BoxToRect(d, Ttk_PadBox(b, SpinbuttonMargins)); + /* @@@ can't currently distinguish PressedUp (== Pressed) from PressedDown; + * ignore this bit for now [see #2219588] + */ + const HIThemeButtonDrawInfo info = { + .version = 0, + .state = Ttk_StateTableLookup(ThemeStateTable, state & ~TTK_STATE_PRESSED), + .kind = kThemeIncDecButton, + .value = Ttk_StateTableLookup(ButtonValueTable, state), + .adornment = kThemeAdornmentNone, + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL); + END_DRAWING +} + +static Ttk_ElementSpec SpinButtonElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + SpinButtonElementSize, + SpinButtonElementDraw +}; + + +/*---------------------------------------------------------------------- + * +++ DrawThemeTrack-based elements -- + * Progress bars and scales. (See also: <<NOTE-TRACKS>>) + */ + +static Ttk_StateTable ThemeTrackEnableTable[] = { + { kThemeTrackDisabled, TTK_STATE_DISABLED, 0 }, + { kThemeTrackInactive, TTK_STATE_BACKGROUND, 0 }, + { kThemeTrackActive, 0, 0 } + /* { kThemeTrackNothingToScroll, ?, ? }, */ +}; + +typedef struct { /* TrackElement client data */ + ThemeTrackKind kind; + SInt32 thicknessMetric; +} TrackElementData; + +static TrackElementData ScaleData = { + kThemeSlider, kThemeMetricHSliderHeight +}; + +typedef struct { + Tcl_Obj *fromObj; /* minimum value */ + Tcl_Obj *toObj; /* maximum value */ + Tcl_Obj *valueObj; /* current value */ + Tcl_Obj *orientObj; /* horizontal / vertical */ +} TrackElement; + +static Ttk_ElementOptionSpec TrackElementOptions[] = { + { "-from", TK_OPTION_DOUBLE, Tk_Offset(TrackElement,fromObj) }, + { "-to", TK_OPTION_DOUBLE, Tk_Offset(TrackElement,toObj) }, + { "-value", TK_OPTION_DOUBLE, Tk_Offset(TrackElement,valueObj) }, + { "-orient", TK_OPTION_STRING, Tk_Offset(TrackElement,orientObj) }, + {0,0,0} +}; + +static void TrackElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + TrackElementData *data = clientData; + SInt32 size = 24; /* reasonable default ... */ + + ChkErr(GetThemeMetric, data->thicknessMetric, &size); + *widthPtr = *heightPtr = size; +} + +static void TrackElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + TrackElementData *data = clientData; + TrackElement *elem = elementRecord; + int orientation = TTK_ORIENT_HORIZONTAL; + double from = 0, to = 100, value = 0, factor; + + Ttk_GetOrientFromObj(NULL, elem->orientObj, &orientation); + Tcl_GetDoubleFromObj(NULL, elem->fromObj, &from); + Tcl_GetDoubleFromObj(NULL, elem->toObj, &to); + Tcl_GetDoubleFromObj(NULL, elem->valueObj, &value); + factor = RangeToFactor(to - from); + + HIThemeTrackDrawInfo info = { + .version = 0, + .kind = data->kind, + .bounds = BoxToRect(d, b), + .min = from * factor, + .max = to * factor, + .value = value * factor, + .attributes = kThemeTrackShowThumb | + (orientation == TTK_ORIENT_HORIZONTAL ? + kThemeTrackHorizontal : 0), + .enableState = Ttk_StateTableLookup(ThemeTrackEnableTable, state), + .trackInfo.progress.phase = 0, + }; + + if (info.kind == kThemeSlider) { + info.trackInfo.slider.pressState = state & TTK_STATE_PRESSED ? + kThemeThumbPressed : 0; + info.trackInfo.slider.thumbDir = kThemeThumbPlain; + } + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawTrack, &info, NULL, dc.context, HIOrientation); + END_DRAWING +} + +static Ttk_ElementSpec TrackElementSpec = { + TK_STYLE_VERSION_2, + sizeof(TrackElement), + TrackElementOptions, + TrackElementSize, + TrackElementDraw +}; + +/* + * Slider element -- <<NOTE-TRACKS>> + * Has geometry only. The Scale widget adjusts the position of this element, + * and uses it for hit detection. In the Aqua theme, the slider is actually + * drawn as part of the trough element. + * + * Also buggy: The geometry here is a Wild-Assed-Guess; I can't + * figure out how to get the Appearance Manager to tell me the + * slider size. + */ +static void SliderElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + *widthPtr = *heightPtr = 24; +} + +static Ttk_ElementSpec SliderElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + SliderElementSize, + TtkNullElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Progress bar element (new): + * + * @@@ NOTE: According to an older revision of the Aqua reference docs, + * @@@ the 'phase' field is between 0 and 4. Newer revisions say + * @@@ that it can be any UInt8 value. + */ + +typedef struct { + Tcl_Obj *orientObj; /* horizontal / vertical */ + Tcl_Obj *valueObj; /* current value */ + Tcl_Obj *maximumObj; /* maximum value */ + Tcl_Obj *phaseObj; /* animation phase */ + Tcl_Obj *modeObj; /* progress bar mode */ +} PbarElement; + +static Ttk_ElementOptionSpec PbarElementOptions[] = { + { "-orient", TK_OPTION_STRING, + Tk_Offset(PbarElement,orientObj), "horizontal" }, + { "-value", TK_OPTION_DOUBLE, + Tk_Offset(PbarElement,valueObj), "0" }, + { "-maximum", TK_OPTION_DOUBLE, + Tk_Offset(PbarElement,maximumObj), "100" }, + { "-phase", TK_OPTION_INT, + Tk_Offset(PbarElement,phaseObj), "0" }, + { "-mode", TK_OPTION_STRING, + Tk_Offset(PbarElement,modeObj), "determinate" }, + {0,0,0,0} +}; + +static void PbarElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + SInt32 size = 24; /* @@@ Check HIG for correct default */ + + ChkErr(GetThemeMetric, kThemeMetricLargeProgressBarThickness, &size); + *widthPtr = *heightPtr = size; +} + +static void PbarElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + PbarElement *pbar = elementRecord; + int orientation = TTK_ORIENT_HORIZONTAL, phase = 0; + double value = 0, maximum = 100, factor; + + Ttk_GetOrientFromObj(NULL, pbar->orientObj, &orientation); + Tcl_GetDoubleFromObj(NULL, pbar->valueObj, &value); + Tcl_GetDoubleFromObj(NULL, pbar->maximumObj, &maximum); + Tcl_GetIntFromObj(NULL, pbar->phaseObj, &phase); + factor = RangeToFactor(maximum); + + HIThemeTrackDrawInfo info = { + .version = 0, + .kind = (!strcmp("indeterminate", Tcl_GetString(pbar->modeObj)) && value) ? + kThemeIndeterminateBar : kThemeProgressBar, + .bounds = BoxToRect(d, b), + .min = 0, + .max = maximum * factor, + .value = value * factor, + .attributes = kThemeTrackShowThumb | + (orientation == TTK_ORIENT_HORIZONTAL ? + kThemeTrackHorizontal : 0), + .enableState = Ttk_StateTableLookup(ThemeTrackEnableTable, state), + .trackInfo.progress.phase = phase, + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawTrack, &info, NULL, dc.context, HIOrientation); + END_DRAWING +} + +static Ttk_ElementSpec PbarElementSpec = { + TK_STYLE_VERSION_2, + sizeof(PbarElement), + PbarElementOptions, + PbarElementSize, + PbarElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Separator element. + * + * DrawThemeSeparator() guesses the orientation of the line from + * the width and height of the rectangle, so the same element can + * can be used for horizontal, vertical, and general separators. + */ + +static void SeparatorElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + *widthPtr = *heightPtr = 1; +} + +static void SeparatorElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, unsigned int state) +{ + CGRect bounds = BoxToRect(d, b); + const HIThemeSeparatorDrawInfo info = { + .version = 0, + /* Separator only supports kThemeStateActive, kThemeStateInactive */ + .state = Ttk_StateTableLookup(ThemeStateTable, state & TTK_STATE_BACKGROUND), + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawSeparator, &bounds, &info, dc.context, HIOrientation); + END_DRAWING +} + +static Ttk_ElementSpec SeparatorElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + SeparatorElementSize, + SeparatorElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Size grip element. + */ +static const ThemeGrowDirection sizegripGrowDirection + = kThemeGrowRight|kThemeGrowDown; + +static void SizegripElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + HIThemeGrowBoxDrawInfo info = { + .version = 0, + .state = kThemeStateActive, + .kind = kHIThemeGrowBoxKindNormal, + .direction = sizegripGrowDirection, + .size = kHIThemeGrowBoxSizeNormal, + }; + CGRect bounds = CGRectZero; + + ChkErr(HIThemeGetGrowBoxBounds, &bounds.origin, &info, &bounds); + *widthPtr = bounds.size.width; + *heightPtr = bounds.size.height; +} + +static void SizegripElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, unsigned int state) +{ + CGRect bounds = BoxToRect(d, b); + HIThemeGrowBoxDrawInfo info = { + .version = 0, + /* Grow box only supports kThemeStateActive, kThemeStateInactive */ + .state = Ttk_StateTableLookup(ThemeStateTable, state & TTK_STATE_BACKGROUND), + .kind = kHIThemeGrowBoxKindNormal, + .direction = sizegripGrowDirection, + .size = kHIThemeGrowBoxSizeNormal, + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawGrowBox, &bounds.origin, &info, dc.context, HIOrientation); + END_DRAWING +} + +static Ttk_ElementSpec SizegripElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + SizegripElementSize, + SizegripElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Background and fill elements. + * + * This isn't quite right: In Aqua, the correct background for + * a control depends on what kind of container it belongs to, + * and the type of the top-level window. + * + * Also: patterned backgrounds should be aligned with the coordinate + * system of the top-level window. If we're drawing into an + * off-screen graphics port this leads to alignment glitches. + */ + +static void FillElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + CGRect bounds = BoxToRect(d, b); + ThemeBrush brush = (state & TTK_STATE_BACKGROUND) + ? kThemeBrushModelessDialogBackgroundInactive + : kThemeBrushModelessDialogBackgroundActive; + + BEGIN_DRAWING(d) + ChkErr(HIThemeSetFill, brush, NULL, dc.context, HIOrientation); + //QDSetPatternOrigin(PatternOrigin(tkwin, d)); + CGContextFillRect(dc.context, bounds); + END_DRAWING +} + +static void BackgroundElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, unsigned int state) +{ + FillElementDraw( + clientData, elementRecord, tkwin, + d, Ttk_WinBox(tkwin), state); +} + +static Ttk_ElementSpec FillElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + TtkNullElementSize, + FillElementDraw +}; + +static Ttk_ElementSpec BackgroundElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + TtkNullElementSize, + BackgroundElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ ToolbarBackground element -- toolbar style for frames. + * + * This is very similar to the normal background element, but uses a + * different ThemeBrush in order to get the lighter pinstripe effect + * used in toolbars. We use SetThemeBackground() rather than + * ApplyThemeBackground() in order to get the right style. + * + * <URL: http://developer.apple.com/documentation/Carbon/Reference/ + * Appearance_Manager/appearance_manager/constant_7.html#/ + * /apple_ref/doc/uid/TP30000243/C005321> + * + */ +static void ToolbarBackgroundElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + ThemeBrush brush = kThemeBrushToolbarBackground; + CGRect bounds = BoxToRect(d, Ttk_WinBox(tkwin)); + + BEGIN_DRAWING(d) + ChkErr(HIThemeSetFill, brush, NULL, dc.context, HIOrientation); + //QDSetPatternOrigin(PatternOrigin(tkwin, d)); + CGContextFillRect(dc.context, bounds); + END_DRAWING +} + +static Ttk_ElementSpec ToolbarBackgroundElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + TtkNullElementSize, + ToolbarBackgroundElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Treeview header + * Redefine the header to use a kThemeListHeaderButton. + */ + +#define TTK_TREEVIEW_STATE_SORTARROW TTK_STATE_USER1 +static Ttk_StateTable TreeHeaderValueTable[] = { + { kThemeButtonOn, TTK_STATE_ALTERNATE}, + { kThemeButtonOn, TTK_STATE_SELECTED}, + { kThemeButtonOff, 0} +}; +static Ttk_StateTable TreeHeaderAdornmentTable[] = { + { kThemeAdornmentHeaderButtonSortUp, + TTK_STATE_ALTERNATE|TTK_TREEVIEW_STATE_SORTARROW}, + { kThemeAdornmentDefault, + TTK_STATE_SELECTED|TTK_TREEVIEW_STATE_SORTARROW}, + { kThemeAdornmentHeaderButtonNoSortArrow, TTK_STATE_ALTERNATE}, + { kThemeAdornmentHeaderButtonNoSortArrow, TTK_STATE_SELECTED}, + { kThemeAdornmentFocus, TTK_STATE_FOCUS}, + { kThemeAdornmentNone, 0} +}; + +static void TreeHeaderElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + ThemeButtonParams *params = clientData; + CGRect bounds = BoxToRect(d, b); + const HIThemeButtonDrawInfo info = { + .version = 0, + .state = Ttk_StateTableLookup(ThemeStateTable, state), + .kind = params->kind, + .value = Ttk_StateTableLookup(TreeHeaderValueTable, state), + .adornment = Ttk_StateTableLookup(TreeHeaderAdornmentTable, state), + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL); + END_DRAWING +} + +static Ttk_ElementSpec TreeHeaderElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + ButtonElementSizeNoPadding, + TreeHeaderElementDraw +}; + +/* + * Disclosure triangle: + */ +#define TTK_TREEVIEW_STATE_OPEN TTK_STATE_USER1 +#define TTK_TREEVIEW_STATE_LEAF TTK_STATE_USER2 +static Ttk_StateTable DisclosureValueTable[] = { + { kThemeDisclosureDown, TTK_TREEVIEW_STATE_OPEN, 0 }, + { kThemeDisclosureRight, 0, 0 }, +}; + +static void DisclosureElementSize( + void *clientData, void *elementRecord, Tk_Window tkwin, + int *widthPtr, int *heightPtr, Ttk_Padding *paddingPtr) +{ + SInt32 s; + + ChkErr(GetThemeMetric, kThemeMetricDisclosureTriangleWidth, &s); + *widthPtr = s; + ChkErr(GetThemeMetric, kThemeMetricDisclosureTriangleHeight, &s); + *heightPtr = s; +} + +static void DisclosureElementDraw( + void *clientData, void *elementRecord, Tk_Window tkwin, + Drawable d, Ttk_Box b, Ttk_State state) +{ + if (!(state & TTK_TREEVIEW_STATE_LEAF)) { + CGRect bounds = BoxToRect(d, b); + const HIThemeButtonDrawInfo info = { + .version = 0, + .state = Ttk_StateTableLookup(ThemeStateTable, state), + .kind = kThemeDisclosureTriangle, + .value = Ttk_StateTableLookup(DisclosureValueTable, state), + .adornment = kThemeAdornmentDrawIndicatorOnly, + }; + + BEGIN_DRAWING(d) + ChkErr(HIThemeDrawButton, &bounds, &info, dc.context, HIOrientation, NULL); + END_DRAWING + } +} + +static Ttk_ElementSpec DisclosureElementSpec = { + TK_STYLE_VERSION_2, + sizeof(NullElement), + TtkNullElementOptions, + DisclosureElementSize, + DisclosureElementDraw +}; + +/*---------------------------------------------------------------------- + * +++ Widget layouts. + */ + +TTK_BEGIN_LAYOUT_TABLE(LayoutTable) + +TTK_LAYOUT("Toolbar", + TTK_NODE("Toolbar.background", TTK_FILL_BOTH)) + +TTK_LAYOUT("TButton", + TTK_GROUP("Button.button", TTK_FILL_BOTH, + TTK_GROUP("Button.padding", TTK_FILL_BOTH, + TTK_NODE("Button.label", TTK_FILL_BOTH)))) + +TTK_LAYOUT("TRadiobutton", + TTK_GROUP("Radiobutton.button", TTK_FILL_BOTH, + TTK_GROUP("Radiobutton.padding", TTK_FILL_BOTH, + TTK_NODE("Radiobutton.label", TTK_PACK_LEFT)))) + +TTK_LAYOUT("TCheckbutton", + TTK_GROUP("Checkbutton.button", TTK_FILL_BOTH, + TTK_GROUP("Checkbutton.padding", TTK_FILL_BOTH, + TTK_NODE("Checkbutton.label", TTK_PACK_LEFT)))) + +TTK_LAYOUT("TMenubutton", + TTK_GROUP("Menubutton.button", TTK_FILL_BOTH, + TTK_GROUP("Menubutton.padding", TTK_FILL_BOTH, + TTK_NODE("Menubutton.label", TTK_PACK_LEFT)))) + +TTK_LAYOUT("TCombobox", + TTK_GROUP("Combobox.button", TTK_PACK_TOP|TTK_FILL_X, + TTK_GROUP("Combobox.padding", TTK_FILL_BOTH, + TTK_NODE("Combobox.textarea", TTK_FILL_X)))) + +/* Notebook tabs -- no focus ring */ +TTK_LAYOUT("Tab", + TTK_GROUP("Notebook.tab", TTK_FILL_BOTH, + TTK_GROUP("Notebook.padding", TTK_EXPAND|TTK_FILL_BOTH, + TTK_NODE("Notebook.label", TTK_EXPAND|TTK_FILL_BOTH)))) + +/* Progress bars -- track only */ +TTK_LAYOUT("TSpinbox", + TTK_NODE("Spinbox.spinbutton", TTK_PACK_RIGHT|TTK_STICK_E) + TTK_GROUP("Spinbox.field", TTK_EXPAND|TTK_FILL_X, + TTK_NODE("Spinbox.textarea", TTK_EXPAND|TTK_FILL_X))) + +TTK_LAYOUT("TProgressbar", + TTK_NODE("Progressbar.track", TTK_EXPAND|TTK_FILL_BOTH)) + +/* Tree heading -- no border, fixed height */ +TTK_LAYOUT("Heading", + TTK_NODE("Treeheading.cell", TTK_FILL_X) + TTK_NODE("Treeheading.image", TTK_PACK_RIGHT) + TTK_NODE("Treeheading.text", 0)) + +/* Tree items -- omit focus ring */ +TTK_LAYOUT("Item", + TTK_GROUP("Treeitem.padding", TTK_FILL_BOTH, + TTK_NODE("Treeitem.indicator", TTK_PACK_LEFT) + TTK_NODE("Treeitem.image", TTK_PACK_LEFT) + TTK_NODE("Treeitem.text", TTK_PACK_LEFT))) + +TTK_END_LAYOUT_TABLE + +/*---------------------------------------------------------------------- + * +++ Initialization. + */ + +static int AquaTheme_Init(Tcl_Interp *interp) +{ + Ttk_Theme themePtr = Ttk_CreateTheme(interp, "aqua", NULL); + + if (!themePtr) { + return TCL_ERROR; + } + + /* + * Elements: + */ + Ttk_RegisterElementSpec(themePtr, "background", &BackgroundElementSpec, 0); + Ttk_RegisterElementSpec(themePtr, "fill", &FillElementSpec, 0); + Ttk_RegisterElementSpec(themePtr, "Toolbar.background", + &ToolbarBackgroundElementSpec, 0); + + Ttk_RegisterElementSpec(themePtr, "Button.button", + &ButtonElementSpec, &PushButtonParams); + Ttk_RegisterElementSpec(themePtr, "Checkbutton.button", + &ButtonElementSpec, &CheckBoxParams); + Ttk_RegisterElementSpec(themePtr, "Radiobutton.button", + &ButtonElementSpec, &RadioButtonParams); + Ttk_RegisterElementSpec(themePtr, "Toolbutton.border", + &ButtonElementSpec, &BevelButtonParams); + Ttk_RegisterElementSpec(themePtr, "Menubutton.button", + &ButtonElementSpec, &PopupButtonParams); + Ttk_RegisterElementSpec(themePtr, "Spinbox.spinbutton", + &SpinButtonElementSpec, 0); + Ttk_RegisterElementSpec(themePtr, "Combobox.button", + &ComboboxElementSpec, 0); + Ttk_RegisterElementSpec(themePtr, "Treeitem.indicator", + &DisclosureElementSpec, &DisclosureParams); + Ttk_RegisterElementSpec(themePtr, "Treeheading.cell", + &TreeHeaderElementSpec, &ListHeaderParams); + + Ttk_RegisterElementSpec(themePtr, "Notebook.tab", &TabElementSpec, 0); + Ttk_RegisterElementSpec(themePtr, "Notebook.client", &PaneElementSpec, 0); + + Ttk_RegisterElementSpec(themePtr, "Labelframe.border",&GroupElementSpec,0); + Ttk_RegisterElementSpec(themePtr, "Entry.field",&EntryElementSpec,0); + Ttk_RegisterElementSpec(themePtr, "Spinbox.field",&EntryElementSpec,0); + + Ttk_RegisterElementSpec(themePtr, "separator",&SeparatorElementSpec,0); + Ttk_RegisterElementSpec(themePtr, "hseparator",&SeparatorElementSpec,0); + Ttk_RegisterElementSpec(themePtr, "vseparator",&SeparatorElementSpec,0); + + Ttk_RegisterElementSpec(themePtr, "sizegrip",&SizegripElementSpec,0); + + /* + * <<NOTE-TRACKS>> + * The Progressbar widget adjusts the size of the pbar element. + * In the Aqua theme, the appearance manager computes the bar geometry; + * we do all the drawing in the ".track" element and leave the .pbar out. + */ + Ttk_RegisterElementSpec(themePtr,"Scale.trough", + &TrackElementSpec, &ScaleData); + Ttk_RegisterElementSpec(themePtr,"Scale.slider",&SliderElementSpec,0); + Ttk_RegisterElementSpec(themePtr,"Progressbar.track", &PbarElementSpec, 0); + + /* + * Layouts: + */ + Ttk_RegisterLayouts(themePtr, LayoutTable); + + Tcl_PkgProvide(interp, "ttk::theme::aqua", TTK_VERSION); + return TCL_OK; +} + +MODULE_SCOPE +int Ttk_MacOSXPlatformInit(Tcl_Interp *interp) +{ + return AquaTheme_Init(interp); +} + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ + |