Index: .github/workflows/linux-build.yml ================================================================== --- .github/workflows/linux-build.yml +++ .github/workflows/linux-build.yml @@ -15,11 +15,11 @@ working-directory: tk/unix env: ERROR_ON_FAILURES: 1 jobs: build: - runs-on: ubuntu-24.04 + runs-on: ubuntu-22.04 strategy: matrix: compiler: - "gcc" - "clang" @@ -123,11 +123,11 @@ uses: actions/upload-artifact@v4 with: name: Tk ${{ env.VERSION }} HTML documentation (snapshot) path: /tmp/dist/tk*/html test: - runs-on: ubuntu-24.04 + runs-on: ubuntu-22.04 strategy: matrix: compiler: - "gcc" config: Index: .github/workflows/linux-with-tcl9-build.yml ================================================================== --- .github/workflows/linux-with-tcl9-build.yml +++ .github/workflows/linux-with-tcl9-build.yml @@ -14,11 +14,11 @@ working-directory: tk/unix env: ERROR_ON_FAILURES: 1 jobs: build: - runs-on: ubuntu-24.04 + runs-on: ubuntu-22.04 strategy: matrix: compiler: - "gcc" - "clang" @@ -103,11 +103,11 @@ make html-tk TOOL_DIR=$TOOL_DIR || { echo "::error::Failure during Distribute" exit 1 } test: - runs-on: ubuntu-24.04 + runs-on: ubuntu-22.04 strategy: matrix: compiler: - "gcc" config: Index: .github/workflows/onefiledist.yml ================================================================== --- .github/workflows/onefiledist.yml +++ .github/workflows/onefiledist.yml @@ -9,11 +9,11 @@ permissions: contents: read jobs: linux: name: Linux - runs-on: ubuntu-24.04 + runs-on: ubuntu-22.04 defaults: run: shell: bash env: CC: gcc Index: doc/SetOptions.3 ================================================================== --- doc/SetOptions.3 +++ doc/SetOptions.3 @@ -544,19 +544,19 @@ void *\fIclientData\fR, Tcl_Interp *\fIinterp\fR, Tk_Window \fItkwin\fR, Tcl_Obj **\fIvaluePtr\fR, char *\fIrecordPtr\fR, - int \fIinternalOffset\fR, + Tcl_Size \fIinternalOffset\fR, char *\fIsaveInternalPtr\fR, int \fIflags\fR); typedef Tcl_Obj *\fBTk_CustomOptionGetProc\fR( void *\fIclientData\fR, Tk_Window \fItkwin\fR, char *\fIrecordPtr\fR, - int \fIinternalOffset\fR); + Tcl_Size \fIinternalOffset\fR); typedef void \fBTk_CustomOptionRestoreProc\fR( void *\fIclientData\fR, Tk_Window \fItkwin\fR, char *\fIinternalPtr\fR, Index: doc/tk_mac.n ================================================================== --- doc/tk_mac.n +++ doc/tk_mac.n @@ -25,19 +25,21 @@ \fB::tk::mac::OnShow\fR \fB::tk::mac::ShowHelp\fR \fB::tk::mac::PerformService\fR \fB::tk::mac::LaunchURL \fIURL...\fR \fB::tk::mac::GetAppPath\fR +\fB::tk::mac::GetInfoAsJSON\fR \fB::tk::mac::standardAboutPanel\fR \fB::tk::mac::useCompatibilityMetrics \fIboolean\fR \fB::tk::mac::CGAntialiasLimit \fIlimit\fR \fB::tk::mac::antialiasedtext \fInumber\fR \fB::tk::mac::useThemedToplevel \fIboolean\fR \fB::tk::mac::iconBitmap \fIname width height \-kind value\fR + .fi .BE .SH "EVENT HANDLER CALLBACKS" .PP The Aqua/macOS application environment defines a number of additional @@ -218,10 +220,15 @@ customized for the specific URL scheme the developer wants to support. .TP \fB::tk::mac::GetAppPath\fR . Returns the current applications's file path. +.TP +\fB::tk::mac::GetInfoAsJSON\fR +. +Returns a JSON-encoded Tcl string which serializes the application's +\fBmainBundle.infoDictionary\fR (defined by its \fIInfo.plist\fR file). .PP .SH "ADDITIONAL DIALOGS" .PP Aqua/macOS defines additional dialogs that applications should support. Index: generic/tkClipboard.c ================================================================== --- generic/tkClipboard.c +++ generic/tkClipboard.c @@ -392,11 +392,11 @@ cbPtr->length = strlen(buffer); cbPtr->buffer = (char *)ckalloc(cbPtr->length + 1); strcpy(cbPtr->buffer, buffer); - TkSelUpdateClipboard((TkWindow *) dispPtr->clipWindow, targetPtr); + TkSelUpdateClipboard((TkWindow *) dispPtr->clipWindow, CLIPBOARD_APPEND); return TCL_OK; } /* @@ -424,13 +424,13 @@ Tcl_Obj *const objv[]) /* Argument strings. */ { Tk_Window tkwin = (Tk_Window)clientData; const char *path = NULL; Atom selection; - static const char *const optionStrings[] = { "append", "clear", "get", NULL }; - enum options { CLIPBOARD_APPEND, CLIPBOARD_CLEAR, CLIPBOARD_GET }; - int index, i; + static const char *const optionStrings[] = { + "append", "clear", "get", NULL }; + int index, i, result; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?arg ...?"); return TCL_ERROR; } @@ -438,11 +438,11 @@ if (Tcl_GetIndexFromObj(interp, objv[1], optionStrings, "option", 0, &index) != TCL_OK) { return TCL_ERROR; } - switch ((enum options) index) { + switch ((clipboardOption) index) { case CLIPBOARD_APPEND: { Atom target, format; const char *targetName = NULL; const char *formatName = NULL; const char *string; @@ -541,17 +541,20 @@ tkwin = Tk_NameToWindow(interp, path, tkwin); } if (tkwin == NULL) { return TCL_ERROR; } - return Tk_ClipboardClear(interp, tkwin); + result = Tk_ClipboardClear(interp, tkwin); + if (result == TCL_OK) { + TkSelUpdateClipboard((TkWindow *) tkwin, CLIPBOARD_CLEAR); + } + return result; } case CLIPBOARD_GET: { Atom target; const char *targetName = NULL; Tcl_DString selBytes; - int result; const char *string; static const char *const getOptionStrings[] = { "-displayof", "-type", NULL }; enum getOptions { APPEND_DISPLAYOF, APPEND_TYPE }; Index: generic/tkColor.c ================================================================== --- generic/tkColor.c +++ generic/tkColor.c @@ -230,15 +230,15 @@ if (tkColPtr == NULL) { if (interp != NULL) { if (*name == '#') { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", name)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "COLOR", (char *)NULL); } else { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unknown color name \"%s\"", name)); - Tcl_SetErrorCode(interp, "TK", "LOOKUP", "COLOR", name, NULL); + Tcl_SetErrorCode(interp, "TK", "LOOKUP", "COLOR", name, (char *)NULL); } } if (isNew) { Tcl_DeleteHashEntry(nameHashPtr); } Index: generic/tkConsole.c ================================================================== --- generic/tkConsole.c +++ generic/tkConsole.c @@ -757,11 +757,11 @@ Tcl_SetObjResult(interp, Tcl_GetObjResult(consoleInterp)); Tcl_Release(consoleInterp); } else { Tcl_SetObjResult(interp, Tcl_NewStringObj( "no active console interp", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "CONSOLE", "NONE", NULL); + Tcl_SetErrorCode(interp, "TK", "CONSOLE", "NONE", (char *)NULL); result = TCL_ERROR; } Tcl_DecrRefCount(cmd); return result; } @@ -808,11 +808,11 @@ } if ((otherInterp == NULL) || Tcl_InterpDeleted(otherInterp)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "no active parent interp", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "CONSOLE", "NO_INTERP", NULL); + Tcl_SetErrorCode(interp, "TK", "CONSOLE", "NO_INTERP", (char *)NULL); return TCL_ERROR; } Tcl_Preserve(otherInterp); switch ((enum option) index) { Index: generic/tkCursor.c ================================================================== --- generic/tkCursor.c +++ generic/tkCursor.c @@ -358,17 +358,17 @@ */ if (TkParseColor(dataKey.display, Tk_Colormap(tkwin), fg, &fgColor) == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", fg)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", "COLOR", (char *)NULL); goto error; } if (TkParseColor(dataKey.display, Tk_Colormap(tkwin), bg, &bgColor) == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", bg)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", "COLOR", (char *)NULL); goto error; } cursorPtr = TkCreateCursorFromData(tkwin, source, mask, width, height, xHot, yHot, fgColor, bgColor); Index: generic/tkFileFilter.c ================================================================== --- generic/tkFileFilter.c +++ generic/tkFileFilter.c @@ -122,11 +122,11 @@ Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad file type \"%s\", should be " "\"typeName {extension ?extensions ...?} " "?{macType ?macTypes ...?}?\"", Tcl_GetString(listObjv[i]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "FILE_TYPE", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "FILE_TYPE", (char *)NULL); return TCL_ERROR; } filterPtr = GetFilter(flistPtr, Tcl_GetString(typeInfo[0])); @@ -292,11 +292,11 @@ } if (len != 4) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad Macintosh file type \"%s\"", Tcl_GetString(ostypeList[i]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "MAC_TYPE", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "MAC_TYPE", (char *)NULL); code = TCL_ERROR; goto done; } } } Index: generic/tkFont.c ================================================================== --- generic/tkFont.c +++ generic/tkFont.c @@ -583,11 +583,11 @@ "expected a single character but got \"", TCL_INDEX_NONE); Tcl_AppendLimitedToObj(resultPtr, string, TCL_INDEX_NONE, 40, "..."); Tcl_AppendToObj(resultPtr, "\"", TCL_INDEX_NONE); Tcl_SetObjResult(interp, resultPtr); - Tcl_SetErrorCode(interp, "TK", "VALUE", "FONT_SAMPLE", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "FONT_SAMPLE", (char *)NULL); return TCL_ERROR; } } /* @@ -632,11 +632,11 @@ nfPtr = (NamedFont *)Tcl_GetHashValue(namedHashPtr); } if ((namedHashPtr == NULL) || nfPtr->deletePending) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "named font \"%s\" does not exist", string)); - Tcl_SetErrorCode(interp, "TK", "LOOKUP", "FONT", string, NULL); + Tcl_SetErrorCode(interp, "TK", "LOOKUP", "FONT", string, (char *)NULL); return TCL_ERROR; } if (objc == 3) { objPtr = NULL; } else if (objc == 4) { @@ -975,11 +975,11 @@ nfPtr = (NamedFont *)Tcl_GetHashValue(namedHashPtr); if (!nfPtr->deletePending) { if (interp) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "named font \"%s\" already exists", name)); - Tcl_SetErrorCode(interp, "TK", "FONT", "EXISTS", NULL); + Tcl_SetErrorCode(interp, "TK", "FONT", "EXISTS", (char *)NULL); } return TCL_ERROR; } /* @@ -1027,11 +1027,11 @@ namedHashPtr = Tcl_FindHashEntry(&fiPtr->namedTable, name); if (namedHashPtr == NULL) { if (interp) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "named font \"%s\" does not exist", name)); - Tcl_SetErrorCode(interp, "TK", "LOOKUP", "FONT", name, NULL); + Tcl_SetErrorCode(interp, "TK", "LOOKUP", "FONT", name, (char *)NULL); } return TCL_ERROR; } nfPtr = (NamedFont *)Tcl_GetHashValue(namedHashPtr); if (nfPtr->refCount != 0) { @@ -1214,11 +1214,11 @@ Tcl_DeleteHashEntry(cacheHashPtr); } Tcl_SetObjResult(interp, Tcl_NewStringObj( "failed to allocate font due to internal system font engine" " problem", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "FONT", "INTERNAL_PROBLEM", NULL); + Tcl_SetErrorCode(interp, "TK", "FONT", "INTERNAL_PROBLEM", (char *)NULL); return NULL; } fontPtr->resourceRefCount = 1; fontPtr->objRefCount = 1; @@ -3441,11 +3441,11 @@ if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" option missing", Tcl_GetString(optionPtr))); - Tcl_SetErrorCode(interp, "TK", "FONT", "NO_ATTRIBUTE", NULL); + Tcl_SetErrorCode(interp, "TK", "FONT", "NO_ATTRIBUTE", (char *)NULL); } return TCL_ERROR; } valuePtr = objv[i + 1]; @@ -3742,11 +3742,11 @@ if ((Tcl_ListObjGetElements(NULL, objPtr, &objc, &objv) != TCL_OK) || (objc < 1)) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "font \"%s\" does not exist", string)); - Tcl_SetErrorCode(interp, "TK", "LOOKUP", "FONT", string, NULL); + Tcl_SetErrorCode(interp, "TK", "LOOKUP", "FONT", string, (char *)NULL); } return TCL_ERROR; } faPtr->family = Tk_GetUid(Tcl_GetString(objv[0])); Index: generic/tkFrame.c ================================================================== --- generic/tkFrame.c +++ generic/tkFrame.c @@ -535,11 +535,11 @@ * are being destroyed. Let an error be thrown. */ Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unable to create widget \"%s\"", Tcl_GetString(objv[1]))); - Tcl_SetErrorCode(interp, "TK", "APPLICATION_GONE", NULL); + Tcl_SetErrorCode(interp, "TK", "APPLICATION_GONE", (char *)NULL); return TCL_ERROR; } else { /* * We were called from Tk_Init; create a new application. */ @@ -655,11 +655,11 @@ if (framePtr->isContainer) { if (framePtr->useThisObj != NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "windows cannot have both the -use and the -container" " option set", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "FRAME", "CONTAINMENT", NULL); + Tcl_SetErrorCode(interp, "TK", "FRAME", "CONTAINMENT", (char *)NULL); goto error; } Tk_MakeContainer(framePtr->tkwin); } if (type == TYPE_TOPLEVEL) { @@ -1042,11 +1042,11 @@ badLabelWindow: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't use %s as label in this frame", Tk_PathName(labelframePtr->labelWin))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "HIERARCHY", NULL); + Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "HIERARCHY", (char *)NULL); labelframePtr->labelWin = NULL; return TCL_ERROR; } /* Index: generic/tkImgGIF.c ================================================================== --- generic/tkImgGIF.c +++ generic/tkImgGIF.c @@ -933,11 +933,11 @@ * Premature end of image. */ Tcl_SetObjResult(interp, Tcl_NewStringObj( "premature end of image data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "PREMATURE_END", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "GIF", "PREMATURE_END", (char *)NULL); return -1; } return buf[0]; } Index: generic/tkImgPNG.c ================================================================== --- generic/tkImgPNG.c +++ generic/tkImgPNG.c @@ -353,11 +353,11 @@ if (Tcl_ZlibStreamInit(NULL, dir, TCL_ZLIB_FORMAT_ZLIB, TCL_ZLIB_COMPRESS_DEFAULT, NULL, &pngPtr->stream) != TCL_OK) { if (interp) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "zlib initialization failed", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "ZLIB_INIT", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "ZLIB_INIT", (char *)NULL); } if (objPtr) { Tcl_DecrRefCount(objPtr); } return TCL_ERROR; @@ -544,11 +544,11 @@ } if (destSz) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "unexpected end of image data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EARLY_END", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EARLY_END", (char *)NULL); return TCL_ERROR; } return TCL_OK; } @@ -588,11 +588,11 @@ */ if (pngPtr->strDataLen < destSz) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "unexpected end of image data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EARLY_END", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EARLY_END", (char *)NULL); return TCL_ERROR; } while (destSz) { Tcl_Size blockSz = PNG_MIN(destSz, PNG_BLOCK_SZ); @@ -676,11 +676,11 @@ */ if (destSz && Tcl_Eof(pngPtr->channel)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "unexpected end of file", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EOF", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EOF", (char *)NULL); return TCL_ERROR; } } return TCL_OK; @@ -762,11 +762,11 @@ * Compare the read CRC to what we calculate to make sure they match. */ if (calculated != chunked) { Tcl_SetObjResult(interp, Tcl_NewStringObj("CRC check failed", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "CRC", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "CRC", (char *)NULL); return TCL_ERROR; } return TCL_OK; } @@ -915,11 +915,11 @@ if (temp > INT_MAX) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "chunk size is out of supported range on this architecture", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "OUTSIZE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "OUTSIZE", (char *)NULL); return TCL_ERROR; } chunkSz = (int) temp; crc = Tcl_ZlibCRC32(0, NULL, 0); @@ -1135,19 +1135,19 @@ pngPtr->numChannels = 4; if ((8 != pngPtr->bitDepth) && (16 != pngPtr->bitDepth)) { unsupportedDepth: Tcl_SetObjResult(interp, Tcl_NewStringObj( "bit depth is not allowed for given color type", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_DEPTH", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_DEPTH", (char *)NULL); return TCL_ERROR; } break; default: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unknown color type field %d", pngPtr->colorType)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "UNKNOWN_COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "UNKNOWN_COLOR", (char *)NULL); return TCL_ERROR; } /* * Set up the Tk photo block's pixel size and channel offsets. offset @@ -1174,11 +1174,11 @@ if (pngPtr->block.width > INT_MAX / pngPtr->block.pixelSize) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "image pitch is out of supported range on this architecture", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "PITCH", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "PITCH", (char *)NULL); return TCL_ERROR; } pngPtr->block.pitch = pngPtr->block.pixelSize * pngPtr->block.width; @@ -1189,11 +1189,11 @@ if (pngPtr->block.height > INT_MAX / pngPtr->block.pitch) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "image total size is out of supported range on this architecture", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "SIZE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "SIZE", (char *)NULL); return TCL_ERROR; } pngPtr->blockLen = pngPtr->block.height * pngPtr->block.pitch; @@ -1218,11 +1218,11 @@ pngPtr->bytesPerPixel = (pngPtr->bitDepth > 8) ? 8 : 4; break; default: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unknown color type %d", pngPtr->colorType)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "UNKNOWN_COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "UNKNOWN_COLOR", (char *)NULL); return TCL_ERROR; } /* * Calculate scale factor for bit depths less than 8, in order to adjust @@ -1300,11 +1300,11 @@ } if (mismatch) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "data stream does not have a PNG signature", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NO_SIG", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NO_SIG", (char *)NULL); return TCL_ERROR; } if (ReadChunkHeader(interp, pngPtr, &chunkSz, &chunkType, &crc) == TCL_ERROR) { @@ -1318,18 +1318,18 @@ */ if (chunkType != CHUNK_IHDR) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "expected IHDR chunk type", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NO_IHDR", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NO_IHDR", (char *)NULL); return TCL_ERROR; } if (chunkSz != 13) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid IHDR chunk size", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_IHDR", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_IHDR", (char *)NULL); return TCL_ERROR; } /* * Read and verify the image width and height to be sure Tk can handle its @@ -1347,11 +1347,11 @@ if (!width || !height || (width > INT_MAX) || (height > INT_MAX)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "image dimensions are invalid or beyond architecture limits", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "DIMENSIONS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "DIMENSIONS", (char *)NULL); return TCL_ERROR; } /* * Set height and width for the Tk photo block. @@ -1392,11 +1392,11 @@ } if (pngPtr->compression != PNG_COMPRESS_DEFLATE) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unknown compression method %d", pngPtr->compression)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_COMPRESS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_COMPRESS", (char *)NULL); return TCL_ERROR; } /* * Only one filter method is currently defined by the standard; the method @@ -1408,11 +1408,11 @@ } if (pngPtr->filter != PNG_FILTMETH_STANDARD) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unknown filter method %d", pngPtr->filter)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_FILTER", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_FILTER", (char *)NULL); return TCL_ERROR; } if (ReadData(interp, pngPtr, &pngPtr->interlace, 1, &crc) == TCL_ERROR) { return TCL_ERROR; @@ -1424,11 +1424,11 @@ break; default: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unknown interlace method %d", pngPtr->interlace)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_INTERLACE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_INTERLACE", (char *)NULL); return TCL_ERROR; } return CheckCRC(interp, pngPtr, crc); } @@ -1486,11 +1486,11 @@ */ if (!chunkSz || (chunkSz > PNG_PLTE_MAXSZ) || (chunkSz % 3)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid palette chunk size", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_PLTE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_PLTE", (char *)NULL); return TCL_ERROR; } /* * Read the palette contents and stash them for later, possibly. @@ -1551,11 +1551,11 @@ if (pngPtr->colorType & PNG_COLOR_ALPHA) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "tRNS chunk not allowed color types with a full alpha channel", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "INVALID_TRNS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "INVALID_TRNS", (char *)NULL); return TCL_ERROR; } /* * For indexed color, there is up to one single-byte transparency value @@ -1563,11 +1563,11 @@ */ if (chunkSz > PNG_TRNS_MAXSZ) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid tRNS chunk size", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_TRNS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_TRNS", (char *)NULL); return TCL_ERROR; } /* * Read in the raw transparency information. @@ -1594,11 +1594,11 @@ */ if (chunkSz > pngPtr->paletteLen) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "size of tRNS chunk is too large for the palette", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "TRNS_SIZE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "TRNS_SIZE", (char *)NULL); return TCL_ERROR; } for (i=0 ; ipalette[i].alpha = buffer[i]; @@ -1613,11 +1613,11 @@ if (chunkSz != 2) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid tRNS chunk size - must 2 bytes for grayscale", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_TRNS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_TRNS", (char *)NULL); return TCL_ERROR; } /* * According to the PNG specs, if the bit depth is less than 16, then @@ -1639,11 +1639,11 @@ */ if (chunkSz != 6) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid tRNS chunk size - must 6 bytes for RGB", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_TRNS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_TRNS", (char *)NULL); return TCL_ERROR; } /* * According to the PNG specs, if the bit depth is less than 16, then @@ -1699,11 +1699,11 @@ */ if (chunkSz != 9) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid physical chunk size", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_PHYS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_PHYS", (char *)NULL); return TCL_ERROR; } /* * Read the chunk data @@ -1728,11 +1728,11 @@ if ( PPUx > 2147483647 || PPUy > 2147483647 || unitSpecifier > 1 ) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid physical size value", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_PHYS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_PHYS", (char *)NULL); return TCL_ERROR; } if (PPUx > 0) { pngPtr->aspect = ((double) PPUy) / ((double) PPUx); @@ -1900,11 +1900,11 @@ } break; default: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid filter type %d", *thisLine)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_FILTER", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_FILTER", (char *)NULL); return TCL_ERROR; } return TCL_OK; } @@ -1950,11 +1950,11 @@ return TCL_ERROR; } if (pngPtr->currentLine >= pngPtr->block.height) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "PNG image data overflow")); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "DATA_OVERFLOW", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "DATA_OVERFLOW", (char *)NULL); return TCL_ERROR; } if (pngPtr->interlace) { @@ -2308,11 +2308,11 @@ */ if (chunkSz != 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "compressed data after stream finalize in PNG data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EXTRA_DATA", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EXTRA_DATA", (char *)NULL); return TCL_ERROR; } return CheckCRC(interp, pngPtr, crc); } @@ -2564,11 +2564,11 @@ return TCL_ERROR; } } else if (PNG_COLOR_PLTE == pngPtr->colorType) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "PLTE chunk required for indexed color", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NEED_PLTE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NEED_PLTE", (char *)NULL); return TCL_ERROR; } /* * The next chunk may be a tRNS (palette transparency) chunk, depending on @@ -2625,11 +2625,11 @@ */ if (chunkType != CHUNK_IDAT) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "at least one IDAT chunk is required", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NEED_IDAT", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "NEED_IDAT", (char *)NULL); return TCL_ERROR; } /* * Expand the photo size (if not set by the user) to provide enough space @@ -2649,11 +2649,11 @@ if (pngPtr->block.width > ((INT_MAX - 1) / (pngPtr->numChannels * 2))) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "line size is out of supported range on this architecture", -1)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "LINE_SIZE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "LINE_SIZE", (char *)NULL); return TCL_ERROR; } if (16 == pngPtr->bitDepth) { pngPtr->lineSize = 1 + (pngPtr->numChannels * pngPtr->block.width*2); @@ -2676,11 +2676,11 @@ pngPtr->block.pixelPtr = (unsigned char *)attemptckalloc(pngPtr->blockLen); if (!pngPtr->block.pixelPtr) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "memory allocation failed", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "MALLOC", NULL); + Tcl_SetErrorCode(interp, "TK", "MALLOC", (char *)NULL); return TCL_ERROR; } /* * Determine size of the first phase if interlaced. Phase size should @@ -2728,11 +2728,11 @@ */ if (!Tcl_ZlibStreamEof(pngPtr->stream)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "unfinalized data stream in PNG data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EXTRA_DATA", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "EXTRA_DATA", (char *)NULL); return TCL_ERROR; } /* * Now skip the remaining chunks which we're also not interested in. @@ -2754,11 +2754,11 @@ */ if (chunkSz) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "IEND chunk contents must be empty", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_IEND", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_IEND", (char *)NULL); return TCL_ERROR; } /* * Check the CRC on the IEND chunk. @@ -2775,11 +2775,11 @@ #if 0 if (ReadData(interp, pngPtr, &c, 1, NULL) != TCL_ERROR) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "extra data following IEND chunk", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_IEND", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "BAD_IEND", (char *)NULL); return TCL_ERROR; } #endif /* @@ -3054,20 +3054,20 @@ Tcl_GetByteArrayFromObj(pngPtr->objDataPtr, &objSz); if (objSz + srcSz > INT_MAX) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "image too large to store completely in byte array", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "TOO_LARGE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "TOO_LARGE", (char *)NULL); return TCL_ERROR; } destPtr = Tcl_SetByteArrayLength(pngPtr->objDataPtr, objSz + srcSz); if (!destPtr) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "memory allocation failed", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "MALLOC", NULL); + Tcl_SetErrorCode(interp, "TK", "MALLOC", (char *)NULL); return TCL_ERROR; } memcpy(destPtr+objSz, srcPtr, srcSz); } else if (Tcl_Write(pngPtr->channel, (const char *) srcPtr, srcSz) == TCL_IO_FAILURE) { @@ -3411,11 +3411,11 @@ } if (Tcl_ZlibStreamPut(pngPtr->stream, pngPtr->thisLineObj, flush) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "deflate() returned error", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "DEFLATE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "DEFLATE", (char *)NULL); return TCL_ERROR; } /* * Swap line buffers to keep the last around for filtering next. @@ -3572,11 +3572,11 @@ unsigned char buffer[9]; if ( PPUx > 2147483647 || PPUy > 2147483647 ) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "DPI or aspect out of range", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "PHYS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "PHYS", (char *)NULL); return TCL_ERROR; } LongToInt32(PPUx, buffer); LongToInt32(PPUy, buffer+4); @@ -3662,11 +3662,11 @@ if ((blockPtr->width > (INT_MAX - 1) / (pngPtr->bytesPerPixel)) || (blockPtr->height > INT_MAX / pngPtr->lineSize)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "image is too large to encode pixel data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "TOO_LARGE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PNG", "TOO_LARGE", (char *)NULL); return TCL_ERROR; } pngPtr->lastLineObj = Tcl_NewObj(); Tcl_IncrRefCount(pngPtr->lastLineObj); Index: generic/tkImgPPM.c ================================================================== --- generic/tkImgPPM.c +++ generic/tkImgPPM.c @@ -152,24 +152,24 @@ type = ReadPPMFileHeader(chan, &fileWidth, &fileHeight, &maxIntensity); if (type == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "couldn't read raw PPM header from file \"%s\"", fileName)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "NO_HEADER", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "NO_HEADER", (char *)NULL); return TCL_ERROR; } if ((fileWidth <= 0) || (fileHeight <= 0)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "PPM image file \"%s\" has dimension(s) <= 0", fileName)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "DIMENSIONS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "DIMENSIONS", (char *)NULL); return TCL_ERROR; } if ((maxIntensity <= 0) || (maxIntensity > 0xffff)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "PPM image file \"%s\" has bad maximum intensity value %d", fileName, maxIntensity)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "INTENSITY", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "INTENSITY", (char *)NULL); return TCL_ERROR; } else if (maxIntensity > 0x00ff) { bytesPerChannel = 2; } @@ -228,11 +228,11 @@ if (count != nBytes) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "error reading PPM image file \"%s\": %s", fileName, Tcl_Eof(chan)?"not enough data":Tcl_PosixError(interp))); if (Tcl_Eof(chan)) { - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "EOF", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "EOF", (char *)NULL); } ckfree(pixelPtr); return TCL_ERROR; } if (maxIntensity < 0x00ff) { @@ -497,24 +497,24 @@ type = ReadPPMStringHeader(dataObj, &fileWidth, &fileHeight, &maxIntensity, &dataBuffer, &dataSize); if (type == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't read raw PPM header from string", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "NO_HEADER", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "NO_HEADER", (char *)NULL); return TCL_ERROR; } if ((fileWidth <= 0) || (fileHeight <= 0)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "PPM image data has dimension(s) <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "DIMENSIONS", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "DIMENSIONS", (char *)NULL); return TCL_ERROR; } if ((maxIntensity <= 0) || (maxIntensity > 0xffff)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "PPM image data has bad maximum intensity value %d", maxIntensity)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "INTENSITY", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "INTENSITY", (char *)NULL); return TCL_ERROR; } else if (maxIntensity > 0x00ff) { bytesPerChannel = 2; } @@ -555,11 +555,11 @@ */ if (block.pitch*height > dataSize) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "truncated PPM data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "TRUNCATED", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "TRUNCATED", (char *)NULL); return TCL_ERROR; } block.pixelPtr = dataBuffer + srcX * block.pixelSize; block.height = height; return Tk_PhotoPutBlock(interp, imageHandle, &block, destX, destY, @@ -591,11 +591,11 @@ } if (dataSize < nBytes) { ckfree(pixelPtr); Tcl_SetObjResult(interp, Tcl_NewStringObj( "truncated PPM data", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "TRUNCATED", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "PPM", "TRUNCATED", (char *)NULL); return TCL_ERROR; } if (maxIntensity < 0x00ff) { for (p=pixelPtr,count=nBytes ; count>0 ; count--,p++,dataBuffer++) { *p = (((int) *dataBuffer) * 255)/maxIntensity; Index: generic/tkImgSVGnano.c ================================================================== --- generic/tkImgSVGnano.c +++ generic/tkImgSVGnano.c @@ -247,11 +247,11 @@ if (Tcl_ReadChars(chan, dataObj, TCL_INDEX_NONE, 0) == TCL_IO_FAILURE) { /* in case of an error reading the file */ Tcl_DecrRefCount(dataObj); Tcl_SetObjResult(interp, Tcl_NewStringObj("read error", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "READ_ERROR", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "READ_ERROR", (char *)NULL); return TCL_ERROR; } data = Tcl_GetStringFromObj(dataObj, &length); nsvgImage = ParseSVGWithOptions(interp, data, length, formatObj, &ropts); @@ -404,11 +404,11 @@ */ inputCopy = (char *)attemptckalloc(length+1); if (inputCopy == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj("cannot alloc data buffer", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "OUT_OF_MEMORY", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "OUT_OF_MEMORY", (char *)NULL); goto error; } memcpy(inputCopy, input, length); inputCopy[length] = '\0'; @@ -528,11 +528,11 @@ } nsvgImage = nsvgParse(inputCopy, "px", (float) dpi); if (nsvgImage == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj("cannot parse SVG image", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "PARSE_ERROR", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "PARSE_ERROR", (char *)NULL); goto error; } ckfree(inputCopy); return nsvgImage; @@ -592,18 +592,18 @@ /* Tk Ticket [822330269b] Check potential int overflow in following ckalloc */ wh = (Tcl_WideUInt)w * (Tcl_WideUInt)h; if ( w < 0 || h < 0 || wh > INT_MAX / 4) { Tcl_SetObjResult(interp, Tcl_NewStringObj("image size overflow", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "IMAGE_SIZE_OVERFLOW", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "IMAGE_SIZE_OVERFLOW", (char *)NULL); goto cleanRAST; } imgData = (unsigned char *)attemptckalloc(wh * 4); if (imgData == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj("cannot alloc image buffer", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "OUT_OF_MEMORY", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "OUT_OF_MEMORY", (char *)NULL); goto cleanRAST; } nsvgRasterize(rast, nsvgImage, 0, 0, (float) scale, imgData, w, h, w * 4); /* transfer the data to a photo block */ Index: generic/tkPack.c ================================================================== --- generic/tkPack.c +++ generic/tkPack.c @@ -231,11 +231,11 @@ switch ((enum options) index) { case PACK_CONFIGURE: if (argv2[0] != '.') { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad argument \"%s\": must be name of window", argv2)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "WINDOW_PATH", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "WINDOW_PATH", (char *)NULL); return TCL_ERROR; } return ConfigureContent(interp, tkwin, objc-2, objv+2); case PACK_FORGET: { Tk_Window content; @@ -277,11 +277,11 @@ return TCL_OK; } if (contentPtr->containerPtr == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't packed", argv2)); - Tcl_SetErrorCode(interp, "TK", "PACK", "NOT_PACKED", NULL); + Tcl_SetErrorCode(interp, "TK", "PACK", "NOT_PACKED", (char *)NULL); return TCL_ERROR; } infoObj = Tcl_NewObj(); Tcl_DictObjPut(NULL, infoObj, Tcl_NewStringObj("-in", TCL_INDEX_NONE), @@ -1250,11 +1250,11 @@ } if (Tk_TopWinHierarchy(content)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't pack \"%s\": it's a top-level window", Tcl_GetString(objv[j]))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "TOPLEVEL", NULL); + Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "TOPLEVEL", (char *)NULL); return TCL_ERROR; } if (!(contentPtr = GetPacker(content))) { continue; } @@ -1279,11 +1279,11 @@ for (i = numWindows; i < objc; i+=2) { if ((i+2) > objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "extra option \"%s\" (option with no value?)", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "PACK", "BAD_PARAMETER", NULL); + Tcl_SetErrorCode(interp, "TK", "PACK", "BAD_PARAMETER", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, &index) != TCL_OK) { return TCL_ERROR; @@ -1363,11 +1363,11 @@ contentPtr->flags |= FILLX|FILLY; } else { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad fill style \"%s\": must be " "none, x, y, or both", string)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "FILL", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "FILL", (char *)NULL); return TCL_ERROR; } break; case CONF_IN: if (j == 0) { @@ -1391,11 +1391,11 @@ if ((Tk_GetPixelsFromObj(interp, content, objv[i+1], &tmp) != TCL_OK) || (tmp < 0)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad ipadx value \"%s\": must be positive screen" " distance", Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "INT_PAD", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "INT_PAD", (char *)NULL); return TCL_ERROR; } contentPtr->iPadX = tmp * 2; break; case CONF_IPADY: @@ -1402,11 +1402,11 @@ if ((Tk_GetPixelsFromObj(interp, content, objv[i+1], &tmp) != TCL_OK) || (tmp < 0)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad ipady value \"%s\": must be positive screen" " distance", Tcl_GetString(objv[i+1]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "INT_PAD", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "INT_PAD", (char *)NULL); return TCL_ERROR; } contentPtr->iPadY = tmp * 2; break; case CONF_PADX: @@ -1484,18 +1484,18 @@ } if (Tk_TopWinHierarchy(ancestor)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't pack \"%s\" inside \"%s\"", Tcl_GetString(objv[j]), Tk_PathName(containerPtr->tkwin))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "HIERARCHY", NULL); + Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "HIERARCHY", (char *)NULL); return TCL_ERROR; } } if (content == containerPtr->tkwin) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't pack \"%s\" inside itself", Tcl_GetString(objv[j]))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "SELF", NULL); + Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "SELF", (char *)NULL); return TCL_ERROR; } /* * Check for management loops. @@ -1505,11 +1505,11 @@ container = (TkWindow *)TkGetContainer(container)) { if (container == (TkWindow *)content) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't put \"%s\" inside \"%s\": would cause management loop", Tcl_GetString(objv[j]), Tk_PathName(containerPtr->tkwin))); - Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "LOOP", NULL); + Tcl_SetErrorCode(interp, "TK", "GEOMETRY", "LOOP", (char *)NULL); return TCL_ERROR; } } if (containerPtr->tkwin != Tk_Parent(content)) { ((TkWindow *)content)->maintainerPtr = (TkWindow *)containerPtr->tkwin; Index: generic/tkSelect.h ================================================================== --- generic/tkSelect.h +++ generic/tkSelect.h @@ -119,10 +119,20 @@ * speed up appends. */ struct TkClipboardTarget *nextPtr; /* Next in list of targets on clipboard. NULL * means end of list. */ } TkClipboardTarget; + +/* + * Options enum for the TkClipboardObjCmd. These are defined here + * so they can be used as an argument to TkSelUpdateClipboard. + */ + +typedef enum { + CLIPBOARD_APPEND, CLIPBOARD_CLEAR, CLIPBOARD_GET +} clipboardOption; + /* * It is possible for a Tk_SelectionProc to delete the handler that it * represents. If this happens, the code that is retrieving the selection * needs to know about it so it doesn't use the now-defunct handler structure. @@ -158,10 +168,9 @@ MODULE_SCOPE void TkSelClearSelection(Tk_Window tkwin, XEvent *eventPtr); MODULE_SCOPE Tcl_Size TkSelDefaultSelection(TkSelectionInfo *infoPtr, Atom target, char *buffer, Tcl_Size maxBytes, Atom *typePtr); #ifndef TkSelUpdateClipboard -MODULE_SCOPE void TkSelUpdateClipboard(TkWindow *winPtr, - TkClipboardTarget *targetPtr); +MODULE_SCOPE void TkSelUpdateClipboard(TkWindow *winPtr, clipboardOption option); #endif #endif /* _TKSELECT */ Index: generic/tkTextWind.c ================================================================== --- generic/tkTextWind.c +++ generic/tkTextWind.c @@ -434,11 +434,11 @@ } ewPtr = TkTextIndexGetContentSegment(&index, NULL); if (ewPtr->typePtr != &tkTextEmbWindowType) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "no embedded window at index \"%s\"", Tcl_GetString(objv[3]))); - Tcl_SetErrorCode(interp, "TK", "TEXT", "NO_WINDOW", NULL); + Tcl_SetErrorCode(interp, "TK", "TEXT", "NO_WINDOW", (char *)NULL); return TCL_ERROR; } /* * Copy over client specific value before querying. @@ -474,11 +474,11 @@ } ewPtr = TkTextIndexGetContentSegment(&index, NULL); if (ewPtr->typePtr != &tkTextEmbWindowType) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "no embedded window at index \"%s\"", Tcl_GetString(objv[3]))); - Tcl_SetErrorCode(interp, "TK", "TEXT", "NO_WINDOW", NULL); + Tcl_SetErrorCode(interp, "TK", "TEXT", "NO_WINDOW", (char *)NULL); return TCL_ERROR; } if (objc <= 5) { TkTextEmbWindowClient *client; Tcl_Obj *objPtr; @@ -864,11 +864,11 @@ if (cantEmbed || Tk_TopWinHierarchy(ewPtr->body.ew.tkwin) || (ewPtr->body.ew.tkwin == textPtr->tkwin)) { Tcl_SetObjResult(textPtr->interp, Tcl_ObjPrintf("can't embed %s in %s", Tk_PathName(ewPtr->body.ew.tkwin), Tk_PathName(textPtr->tkwin))); - Tcl_SetErrorCode(textPtr->interp, "TK", "GEOMETRY", "HIERARCHY", NULL); + Tcl_SetErrorCode(textPtr->interp, "TK", "GEOMETRY", "HIERARCHY", (char *)NULL); ewPtr->body.ew.tkwin = NULL; if (client) { client->tkwin = NULL; } return TCL_ERROR; @@ -1491,11 +1491,11 @@ if (cantEmbed || Tk_TopWinHierarchy(ewPtr->body.ew.tkwin) || textPtr->tkwin == ewPtr->body.ew.tkwin) { Tcl_SetObjResult(textPtr->interp, Tcl_ObjPrintf("can't embed %s relative to %s", Tk_PathName(ewPtr->body.ew.tkwin), Tk_PathName(textPtr->tkwin))); - Tcl_SetErrorCode(textPtr->interp, "TK", "GEOMETRY", "HIERARCHY", NULL); + Tcl_SetErrorCode(textPtr->interp, "TK", "GEOMETRY", "HIERARCHY", (char *)NULL); Tcl_BackgroundException(textPtr->interp, TCL_ERROR); ewPtr->body.ew.tkwin = NULL; goto gotWindow; } Index: generic/ttk/ttkEntry.c ================================================================== --- generic/ttk/ttkEntry.c +++ generic/ttk/ttkEntry.c @@ -1428,11 +1428,11 @@ } else if (strncmp(string, "sel.", 4) == 0) { if (entryPtr->entry.selectFirst < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "selection isn't in widget %s", Tk_PathName(entryPtr->core.tkwin))); - Tcl_SetErrorCode(interp, "TTK", "ENTRY", "NO_SELECTION", NULL); + Tcl_SetErrorCode(interp, "TTK", "ENTRY", "NO_SELECTION", (char *)NULL); return TCL_ERROR; } if (strncmp(string, "sel.first", length) == 0) { *indexPtr = entryPtr->entry.selectFirst; } else if (strncmp(string, "sel.last", length) == 0) { @@ -1476,11 +1476,11 @@ return TCL_OK; badIndex: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad entry index \"%s\"", string)); - Tcl_SetErrorCode(interp, "TTK", "ENTRY", "INDEX", NULL); + Tcl_SetErrorCode(interp, "TTK", "ENTRY", "INDEX", (char *)NULL); return TCL_ERROR; } /* $entry bbox $index -- * Return the bounding box of the character at the specified index. @@ -1892,18 +1892,18 @@ if (TCL_OK == TkGetIntForIndex(objv[2], nValues - 1, 0, &idx)) { if (idx < 0 || idx >= nValues) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "index \"%s\" out of range", Tcl_GetString(objv[2]))); - Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_RANGE", NULL); + Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_RANGE", (char *)NULL); return TCL_ERROR; } currentIndex = idx; } else { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad index \"%s\"", Tcl_GetString(objv[2]))); - Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_VALUE", NULL); + Tcl_SetErrorCode(interp, "TTK", "COMBOBOX", "IDX_VALUE", (char *)NULL); return TCL_ERROR; } cbPtr->combobox.currentIndex = currentIndex; Index: generic/ttk/ttkFrame.c ================================================================== --- generic/ttk/ttkFrame.c +++ generic/ttk/ttkFrame.c @@ -209,11 +209,11 @@ error: if (interp) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Bad label anchor specification %s", Tcl_GetString(objPtr))); - Tcl_SetErrorCode(interp, "TTK", "LABEL", "ANCHOR", NULL); + Tcl_SetErrorCode(interp, "TTK", "LABEL", "ANCHOR", (char *)NULL); } return TCL_ERROR; } /* LabelAnchorSide -- Index: generic/ttk/ttkImage.c ================================================================== --- generic/ttk/ttkImage.c +++ generic/ttk/ttkImage.c @@ -98,11 +98,11 @@ if ((objc % 2) != 1) { if (interp) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "image specification must contain an odd number of elements", -1)); - Tcl_SetErrorCode(interp, "TTK", "IMAGE", "SPEC", NULL); + Tcl_SetErrorCode(interp, "TTK", "IMAGE", "SPEC", (char *)NULL); } goto error; } n = (objc - 1) / 2; @@ -378,11 +378,11 @@ Tcl_Size i; if (objc + 1 < 2) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Must supply a base image", -1)); - Tcl_SetErrorCode(interp, "TTK", "IMAGE", "BASE", NULL); + Tcl_SetErrorCode(interp, "TTK", "IMAGE", "BASE", (char *)NULL); return TCL_ERROR; } imageSpec = TtkGetImageSpec(interp, Tk_MainWindow(interp), objv[0]); if (!imageSpec) { @@ -403,11 +403,11 @@ int option; if (i == objc - 1) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Value for %s missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TTK", "IMAGE", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TTK", "IMAGE", "VALUE", (char *)NULL); goto error; } #ifdef TILE_07_COMPAT if (!strcmp("-map", Tcl_GetString(objv[i]))) { Index: generic/ttk/ttkLayout.c ================================================================== --- generic/ttk/ttkLayout.c +++ generic/ttk/ttkLayout.c @@ -333,11 +333,11 @@ if (padc > 4) { if (interp) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Wrong #elements in padding spec", -1)); - Tcl_SetErrorCode(interp, "TTK", "VALUE", "PADDING", NULL); + Tcl_SetErrorCode(interp, "TTK", "VALUE", "PADDING", (char *)NULL); } goto error; } for (i=0; i < padc; ++i) { @@ -372,11 +372,11 @@ if (padc > 4) { if (interp) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Wrong #elements in padding spec", -1)); - Tcl_SetErrorCode(interp, "TTK", "VALUE", "BORDER", NULL); + Tcl_SetErrorCode(interp, "TTK", "VALUE", "BORDER", (char *)NULL); } goto error; } for (i=0; i < padc; ++i) { @@ -487,11 +487,11 @@ default: if (interp) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Bad -sticky specification %s", Tcl_GetString(objPtr))); - Tcl_SetErrorCode(interp, "TTK", "VALUE", "STICKY", NULL); + Tcl_SetErrorCode(interp, "TTK", "VALUE", "STICKY", (char *)NULL); } return TCL_ERROR; } } @@ -653,11 +653,11 @@ if (++i >= objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Missing value for option %s", Tcl_GetString(objv[i-1]))); - Tcl_SetErrorCode(interp, "TTK", "VALUE", "LAYOUT", NULL); + Tcl_SetErrorCode(interp, "TTK", "VALUE", "LAYOUT", (char *)NULL); goto error; } switch (option) { case OP_SIDE: /* <> */ @@ -709,11 +709,11 @@ } if (childSpec) { tail->child = Ttk_ParseLayoutTemplate(interp, childSpec); if (!tail->child) { Tcl_SetObjResult(interp, Tcl_ObjPrintf("Invalid -children value")); - Tcl_SetErrorCode(interp, "TTK", "VALUE", "CHILDREN", NULL); + Tcl_SetErrorCode(interp, "TTK", "VALUE", "CHILDREN", (char *)NULL); goto error; } } } @@ -888,11 +888,11 @@ Ttk_LayoutNode *bgnode; if (!layoutTemplate) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Layout %s not found", styleName)); - Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, NULL); + Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, (char *)NULL); return 0; } bgnode = Ttk_NewLayoutNode(TTK_FILL_BOTH, bgelement); bgnode->next = Ttk_InstantiateLayout(themePtr, layoutTemplate); @@ -929,11 +929,11 @@ layoutTemplate = Ttk_FindLayoutTemplate(themePtr, styleName); if (!layoutTemplate) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Layout %s not found", styleName)); - Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, NULL); + Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "LAYOUT", styleName, (char *)NULL); return 0; } Tcl_DStringFree(&buf); Index: generic/ttk/ttkManager.c ================================================================== --- generic/ttk/ttkManager.c +++ generic/ttk/ttkManager.c @@ -463,11 +463,11 @@ * not integers. */ if (index < 0 || (index - !!lastOK) >= mgr->nContent) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Managed window index \"%s\" out of bounds", Tcl_GetString(objPtr))); - Tcl_SetErrorCode(interp, "TTK", "MANAGED", "INDEX", NULL); + Tcl_SetErrorCode(interp, "TTK", "MANAGED", "INDEX", (char *)NULL); return TCL_ERROR; } *indexPtr = index; return TCL_OK; } @@ -479,20 +479,20 @@ index = Ttk_ContentIndex(mgr, tkwin); if (index < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s is not managed by %s", string, Tk_PathName(mgr->window))); - Tcl_SetErrorCode(interp, "TTK", "MANAGED", "MANAGER", NULL); + Tcl_SetErrorCode(interp, "TTK", "MANAGED", "MANAGER", (char *)NULL); return TCL_ERROR; } *indexPtr = index; return TCL_OK; } Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Invalid managed window specification %s", string)); - Tcl_SetErrorCode(interp, "TTK", "MANAGED", "SPEC", NULL); + Tcl_SetErrorCode(interp, "TTK", "MANAGED", "SPEC", (char *)NULL); return TCL_ERROR; } /* ++ Ttk_ReorderContent(mgr, fromIndex, toIndex) -- * Change content window order. @@ -549,9 +549,9 @@ return 1; badWindow: Tcl_SetObjResult(interp, Tcl_ObjPrintf("cannot add \"%s\" as content of \"%s\"", Tk_PathName(window), Tk_PathName(container))); - Tcl_SetErrorCode(interp, "TTK", "GEOMETRY", "MAINTAINABLE", NULL); + Tcl_SetErrorCode(interp, "TTK", "GEOMETRY", "MAINTAINABLE", (char *)NULL); return 0; } Index: generic/ttk/ttkNotebook.c ================================================================== --- generic/ttk/ttkNotebook.c +++ generic/ttk/ttkNotebook.c @@ -752,11 +752,11 @@ } #if 0 /* can't happen */ if (Ttk_ContentIndex(nb->notebook.mgr, window) >= 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf("%s already added", Tk_PathName(window))); - Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "PRESENT", NULL); + Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "PRESENT", (char *)NULL); return TCL_ERROR; } #endif /* Create and insert tab. @@ -868,11 +868,11 @@ return TCL_OK; } if (*index_rtn == Ttk_NumberContent(nb->notebook.mgr)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Invalid tab specification %s", string)); - Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "SPEC", NULL); + Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "SPEC", (char *)NULL); return TCL_ERROR; } /* Nothing matched; Ttk_GetContentIndexFromObj will have left error message. */ @@ -889,18 +889,18 @@ { int status = FindTabIndex(interp, nb, objPtr, index_rtn); if (status == TCL_OK && *index_rtn >= Ttk_NumberContent(nb->notebook.mgr)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Tab index \"%s\" out of bounds", Tcl_GetString(objPtr))); - Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "INDEX", NULL); + Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "INDEX", (char *)NULL); return TCL_ERROR; } if (status == TCL_OK && *index_rtn < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Tab '%s' not found", Tcl_GetString(objPtr))); - Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "TAB", NULL); + Tcl_SetErrorCode(interp, "TTK", "NOTEBOOK", "TAB", (char *)NULL); status = TCL_ERROR; } return status; } Index: generic/ttk/ttkPanedwindow.c ================================================================== --- generic/ttk/ttkPanedwindow.c +++ generic/ttk/ttkPanedwindow.c @@ -156,11 +156,11 @@ /* Sanity-check: */ if (pane->weight < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "-weight must be non-negative", -1)); - Tcl_SetErrorCode(interp, "TTK", "PANE", "WEIGHT", NULL); + Tcl_SetErrorCode(interp, "TTK", "PANE", "WEIGHT", (char *)NULL); goto error; } /* Done. */ @@ -420,11 +420,11 @@ return TCL_ERROR; } if (Ttk_ContentIndex(pw->paned.mgr, window) >= 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s already added", Tk_PathName(window))); - Tcl_SetErrorCode(interp, "TTK", "PANE", "PRESENT", NULL); + Tcl_SetErrorCode(interp, "TTK", "PANE", "PRESENT", (char *)NULL); return TCL_ERROR; } pane = CreatePane(interp, pw, window); if (!pane) { @@ -850,11 +850,11 @@ return TCL_ERROR; } if (sashIndex < 0 || sashIndex >= Ttk_NumberContent(pw->paned.mgr) - 1) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "sash index %" TCL_LL_MODIFIER "d out of range", sashIndex)); - Tcl_SetErrorCode(interp, "TTK", "PANE", "SASH_INDEX", NULL); + Tcl_SetErrorCode(interp, "TTK", "PANE", "SASH_INDEX", (char *)NULL); return TCL_ERROR; } pane = (Pane *)Ttk_ContentData(pw->paned.mgr, sashIndex); Index: generic/ttk/ttkScale.c ================================================================== --- generic/ttk/ttkScale.c +++ generic/ttk/ttkScale.c @@ -438,18 +438,31 @@ static double PointToValue(Scale *scalePtr, int x, int y) { Ttk_Box troughBox = TroughRange(scalePtr); - double from = 0, to = 1, fraction; + double value = 0, from = 0, to = 1, fraction; + Tcl_GetDoubleFromObj(NULL, scalePtr->scale.valueObj, &value); Tcl_GetDoubleFromObj(NULL, scalePtr->scale.fromObj, &from); Tcl_GetDoubleFromObj(NULL, scalePtr->scale.toObj, &to); if (scalePtr->scale.orient == TTK_ORIENT_HORIZONTAL) { + /* + * Bug d25b721f: drag when trough not shown due to missing display place + */ + if (troughBox.width <= 0) { + return value; + } fraction = (double)(x - troughBox.x) / (double)troughBox.width; } else { + /* + * Bug d25b721f: drag when trough not shown due to missing display place + */ + if (troughBox.height <= 0) { + return value; + } fraction = (double)(y - troughBox.y) / (double)troughBox.height; } fraction = fraction < 0 ? 0 : fraction > 1 ? 1 : fraction; Index: generic/ttk/ttkState.c ================================================================== --- generic/ttk/ttkState.c +++ generic/ttk/ttkState.c @@ -100,11 +100,11 @@ if (stateNames[j].value == 0) { if (interp) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Invalid state name %s", stateName)); - Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATE", NULL); + Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATE", (char *)NULL); } return TCL_ERROR; } if (on) { @@ -223,11 +223,11 @@ if (Ttk_StateMatches(state, &spec)) return specs[j+1]; } if (interp) { Tcl_SetObjResult(interp, Tcl_NewStringObj("No match in state map", -1)); - Tcl_SetErrorCode(interp, "TTK", "STATE", "UNMATCHED", NULL); + Tcl_SetErrorCode(interp, "TTK", "STATE", "UNMATCHED", (char *)NULL); } return NULL; } /* Ttk_GetStateMapFromObj -- @@ -249,11 +249,11 @@ if (nSpecs % 2 != 0) { if (interp) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "State map must have an even number of elements", -1)); - Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATEMAP", NULL); + Tcl_SetErrorCode(interp, "TTK", "VALUE", "STATEMAP", (char *)NULL); } return 0; } for (j = 0; j < nSpecs; j += 2) { Index: generic/ttk/ttkTheme.c ================================================================== --- generic/ttk/ttkTheme.c +++ generic/ttk/ttkTheme.c @@ -566,11 +566,11 @@ entryPtr = Tcl_CreateHashEntry(&pkgPtr->themeTable, name, &newEntry); if (!newEntry) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Theme %s already exists", name)); - Tcl_SetErrorCode(interp, "TTK", "THEME", "EXISTS", NULL); + Tcl_SetErrorCode(interp, "TTK", "THEME", "EXISTS", (char *)NULL); return NULL; } /* * Initialize new theme: @@ -610,11 +610,11 @@ entryPtr = Tcl_FindHashEntry(&pkgPtr->themeTable, name); if (!entryPtr) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "theme \"%s\" does not exist", name)); - Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "THEME", name, NULL); + Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "THEME", name, (char *)NULL); return NULL; } return (Ttk_Theme)Tcl_GetHashValue(entryPtr); } @@ -908,11 +908,11 @@ if (!newEntry) { if (interp) { Tcl_ResetResult(interp); Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Duplicate element %s", name)); - Tcl_SetErrorCode(interp, "TTK", "REGISTER_ELEMENT", "DUPE", NULL); + Tcl_SetErrorCode(interp, "TTK", "REGISTER_ELEMENT", "DUPE", (char *)NULL); } return 0; } name = (char *)Tcl_GetHashKey(&theme->elementTable, entryPtr); @@ -1378,11 +1378,11 @@ } if (name == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "error: failed to get theme name", -1)); - Tcl_SetErrorCode(interp, "TTK", "THEME", "NAMELESS", NULL); + Tcl_SetErrorCode(interp, "TTK", "THEME", "NAMELESS", (char *)NULL); return TCL_ERROR; } Tcl_SetObjResult(interp, Tcl_NewStringObj(name, -1)); return TCL_OK; @@ -1581,11 +1581,11 @@ return TCL_OK; } Tcl_SetObjResult(interp, Tcl_ObjPrintf( "element %s not found", elementName)); - Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "ELEMENT", elementName, NULL); + Tcl_SetErrorCode(interp, "TTK", "LOOKUP", "ELEMENT", elementName, (char *)NULL); return TCL_ERROR; } /* + style layout name ?spec? */ Index: generic/ttk/ttkTreeview.c ================================================================== --- generic/ttk/ttkTreeview.c +++ generic/ttk/ttkTreeview.c @@ -666,19 +666,19 @@ if (TkGetIntForIndex(columnIDObj, tv->tree.nColumns - 1, 1, &columnIndex) == TCL_OK) { if (columnIndex < 0 || columnIndex >= tv->tree.nColumns) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Column index \"%s\" out of bounds", Tcl_GetString(columnIDObj))); - Tcl_SetErrorCode(interp, "TTK", "TREE", "COLBOUND", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "COLBOUND", (char *)NULL); return NULL; } return tv->tree.columns + columnIndex; } Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Invalid column index \"%s\"", Tcl_GetString(columnIDObj))); - Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", (char *)NULL); return NULL; } /* + FindColumn -- * Look up column by name, number, or display index. @@ -694,11 +694,11 @@ return tv->tree.displayColumns[colno]; } /* else */ Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Column %s out of range", Tcl_GetString(columnIDObj))); - Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN", (char *)NULL); return NULL; } return GetColumn(interp, tv, columnIDObj); } @@ -714,11 +714,11 @@ Tcl_HashEntry *entryPtr = Tcl_FindHashEntry(&tv->tree.items, itemName); if (!entryPtr) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Item %s not found", itemName)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM", (char *)NULL); return 0; } return (TreeItem *)Tcl_GetHashValue(entryPtr); } @@ -1080,11 +1080,11 @@ return TCL_ERROR; } if (nElements != 2) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Cell id must be a list of two elements", -1)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", (char *)NULL); return TCL_ERROR; } /* Valid item/column in each pair? */ cell->item = FindItem(interp, tv, elements[0]); if (!cell->item) { @@ -1105,11 +1105,11 @@ ++i; } if (i == tv->tree.nDisplayColumns) { /* specified column unviewable */ Tcl_SetObjResult(interp, Tcl_NewStringObj( "Cell id must be in a visible column", -1)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "CELL", (char *)NULL); return TCL_ERROR; } if (displayColumn != NULL) { *displayColumn = i; } @@ -1383,18 +1383,18 @@ } if (tv->tree.nTitleColumns < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "\"#%" TCL_SIZE_MODIFIER "d\" is out of range", tv->tree.nTitleColumns)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLECOLUMNS", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLECOLUMNS", (char *)NULL); return TCL_ERROR; } if (tv->tree.nTitleItems < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "\"%" TCL_SIZE_MODIFIER "d\" is out of range", tv->tree.nTitleItems)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLEITEMS", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "TITLEITEMS", (char *)NULL); return TCL_ERROR; } if (mask & SCROLLCMD_CHANGED) { TtkScrollbarUpdateRequired(tv->tree.xscrollHandle); TtkScrollbarUpdateRequired(tv->tree.yscrollHandle); @@ -1448,11 +1448,11 @@ /* Check -height */ if (item->height < 1) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Invalid item height %d", item->height)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "HEIGHT", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "HEIGHT", (char *)NULL); goto error; } /* Check -image. */ @@ -1528,11 +1528,11 @@ } if (mask & READONLY_OPTION) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Attempt to change read-only option", -1)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "READONLY", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "READONLY", (char *)NULL); goto error; } /* Propagate column width changes to overall widget request width, * but only if the widget is currently unmapped, in order to prevent @@ -2589,11 +2589,11 @@ while (p) { if (p == item) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Cannot insert %s as descendant of %s", ItemName(tv, item), ItemName(tv, parent))); - Tcl_SetErrorCode(interp, "TTK", "TREE", "ANCESTRY", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "ANCESTRY", (char *)NULL); return 0; } p = p->parent; } return 1; @@ -3204,11 +3204,11 @@ if (column == &tv->tree.column0) { /* @@@ Maybe set -text here instead? */ Tcl_SetObjResult(interp, Tcl_NewStringObj( "Display column #0 cannot be set", -1)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_0", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_0", (char *)NULL); return TCL_ERROR; } /* Note: we don't do any error checking in the list operations, * since item->valuesObj is guaranteed to be a list. @@ -3292,11 +3292,11 @@ entryPtr = Tcl_CreateHashEntry(&tv->tree.items, itemName, &isNew); if (!isNew) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Item %s already exists", itemName)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM_EXISTS", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "ITEM_EXISTS", (char *)NULL); return TCL_ERROR; } objc -= 2; objv += 2; } else { char idbuf[16]; @@ -3352,11 +3352,11 @@ /* Sanity-check */ for (i = 0; items[i]; ++i) { if (items[i] == tv->tree.root) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Cannot detach root item", -1)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", (char *)NULL); ckfree(items); return TCL_ERROR; } } @@ -3441,11 +3441,11 @@ for (i = 0; items[i]; ++i) { if (items[i] == tv->tree.root) { ckfree(items); Tcl_SetObjResult(interp, Tcl_NewStringObj( "Cannot delete root item", -1)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "ROOT", (char *)NULL); return TCL_ERROR; } } /* Remove items from hash table. @@ -3674,11 +3674,11 @@ left = right; } Tcl_SetObjResult(interp, Tcl_ObjPrintf( "column %s is not displayed", Tcl_GetString(objv[2]))); - Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_INVISIBLE", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "COLUMN_INVISIBLE", (char *)NULL); return TCL_ERROR; } static int TreeviewDropCommand( void *recordPtr, Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[]) @@ -4104,11 +4104,11 @@ if (mask & (~TreeviewBindEventMask)) { Tk_DeleteBinding(interp, bindingTable, tag, sequence); Tcl_SetObjResult(interp, Tcl_ObjPrintf( "unsupported event %s\nonly key, button, motion, and" " virtual events supported", sequence)); - Tcl_SetErrorCode(interp, "TTK", "TREE", "BIND_EVENTS", NULL); + Tcl_SetErrorCode(interp, "TTK", "TREE", "BIND_EVENTS", (char *)NULL); return TCL_ERROR; } } } return TCL_OK; Index: library/menu.tcl ================================================================== --- library/menu.tcl +++ library/menu.tcl @@ -923,12 +923,16 @@ if {[winfo toplevel $w] ne [winfo toplevel $child]} { continue } switch -- [winfo class $child] { Menubutton { - set char2 [string index [$child cget -text] \ - [$child cget -underline]] + if {[$child cget -underline] < 0} { + set char2 "" + } else { + set char2 [string index [$child cget -text] \ + [$child cget -underline]] + } if {$char eq [string tolower $char2] || $char eq ""} { if {[$child cget -state] ne "disabled"} { return $child } } Index: macosx/tkMacOSXBitmap.c ================================================================== --- macosx/tkMacOSXBitmap.c +++ macosx/tkMacOSXBitmap.c @@ -359,11 +359,11 @@ goto end; } name = Tcl_GetStringFromObj(objv[i++], &len); if (!len) { Tcl_SetObjResult(interp, Tcl_NewStringObj("empty bitmap name", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "MACBITMAP", "BAD", NULL); + Tcl_SetErrorCode(interp, "TK", "MACBITMAP", "BAD", (char *)NULL); goto end; } if (Tcl_GetIntFromObj(interp, objv[i++], &ib.width) != TCL_OK) { goto end; } @@ -375,11 +375,11 @@ goto end; } value = Tcl_GetStringFromObj(objv[i++], &len); if (!len) { Tcl_SetObjResult(interp, Tcl_NewStringObj("empty bitmap value", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "MACBITMAP", "EMPTY", NULL); + Tcl_SetErrorCode(interp, "TK", "MACBITMAP", "EMPTY", (char *)NULL); goto end; } #if 0 if ((kind == ICON_TYPE || kind == ICON_SYSTEM)) { Tcl_DString ds; @@ -390,11 +390,11 @@ Tcl_DStringFree(&ds); Tcl_FreeEncoding(encoding); if (len > 4) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "invalid bitmap value", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "MACBITMAP", "INVALID", NULL); + Tcl_SetErrorCode(interp, "TK", "MACBITMAP", "INVALID", (char *)NULL); goto end; } } #endif ib.value = (char *)ckalloc(len + 1); Index: macosx/tkMacOSXClipboard.c ================================================================== --- macosx/tkMacOSXClipboard.c +++ macosx/tkMacOSXClipboard.c @@ -14,40 +14,40 @@ #include "tkMacOSXPrivate.h" #include "tkMacOSXConstants.h" #include "tkSelect.h" static NSInteger changeCount = -1; -static Tk_Window clipboardOwner = NULL; +static Tk_Window tkClipboardOwner = 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 = [[TKNSString alloc] - initWithTclUtfBytes:cbPtr->buffer - length:(NSUInteger)cbPtr->length]; + initWithTclUtfBytes:cbPtr->buffer + length:(NSUInteger)cbPtr->length]; [string appendString:s]; [s release]; } break; } } } [sender setString:string forType:type]; + changeCount = [sender changeCount]; [string release]; } - (void) tkProvidePasteboard: (TkDisplay *) dispPtr { @@ -59,30 +59,32 @@ } - (void) pasteboard: (NSPasteboard *) sender provideDataForType: (NSString *) type { - [self tkProvidePasteboard:TkGetDisplayList() pasteboard:sender - provideDataForType:type]; + TkDisplay *dispPtr = TkGetDisplayList(); + [self tkProvidePasteboard:dispPtr + pasteboard:[NSPasteboard generalPasteboard] + provideDataForType:NSStringPboardType]; } - (void) tkCheckPasteboard { - if (clipboardOwner && [[NSPasteboard generalPasteboard] changeCount] != + if (tkClipboardOwner && [[NSPasteboard generalPasteboard] changeCount] != changeCount) { TkDisplay *dispPtr = TkGetDisplayList(); if (dispPtr) { XEvent event; event.xany.type = SelectionClear; - event.xany.serial = NextRequest(Tk_Display(clipboardOwner)); + event.xany.serial = NextRequest(Tk_Display(tkClipboardOwner)); event.xany.send_event = False; - event.xany.window = Tk_WindowId(clipboardOwner); - event.xany.display = Tk_Display(clipboardOwner); + event.xany.window = Tk_WindowId(tkClipboardOwner); + event.xany.display = Tk_Display(tkClipboardOwner); event.xselectionclear.selection = dispPtr->clipboardAtom; Tk_QueueWindowEvent(&event, TCL_QUEUE_TAIL); } - clipboardOwner = NULL; + tkClipboardOwner = NULL; } } @end #pragma mark - @@ -142,11 +144,11 @@ } else { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s selection doesn't exist or form \"%s\" not defined", Tk_GetAtomName(tkwin, selection), Tk_GetAtomName(tkwin, target))); - Tcl_SetErrorCode(interp, "TK", "SELECTION", "EXISTS", NULL); + Tcl_SetErrorCode(interp, "TK", "SELECTION", "EXISTS", (char *)NULL); } return result; } /* @@ -174,14 +176,13 @@ TCL_UNUSED(Time)) /* The current time? */ { TkDisplay *dispPtr = TkGetDisplayList(); if (dispPtr && selection == dispPtr->clipboardAtom) { - clipboardOwner = owner ? Tk_IdToWindow(display, owner) : NULL; + tkClipboardOwner = owner ? Tk_IdToWindow(display, owner) : NULL; if (!dispPtr->clipboardActive) { NSPasteboard *pb = [NSPasteboard generalPasteboard]; - changeCount = [pb declareTypes:[NSArray array] owner:NSApp]; } } return Success; } @@ -196,51 +197,87 @@ * * Results: * None. * * Side effects: - * clipboardOwner is cleared. + * tkClipboardOwner is cleared. * *---------------------------------------------------------------------- */ void TkMacOSXSelDeadWindow( TkWindow *winPtr) { - if (winPtr && winPtr == (TkWindow *)clipboardOwner) { - clipboardOwner = NULL; + if (winPtr && winPtr == (TkWindow *)tkClipboardOwner) { + tkClipboardOwner = NULL; } } /* *---------------------------------------------------------------------- * * TkSelUpdateClipboard -- * * This function is called to force the clipboard to be updated after new - * data is added. + * data is added or the clipboard has been cleared. + * + * The nil Object is declared to be the owner. This is done in a way + * which triggers an incremeent of the pasteboard's changeCount property, + * notifying clipboard managers that the value has changed. * * Results: * None. * * Side effects: - * None. + * Ownership contents and attributes of the general NSPasteboard + * may change. * *---------------------------------------------------------------------- */ +/* + * Apple says that the changeCount is incremented whenever the ownership + * of a pasteboard type changes. They actually mean that the changeCount + * is incremented when declareTypes is called, but is left unchanged when + * addTypes is called. (Both methods can change ownership in some sense + * and both return the new changeCount.) + * + * Apple also says that addTypes "promises" that the owner object (if not nil) + * will provide data of the specified type, while declareTypes "prepares" the + * pasteboard. Maybe that explains something. + */ + void TkSelUpdateClipboard( - TCL_UNUSED(TkWindow *), /* Window associated with clipboard. */ - TCL_UNUSED(TkClipboardTarget *)) - /* Info about the content. */ + TCL_UNUSED(TkWindow*), /* Window associated with clipboard. */ + clipboardOption option) /* option passed to clipboard command */ { NSPasteboard *pb = [NSPasteboard generalPasteboard]; + switch (option) { + case CLIPBOARD_APPEND: + /* + * This increments the changeCount so that clipboard managers will be + * able to see and manage the clip. + */ - changeCount = [pb addTypes:[NSArray arrayWithObject:NSStringPboardType] - owner:NSApp]; + changeCount = [pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] + owner:nil]; + [NSApp tkProvidePasteboard: TkGetDisplayList() + pasteboard: (NSPasteboard *) pb + provideDataForType: (NSString *) NSStringPboardType]; + break; + case CLIPBOARD_CLEAR: + changeCount = [pb declareTypes:[NSArray arrayWithObject:NSStringPboardType] + owner:nil]; + [NSApp tkProvidePasteboard: TkGetDisplayList() + pasteboard: (NSPasteboard *) pb + provideDataForType: (NSString *) NSStringPboardType]; + break; + default: + break; + } } /* *-------------------------------------------------------------- * @@ -262,11 +299,11 @@ Tk_Window tkwin, /* Window for which event was targeted. */ XEvent *eventPtr) /* X event: either SelectionClear, * SelectionRequest, or SelectionNotify. */ { if (eventPtr->type == SelectionClear) { - clipboardOwner = NULL; + tkClipboardOwner = NULL; TkSelClearSelection(tkwin, eventPtr); } } /* Index: macosx/tkMacOSXCursor.c ================================================================== --- macosx/tkMacOSXCursor.c +++ macosx/tkMacOSXCursor.c @@ -391,11 +391,11 @@ } if (!macCursorPtr || (!macCursorPtr->macCursor && macCursorPtr->type != NONE)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad cursor spec \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", (char *)NULL); if (macCursorPtr) { ckfree(macCursorPtr); macCursorPtr = NULL; } } Index: macosx/tkMacOSXDialog.c ================================================================== --- macosx/tkMacOSXDialog.c +++ macosx/tkMacOSXDialog.c @@ -490,11 +490,11 @@ goto end; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "COLORDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "COLORDIALOG", "VALUE", (char *)NULL); goto end; } value = Tcl_GetString(objv[i + 1]); switch (index) { @@ -748,11 +748,11 @@ goto end; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "FILEDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "FILEDIALOG", "VALUE", (char *)NULL); goto end; } switch (index) { case OPEN_DEFAULT: break; @@ -1034,11 +1034,11 @@ goto end; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "FILEDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "FILEDIALOG", "VALUE", (char *)NULL); goto end; } switch (index) { case SAVE_DEFAULT: str = Tcl_GetStringFromObj(objv[i + 1], &len); @@ -1276,11 +1276,11 @@ goto end; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "DIRDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "DIRDIALOG", "VALUE", (char *)NULL); goto end; } switch (index) { case CHOOSE_INITDIR: str = Tcl_GetStringFromObj(objv[i + 1], &len); @@ -1460,11 +1460,11 @@ goto end; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "MSGBOX", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "MSGBOX", "VALUE", (char *)NULL); goto end; } switch (index) { case ALERT_DEFAULT: /* @@ -1545,11 +1545,11 @@ defaultNativeButtonIndex = alertButtonIndexAndTypeToNativeButtonIndex[typeIndex][index]; if (!defaultNativeButtonIndex) { Tcl_SetObjResult(interp, Tcl_NewStringObj("Illegal default option", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "MSGBOX", "DEFAULT", NULL); + Tcl_SetErrorCode(interp, "TK", "MSGBOX", "DEFAULT", (char *)NULL); goto end; } } [alert setIcon:[NSApp applicationIconImage]]; [alert setAlertStyle:alertStyles[iconIndex]]; @@ -1908,20 +1908,20 @@ return TCL_OK; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "VALUE", (char *)NULL); return TCL_ERROR; } switch (optionIndex) { case FontchooserVisible: { const char *msg = "cannot change read-only option " "\"-visible\": use the show or hide command"; Tcl_SetObjResult(interp, Tcl_NewStringObj(msg, TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "READONLY", NULL); + Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "READONLY", (char *)NULL); return TCL_ERROR; } case FontchooserParent: { Tk_Window parent = Tk_NameToWindow(interp, Tcl_GetString(objv[i+1]), tkwin); Index: macosx/tkMacOSXEmbed.c ================================================================== --- macosx/tkMacOSXEmbed.c +++ macosx/tkMacOSXEmbed.c @@ -212,11 +212,11 @@ Container *containerPtr; if (winPtr->window != None) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "can't modify container after widget is created", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "POST_CREATE", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "POST_CREATE", (char *)NULL); return TCL_ERROR; } /* * Decode the container window ID, and look for it among the list of @@ -234,18 +234,18 @@ usePtr = (TkWindow *) Tk_IdToWindow(winPtr->display, (Window) parent); if (usePtr == NULL) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "couldn't create child of window \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "NO_TARGET", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "NO_TARGET", (char *)NULL); } return TCL_ERROR; } else if (!(usePtr->flags & TK_CONTAINER)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" doesn't have -container option set", usePtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "CONTAINER", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "CONTAINER", (char *)NULL); return TCL_ERROR; } /* * Since we do not allow embedding into windows belonging to a different Index: macosx/tkMacOSXFont.c ================================================================== --- macosx/tkMacOSXFont.c +++ macosx/tkMacOSXFont.c @@ -461,11 +461,11 @@ len = [S length]; if (TkGetIntForIndex(objv[2], ulen - 1, 0, &idx) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad index \"%s\": must be integer?[+-]integer?, end?[+-]integer?, or \"\"", Tcl_GetString(objv[2]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "INDEX", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "INDEX", (char *)NULL); return TCL_ERROR; } if (idx >= ulen) { idx = len; } else if (idx > 0 && len != ulen) { @@ -520,11 +520,11 @@ len = [S length]; if (TkGetIntForIndex(objv[2], ulen - 1, 0, &idx) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad index \"%s\": must be integer?[+-]integer?, end?[+-]integer?, or \"\"", Tcl_GetString(objv[2]))); - Tcl_SetErrorCode(interp, "TK", "VALUE", "INDEX", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "INDEX", (char *)NULL); return TCL_ERROR; } if (idx >= ulen) { idx = len; } else if (idx > 0 && len != ulen) { Index: macosx/tkMacOSXImage.c ================================================================== --- macosx/tkMacOSXImage.c +++ macosx/tkMacOSXImage.c @@ -1470,11 +1470,11 @@ modelPtr->height = oldHeight; } if (modelPtr->sourceObj == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj("-source is required.", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", (char *)NULL); goto errorExit; } objPtr = Tk_GetOptionValue(interp, (char *) modelPtr, optionTable, asOption, NULL); @@ -1481,11 +1481,11 @@ if (Tcl_GetIndexFromObj(interp, objPtr, sourceInterpretations, "option", 0, &sourceInterpretation) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Unknown interpretation for source in -as option. " "Should be name, file, path, or filetype.", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", (char *)NULL); goto errorExit; } source = [[NSString alloc] initWithUTF8String: Tcl_GetString(modelPtr->sourceObj)]; switch (sourceInterpretation) { @@ -1542,22 +1542,22 @@ switch(sourceInterpretation) { case NAME_SOURCE: Tcl_SetObjResult(interp, Tcl_NewStringObj("Unknown named NSImage.\n" "Try omitting ImageName, " "e.g. use NSCaution for NSImageNameCaution.", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", (char *)NULL); goto errorExit; case FILE_SOURCE: Tcl_SetObjResult(interp, Tcl_NewStringObj( "Failed to load image file.\n", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", (char *)NULL); goto errorExit; default: Tcl_SetObjResult(interp, Tcl_NewStringObj( "Unrecognized file type.\n" "If using a filename extension, do not include the dot.\n", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "IMAGE", "SYSTEM", "BAD_VALUE", (char *)NULL); goto errorExit; } } /* Index: macosx/tkMacOSXInit.c ================================================================== --- macosx/tkMacOSXInit.c +++ macosx/tkMacOSXInit.c @@ -40,10 +40,12 @@ * Forward declarations... */ static Tcl_ObjCmdProc2 TkMacOSXGetAppPathObjCmd; static Tcl_ObjCmdProc2 TkMacOSVersionObjCmd; +static Tcl_ObjCmdProc2 TkMacOSXGetInfoAsJSONObjCmd; + #pragma mark TKApplication(TKInit) @implementation TKApplication @synthesize poolLock = _poolLock; @@ -699,10 +701,12 @@ TkMacOSXStandardAboutPanelObjCmd, NULL, NULL); Tcl_CreateObjCommand2(interp, "::tk::mac::iconBitmap", TkMacOSXIconBitmapObjCmd, NULL, NULL); Tcl_CreateObjCommand2(interp, "::tk::mac::GetAppPath", TkMacOSXGetAppPathObjCmd, NULL, NULL); + Tcl_CreateObjCommand2(interp, "::tk::mac::GetInfoAsJSON", + TkMacOSXGetInfoAsJSONObjCmd, NULL, NULL); Tcl_CreateObjCommand2(interp, "::tk::mac::macOSVersion", TkMacOSVersionObjCmd, NULL, NULL); MacSystrayInit(interp); MacPrint_Init(interp); @@ -725,11 +729,11 @@ *---------------------------------------------------------------------- */ static int TkMacOSXGetAppPathObjCmd( - TCL_UNUSED(void *), + TCL_UNUSED(void *), /* clientData */ Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[]) { if (objc != 1) { @@ -813,11 +817,11 @@ *---------------------------------------------------------------------- */ static int TkMacOSVersionObjCmd( - TCL_UNUSED(void *), + TCL_UNUSED(void *), /* clientData */ Tcl_Interp *interp, Tcl_Size objc, Tcl_Obj *const objv[]) { static char version[16] = ""; @@ -829,10 +833,62 @@ snprintf(version, 16, "%d", [NSApp macOSVersion]); } Tcl_SetResult(interp, version, NULL); return TCL_OK; } + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXGetInfoAsJSONObjCmd -- + * + * Returns the contents of the Info.plist file in the application + * bundle as a JSON-encoded Tcl string. + * + * Results: + * Returns the JSON encoding of the Info.plist file.. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +static int +TkMacOSXGetInfoAsJSONObjCmd( + TCL_UNUSED(void *), /* clientData */ + Tcl_Interp *interp, + Tcl_Size objc, + Tcl_Obj *const objv[]) +{ + static char *bytes = NULL; + + if (objc != 1) { + Tcl_WrongNumArgs(interp, 1, objv, NULL); + return TCL_ERROR; + } + + if (bytes == NULL) { + NSJSONWritingOptions opt = NSJSONWritingPrettyPrinted; + NSDictionary *infoDict = [[NSBundle mainBundle] + infoDictionary]; + NSData *infoAsJSON = [NSJSONSerialization + dataWithJSONObject: infoDict + options:opt + error:nil]; + if (infoAsJSON.length) { + int buffer_size = (int) infoAsJSON.length + 1; + bytes = malloc(buffer_size); + strlcpy(bytes, infoAsJSON.bytes, buffer_size); + } + } + if (bytes) { + Tcl_SetObjResult(interp, Tcl_NewStringObj(bytes, TCL_INDEX_NONE)); + return TCL_OK; + } + return TCL_ERROR; +} /* *---------------------------------------------------------------------- * * TkpDisplayWarning -- Index: macosx/tkMacOSXTest.c ================================================================== --- macosx/tkMacOSXTest.c +++ macosx/tkMacOSXTest.c @@ -340,11 +340,11 @@ } type = types[index]; if (Tcl_GetIntFromObj(interp, objv[2], &keysym) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "keysym must be an integer")); - Tcl_SetErrorCode(interp, "TK", "TEST", "INJECT", "KEYSYM", NULL); + Tcl_SetErrorCode(interp, "TK", "TEST", "INJECT", "KEYSYM", (char *)NULL); return TCL_ERROR; } macKC.uint = XKeysymToKeycode(NULL, keysym); for (i = 3; i < objc; i++) { if (Tcl_GetIndexFromObjStruct(interp, objv[i], argStrings, Index: macosx/tkMacOSXWm.c ================================================================== --- macosx/tkMacOSXWm.c +++ macosx/tkMacOSXWm.c @@ -1466,11 +1466,11 @@ if (TkGetWindowFromObj(NULL, tkwin, objv[2], (Tk_Window *) &winPtr) == TCL_OK) { if (winPtr->wmInfoPtr->window != NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Cannot change the class after the mac window is created.",-1)); - Tcl_SetErrorCode(interp, "TK", "CLASS_CHANGE", NULL); + Tcl_SetErrorCode(interp, "TK", "CLASS_CHANGE", (char *)NULL); return TCL_ERROR; } } else { winPtr = NULL; } @@ -1628,11 +1628,11 @@ } if ((numer1 <= 0) || (denom1 <= 0) || (numer2 <= 0) || (denom2 <= 0)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "aspect number can't be <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "ASPECT", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ASPECT", (char *)NULL); return TCL_ERROR; } wmPtr->minAspect.x = numer1; wmPtr->minAspect.y = denom1; wmPtr->maxAspect.x = numer2; @@ -1790,11 +1790,11 @@ } else if (![macWindow isKindOfClass: [NSPanel class]] && styleMaskBits[index].allowed == NSWindowClass_panel) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "styleMask bit \"%s\" can only be used with an NSPanel", styleMaskBits[index].bitname)); - Tcl_SetErrorCode(interp, "TK", "INVALID_STYLEMASK_BIT", NULL); + Tcl_SetErrorCode(interp, "TK", "INVALID_STYLEMASK_BIT", (char *)NULL); return TCL_ERROR; } else { styleMaskValue |= styleMaskBits[index].bitvalue; } /* @@ -1858,11 +1858,11 @@ char *valueString; Tcl_Size length; if ([NSApp macOSVersion] < 101300) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Tabbing identifiers require macOS 10.13", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "TABBINGID", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TABBINGID", (char *)NULL); return TCL_ERROR; } valueString = Tcl_GetStringFromObj(value, &length); identifier = [NSString stringWithUTF8String:valueString]; [macWindow setTabbingIdentifier: identifier]; @@ -2153,11 +2153,11 @@ } } if (!winPtr) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Only -class, -tabbingid, or -tabbingmode can be set before the window exists.")); - Tcl_SetErrorCode(interp, "TK", "NO_WINDOW", NULL); + Tcl_SetErrorCode(interp, "TK", "NO_WINDOW", (char *)NULL); return TCL_ERROR; } if (winPtr && winPtr->window == None) { Tk_MakeWindowExist((Tk_Window)winPtr); } @@ -2438,17 +2438,17 @@ } if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't deiconify %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "ICON", (char *)NULL); return TCL_ERROR; } else if (winPtr->flags & TK_EMBEDDED) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't deiconify %s: it is an embedded window", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "EMBEDDED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "EMBEDDED", (char *)NULL); return TCL_ERROR; } if (winPtr->window) { win = TkMacOSXGetNSWindowForDrawable(winPtr->window); @@ -2810,11 +2810,11 @@ WmUpdateGeom(wmPtr, winPtr); return TCL_OK; error: Tcl_SetObjResult(interp, Tcl_NewStringObj(errorMsg, TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "GRID", (char *)NULL); return TCL_ERROR; } /* *---------------------------------------------------------------------- @@ -3057,23 +3057,23 @@ NULL); return TCL_ERROR; } else if (wmPtr->container != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is a transient", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "TRANSIENT", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "TRANSIENT", (char *)NULL); return TCL_ERROR; } else if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is an icon for \"%s\"", winPtr->pathName, Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "ICON", (char *)NULL); return TCL_ERROR; } else if (winPtr->flags & TK_EMBEDDED) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is an embedded window", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "EMBEDDED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "EMBEDDED", (char *)NULL); return TCL_ERROR; } TkpWmSetState(winPtr, IconicState); if (wmPtr->icon) { @@ -3278,11 +3278,11 @@ tk_icon = Tk_GetImage(interp, tkwin, icon, NULL, NULL); if (tk_icon == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't use \"%s\" as iconphoto: not a photo image", icon)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "PHOTO", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "PHOTO", (char *)NULL); return TCL_ERROR; } Tk_SizeOfImage(tk_icon, &width, &height); if (width != 0 && height != 0) { @@ -3291,11 +3291,11 @@ } Tk_FreeImage(tk_icon); if (newIcon == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "failed to create an iconphoto with image \"%s\"", icon)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "IMAGE", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "IMAGE", (char *)NULL); return TCL_ERROR; } [NSApp setApplicationIconImage: newIcon]; return TCL_OK; } @@ -3422,11 +3422,11 @@ wmPtr2 = ((TkWindow *)tkwin2)->wmInfoPtr; if (wmPtr2->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s is already an icon for %s", Tcl_GetString(objv[3]), Tk_PathName(wmPtr2->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "ICON", (char *)NULL); return TCL_ERROR; } if (wmPtr->icon != NULL) { NSWindow *win = nil; TkWindow *oldIcon = (TkWindow *)wmPtr->icon; @@ -3500,11 +3500,11 @@ if (!Tk_IsManageable(frameWin)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" is not manageable: must be a" " frame, labelframe or toplevel", Tk_PathName(frameWin))); - Tcl_SetErrorCode(interp, "TK", "WM", "MANAGE", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "MANAGE", (char *)NULL); return TCL_ERROR; } /* * Draw the managed widget at the top left corner of its toplevel. @@ -4083,23 +4083,23 @@ if (!Tk_IsTopLevel(winPtr2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't a top-level window", winPtr2->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "TOPLEVEL", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "TOPLEVEL", (char *)NULL); return TCL_ERROR; } if (!Tk_IsMapped(winPtr)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't mapped", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", (char *)NULL); return TCL_ERROR; } else if (!Tk_IsMapped(winPtr2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't mapped", winPtr2->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", (char *)NULL); return TCL_ERROR; } /* * Lookup stacking order of all toplevels that are children of "." and @@ -4108,11 +4108,11 @@ windows = TkWmStackorderToplevel(winPtr->mainPtr->winPtr); if (windows == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "TkWmStackorderToplevel failed", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "FAIL", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "FAIL", (char *)NULL); return TCL_ERROR; } for (windowPtr = windows; *windowPtr ; windowPtr++) { if (*windowPtr == winPtr) { @@ -4184,18 +4184,18 @@ if (objc == 4) { if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't change state of \"%s\": it is an icon for \"%s\"", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "ICON", (char *)NULL); return TCL_ERROR; } if (winPtr->flags & TK_EMBEDDED) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't change state of \"%s\": it is an embedded window", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "EMBEDDED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "EMBEDDED", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, sizeof(char *), "argument", 0, &index) != TCL_OK) { @@ -4373,11 +4373,11 @@ if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't make \"%s\" a transient: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", (char *)NULL); return TCL_ERROR; } wmPtr2 = containerPtr->wmInfoPtr; @@ -4387,21 +4387,21 @@ if (wmPtr2 != NULL && wmPtr2->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't make \"%s\" a container: it is an icon for %s", Tcl_GetString(objv[3]), Tk_PathName(wmPtr2->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", (char *)NULL); return TCL_ERROR; } for (w = containerPtr; w != NULL && w->wmInfoPtr != NULL; w = (TkWindow *)w->wmInfoPtr->container) { if (w == winPtr) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't set \"%s\" as container: would cause management loop", Tk_PathName(containerPtr))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "SELF", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "SELF", (char *)NULL); return TCL_ERROR; } } /* @@ -4527,11 +4527,11 @@ if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't withdraw %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "WITHDRAW", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "WITHDRAW", "ICON", (char *)NULL); return TCL_ERROR; } TkpWmSetState(winPtr, WithdrawnState); @@ -5203,11 +5203,11 @@ return TCL_OK; error: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad geometry specifier \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GEOMETRY", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GEOMETRY", (char *)NULL); return TCL_ERROR; } /* *---------------------------------------------------------------------- @@ -6289,11 +6289,11 @@ return TCL_ERROR; } if (!(winPtr->flags & TK_TOP_LEVEL)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't a top-level window", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WINDOWSTYLE", "TOPLEVEL", NULL); + Tcl_SetErrorCode(interp, "TK", "WINDOWSTYLE", "TOPLEVEL", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIndexFromObjStruct(interp, objv[1], subcmds, sizeof(char *), "option", 0, &index) != TCL_OK) { @@ -6313,11 +6313,11 @@ } if (objc == 4 && [NSApp macOSVersion] < 101400) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Window appearances cannot be changed before OSX 10.14.", -1)); - Tcl_SetErrorCode(interp, "TK", "WINDOWSTYLE", "APPEARANCE", NULL); + Tcl_SetErrorCode(interp, "TK", "WINDOWSTYLE", "APPEARANCE", (char *)NULL); return TCL_ERROR; } return WmWinAppearance(interp, winPtr, objc, objv); case TKMWS_ISDARK: if ((objc != 3)) { Index: tests/entry.test ================================================================== --- tests/entry.test +++ tests/entry.test @@ -3329,11 +3329,11 @@ } -cleanup { destroy .e } -result {focusout {.e -1 -1 newdata abcd {} focusout forced}} -# proc doval changed - returns 0 +# Using validateCmd3, which returns 0 test entry-19.18 {entry widget validation} -setup { unset -nocomplain textVar validationData } -body { entry .e -validate all \ -validatecommand $validateCmd3 \ @@ -3349,11 +3349,11 @@ destroy .e } -result {none {.e -1 -1 nextdata newdata {} all forced}} ## This sets validate to none because it shows that we prevent a possible ## loop condition in the validation, when the entry textvar is also set -# proc doval2 used +# Using validateCmd2 test entry-19.19 {entry widget validation} -setup { unset -nocomplain textVar validationData } -body { entry .e -validate all \ -validatecommand $validateCmd3 \ Index: tests/testutils.tcl ================================================================== --- tests/testutils.tcl +++ tests/testutils.tcl @@ -360,11 +360,11 @@ catch {eval [loadTkCommand] $name} } # childTkProcess -- # - # Create a new Tk application in a child process, and enable it to + # Create a new Tk application in a child process, and enable it to # evaluate scripts on our behalf. # # Suggestion: replace with child interp or thread ? # proc childTkProcess {subcmd args} { Index: unix/Makefile.in ================================================================== --- unix/Makefile.in +++ unix/Makefile.in @@ -1797,12 +1797,12 @@ done;) $(INSTALL_DATA_DIR) $(DISTDIR)/doc $(DIST_INSTALL_DATA) $(TOP_DIR)/license.terms $(TOP_DIR)/doc/*.[13n] \ $(TOP_DIR)/doc/man.macros $(DISTDIR)/doc $(INSTALL_DATA_DIR) $(DISTDIR)/tests - $(DIST_INSTALL_DATA) $(TOP_DIR)/license.terms $(TEST_DIR)/*.{test,tcl} \ - $(TEST_DIR)/README $(TEST_DIR)/*.{gif,png,ppm,xbm} \ + $(DIST_INSTALL_DATA) $(TOP_DIR)/license.terms $(TEST_DIR)/testutils.GUIDE \ + $(TEST_DIR)/README $(TEST_DIR)/*.{test,tcl,gif,png,ppm,xbm} \ $(TEST_DIR)/option.file* $(DISTDIR)/tests $(INSTALL_DATA_DIR) $(DISTDIR)/tests/ttk $(DIST_INSTALL_DATA) $(TEST_DIR)/ttk/*.{svg,test,tcl} $(DISTDIR)/tests/ttk mkdir -p $(DISTDIR)/.github/workflows cp -p $(TOP_DIR)/.github/workflows/*.yml $(DISTDIR)/.github/workflows Index: unix/tkUnixCursor.c ================================================================== --- unix/tkUnixCursor.c +++ unix/tkUnixCursor.c @@ -275,31 +275,31 @@ bg.red = bg.green = bg.blue = 65535; } else { if (TkParseColor(display, Tk_Colormap(tkwin), argv[1], &fg) == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", argv[1])); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", (char *)NULL); goto cleanup; } if (argc == 2) { bg.red = bg.green = bg.blue = 0; maskIndex = namePtr->shape; } else if (TkParseColor(display, Tk_Colormap(tkwin), argv[2], &bg) == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", argv[2])); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", (char *)NULL); goto cleanup; } } dispPtr = ((TkWindow *) tkwin)->dispPtr; if (dispPtr->cursorFont == None) { dispPtr->cursorFont = XLoadFont(display, CURSORFONT); if (dispPtr->cursorFont == None) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't load cursor font", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "FONT", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "FONT", (char *)NULL); goto cleanup; } } cursor = XCreateGlyphCursor(display, dispPtr->cursorFont, dispPtr->cursorFont, namePtr->shape, maskIndex, @@ -311,11 +311,11 @@ if (!inTkTable && Tcl_IsSafe(interp)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "cannot get cursor from a file in a safe interpreter", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "SAFE", "CURSOR_FILE", NULL); + Tcl_SetErrorCode(interp, "TK", "SAFE", "CURSOR_FILE", (char *)NULL); cursorPtr = NULL; goto cleanup; } /* @@ -352,11 +352,11 @@ badString: if (argv) { ckfree(argv); } Tcl_SetObjResult(interp, Tcl_ObjPrintf("bad cursor spec \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", (char *)NULL); return NULL; } /* *---------------------------------------------------------------------- @@ -426,11 +426,11 @@ data = TkGetBitmapData(NULL, tkCursorPtr->data, NULL, &width, &height, &xHot, &yHot); if (data == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "error reading bitmap data for \"%s\"", argv[0])); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "BITMAP_DATA", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "BITMAP_DATA", (char *)NULL); goto cleanup; } source = XCreateBitmapFromData(display, drawable, data, (unsigned)width, (unsigned)height); ckfree(data); @@ -438,11 +438,11 @@ if (TkReadBitmapFile(display, drawable, &argv[0][1], (unsigned *) &width, (unsigned *) &height, &source, &xHot, &yHot) != BitmapSuccess) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "cleanup reading bitmap file \"%s\"", &argv[0][1])); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "BITMAP_FILE", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "BITMAP_FILE", (char *)NULL); goto cleanup; } } if ((xHot < 0) || (yHot < 0) || (xHot >= width) || (yHot >= height)) { @@ -451,11 +451,11 @@ "bad hot spot in bitmap data for \"%s\"", argv[0])); } else { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad hot spot in bitmap file \"%s\"", &argv[0][1])); } - Tcl_SetErrorCode(interp, "TK", "CURSOR", "HOTSPOT", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "HOTSPOT", (char *)NULL); goto cleanup; } /* * Parse color names from optional fg and bg arguments @@ -467,11 +467,11 @@ } else if (argc == 2) { fgColor = argv[1]; if (TkParseColor(display, Tk_Colormap(tkwin), fgColor, &fg) == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", fgColor)); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", (char *)NULL); goto cleanup; } if (inTkTable) { bg.red = bg.green = bg.blue = 0; } else { @@ -487,17 +487,17 @@ bgColor = argv[3]; } if (TkParseColor(display, Tk_Colormap(tkwin), fgColor, &fg) == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", fgColor)); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", (char *)NULL); goto cleanup; } if (TkParseColor(display, Tk_Colormap(tkwin), bgColor, &bg) == 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid color name \"%s\"", bgColor)); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "COLOR", (char *)NULL); goto cleanup; } } /* @@ -524,11 +524,11 @@ data = TkGetBitmapData(NULL, tkCursorPtr->mask, NULL, &maskWidth, &maskHeight, &dummy1, &dummy2); if (data == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "error reading bitmap mask data for \"%s\"", argv[0])); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "MASK_DATA", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "MASK_DATA", (char *)NULL); goto cleanup; } mask = XCreateBitmapFromData(display, drawable, data, (unsigned)maskWidth, (unsigned)maskHeight); @@ -538,19 +538,19 @@ if (TkReadBitmapFile(display, drawable, argv[1], (unsigned int *) &maskWidth, (unsigned int *) &maskHeight, &mask, &dummy1, &dummy2) != BitmapSuccess) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "cleanup reading bitmap file \"%s\"", argv[1])); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "MASK_FILE", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "MASK_FILE", (char *)NULL); goto cleanup; } } if ((maskWidth != width) || (maskHeight != height)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "source and mask bitmaps have different sizes", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "CURSOR", "SIZE_MATCH", NULL); + Tcl_SetErrorCode(interp, "TK", "CURSOR", "SIZE_MATCH", (char *)NULL); goto cleanup; } cursor = XCreatePixmapCursor(display, source, mask, &fg, &bg, (unsigned) xHot, (unsigned) yHot); Index: unix/tkUnixEmbed.c ================================================================== --- unix/tkUnixEmbed.c +++ unix/tkUnixEmbed.c @@ -110,11 +110,11 @@ Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (winPtr->window != None) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "can't modify container after widget is created", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "POST_CREATE", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "POST_CREATE", (char *)NULL); return TCL_ERROR; } if (TkpScanWindowId(interp, string, &parent) != TCL_OK) { return TCL_ERROR; } @@ -122,11 +122,11 @@ usePtr = (TkWindow *) Tk_IdToWindow(winPtr->display, parent); if (usePtr != NULL && !(usePtr->flags & TK_CONTAINER)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" doesn't have -container option set", usePtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "CONTAINER", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "CONTAINER", (char *)NULL); return TCL_ERROR; } /* * Tk sets the window colormap to the screen default colormap in @@ -145,11 +145,11 @@ Tk_DeleteErrorHandler(handler); if (anyError) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "couldn't create child of window \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "NO_TARGET", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "NO_TARGET", (char *)NULL); } return TCL_ERROR; } Tk_SetWindowVisual(tkwin, parentAtts.visual, parentAtts.depth, parentAtts.colormap); Index: unix/tkUnixSelect.c ================================================================== --- unix/tkUnixSelect.c +++ unix/tkUnixSelect.c @@ -581,11 +581,11 @@ return; } if (bytesAfter != 0) { Tcl_SetObjResult(retrPtr->interp, Tcl_NewStringObj( "selection property too large", TCL_INDEX_NONE)); - Tcl_SetErrorCode(retrPtr->interp, "TK", "SELECTION", "SIZE",NULL); + Tcl_SetErrorCode(retrPtr->interp, "TK", "SELECTION", "SIZE", (char *)NULL); retrPtr->result = TCL_ERROR; XFree(propInfo); return; } if ((type == XA_STRING) || (type == dispPtr->textAtom) @@ -760,11 +760,11 @@ * selection return. */ Tcl_SetObjResult(retrPtr->interp, Tcl_NewStringObj( "selection owner didn't respond", TCL_INDEX_NONE)); - Tcl_SetErrorCode(retrPtr->interp, "TK", "SELECTION", "IGNORED", NULL); + Tcl_SetErrorCode(retrPtr->interp, "TK", "SELECTION", "IGNORED", (char *)NULL); retrPtr->result = TCL_ERROR; } else { retrPtr->timeout = Tcl_CreateTimerHandler(1000, SelTimeoutProc, retrPtr); } @@ -1148,11 +1148,11 @@ return; } if (bytesAfter != 0) { Tcl_SetObjResult(retrPtr->interp, Tcl_NewStringObj( "selection property too large", TCL_INDEX_NONE)); - Tcl_SetErrorCode(retrPtr->interp, "TK", "SELECTION", "SIZE", NULL); + Tcl_SetErrorCode(retrPtr->interp, "TK", "SELECTION", "SIZE", (char *)NULL); retrPtr->result = TCL_ERROR; goto done; } if ((type == XA_STRING) || (type == retrPtr->winPtr->dispPtr->textAtom) Index: unix/tkUnixWm.c ================================================================== --- unix/tkUnixWm.c +++ unix/tkUnixWm.c @@ -1223,11 +1223,11 @@ } if ((numer1 <= 0) || (denom1 <= 0) || (numer2 <= 0) || (denom2 <= 0)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "aspect number can't be <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "ASPECT", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "ASPECT", (char *)NULL); return TCL_ERROR; } wmPtr->minAspect.x = numer1; wmPtr->minAspect.y = denom1; wmPtr->maxAspect.x = numer2; @@ -1722,18 +1722,18 @@ } if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't deiconify %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "ICON", (char *)NULL); return TCL_ERROR; } if (winPtr->flags & TK_EMBEDDED) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't deiconify %s: it is an embedded window", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "EMBEDDED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "EMBEDDED", (char *)NULL); return TCL_ERROR; } wmPtr->flags &= ~WM_WITHDRAWN; TkpWmSetState(winPtr, NormalState); return TCL_OK; @@ -2017,29 +2017,29 @@ return TCL_ERROR; } if (reqWidth < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "baseWidth can't be < 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } if (reqHeight < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "baseHeight can't be < 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } if (widthInc <= 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "widthInc can't be <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } if (heightInc <= 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "heightInc can't be <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } Tk_SetGrid((Tk_Window) winPtr, reqWidth, reqHeight, widthInc, heightInc); } @@ -2266,31 +2266,31 @@ } if (wmPtr->containerPtr != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is a transient", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "TRANSIENT", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "TRANSIENT", (char *)NULL); return TCL_ERROR; } if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is an icon for \"%s\"", winPtr->pathName, Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "ICON", (char *)NULL); return TCL_ERROR; } if (winPtr->flags & TK_EMBEDDED) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is an embedded window", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "EMBEDDED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "EMBEDDED", (char *)NULL); return TCL_ERROR; } if (TkpWmSetState(winPtr, IconicState) == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't send iconify message to window manager", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } return TCL_OK; } @@ -2459,11 +2459,11 @@ photo = Tk_FindPhoto(interp, Tcl_GetString(objv[i])); if (photo == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't use \"%s\" as iconphoto: not a photo image", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "PHOTO", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "PHOTO", (char *)NULL); return TCL_ERROR; } Tk_PhotoGetSize(photo, &width, &height); /* @@ -2492,11 +2492,11 @@ if (photo == NULL) { ckfree(iconPropertyData); Tcl_SetObjResult(interp, Tcl_ObjPrintf( "failed to create an iconphoto with image \"%s\"", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "IMAGE", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "IMAGE", (char *)NULL); return TCL_ERROR; } Tk_PhotoGetSize(photo, &width, &height); Tk_PhotoGetImage(photo, &block); @@ -2676,19 +2676,19 @@ } if (!Tk_IsTopLevel(tkwin2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't use %s as icon window: not at top level", Tcl_GetString(objv[3]))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "INNER", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "INNER", (char *)NULL); return TCL_ERROR; } wmPtr2 = ((TkWindow *) tkwin2)->wmInfoPtr; if (wmPtr2->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s is already an icon for %s", Tcl_GetString(objv[3]), Tk_PathName(wmPtr2->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "ICON", (char *)NULL); return TCL_ERROR; } if (wmPtr->icon != NULL) { WmInfo *wmPtr3 = ((TkWindow *) wmPtr->icon)->wmInfoPtr; @@ -2720,11 +2720,11 @@ Tk_WindowId(wmPtr2->wrapperPtr), Tk_ScreenNumber(tkwin2)) == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't send withdraw message to window manager", -1)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } WaitForMapNotify((TkWindow *) tkwin2, 0); } } @@ -2763,11 +2763,11 @@ if (!Tk_IsTopLevel(frameWin)) { if (!Tk_IsManageable(frameWin)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" is not manageable: must be a frame," " labelframe or toplevel", Tk_PathName(frameWin))); - Tcl_SetErrorCode(interp, "TK", "WM", "MANAGE", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "MANAGE", (char *)NULL); return TCL_ERROR; } TkFocusSplit(winPtr); Tk_UnmapWindow(frameWin); winPtr->flags |= @@ -3101,11 +3101,11 @@ */ if (strcmp(Tcl_GetString(objv[3]), "_NET_WM_PING") == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "may not alter handling of that protocol", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "PROTOCOL", "RESERVED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "PROTOCOL", "RESERVED", (char *)NULL); return TCL_ERROR; } /* * Delete any current protocol handler, then create a new one with the @@ -3331,25 +3331,25 @@ if (!Tk_IsTopLevel(winPtr2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't a top-level window", winPtr2->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "TOPLEVEL", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "TOPLEVEL", (char *)NULL); return TCL_ERROR; } if (!Tk_IsMapped(winPtr)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't mapped", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", (char *)NULL); return TCL_ERROR; } if (!Tk_IsMapped(winPtr2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't mapped", winPtr2->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", (char *)NULL); return TCL_ERROR; } /* * Lookup stacking order of all toplevels that are children of "." and @@ -3358,11 +3358,11 @@ windows = TkWmStackorderToplevel(winPtr->mainPtr->winPtr); if (windows == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "TkWmStackorderToplevel failed", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } for (window_ptr = windows; *window_ptr ; window_ptr++) { if (*window_ptr == winPtr) { @@ -3429,11 +3429,11 @@ if (objc == 4) { if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't change state of %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "ICON", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIndexFromObjStruct(interp, objv[3], optionStrings, sizeof(char *), "argument", 0, &index) != TCL_OK) { @@ -3462,20 +3462,20 @@ } if (TkpWmSetState(winPtr, IconicState) == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't send iconify message to window manager", -1)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } } else { /* OPT_WITHDRAWN */ wmPtr->flags |= WM_WITHDRAWN; if (TkpWmSetState(winPtr, WithdrawnState) == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't send withdraw message to window manager", -1)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } } } else { const char *state; @@ -3625,11 +3625,11 @@ if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't make \"%s\" a transient: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", (char *)NULL); return TCL_ERROR; } wmPtr2 = containerPtr->wmInfoPtr; if (wmPtr2->wrapperPtr == NULL) { @@ -3638,21 +3638,21 @@ if (wmPtr2->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't make \"%s\" a container: it is an icon for %s", Tcl_GetString(objv[3]), Tk_PathName(wmPtr2->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", (char *)NULL); return TCL_ERROR; } for (w = containerPtr; w != NULL && w->wmInfoPtr != NULL; w = (TkWindow *)w->wmInfoPtr->containerPtr) { if (w == winPtr) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't set \"%s\" as container: would cause management loop", Tk_PathName(containerPtr))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "SELF", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "SELF", (char *)NULL); return TCL_ERROR; } } if (containerPtr != wmPtr->containerPtr) { @@ -3679,11 +3679,11 @@ if (wmPtr->containerPtr != NULL && !Tk_IsMapped(wmPtr->containerPtr)) { if (TkpWmSetState(winPtr, WithdrawnState) == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't send withdraw message to window manager", -1)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } } else { if (wmPtr->containerPtr != NULL) { XSetTransientForHint(winPtr->display, @@ -3731,18 +3731,18 @@ } if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't withdraw %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "WITHDRAW", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "WITHDRAW", "ICON", (char *)NULL); return TCL_ERROR; } wmPtr->flags |= WM_WITHDRAWN; if (TkpWmSetState(winPtr, WithdrawnState) == 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "couldn't send withdraw message to window manager", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } return TCL_OK; } @@ -5719,11 +5719,11 @@ return TCL_OK; error: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad geometry specifier \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GEOMETRY", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GEOMETRY", (char *)NULL); return TCL_ERROR; } /* *---------------------------------------------------------------------- Index: win/configure ================================================================== --- win/configure +++ win/configure @@ -4361,11 +4361,11 @@ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_win32" >&5 printf "%s\n" "$ac_cv_win32" >&6; } if test "$ac_cv_win32" != "yes"; then as_fn_error $? "${CC} cannot produce win32 executables." "$LINENO" 5 fi - if test "$do64bit" != "arm64"; then + if test "$do64bit" != "arm64" -a "$do64bit" != "aarch64"; then extra_cflags="$extra_cflags -DHAVE_CPUID=1" fi hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -mwindows -municode -Dmain=xxmain" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working -municode linker flag" >&5 @@ -4491,10 +4491,48 @@ if test "$ac_cv_nolto" = "yes" ; then CFLAGS_NOLTO="-fno-lto" else CFLAGS_NOLTO="" fi + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker understands --disable-high-entropy-va" >&5 +printf %s "checking if the linker understands --disable-high-entropy-va... " >&6; } +if test ${tcl_cv_ld_high_entropy+y} +then : + printf %s "(cached) " >&6 +else case e in #( + e) + hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Wl,--disable-high-entropy-va" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + tcl_cv_ld_high_entropy=yes +else case e in #( + e) tcl_cv_ld_high_entropy=no ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext + CFLAGS=$hold_cflags ;; +esac +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $tcl_cv_ld_high_entropy" >&5 +printf "%s\n" "$tcl_cv_ld_high_entropy" >&6; } + if test $tcl_cv_ld_high_entropy = yes; then + extra_ldflags="$extra_ldflags -Wl,--disable-high-entropy-va" + fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the compiler understands -finput-charset" >&5 printf %s "checking if the compiler understands -finput-charset... " >&6; } if test ${tcl_cv_cc_input_charset+y} then : printf %s "(cached) " >&6 @@ -4546,18 +4584,19 @@ ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO" +if ac_fn_c_try_link "$LINENO" then : ac_cv_enable_auto_image_base=yes else case e in #( e) ac_cv_enable_auto_image_base=no ;; esac fi -rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_enable_auto_image_base" >&5 printf "%s\n" "$ac_cv_enable_auto_image_base" >&6; } @@ -4726,11 +4765,11 @@ # Add SHLIB_LD_LIBS to the Make rule, not here. LIBRARIES="\${SHARED_LIBRARIES}" EXESUFFIX=".exe" case "x`echo \${VisualStudioVersion}`" in x1[4-9]*) - lflags="${lflags} -nodefaultlib:libucrt.lib" + lflags="${lflags} -nodefaultlib:ucrt.lib" ;; *) ;; esac fi Index: win/tcl.m4 ================================================================== --- win/tcl.m4 +++ win/tcl.m4 @@ -591,11 +591,11 @@ [ac_cv_win32=yes]) ) if test "$ac_cv_win32" != "yes"; then AC_MSG_ERROR([${CC} cannot produce win32 executables.]) fi - if test "$do64bit" != "arm64"; then + if test "$do64bit" != "arm64" -a "$do64bit" != "aarch64"; then extra_cflags="$extra_cflags -DHAVE_CPUID=1" fi hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -mwindows -municode -Dmain=xxmain" AC_CACHE_CHECK(for working -municode linker flag, @@ -624,10 +624,20 @@ if test "$ac_cv_nolto" = "yes" ; then CFLAGS_NOLTO="-fno-lto" else CFLAGS_NOLTO="" fi + + AC_CACHE_CHECK([if the linker understands --disable-high-entropy-va], + tcl_cv_ld_high_entropy, [ + hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Wl,--disable-high-entropy-va" + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[tcl_cv_ld_high_entropy=yes],[tcl_cv_ld_high_entropy=no]) + CFLAGS=$hold_cflags]) + if test $tcl_cv_ld_high_entropy = yes; then + extra_ldflags="$extra_ldflags -Wl,--disable-high-entropy-va" + fi + AC_CACHE_CHECK([if the compiler understands -finput-charset], tcl_cv_cc_input_charset, [ hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -finput-charset=UTF-8" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],[tcl_cv_cc_input_charset=yes],[tcl_cv_cc_input_charset=no]) CFLAGS=$hold_cflags]) @@ -637,11 +647,11 @@ fi hold_cflags=$CFLAGS; CFLAGS="$CFLAGS -Wl,--enable-auto-image-base" AC_CACHE_CHECK(for working --enable-auto-image-base, ac_cv_enable_auto_image_base, - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])], + AC_LINK_IFELSE([AC_LANG_PROGRAM([])], [ac_cv_enable_auto_image_base=yes], [ac_cv_enable_auto_image_base=no]) ) CFLAGS=$hold_cflags if test "$ac_cv_enable_auto_image_base" = "yes" ; then @@ -783,11 +793,11 @@ # Add SHLIB_LD_LIBS to the Make rule, not here. LIBRARIES="\${SHARED_LIBRARIES}" EXESUFFIX=".exe" case "x`echo \${VisualStudioVersion}`" in x1[[4-9]]*) - lflags="${lflags} -nodefaultlib:libucrt.lib" + lflags="${lflags} -nodefaultlib:ucrt.lib" ;; *) ;; esac fi Index: win/tkWinClipboard.c ================================================================== --- win/tkWinClipboard.c +++ win/tkWinClipboard.c @@ -60,11 +60,11 @@ goto error; } if (!OpenClipboard(NULL)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "clipboard cannot be opened, another application grabbed it")); - Tcl_SetErrorCode(interp, "TK", "CLIPBOARD", "BUSY", NULL); + Tcl_SetErrorCode(interp, "TK", "CLIPBOARD", "BUSY", (char *)NULL); return TCL_ERROR; } /* * Attempt to get the data in Unicode form if available as this is less @@ -202,11 +202,11 @@ error: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s selection doesn't exist or form \"%s\" not defined", Tk_GetAtomName(tkwin, selection), Tk_GetAtomName(tkwin, target))); - Tcl_SetErrorCode(interp, "TK", "SELECTION", "EXISTS", NULL); + Tcl_SetErrorCode(interp, "TK", "SELECTION", "EXISTS", (char *)NULL); return TCL_ERROR; } /* *---------------------------------------------------------------------- @@ -364,15 +364,17 @@ */ void TkSelUpdateClipboard( TkWindow *winPtr, - TCL_UNUSED(TkClipboardTarget *)) + clipboardOption opt) { - HWND hwnd = TkWinGetHWND(winPtr->window); + if (opt == CLIPBOARD_APPEND || opt == CLIPBOARD_CLEAR) { + HWND hwnd = TkWinGetHWND(winPtr->window); - UpdateClipboard(hwnd); + UpdateClipboard(hwnd); + } } /* *---------------------------------------------------------------------- * Index: win/tkWinCursor.c ================================================================== --- win/tkWinCursor.c +++ win/tkWinCursor.c @@ -131,11 +131,11 @@ */ if (Tcl_IsSafe(interp)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "cannot get cursor from a file in a safe interpreter", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "SAFE", "CURSOR_FILE", NULL); + Tcl_SetErrorCode(interp, "TK", "SAFE", "CURSOR_FILE", (char *)NULL); ckfree(argv); ckfree(cursorPtr); return NULL; } cursorPtr->winCursor = LoadCursorFromFileA(&(argv[0][1])); @@ -167,11 +167,11 @@ ckfree(cursorPtr); badCursorSpec: ckfree(argv); Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad cursor spec \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "CURSOR", (char *)NULL); return NULL; } ckfree(argv); return (TkCursor *) cursorPtr; } Index: win/tkWinDialog.c ================================================================== --- win/tkWinDialog.c +++ win/tkWinDialog.c @@ -366,11 +366,11 @@ return TCL_ERROR; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(optionPtr))); - Tcl_SetErrorCode(interp, "TK", "COLORDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "COLORDIALOG", "VALUE", (char *)NULL); return TCL_ERROR; } string = Tcl_GetString(valuePtr); switch ((enum options) index) { @@ -660,11 +660,11 @@ sizeof(struct Options), "option", 0, &index) != TCL_OK) { goto error_return; } else if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", options[index].name)); - Tcl_SetErrorCode(interp, "TK", "FILEDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "FILEDIALOG", "VALUE", (char *)NULL); goto error_return; } valuePtr = objv[i + 1]; string = Tcl_GetString(valuePtr); @@ -1370,11 +1370,11 @@ return TCL_ERROR; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(optionPtr))); - Tcl_SetErrorCode(interp, "TK", "MSGBOX", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "MSGBOX", "VALUE", (char *)NULL); return TCL_ERROR; } switch ((enum options) index) { case MSG_DEFAULT: @@ -1442,11 +1442,11 @@ } if (defaultBtnIdx < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "invalid default button \"%s\"", TkFindStateString(buttonMap, defaultBtn))); - Tcl_SetErrorCode(interp, "TK", "MSGBOX", "DEFAULT", NULL); + Tcl_SetErrorCode(interp, "TK", "MSGBOX", "DEFAULT", (char *)NULL); return TCL_ERROR; } break; } } @@ -1882,20 +1882,20 @@ return TCL_OK; } if (i + 1 == objc) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "value for \"%s\" missing", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "VALUE", NULL); + Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "VALUE", (char *)NULL); return TCL_ERROR; } switch (optionIndex) { case FontchooserVisible: { static const char *msg = "cannot change read-only option " "\"-visible\": use the show or hide command"; Tcl_SetObjResult(interp, Tcl_NewStringObj(msg, TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "READONLY", NULL); + Tcl_SetErrorCode(interp, "TK", "FONTDIALOG", "READONLY", (char *)NULL); return TCL_ERROR; } case FontchooserParent: { Tk_Window parent = Tk_NameToWindow(interp, Tcl_GetString(objv[i+1]), tkwin); Index: win/tkWinEmbed.c ================================================================== --- win/tkWinEmbed.c +++ win/tkWinEmbed.c @@ -247,11 +247,11 @@ /* if (winPtr->window != None) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "can't modify container after widget is created", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "POST_CREATE", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "POST_CREATE", (char *)NULL); return TCL_ERROR; } */ if (strcmp(string, "") == 0) { @@ -280,27 +280,27 @@ if (!IsWindow(hwnd)) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" does not exist", string)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "EXIST", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "EXIST", (char *)NULL); } return TCL_ERROR; } id = SendMessageW(hwnd, TK_INFO, TK_CONTAINER_VERIFY, 0); if (id == PTR2INT(hwnd)) { if (!SendMessageW(hwnd, TK_INFO, TK_CONTAINER_ISAVAILABLE, 0)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "The container is already in use", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "IN_USE", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "IN_USE", (char *)NULL); return TCL_ERROR; } } else if (id == -PTR2INT(hwnd)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "the window to use is not a Tk container", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "CONTAINER", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "CONTAINER", (char *)NULL); return TCL_ERROR; } else { /* * Proceed if the user decide to do so because it can be a legacy * container application. However we may have to return a TCL_ERROR in @@ -312,11 +312,11 @@ wsprintfW(msg, L"Unable to get information of window \"%.40hs\". Attach to this\nwindow may have unpredictable results if it is not a valid container.\n\nPress Ok to proceed or Cancel to abort attaching.", string); if (IDCANCEL == MessageBoxW(hwnd, msg, L"Tk Warning", MB_OKCANCEL | MB_ICONWARNING)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Operation has been canceled", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "EMBED", "CANCEL", NULL); + Tcl_SetErrorCode(interp, "TK", "EMBED", "CANCEL", (char *)NULL); return TCL_ERROR; } } Tk_DetachEmbeddedWindow(winPtr, FALSE); Index: win/tkWinMenu.c ================================================================== --- win/tkWinMenu.c +++ win/tkWinMenu.c @@ -331,11 +331,11 @@ winMenuHdl = CreatePopupMenu(); if (winMenuHdl == NULL) { Tcl_SetObjResult(menuPtr->interp, Tcl_NewStringObj( "No more menus can be allocated.", TCL_INDEX_NONE)); - Tcl_SetErrorCode(menuPtr->interp, "TK", "MENU", "SYSTEM_RESOURCES", NULL); + Tcl_SetErrorCode(menuPtr->interp, "TK", "MENU", "SYSTEM_RESOURCES", (char *)NULL); return TCL_ERROR; } /* * We hash all of the HMENU's so that we can get their menu ptrs back when Index: win/tkWinSend.c ================================================================== --- win/tkWinSend.c +++ win/tkWinSend.c @@ -145,11 +145,11 @@ if (tsdPtr->initialized == 0) { hr = CoInitialize(0); if (FAILED(hr)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "failed to initialize the COM library", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "SEND", "COM", NULL); + Tcl_SetErrorCode(interp, "TK", "SEND", "COM", (char *)NULL); return ""; } tsdPtr->initialized = 1; TRACE("Initialized COM library for interp 0x%" TCL_Z_MODIFIER "x\n", (size_t)interp); } Index: win/tkWinTest.c ================================================================== --- win/tkWinTest.c +++ win/tkWinTest.c @@ -189,11 +189,11 @@ msgPtr[length] = 0; msg = msgPtr; } snprintf(id, sizeof(id), "%ld", error); - Tcl_SetErrorCode(interp, "WINDOWS", id, msg, NULL); + Tcl_SetErrorCode(interp, "WINDOWS", id, msg, (char *)NULL); Tcl_AppendToObj(resultPtr, msg, length); Tcl_SetObjResult(interp, resultPtr); if (length != 0) { Tcl_DStringFree(&ds); Index: win/tkWinWm.c ================================================================== --- win/tkWinWm.c +++ win/tkWinWm.c @@ -555,11 +555,11 @@ /* * It failed, the non-Ex way might work as a fallback. */ if (hIcon == NULL) { - hIcon = CreateIconFromResource(lpIcon->lpBits, lpIcon->dwNumBytes, + hIcon = CreateIconFromResource(lpIcon->lpBits, lpIcon->dwNumBytes, isIcon, 0x00030000); } return hIcon; } @@ -785,11 +785,11 @@ if (!initialized) { if (InitWindowClass(titlebaricon) != TCL_OK) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Unable to set icon", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICON", "FAILED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICON", "FAILED", (char *)NULL); return TCL_ERROR; } } else { ThreadSpecificData *tsdPtr; @@ -842,11 +842,11 @@ wmPtr = ((TkWindow *) tkw)->wmInfoPtr; hwnd = wmPtr->wrapper; if (hwnd == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Can't set icon; window has no wrapper.", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICON", "WRAPPER", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICON", "WRAPPER", (char *)NULL); return TCL_ERROR; } } SendMessageW(hwnd, WM_SETICON, ICON_SMALL, (LPARAM) GetIcon(titlebaricon, ICON_SMALL)); @@ -1561,11 +1561,11 @@ lpIR->IconImages[i].hIcon = MakeIconOrCursorFromResource(&lpIR->IconImages[i], isIcon); if (!AdjustIconImagePointers(&lpIR->IconImages[i])) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Error converting to internal format", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICON", "FORMAT", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICON", "FORMAT", (char *)NULL); goto readError; } } /* @@ -2936,11 +2936,11 @@ return TCL_ERROR; } if ((numer1 <= 0) || (denom1 <= 0) || (numer2 <= 0) || (denom2 <= 0)) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "aspect number can't be <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "ASPECT", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "ASPECT", (char *)NULL); return TCL_ERROR; } wmPtr->minAspect.x = numer1; wmPtr->minAspect.y = denom1; wmPtr->maxAspect.x = numer2; @@ -3055,18 +3055,18 @@ styleBit = WS_EX_TOPMOST; if ((i < objc-1) && (winPtr->flags & TK_EMBEDDED)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't set topmost flag on %s: it is an embedded window", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ATTR", "TOPMOST", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ATTR", "TOPMOST", (char *)NULL); return TCL_ERROR; } } else if (i == 3) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad attribute \"%s\": must be -alpha, -disabled, -fullscreen, -toolwindow, -topmost, or -transparentcolor", string)); - Tcl_SetErrorCode(interp, "TK", "WM", "ATTR", "UNRECOGNIZED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ATTR", "UNRECOGNIZED", (char *)NULL); return TCL_ERROR; } else { goto configArgs; } if (styleBit == WS_EX_LAYERED) { @@ -3237,11 +3237,11 @@ ((wmPtr->maxHeight > 0) && (HeightOfScreen(Tk_Screen(winPtr)) > wmPtr->maxHeight))) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't set fullscreen attribute for \"%s\":" " max width/height is too small", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ATTR", "SMALL_MAX", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ATTR", "SMALL_MAX", (char *)NULL); return TCL_ERROR; } } TkpWmSetFullScreen(winPtr, fullscreen_attr); @@ -3517,19 +3517,19 @@ } if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't deiconify %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "DEICONIFY", "ICON", (char *)NULL); return TCL_ERROR; } if (winPtr->flags & TK_EMBEDDED) { if (!SendMessageW(wmPtr->wrapper, TK_DEICONIFY, 0, 0)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't deiconify %s: the container does not support the request", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } return TCL_OK; } TkpWinToplevelDeiconify(winPtr); @@ -3821,29 +3821,29 @@ return TCL_ERROR; } if (reqWidth < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "baseWidth can't be < 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } if (reqHeight < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "baseHeight can't be < 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } if (widthInc <= 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "widthInc can't be <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } if (heightInc <= 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "heightInc can't be <= 0", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GRID", (char *)NULL); return TCL_ERROR; } Tk_SetGrid((Tk_Window) winPtr, reqWidth, reqHeight, widthInc, heightInc); } @@ -4065,11 +4065,11 @@ const char *argv3 = Tcl_GetString(objv[3]); if (strcmp(argv3, "-default")) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "illegal option \"%s\" must be \"-default\"", argv3)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONBITMAP", "OPTION",NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONBITMAP", "OPTION", (char *)NULL); return TCL_ERROR; } useWinPtr = NULL; } else if (objc == 3) { /* @@ -4195,11 +4195,11 @@ if (winPtr->flags & TK_EMBEDDED) { if (!SendMessageW(wmPtr->wrapper, TK_ICONIFY, 0, 0)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": the container does not support the request", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "EMBEDDED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "EMBEDDED", (char *)NULL); return TCL_ERROR; } } if (Tk_Attributes((Tk_Window) winPtr)->override_redirect) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( @@ -4211,18 +4211,18 @@ } if (wmPtr->containerPtr != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is a transient", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "TRANSIENT", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "TRANSIENT", (char *)NULL); return TCL_ERROR; } if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't iconify \"%s\": it is an icon for \"%s\"", winPtr->pathName, Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONIFY", "ICON", (char *)NULL); return TCL_ERROR; } TkpWmSetState(winPtr, IconicState); return TCL_OK; } @@ -4394,11 +4394,11 @@ photo = Tk_FindPhoto(interp, Tcl_GetString(objv[i])); if (photo == NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't use \"%s\" as iconphoto: not a photo image", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "PHOTO", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "PHOTO", (char *)NULL); return TCL_ERROR; } } /* @@ -4422,11 +4422,11 @@ if (hIcon == NULL) { FreeIconBlock(lpIR); Tcl_SetObjResult(interp, Tcl_ObjPrintf( "failed to create an iconphoto with image \"%s\"", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONPHOTO", "ICON", (char *)NULL); return TCL_ERROR; } lpIR->IconImages[i-startObj].Width = width; lpIR->IconImages[i-startObj].Height = height; lpIR->IconImages[i-startObj].Colors = 4; @@ -4568,19 +4568,19 @@ } if (!Tk_IsTopLevel(tkwin2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't use %s as icon window: not at top level", Tcl_GetString(objv[3]))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "INNER", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "INNER", (char *)NULL); return TCL_ERROR; } wmPtr2 = ((TkWindow *) tkwin2)->wmInfoPtr; if (wmPtr2->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "%s is already an icon for %s", Tcl_GetString(objv[3]), Tk_PathName(wmPtr2->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "ICONWINDOW", "ICON", (char *)NULL); return TCL_ERROR; } if (wmPtr->icon != NULL) { WmInfo *wmPtr3 = ((TkWindow *) wmPtr->icon)->wmInfoPtr; wmPtr3->iconFor = NULL; @@ -4647,11 +4647,11 @@ if (!Tk_IsTopLevel(frameWin)) { if (!Tk_IsManageable(frameWin)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" is not manageable: must be a frame," " labelframe or toplevel", Tk_PathName(frameWin))); - Tcl_SetErrorCode(interp, "TK", "WM", "MANAGE", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "MANAGE", (char *)NULL); return TCL_ERROR; } TkFocusSplit(winPtr); Tk_UnmapWindow(frameWin); winPtr->flags |= TK_TOP_HIERARCHY|TK_TOP_LEVEL|TK_HAS_WRAPPER|TK_WIN_MANAGED; @@ -4808,11 +4808,11 @@ if (winPtr->flags & TK_EMBEDDED) { curValue = SendMessageW(wmPtr->wrapper, TK_OVERRIDEREDIRECT, -1, -1)-1; if (curValue < 0) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "Container does not support overrideredirect", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } } else { curValue = Tk_Attributes((Tk_Window) winPtr)->override_redirect; } @@ -5204,25 +5204,25 @@ if (!Tk_IsTopLevel(winPtr2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't a top-level window", winPtr2->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "TOPLEVEL", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "TOPLEVEL", (char *)NULL); return TCL_ERROR; } if (!Tk_IsMapped(winPtr)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't mapped", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", (char *)NULL); return TCL_ERROR; } if (!Tk_IsMapped(winPtr2)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "window \"%s\" isn't mapped", winPtr2->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STACK", "MAPPED", (char *)NULL); return TCL_ERROR; } /* * Lookup stacking order of all toplevels that are children of "." and @@ -5231,11 +5231,11 @@ windows = TkWmStackorderToplevel(winPtr->mainPtr->winPtr); if (windows == NULL) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "TkWmStackorderToplevel failed", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } for (windowPtr = windows; *windowPtr ; windowPtr++) { if (*windowPtr == winPtr) { @@ -5308,11 +5308,11 @@ if (objc == 4) { if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't change state of %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "STATE", "ICON", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIndexFromObj(interp, objv[3], optionStrings, "argument", 0, &index) != TCL_OK) { return TCL_ERROR; @@ -5340,11 +5340,11 @@ if (state+1 != SendMessageW(wmPtr->wrapper, TK_STATE, state, 0)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't change state of %s: the container does not support the request", winPtr->pathName)); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } return TCL_OK; } @@ -5552,30 +5552,30 @@ if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't make \"%s\" a transient: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", (char *)NULL); return TCL_ERROR; } wmPtr2 = containerPtr->wmInfoPtr; if (wmPtr2->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't make \"%s\" a container: it is an icon for %s", Tcl_GetString(objv[3]), Tk_PathName(wmPtr2->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "ICON", (char *)NULL); return TCL_ERROR; } for (w = containerPtr; w != NULL && w->wmInfoPtr != NULL; w = (TkWindow *)w->wmInfoPtr->containerPtr) { if (w == winPtr) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't set \"%s\" as container: would cause management loop", Tk_PathName(containerPtr))); - Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "SELF", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "TRANSIENT", "SELF", (char *)NULL); return TCL_ERROR; } } if (containerPtr != wmPtr->containerPtr) { /* @@ -5644,20 +5644,20 @@ } if (wmPtr->iconFor != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't withdraw %s: it is an icon for %s", Tcl_GetString(objv[2]), Tk_PathName(wmPtr->iconFor))); - Tcl_SetErrorCode(interp, "TK", "WM", "WITHDRAW", "ICON", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "WITHDRAW", "ICON", (char *)NULL); return TCL_ERROR; } if (winPtr->flags & TK_EMBEDDED) { if (SendMessageW(wmPtr->wrapper, TK_WITHDRAW, 0, 0) < 0) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "can't withdraw %s: the container does not support the request", Tcl_GetString(objv[2]))); - Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", NULL); + Tcl_SetErrorCode(interp, "TK", "WM", "COMMUNICATION", (char *)NULL); return TCL_ERROR; } } else { TkpWinToplevelWithDraw(winPtr); } @@ -6373,11 +6373,11 @@ return TCL_OK; error: Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad geometry specifier \"%s\"", string)); - Tcl_SetErrorCode(interp, "TK", "VALUE", "GEOMETRY", NULL); + Tcl_SetErrorCode(interp, "TK", "VALUE", "GEOMETRY", (char *)NULL); return TCL_ERROR; } /* *---------------------------------------------------------------------- Index: win/ttkWinXPTheme.c ================================================================== --- win/ttkWinXPTheme.c +++ win/ttkWinXPTheme.c @@ -1187,11 +1187,11 @@ if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK) return TCL_ERROR; if (objc != 2) { Tcl_SetObjResult(interp, Tcl_NewStringObj("wrong # args", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TCL", "WRONGARGS", NULL); + Tcl_SetErrorCode(interp, "TCL", "WRONGARGS", (char *)NULL); return TCL_ERROR; } for (i = 0; i < objc; ++i) { int option; if (Tcl_GetIndexFromObjStruct(interp, objv[i], names, @@ -1244,11 +1244,11 @@ O_SYSSIZE, O_WIDTH }; if (objc < 2) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "missing required arguments 'class' and/or 'partId'", TCL_INDEX_NONE)); - Tcl_SetErrorCode(interp, "TTK", "VSAPI", "REQUIRED", NULL); + Tcl_SetErrorCode(interp, "TTK", "VSAPI", "REQUIRED", (char *)NULL); return TCL_ERROR; } if (Tcl_GetIntFromObj(interp, objv[1], &partId) != TCL_OK) { return TCL_ERROR; @@ -1265,11 +1265,11 @@ int tmp = 0; if (i == objc -1) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "Missing value for \"%s\".", Tcl_GetString(objv[i]))); - Tcl_SetErrorCode(interp, "TTK", "VSAPI", "MISSING", NULL); + Tcl_SetErrorCode(interp, "TTK", "VSAPI", "MISSING", (char *)NULL); goto retErr; } if (Tcl_GetIndexFromObj(interp, objv[i], optionStrings, "option", 0, &option) != TCL_OK) goto retErr; Index: win/wish.exe.manifest.in ================================================================== --- win/wish.exe.manifest.in +++ win/wish.exe.manifest.in @@ -33,14 +33,10 @@ true - - UTF-8 -