From 5f5dec875b76abf0a55e531de9d358ba5b34485f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 19 Jun 2019 14:08:44 +0000 Subject: Use available "ucs2-be" encoding on X11 and "utf-16" encoding on Win32, if provided by Tcl (TIP #547). If Tcl doesn't provide those encodings, proceed as usual. --- unix/tkUnixFont.c | 31 +++++++++---------------------- win/tkWinX.c | 5 ++++- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/unix/tkUnixFont.c b/unix/tkUnixFont.c index 96635b4..d00ff82 100644 --- a/unix/tkUnixFont.c +++ b/unix/tkUnixFont.c @@ -186,14 +186,7 @@ static EncodingAlias encodingAliases[] = { {"tis620", "tis620*"}, {"ksc5601", "ksc5601*"}, {"dingbats", "*dingbats"}, -#ifdef WORDS_BIGENDIAN - {"unicode", "iso10646-1"}, -#else - /* - * ucs-2be is needed if native order isn't BE. - */ {"ucs-2be", "iso10646-1"}, -#endif {NULL, NULL} }; @@ -246,7 +239,6 @@ static unsigned RankAttributes(FontAttributes *wantPtr, static void ReleaseFont(UnixFont *fontPtr); static void ReleaseSubFont(Display *display, SubFont *subFontPtr); static int SeenName(const char *name, Tcl_DString *dsPtr); -#ifndef WORDS_BIGENDIAN static int Ucs2beToUtfProc(ClientData clientData, const char*src, int srcLen, int flags, Tcl_EncodingState*statePtr, char *dst, int dstLen, int *srcReadPtr, @@ -255,7 +247,6 @@ static int UtfToUcs2beProc(ClientData clientData, const char*src, int srcLen, int flags, Tcl_EncodingState*statePtr, char *dst, int dstLen, int *srcReadPtr, int *dstWrotePtr, int *dstCharsPtr); -#endif /* *------------------------------------------------------------------------- @@ -320,9 +311,9 @@ TkpFontPkgInit( { ThreadSpecificData *tsdPtr = Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); - Tcl_EncodingType type; SubFont dummy; int i; + Tcl_Encoding ucs2; if (tsdPtr->controlFamily.encoding == NULL) { type.encodingName = "X11ControlChars"; @@ -343,20 +334,18 @@ TkpFontPkgInit( FontMapInsert(&dummy, i + 0x80); } -#ifndef WORDS_BIGENDIAN /* * UCS-2BE is unicode (UCS-2) in big-endian format. Define this if - * native order isn't BE. It is used in iso10646 fonts. + * if it doesn't exist yet. It is used in iso10646 fonts. */ - type.encodingName = "ucs-2be"; - type.toUtfProc = Ucs2beToUtfProc; - type.fromUtfProc = UtfToUcs2beProc; - type.freeProc = NULL; - type.clientData = NULL; - type.nullSize = 2; - Tcl_CreateEncoding(&type); -#endif + ucs2 = Tcl_GetEncoding(NULL, "ucs-2be"); + if (ucs2 == NULL) { + Tcl_EncodingType type = {"ucs-2be", Ucs2beToUtfProc, UtfToUcs2beProc, NULL, NULL, 2}; + Tcl_CreateEncoding(&type); + } else { + Tcl_FreeEncoding(ucs2); + } Tcl_CreateThreadExitHandler(FontPkgCleanup, NULL); } } @@ -459,7 +448,6 @@ ControlUtfProc( return result; } -#ifndef WORDS_BIGENDIAN /* *------------------------------------------------------------------------- * @@ -632,7 +620,6 @@ UtfToUcs2beProc( *dstCharsPtr = numChars; return result; } -#endif /* WORDS_BIGENDIAN */ /* *--------------------------------------------------------------------------- diff --git a/win/tkWinX.c b/win/tkWinX.c index 75064b5..e7428e5 100644 --- a/win/tkWinX.c +++ b/win/tkWinX.c @@ -1594,7 +1594,10 @@ Tcl_Encoding TkWinGetUnicodeEncoding(void) { if (unicodeEncoding == NULL) { - unicodeEncoding = Tcl_GetEncoding(NULL, "unicode"); + unicodeEncoding = Tcl_GetEncoding(NULL, "utf-16"); + if (unicodeEncoding == NULL) { + unicodeEncoding = Tcl_GetEncoding(NULL, "unicode"); + } } return unicodeEncoding; } -- cgit v0.12 From 8a887d823434875d32df819ad7791504415aa15f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Thu, 20 Jun 2019 13:52:47 +0000 Subject: Handle SVG string > 2G, when compiled with Tcl 9 headers. Make TCL_INDEX_NONE symbol usable in Tk, even when compiled against Tcl 8.6 headers. --- generic/tkImgSVGnano.c | 32 ++++++++++++++++---------------- generic/tkInt.h | 4 ++++ 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/generic/tkImgSVGnano.c b/generic/tkImgSVGnano.c index f86c45e..b8776fe 100644 --- a/generic/tkImgSVGnano.c +++ b/generic/tkImgSVGnano.c @@ -62,7 +62,7 @@ static int StringReadSVG(Tcl_Interp *interp, Tcl_Obj *dataObj, int destX, int destY, int width, int height, int srcX, int srcY); static NSVGimage * ParseSVGWithOptions(Tcl_Interp *interp, - const char *input, int length, Tcl_Obj *format, + const char *input, size_t length, Tcl_Obj *format, RastOpts *ropts); static int RasterizeSVG(Tcl_Interp *interp, Tk_PhotoHandle imageHandle, NSVGimage *nsvgImage, @@ -118,19 +118,19 @@ FileMatchSVG( int *widthPtr, int *heightPtr, Tcl_Interp *interp) { - int length; + size_t length; Tcl_Obj *dataObj = Tcl_NewObj(); const char *data; RastOpts ropts; NSVGimage *nsvgImage; CleanCache(interp); - if (Tcl_ReadChars(chan, dataObj, -1, 0) == -1) { + if (Tcl_ReadChars(chan, dataObj, -1, 0) == TCL_IO_FAILURE) { /* in case of an error reading the file */ Tcl_DecrRefCount(dataObj); return 0; } - data = Tcl_GetStringFromObj(dataObj, &length); + data = TkGetStringFromObj(dataObj, &length); nsvgImage = ParseSVGWithOptions(interp, data, length, formatObj, &ropts); Tcl_DecrRefCount(dataObj); if (nsvgImage != NULL) { @@ -178,7 +178,7 @@ FileReadSVG( int width, int height, int srcX, int srcY) { - int length; + size_t length; const char *data; RastOpts ropts; NSVGimage *nsvgImage = GetCachedSVG(interp, chan, formatObj, &ropts); @@ -186,14 +186,14 @@ FileReadSVG( if (nsvgImage == NULL) { Tcl_Obj *dataObj = Tcl_NewObj(); - if (Tcl_ReadChars(chan, dataObj, -1, 0) == -1) { + if (Tcl_ReadChars(chan, dataObj, -1, 0) == TCL_IO_FAILURE) { /* in case of an error reading the file */ Tcl_DecrRefCount(dataObj); Tcl_SetObjResult(interp, Tcl_NewStringObj("read error", -1)); Tcl_SetErrorCode(interp, "TK", "IMAGE", "SVG", "READ_ERROR", NULL); return TCL_ERROR; } - data = Tcl_GetStringFromObj(dataObj, &length); + data = TkGetStringFromObj(dataObj, &length); nsvgImage = ParseSVGWithOptions(interp, data, length, formatObj, &ropts); Tcl_DecrRefCount(dataObj); @@ -230,13 +230,13 @@ StringMatchSVG( int *widthPtr, int *heightPtr, Tcl_Interp *interp) { - int length; + size_t length; const char *data; RastOpts ropts; NSVGimage *nsvgImage; CleanCache(interp); - data = Tcl_GetStringFromObj(dataObj, &length); + data = TkGetStringFromObj(dataObj, &length); nsvgImage = ParseSVGWithOptions(interp, data, length, formatObj, &ropts); if (nsvgImage != NULL) { *widthPtr = (int) ceil(nsvgImage->width * ropts.scale); @@ -281,13 +281,13 @@ StringReadSVG( int width, int height, int srcX, int srcY) { - int length; + size_t length; const char *data; RastOpts ropts; NSVGimage *nsvgImage = GetCachedSVG(interp, dataObj, formatObj, &ropts); if (nsvgImage == NULL) { - data = Tcl_GetStringFromObj(dataObj, &length); + data = TkGetStringFromObj(dataObj, &length); nsvgImage = ParseSVGWithOptions(interp, data, length, formatObj, &ropts); } @@ -317,7 +317,7 @@ static NSVGimage * ParseSVGWithOptions( Tcl_Interp *interp, const char *input, - int length, + size_t length, Tcl_Obj *formatObj, RastOpts *ropts) { @@ -576,14 +576,14 @@ CacheSVG( NSVGimage *nsvgImage, RastOpts *ropts) { - int length; + size_t length; const char *data; NSVGcache *cachePtr = GetCachePtr(interp); if (cachePtr != NULL) { cachePtr->dataOrChan = dataOrChan; if (formatObj != NULL) { - data = Tcl_GetStringFromObj(formatObj, &length); + data = TkGetStringFromObj(formatObj, &length); Tcl_DStringAppend(&cachePtr->formatString, data, length); } cachePtr->nsvgImage = nsvgImage; @@ -616,7 +616,7 @@ GetCachedSVG( Tcl_Obj *formatObj, RastOpts *ropts) { - int length; + size_t length; const char *data; NSVGcache *cachePtr = GetCachePtr(interp); NSVGimage *nsvgImage = NULL; @@ -624,7 +624,7 @@ GetCachedSVG( if ((cachePtr != NULL) && (cachePtr->nsvgImage != NULL) && (cachePtr->dataOrChan == dataOrChan)) { if (formatObj != NULL) { - data = Tcl_GetStringFromObj(formatObj, &length); + data = TkGetStringFromObj(formatObj, &length); if (strcmp(data, Tcl_DStringValue(&cachePtr->formatString)) == 0) { nsvgImage = cachePtr->nsvgImage; *ropts = cachePtr->ropts; diff --git a/generic/tkInt.h b/generic/tkInt.h index 199641d..77b7725 100644 --- a/generic/tkInt.h +++ b/generic/tkInt.h @@ -880,6 +880,10 @@ typedef struct { #ifndef TCL_IO_FAILURE # define TCL_IO_FAILURE (-1) #endif +/* See TIP #537 */ +#ifndef TCL_INDEX_NONE +# define TCL_INDEX_NONE (-1) +#endif /* * The following structure is used with TkMakeEnsemble to create ensemble -- cgit v0.12 From aea98214f4498a5a6aed07652911d3643f7331da Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 21 Jun 2019 11:32:58 +0000 Subject: Make better use of the full range for Menu indexes, if Tk is compiled with Tcl 9.0 headers. --- generic/tkMenu.c | 78 +++++++++++++++++++++++++++++--------------------------- generic/tkMenu.h | 4 +-- 2 files changed, 43 insertions(+), 39 deletions(-) diff --git a/generic/tkMenu.c b/generic/tkMenu.c index 33b548d..1e9e958 100644 --- a/generic/tkMenu.c +++ b/generic/tkMenu.c @@ -346,9 +346,9 @@ static void DestroyMenuHashTable(ClientData clientData, Tcl_Interp *interp); static void DestroyMenuInstance(TkMenu *menuPtr); static void DestroyMenuEntry(void *memPtr); -static int GetIndexFromCoords(Tcl_Interp *interp, +static TkSizeT GetIndexFromCoords(Tcl_Interp *interp, TkMenu *menuPtr, const char *string, - int *indexPtr); + TkSizeT *indexPtr); static int MenuDoYPosition(Tcl_Interp *interp, TkMenu *menuPtr, Tcl_Obj *objPtr); static int MenuDoXPosition(Tcl_Interp *interp, @@ -457,7 +457,7 @@ Tk_MenuObjCmd( menuPtr->widgetCmd = Tcl_CreateObjCommand(interp, Tk_PathName(menuPtr->tkwin), MenuWidgetObjCmd, menuPtr, MenuCmdDeletedProc); - menuPtr->active = (TkSizeT)-1; + menuPtr->active = TCL_INDEX_NONE; menuPtr->cursorPtr = NULL; menuPtr->masterMenuPtr = menuPtr; menuPtr->menuType = UNKNOWN_TYPE; @@ -639,7 +639,7 @@ MenuWidgetObjCmd( switch ((enum options) option) { case MENU_ACTIVATE: { - int index; + TkSizeT index; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "index"); @@ -648,12 +648,12 @@ MenuWidgetObjCmd( if (TkGetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } - if ((int)menuPtr->active == index) { + if (menuPtr->active == index) { goto done; } - if ((index >= 0) && ((menuPtr->entries[index]->type==SEPARATOR_ENTRY) + if ((index != TCL_INDEX_NONE) && ((menuPtr->entries[index]->type==SEPARATOR_ENTRY) || (menuPtr->entries[index]->state == ENTRY_DISABLED))) { - index = -1; + index = TCL_INDEX_NONE; } result = TkActivateMenuEntry(menuPtr, index); break; @@ -723,7 +723,8 @@ MenuWidgetObjCmd( break; } case MENU_DELETE: { - int first, last; + TkSizeT first, last; + Tcl_WideInt w; if ((objc != 3) && (objc != 4)) { Tcl_WrongNumArgs(interp, 2, objv, "first ?last?"); @@ -736,8 +737,9 @@ MenuWidgetObjCmd( */ if (isdigit(UCHAR(Tcl_GetString(objv[2])[0])) - && Tcl_GetIntFromObj(NULL, objv[2], &first) == TCL_OK) { - if (first >= (int)menuPtr->numEntries) { + && Tcl_GetWideIntFromObj(NULL, objv[2], &w) == TCL_OK) { + first = w; + if (first >= menuPtr->numEntries) { goto done; } } else if (TkGetMenuIndex(interp,menuPtr,objv[2],0,&first) != TCL_OK){ @@ -764,7 +766,7 @@ MenuWidgetObjCmd( break; } case MENU_ENTRYCGET: { - int index; + TkSizeT index; Tcl_Obj *resultPtr; if (objc != 4) { @@ -774,7 +776,7 @@ MenuWidgetObjCmd( if (TkGetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } - if (index < 0) { + if (index == TCL_INDEX_NONE) { goto done; } mePtr = menuPtr->entries[index]; @@ -789,7 +791,7 @@ MenuWidgetObjCmd( break; } case MENU_ENTRYCONFIGURE: { - int index; + TkSizeT index; Tcl_Obj *resultPtr; if (objc < 3) { @@ -799,7 +801,7 @@ MenuWidgetObjCmd( if (TkGetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } - if (index < 0) { + if (index == TCL_INDEX_NONE) { goto done; } mePtr = menuPtr->entries[index]; @@ -830,7 +832,7 @@ MenuWidgetObjCmd( break; } case MENU_INDEX: { - int index; + TkSizeT index; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "string"); @@ -839,7 +841,7 @@ MenuWidgetObjCmd( if (TkGetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } - if (index == -1) { + if (index == TCL_INDEX_NONE) { Tcl_SetObjResult(interp, Tcl_NewStringObj("none", -1)); } else { Tcl_SetObjResult(interp, Tcl_NewWideIntObj(index)); @@ -857,7 +859,7 @@ MenuWidgetObjCmd( } break; case MENU_INVOKE: { - int index; + TkSizeT index; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "index"); @@ -866,14 +868,15 @@ MenuWidgetObjCmd( if (TkGetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } - if (index < 0) { + if (index == TCL_INDEX_NONE) { goto done; } result = TkInvokeMenu(interp, menuPtr, index); break; } case MENU_POST: { - int x, y, index = -1; + int x, y; + TkSizeT index = TCL_INDEX_NONE; if (objc != 4 && objc != 5) { Tcl_WrongNumArgs(interp, 2, objv, "x y ?index?"); @@ -908,7 +911,7 @@ MenuWidgetObjCmd( break; } case MENU_POSTCASCADE: { - int index; + TkSizeT index; if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "index"); @@ -918,7 +921,7 @@ MenuWidgetObjCmd( if (TkGetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } - if ((index < 0) || (menuPtr->entries[index]->type != CASCADE_ENTRY)) { + if ((index == TCL_INDEX_NONE) || (menuPtr->entries[index]->type != CASCADE_ENTRY)) { result = TkPostSubmenu(interp, menuPtr, NULL); } else { result = TkPostSubmenu(interp, menuPtr, menuPtr->entries[index]); @@ -926,7 +929,7 @@ MenuWidgetObjCmd( break; } case MENU_TYPE: { - int index; + TkSizeT index; const char *typeStr; if (objc != 3) { @@ -936,7 +939,7 @@ MenuWidgetObjCmd( if (TkGetMenuIndex(interp, menuPtr, objv[2], 0, &index) != TCL_OK) { goto error; } - if (index < 0) { + if (index == TCL_INDEX_NONE) { goto done; } if (menuPtr->entries[index]->type == TEAROFF_ENTRY) { @@ -1001,13 +1004,13 @@ int TkInvokeMenu( Tcl_Interp *interp, /* The interp that the menu lives in. */ TkMenu *menuPtr, /* The menu we are invoking. */ - int index) /* The zero based index of the item we are + TkSizeT index) /* The zero based index of the item we are * invoking. */ { int result = TCL_OK; TkMenuEntry *mePtr; - if (index < 0) { + if (index == TCL_INDEX_NONE) { goto done; } mePtr = menuPtr->entries[index]; @@ -2117,7 +2120,7 @@ TkGetMenuIndex( * manual entry for valid .*/ int lastOK, /* Non-zero means its OK to return index just * *after* last entry. */ - int *indexPtr) /* Where to store converted index. */ + TkSizeT *indexPtr) /* Where to store converted index. */ { int i; const char *string = Tcl_GetString(objPtr); @@ -2134,7 +2137,7 @@ TkGetMenuIndex( } if ((string[0] == 'n') && (strcmp(string, "none") == 0)) { - *indexPtr = -1; + *indexPtr = TCL_INDEX_NONE; goto success; } @@ -2348,7 +2351,8 @@ MenuAddOrInsert( Tcl_Obj *const objv[]) /* Arguments to command: first arg is type of * entry, others are config options. */ { - int type, index; + int type; + TkSizeT index; TkMenuEntry *mePtr; TkMenu *menuListPtr; @@ -2359,7 +2363,7 @@ MenuAddOrInsert( } else { index = menuPtr->numEntries; } - if (index < 0) { + if (index == TCL_INDEX_NONE) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "bad index \"%s\"", Tcl_GetString(indexPtr))); Tcl_SetErrorCode(interp, "TK", "MENU", "INDEX", NULL); @@ -2599,7 +2603,7 @@ TkActivateMenuEntry( register TkMenuEntry *mePtr; int result = TCL_OK; - if (menuPtr->active != (TkSizeT)-1) { + if (menuPtr->active != TCL_INDEX_NONE) { mePtr = menuPtr->entries[menuPtr->active]; /* @@ -2613,7 +2617,7 @@ TkActivateMenuEntry( TkEventuallyRedrawMenu(menuPtr, menuPtr->entries[menuPtr->active]); } menuPtr->active = index; - if (index != (TkSizeT)-1) { + if (index != TCL_INDEX_NONE) { mePtr = menuPtr->entries[index]; mePtr->state = ENTRY_ACTIVE; TkEventuallyRedrawMenu(menuPtr, mePtr); @@ -2868,14 +2872,14 @@ MenuDoXPosition( TkMenu *menuPtr, Tcl_Obj *objPtr) { - int index; + TkSizeT index; TkRecomputeMenu(menuPtr); if (TkGetMenuIndex(interp, menuPtr, objPtr, 0, &index) != TCL_OK) { return TCL_ERROR; } Tcl_ResetResult(interp); - if (index == -1) { + if (index == TCL_INDEX_NONE) { Tcl_SetObjResult(interp, Tcl_NewWideIntObj(0)); } else { Tcl_SetObjResult(interp, Tcl_NewWideIntObj(menuPtr->entries[index]->x)); @@ -2905,14 +2909,14 @@ MenuDoYPosition( TkMenu *menuPtr, Tcl_Obj *objPtr) { - int index; + TkSizeT index; TkRecomputeMenu(menuPtr); if (TkGetMenuIndex(interp, menuPtr, objPtr, 0, &index) != TCL_OK) { goto error; } Tcl_ResetResult(interp); - if (index == -1) { + if (index == TCL_INDEX_NONE) { Tcl_SetObjResult(interp, Tcl_NewWideIntObj(0)); } else { Tcl_SetObjResult(interp, Tcl_NewWideIntObj(menuPtr->entries[index]->y)); @@ -2943,12 +2947,12 @@ MenuDoYPosition( *---------------------------------------------------------------------- */ -static int +static TkSizeT GetIndexFromCoords( Tcl_Interp *interp, /* Interpreter of menu. */ TkMenu *menuPtr, /* The menu we are searching. */ const char *string, /* The @string we are parsing. */ - int *indexPtr) /* The index of the item that matches. */ + TkSizeT *indexPtr) /* The index of the item that matches. */ { int x, y, i; const char *p; diff --git a/generic/tkMenu.h b/generic/tkMenu.h index 5449879..6843861 100644 --- a/generic/tkMenu.h +++ b/generic/tkMenu.h @@ -496,11 +496,11 @@ MODULE_SCOPE TkMenuReferences*TkFindMenuReferencesObj(Tcl_Interp *interp, MODULE_SCOPE int TkFreeMenuReferences(TkMenuReferences *menuRefPtr); MODULE_SCOPE Tcl_HashTable *TkGetMenuHashTable(Tcl_Interp *interp); MODULE_SCOPE int TkGetMenuIndex(Tcl_Interp *interp, TkMenu *menuPtr, - Tcl_Obj *objPtr, int lastOK, int *indexPtr); + Tcl_Obj *objPtr, int lastOK, TkSizeT *indexPtr); MODULE_SCOPE void TkMenuInitializeDrawingFields(TkMenu *menuPtr); MODULE_SCOPE void TkMenuInitializeEntryDrawingFields(TkMenuEntry *mePtr); MODULE_SCOPE int TkInvokeMenu(Tcl_Interp *interp, TkMenu *menuPtr, - int index); + TkSizeT index); MODULE_SCOPE void TkMenuConfigureDrawOptions(TkMenu *menuPtr); MODULE_SCOPE int TkMenuConfigureEntryDrawOptions( TkMenuEntry *mePtr, TkSizeT index); -- cgit v0.12 From fa95af8befdf1f0cbeb26ca20e96a10c91af5e6f Mon Sep 17 00:00:00 2001 From: Kevin Walzer Date: Fri, 21 Jun 2019 12:01:41 +0000 Subject: Documentation cleanup and removal of redundant constants; thanks to Christopher Chavez for reports and patch --- macosx/README | 10 +++++----- macosx/tkMacOSXConstants.h | 14 -------------- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/macosx/README b/macosx/README index bed8d22..f35c128 100644 --- a/macosx/README +++ b/macosx/README @@ -26,7 +26,7 @@ before asking on the list, many questions have already been answered). --------------------------- - There are two versions of Tk available on macOS: TkAqua using the native -aqua widgets and look&feel, and TkX11 using the traditional unix X11 wigets. +aqua widgets and look&feel, and TkX11 using the traditional unix X11 widgets. TkX11 requires an X11 server to be installed, such as Apple's X11 (which is available as an optional or default install on recent macOS). TkAqua and TkX11 can be distinguished at runtime via [tk windowingsystem]. @@ -490,7 +490,7 @@ The macOS Tk application does not call the [NSApp run] method at all. Instead it uses the event loop built in to Tk. So the application must take care to replicate the important features of the method ourselves. The way that autorelease pools are handled is -discussed in 4.2 below. Here we discuss the event handling itself. +discussed in 5.2 below. Here we discuss the event handling itself. The Tcl event loop simply consists of repeated calls to TclDoOneEvent. Each call to TclDoOneEvent begins by collecting all pending events from @@ -523,7 +523,7 @@ event to the Tcl queue. In order to carry out the job of managing autorelease pools, which would normally be handled by the [NSApp run] method, a private -NSAUtoreleasePool* property is added to the TkApplication subclass of +NSAutoreleasePool* property is added to the TkApplication subclass of NSApplication. The TkpInit function calls [NSApp _setup] which initializes this property by creating an NSAutoreleasePool prior to calling [NSApp finishLaunching]. This mimics the behavior of the @@ -548,7 +548,7 @@ in nested calls to CheckProc. One additional minor caveat for developers is that there are several steps of the Tk initialization which precede the call to TkpInit. Notably, the font package is initialized first. Since there is no -NSAUtoreleasePool in scope prior to calling TkpInit, the functions +NSAutoreleasePool in scope prior to calling TkpInit, the functions called in these preliminary stages need to create and drain their own NSAutoreleasePools whenever they call methods of Appkit objects (e.g. NSFont). @@ -568,7 +568,7 @@ window. (Normally, the clipping rectangle is the same as the bounding rectangle, but drawing can be clipped to a smaller rectangle by calling TkpClipDrawableToRect.) The aboveVisRgn is the intersection of the window's bounding rectangle with the bounding rectangle of the -parent window. Much of the code in tkMacOSXSubindows.c is devoted to +parent window. Much of the code in tkMacOSXSubwindows.c is devoted to rebuilding these clipping regions whenever something changes in the layout of the windows. This turns out to be a tricky thing to do and it is extremely prone to errors which can be difficult to trace. diff --git a/macosx/tkMacOSXConstants.h b/macosx/tkMacOSXConstants.h index 0badf1a..8ef535c 100644 --- a/macosx/tkMacOSXConstants.h +++ b/macosx/tkMacOSXConstants.h @@ -79,22 +79,8 @@ #define NSInformationalAlertStyle NSAlertStyleInformational #define NSCriticalAlertStyle NSAlertStyleCritical #define NSCenterTextAlignment NSTextAlignmentCenter -#define NSDeviceIndependentModifierFlagsMask NSEventModifierFlagDeviceIndependentFlagsMask -#define NSCommandKeyMask NSEventModifierFlagCommand -#define NSShiftKeyMask NSEventModifierFlagShift -#define NSAlphaShiftKeyMask NSEventModifierFlagCapsLock -#define NSAlternateKeyMask NSEventModifierFlagOption -#define NSControlKeyMask NSEventModifierFlagControl -#define NSNumericPadKeyMask NSEventModifierFlagNumericPad -#define NSFunctionKeyMask NSEventModifierFlagFunction -#define NSKeyUp NSEventTypeKeyUp -#define NSKeyDown NSEventTypeKeyDown -#define NSFlagsChanged NSEventTypeFlagsChanged -#define NSAlphaShiftKeyMask NSEventModifierFlagCapsLock -#define NSShiftKeyMask NSEventModifierFlagShift #define NSAnyEventMask NSEventMaskAny #define NSApplicationDefinedMask NSEventMaskApplicationDefined -#define NSTexturedBackgroundWindowMask NSWindowStyleMaskTexturedBackground #define NSUtilityWindowMask NSWindowStyleMaskUtilityWindow #define NSNonactivatingPanelMask NSWindowStyleMaskNonactivatingPanel #define NSDocModalWindowMask NSWindowStyleMaskDocModalWindow -- cgit v0.12 From 29eb13819fbe92822a05cd43e696c81b77ce1ac4 Mon Sep 17 00:00:00 2001 From: Kevin Walzer Date: Fri, 21 Jun 2019 12:03:28 +0000 Subject: Documentation cleanup and removal of redundant constants; thanks to Christopher Chavez for reports and patch --- macosx/README | 29 ++++++++++++++--------------- macosx/tkMacOSXConstants.h | 14 -------------- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/macosx/README b/macosx/README index c2fa040..3e8b031 100644 --- a/macosx/README +++ b/macosx/README @@ -1,4 +1,4 @@ -Tcl/Tk macOS README +Tcl/Tk macOS README ---------------------- This is the README file for the macOS/Darwin version of Tcl/Tk. @@ -26,7 +26,7 @@ before asking on the list, many questions have already been answered). --------------------------- - There are two versions of Tk available on macOS: TkAqua using the native -aqua widgets and look&feel, and TkX11 using the traditional unix X11 wigets. +aqua widgets and look&feel, and TkX11 using the traditional unix X11 widgets. TkX11 requires an X11 server to be installed, such as Apple's X11 (which is available as an optional or default install on recent macOS). TkAqua and TkX11 can be distinguished at runtime via [tk windowingsystem]. @@ -490,7 +490,7 @@ The macOS Tk application does not call the [NSApp run] method at all. Instead it uses the event loop built in to Tk. So the application must take care to replicate the important features of the method ourselves. The way that autorelease pools are handled is -discussed in 4.2 below. Here we discuss the event handling itself. +discussed in 5.2 below. Here we discuss the event handling itself. The Tcl event loop simply consists of repeated calls to TclDoOneEvent. Each call to TclDoOneEvent begins by collecting all pending events from @@ -523,7 +523,7 @@ event to the Tcl queue. In order to carry out the job of managing autorelease pools, which would normally be handled by the [NSApp run] method, a private -NSAUtoreleasePool* property is added to the TkApplication subclass of +NSAutoreleasePool* property is added to the TkApplication subclass of NSApplication. The TkpInit function calls [NSApp _setup] which initializes this property by creating an NSAutoreleasePool prior to calling [NSApp finishLaunching]. This mimics the behavior of the @@ -548,7 +548,7 @@ in nested calls to CheckProc. One additional minor caveat for developers is that there are several steps of the Tk initialization which precede the call to TkpInit. Notably, the font package is initialized first. Since there is no -NSAUtoreleasePool in scope prior to calling TkpInit, the functions +NSAutoreleasePool in scope prior to calling TkpInit, the functions called in these preliminary stages need to create and drain their own NSAutoreleasePools whenever they call methods of Appkit objects (e.g. NSFont). @@ -568,7 +568,7 @@ window. (Normally, the clipping rectangle is the same as the bounding rectangle, but drawing can be clipped to a smaller rectangle by calling TkpClipDrawableToRect.) The aboveVisRgn is the intersection of the window's bounding rectangle with the bounding rectangle of the -parent window. Much of the code in tkMacOSXSubindows.c is devoted to +parent window. Much of the code in tkMacOSXSubwindows.c is devoted to rebuilding these clipping regions whenever something changes in the layout of the windows. This turns out to be a tricky thing to do and it is extremely prone to errors which can be difficult to trace. @@ -663,16 +663,15 @@ source and destination rectangles for the scrolling. The embedded windows are redrawn within the DisplayText function by some conditional code which is only used for macOS. -6. Virtual events on 10.14 ---------------------------- +6.0 Virtual events on 10.14 +~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10.14 supports system appearance changes, and has added a "Dark Mode" -that casts all window frames and menus as black. Tk 8.6.9 supports Dark -Mode by having the window decorations, menus, and dialogs automatically -take on the appropriate appearance when the system appearance is changed. -Because the window content itself is drawn by Tk, it will not change when -the system mode changes. - +that casts all window frames and menus as black. Tk 8.6.9 has added two +virtual events, <> and <>, to allow you to update +your Tk app's appearance when the system appearance changes. Just bind +your appearance-updating code to these virtual events and you will see +it triggered when the system appearance toggles between dark and light. 7.0 Mac Services ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -703,7 +702,7 @@ that LaunchServices is launching the correct Wish.app. Instructions for doing this are provided below. The command line tool which manages the LaunchServices database has -an amazingly unwieldy path name. So, first, run this command: +an amazingly unwieldy path name. So, first, run this command: alias lsregister='/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister' diff --git a/macosx/tkMacOSXConstants.h b/macosx/tkMacOSXConstants.h index 0badf1a..8ef535c 100644 --- a/macosx/tkMacOSXConstants.h +++ b/macosx/tkMacOSXConstants.h @@ -79,22 +79,8 @@ #define NSInformationalAlertStyle NSAlertStyleInformational #define NSCriticalAlertStyle NSAlertStyleCritical #define NSCenterTextAlignment NSTextAlignmentCenter -#define NSDeviceIndependentModifierFlagsMask NSEventModifierFlagDeviceIndependentFlagsMask -#define NSCommandKeyMask NSEventModifierFlagCommand -#define NSShiftKeyMask NSEventModifierFlagShift -#define NSAlphaShiftKeyMask NSEventModifierFlagCapsLock -#define NSAlternateKeyMask NSEventModifierFlagOption -#define NSControlKeyMask NSEventModifierFlagControl -#define NSNumericPadKeyMask NSEventModifierFlagNumericPad -#define NSFunctionKeyMask NSEventModifierFlagFunction -#define NSKeyUp NSEventTypeKeyUp -#define NSKeyDown NSEventTypeKeyDown -#define NSFlagsChanged NSEventTypeFlagsChanged -#define NSAlphaShiftKeyMask NSEventModifierFlagCapsLock -#define NSShiftKeyMask NSEventModifierFlagShift #define NSAnyEventMask NSEventMaskAny #define NSApplicationDefinedMask NSEventMaskApplicationDefined -#define NSTexturedBackgroundWindowMask NSWindowStyleMaskTexturedBackground #define NSUtilityWindowMask NSWindowStyleMaskUtilityWindow #define NSNonactivatingPanelMask NSWindowStyleMaskNonactivatingPanel #define NSDocModalWindowMask NSWindowStyleMaskDocModalWindow -- cgit v0.12 From 8fb0a9c7c1a87f04f3a5ef5da5d68630709a23b4 Mon Sep 17 00:00:00 2001 From: dgp Date: Fri, 21 Jun 2019 12:34:20 +0000 Subject: Resolve compiler warnings and segfault in imgListFormat tests. --- generic/tkImgSVGnano.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/generic/tkImgSVGnano.c b/generic/tkImgSVGnano.c index b8776fe..32391ef 100644 --- a/generic/tkImgSVGnano.c +++ b/generic/tkImgSVGnano.c @@ -118,7 +118,7 @@ FileMatchSVG( int *widthPtr, int *heightPtr, Tcl_Interp *interp) { - size_t length; + int length; Tcl_Obj *dataObj = Tcl_NewObj(); const char *data; RastOpts ropts; @@ -178,7 +178,7 @@ FileReadSVG( int width, int height, int srcX, int srcY) { - size_t length; + int length; const char *data; RastOpts ropts; NSVGimage *nsvgImage = GetCachedSVG(interp, chan, formatObj, &ropts); @@ -230,7 +230,7 @@ StringMatchSVG( int *widthPtr, int *heightPtr, Tcl_Interp *interp) { - size_t length; + int length; const char *data; RastOpts ropts; NSVGimage *nsvgImage; @@ -281,7 +281,7 @@ StringReadSVG( int width, int height, int srcX, int srcY) { - size_t length; + int length; const char *data; RastOpts ropts; NSVGimage *nsvgImage = GetCachedSVG(interp, dataObj, formatObj, &ropts); @@ -576,7 +576,7 @@ CacheSVG( NSVGimage *nsvgImage, RastOpts *ropts) { - size_t length; + int length; const char *data; NSVGcache *cachePtr = GetCachePtr(interp); @@ -616,7 +616,7 @@ GetCachedSVG( Tcl_Obj *formatObj, RastOpts *ropts) { - size_t length; + int length; const char *data; NSVGcache *cachePtr = GetCachePtr(interp); NSVGimage *nsvgImage = NULL; -- cgit v0.12 From f8f745fe34d10d25ff1fe4e0935e042b5347004c Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 21 Jun 2019 12:40:03 +0000 Subject: Eliminate some redundant type-casts --- generic/tkCanvText.c | 8 ++++---- generic/tkFrame.c | 12 ++++++------ generic/tkSelect.c | 2 +- generic/tkText.c | 2 +- generic/tkTextMark.c | 4 ++-- unix/tkUnixSelect.c | 2 +- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/generic/tkCanvText.c b/generic/tkCanvText.c index b9607a5..d358fb3 100644 --- a/generic/tkCanvText.c +++ b/generic/tkCanvText.c @@ -1388,13 +1388,13 @@ GetTextIndex( c = string[0]; - if ((c == 'e') && (strncmp(string, "end", (unsigned) length) == 0)) { + if ((c == 'e') && (strncmp(string, "end", length) == 0)) { *indexPtr = textPtr->numChars; } else if ((c == 'i') - && (strncmp(string, "insert", (unsigned) length) == 0)) { + && (strncmp(string, "insert", length) == 0)) { *indexPtr = textPtr->insertPos; } else if ((c == 's') && (length >= 5) - && (strncmp(string, "sel.first", (unsigned) length) == 0)) { + && (strncmp(string, "sel.first", length) == 0)) { if (textInfoPtr->selItemPtr != itemPtr) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "selection isn't in item", -1)); @@ -1403,7 +1403,7 @@ GetTextIndex( } *indexPtr = textInfoPtr->selectFirst; } else if ((c == 's') && (length >= 5) - && (strncmp(string, "sel.last", (unsigned) length) == 0)) { + && (strncmp(string, "sel.last", length) == 0)) { if (textInfoPtr->selItemPtr != itemPtr) { Tcl_SetObjResult(interp, Tcl_NewStringObj( "selection isn't in item", -1)); diff --git a/generic/tkFrame.c b/generic/tkFrame.c index 0edd4c2..746f3eb 100644 --- a/generic/tkFrame.c +++ b/generic/tkFrame.c @@ -826,17 +826,17 @@ FrameWidgetObjCmd( } c = arg[1]; if (((c == 'c') && (length >= 2) - && (strncmp(arg, "-class", (unsigned)length) == 0)) + && (strncmp(arg, "-class", length) == 0)) || ((c == 'c') && (length >= 3) - && (strncmp(arg, "-colormap", (unsigned)length) == 0)) + && (strncmp(arg, "-colormap", length) == 0)) || ((c == 'c') && (length >= 3) - && (strncmp(arg, "-container", (unsigned)length) == 0)) + && (strncmp(arg, "-container", length) == 0)) || ((c == 's') && (framePtr->type == TYPE_TOPLEVEL) - && (strncmp(arg, "-screen", (unsigned)length) == 0)) + && (strncmp(arg, "-screen", length) == 0)) || ((c == 'u') && (framePtr->type == TYPE_TOPLEVEL) - && (strncmp(arg, "-use", (unsigned)length) == 0)) + && (strncmp(arg, "-use", length) == 0)) || ((c == 'v') - && (strncmp(arg, "-visual", (unsigned)length) == 0))) { + && (strncmp(arg, "-visual", length) == 0))) { #ifdef SUPPORT_CONFIG_EMBEDDED if (c == 'u') { diff --git a/generic/tkSelect.c b/generic/tkSelect.c index 85865de..b2dd0d9 100644 --- a/generic/tkSelect.c +++ b/generic/tkSelect.c @@ -1508,7 +1508,7 @@ TkSelDefaultSelection( Tcl_DStringFree(&ds); return -1; } - memcpy(buffer, Tcl_DStringValue(&ds), (unsigned) (1+length)); + memcpy(buffer, Tcl_DStringValue(&ds), length + 1); Tcl_DStringFree(&ds); *typePtr = XA_ATOM; return length; diff --git a/generic/tkText.c b/generic/tkText.c index 7e09bfd..a738c57 100644 --- a/generic/tkText.c +++ b/generic/tkText.c @@ -6031,7 +6031,7 @@ SearchCore( */ p = startOfLine + lastOffset - firstNewLine - 1; - if (strncmp(p, pattern, (unsigned) firstNewLine + 1)) { + if (strncmp(p, pattern, firstNewLine + 1)) { /* * No match. */ diff --git a/generic/tkTextMark.c b/generic/tkTextMark.c index aca08fb..c516697 100644 --- a/generic/tkTextMark.c +++ b/generic/tkTextMark.c @@ -162,10 +162,10 @@ TkTextMarkCmd( } str = TkGetStringFromObj(objv[4],&length); c = str[0]; - if ((c == 'l') && (strncmp(str, "left", (unsigned) length) == 0)) { + if ((c == 'l') && (strncmp(str, "left", length) == 0)) { newTypePtr = &tkTextLeftMarkType; } else if ((c == 'r') && - (strncmp(str, "right", (unsigned) length) == 0)) { + (strncmp(str, "right", length) == 0)) { newTypePtr = &tkTextRightMarkType; } else { Tcl_SetObjResult(interp, Tcl_ObjPrintf( diff --git a/unix/tkUnixSelect.c b/unix/tkUnixSelect.c index 5b450f4..3009873 100644 --- a/unix/tkUnixSelect.c +++ b/unix/tkUnixSelect.c @@ -919,7 +919,7 @@ ConvertSelection( /* * Nobody seems to know about this kind of request. If it's of a * sort that we can handle without any help, do it. Otherwise mark - * the request as an errror. + * the request as an error. */ numItems = TkSelDefaultSelection(infoPtr, target, (char *) buffer, -- cgit v0.12 From 779f43bf68b8ce10b9356a7ac83916707c4a780b Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 21 Jun 2019 13:23:24 +0000 Subject: Make better use of full range for string lengths, if Tk is compiled with Tcl 9.0 headers. --- generic/tkImgSVGnano.c | 16 ++++++++-------- generic/tkObj.c | 2 +- win/tkWinDialog.c | 5 ++--- win/tkWinWm.c | 38 +++++++++++++++----------------------- 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/generic/tkImgSVGnano.c b/generic/tkImgSVGnano.c index 32391ef..d64ae5b 100644 --- a/generic/tkImgSVGnano.c +++ b/generic/tkImgSVGnano.c @@ -62,7 +62,7 @@ static int StringReadSVG(Tcl_Interp *interp, Tcl_Obj *dataObj, int destX, int destY, int width, int height, int srcX, int srcY); static NSVGimage * ParseSVGWithOptions(Tcl_Interp *interp, - const char *input, size_t length, Tcl_Obj *format, + const char *input, TkSizeT length, Tcl_Obj *format, RastOpts *ropts); static int RasterizeSVG(Tcl_Interp *interp, Tk_PhotoHandle imageHandle, NSVGimage *nsvgImage, @@ -118,7 +118,7 @@ FileMatchSVG( int *widthPtr, int *heightPtr, Tcl_Interp *interp) { - int length; + TkSizeT length; Tcl_Obj *dataObj = Tcl_NewObj(); const char *data; RastOpts ropts; @@ -178,7 +178,7 @@ FileReadSVG( int width, int height, int srcX, int srcY) { - int length; + TkSizeT length; const char *data; RastOpts ropts; NSVGimage *nsvgImage = GetCachedSVG(interp, chan, formatObj, &ropts); @@ -230,7 +230,7 @@ StringMatchSVG( int *widthPtr, int *heightPtr, Tcl_Interp *interp) { - int length; + TkSizeT length; const char *data; RastOpts ropts; NSVGimage *nsvgImage; @@ -281,7 +281,7 @@ StringReadSVG( int width, int height, int srcX, int srcY) { - int length; + TkSizeT length; const char *data; RastOpts ropts; NSVGimage *nsvgImage = GetCachedSVG(interp, dataObj, formatObj, &ropts); @@ -317,7 +317,7 @@ static NSVGimage * ParseSVGWithOptions( Tcl_Interp *interp, const char *input, - size_t length, + TkSizeT length, Tcl_Obj *formatObj, RastOpts *ropts) { @@ -576,7 +576,7 @@ CacheSVG( NSVGimage *nsvgImage, RastOpts *ropts) { - int length; + TkSizeT length; const char *data; NSVGcache *cachePtr = GetCachePtr(interp); @@ -616,7 +616,7 @@ GetCachedSVG( Tcl_Obj *formatObj, RastOpts *ropts) { - int length; + TkSizeT length; const char *data; NSVGcache *cachePtr = GetCachePtr(interp); NSVGimage *nsvgImage = NULL; diff --git a/generic/tkObj.c b/generic/tkObj.c index b857d98..419a144 100644 --- a/generic/tkObj.c +++ b/generic/tkObj.c @@ -672,7 +672,7 @@ UpdateStringOfMM( { MMRep *mmPtr; char buffer[TCL_DOUBLE_SPACE]; - size_t len; + TkSizeT len; mmPtr = objPtr->internalRep.twoPtrValue.ptr1; /* assert( mmPtr->units == -1 && objPtr->bytes == NULL ); */ diff --git a/win/tkWinDialog.c b/win/tkWinDialog.c index dfcc744..a3b6e34 100644 --- a/win/tkWinDialog.c +++ b/win/tkWinDialog.c @@ -2107,13 +2107,12 @@ MakeFilter( *p = '\0'; } else { - size_t len; + TkSizeT len; if (valuePtr == NULL) { len = 0; } else { - (void) Tcl_GetString(valuePtr); - len = valuePtr->length; + (void) TkGetStringFromObj(valuePtr, &len); } /* diff --git a/win/tkWinWm.c b/win/tkWinWm.c index bd57ceb..69f5d7b 100644 --- a/win/tkWinWm.c +++ b/win/tkWinWm.c @@ -2801,7 +2801,7 @@ Tk_WmObjCmd( WMOPT_WITHDRAW }; int index; - size_t length; + TkSizeT length; const char *argv1; TkWindow *winPtr, **winPtrPtr = &winPtr; TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; @@ -2812,8 +2812,7 @@ Tk_WmObjCmd( return TCL_ERROR; } - argv1 = Tcl_GetString(objv[1]); - length = objv[1]->length; + argv1 = TkGetStringFromObj(objv[1], &length); if ((argv1[0] == 't') && !strncmp(argv1, "tracing", length) && (length >= 3)) { int wmTracing; @@ -3030,7 +3029,7 @@ WmAttributesCmd( LONG style, exStyle, styleBit, *stylePtr = NULL; const char *string; int i, boolean; - size_t length; + TkSizeT length; int config_fullscreen = 0, updatewrapper = 0; int fullscreen_attr_changed = 0, fullscreen_attr = 0; @@ -3077,8 +3076,7 @@ WmAttributesCmd( return TCL_OK; } for (i = 3; i < objc; i += 2) { - string = Tcl_GetString(objv[i]); - length = objv[i]->length; + string = TkGetStringFromObj(objv[i], &length); if ((length < 2) || (string[0] != '-')) { goto configArgs; } @@ -3146,9 +3144,8 @@ WmAttributesCmd( } wmPtr->alpha = dval; } else { /* -transparentcolor */ - const char *crefstr = Tcl_GetString(objv[i+1]); + const char *crefstr = TkGetStringFromObj(objv[i+1], &length); - length = objv[i+1]->length; if (length == 0) { /* reset to no transparent color */ if (wmPtr->crefObj) { @@ -3326,7 +3323,7 @@ WmClientCmd( { register WmInfo *wmPtr = winPtr->wmInfoPtr; const char *argv3; - size_t length; + TkSizeT length; if ((objc != 3) && (objc != 4)) { Tcl_WrongNumArgs(interp, 2, objv, "window ?name?"); @@ -3339,8 +3336,7 @@ WmClientCmd( } return TCL_OK; } - argv3 = Tcl_GetString(objv[3]); - length = objv[3]->length; + argv3 = TkGetStringFromObj(objv[3], &length); if (argv3[0] == 0) { if (wmPtr->clientMachine != NULL) { ckfree(wmPtr->clientMachine); @@ -3926,7 +3922,7 @@ WmGroupCmd( register WmInfo *wmPtr = winPtr->wmInfoPtr; Tk_Window tkwin2; const char *argv3; - size_t length; + TkSizeT length; if ((objc != 3) && (objc != 4)) { Tcl_WrongNumArgs(interp, 2, objv, "window ?pathName?"); @@ -3938,8 +3934,7 @@ WmGroupCmd( } return TCL_OK; } - argv3 = Tcl_GetString(objv[3]); - length = objv[3]->length; + argv3 = TkGetStringFromObj(objv[3], &length); if (*argv3 == '\0') { wmPtr->hints.flags &= ~WindowGroupHint; if (wmPtr->leaderName != NULL) { @@ -4248,7 +4243,7 @@ WmIconnameCmd( { register WmInfo *wmPtr = winPtr->wmInfoPtr; const char *argv3; - size_t length; + TkSizeT length; if (objc > 4) { Tcl_WrongNumArgs(interp, 2, objv, "window ?newName?"); @@ -4262,8 +4257,7 @@ WmIconnameCmd( if (wmPtr->iconName != NULL) { ckfree(wmPtr->iconName); } - argv3 = Tcl_GetString(objv[3]); - length = objv[3]->length; + argv3 = Tcl_GetStringFromObj(objv[3], &length); wmPtr->iconName = ckalloc(length + 1); memcpy(wmPtr->iconName, argv3, length + 1); if (!(wmPtr->flags & WM_NEVER_MAPPED)) { @@ -4957,7 +4951,7 @@ WmProtocolCmd( register ProtocolHandler *protPtr, *prevPtr; Atom protocol; const char *cmd; - size_t cmdLength; + TkSizeT cmdLength; Tcl_Obj *resultObj; if ((objc < 3) || (objc > 5)) { @@ -5012,8 +5006,7 @@ WmProtocolCmd( break; } } - cmd = Tcl_GetString(objv[4]); - cmdLength = objv[4]->length; + cmd = TkGetStringFromObj(objv[4], &cmdLength); if (cmdLength > 0) { protPtr = ckalloc(HANDLER_SIZE(cmdLength)); protPtr->protocol = protocol; @@ -5451,7 +5444,7 @@ WmTitleCmd( { register WmInfo *wmPtr = winPtr->wmInfoPtr; const char *argv3; - size_t length; + TkSizeT length; HWND wrapper; if (objc > 4) { @@ -5484,8 +5477,7 @@ WmTitleCmd( if (wmPtr->title != NULL) { ckfree(wmPtr->title); } - argv3 = Tcl_GetString(objv[3]); - length = objv[3]->length; + argv3 = TkGetStringFromObj(objv[3], &length); wmPtr->title = ckalloc(length + 1); memcpy(wmPtr->title, argv3, length + 1); -- cgit v0.12 From 8bfb3ee2869841799b88a03b53ca7e2b99c5b10c Mon Sep 17 00:00:00 2001 From: dkf Date: Sat, 22 Jun 2019 06:25:36 +0000 Subject: CONST to const; make code compile --- macosx/tkMacOSXInit.c | 71 +++++++++++++++++++++++++---------------------- macosx/tkMacOSXPrivate.h | 9 +++--- macosx/tkMacOSXServices.c | 10 +++---- 3 files changed, 47 insertions(+), 43 deletions(-) diff --git a/macosx/tkMacOSXInit.c b/macosx/tkMacOSXInit.c index 946bf30..cc7c23a 100644 --- a/macosx/tkMacOSXInit.c +++ b/macosx/tkMacOSXInit.c @@ -28,6 +28,13 @@ static char tkLibPath[PATH_MAX + 1] = ""; static char scriptPath[PATH_MAX + 1] = ""; +/* + * Forward declarations... + */ + +static int TkMacOSXGetAppPathCmd(ClientData cd, Tcl_Interp *ip, + int objc, Tcl_Obj *const objv[]); + #pragma mark TKApplication(TKInit) @implementation TKApplication @@ -388,7 +395,8 @@ TkpInit( TkMacOSXRegisterServiceWidgetObjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "::tk::mac::iconBitmap", TkMacOSXIconBitmapObjCmd, NULL, NULL); - Tcl_CreateObjCommand(interp, "::tk::mac::GetAppPath", TkMacOSXGetAppPath,(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); + Tcl_CreateObjCommand(interp, "::tk::mac::GetAppPath", + TkMacOSXGetAppPathCmd, NULL, NULL); /* * Initialize the NSServices object here. Apple's docs say to do this @@ -437,11 +445,11 @@ TkpGetAppName( } Tcl_DStringAppend(namePtr, name, -1); } - + /* *---------------------------------------------------------------------- * - * TkMacOSXGetAppPath -- + * TkMacOSXGetAppPathCmd -- * * Returns the path of the Wish application bundle. * @@ -453,42 +461,39 @@ TkpGetAppName( * *---------------------------------------------------------------------- */ -int TkMacOSXGetAppPath( - ClientData cd, - Tcl_Interp *ip, - int objc, - Tcl_Obj *CONST objv[]) -{ - - CFURLRef mainBundleURL = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - - - /* - * Convert the URL reference into a string reference. - */ - - CFStringRef appPath = CFURLCopyFileSystemPath(mainBundleURL, kCFURLPOSIXPathStyle); - /* - * Get the system encoding method. - */ - - CFStringEncoding encodingMethod = CFStringGetSystemEncoding(); +static int +TkMacOSXGetAppPathCmd( + ClientData ignored, + Tcl_Interp *interp, + int objc, + Tcl_Obj *const objv[]) +{ + if (objc != 1) { + Tcl_WrongNumArgs(interp, 1, objv, NULL); + return TCL_ERROR; + } - /* - * Convert the string reference into a C string. - */ + /* + * Get the application path URL and convert it to a string path reference. + */ - char *path = (char *) CFStringGetCStringPtr(appPath, encodingMethod); + CFURLRef mainBundleURL = CFBundleCopyBundleURL(CFBundleGetMainBundle()); + CFStringRef appPath = + CFURLCopyFileSystemPath(mainBundleURL, kCFURLPOSIXPathStyle); - Tcl_SetResult(ip, path, NULL); + /* + * Convert (and copy) the string reference into a Tcl result. + */ - CFRelease(mainBundleURL); - CFRelease(appPath); - return TCL_OK; + Tcl_SetObjResult(interp, Tcl_NewStringObj( + CFStringGetCStringPtr(appPath, CFStringGetSystemEncoding()), -1)); + CFRelease(mainBundleURL); + CFRelease(appPath); + return TCL_OK; } - + /* *---------------------------------------------------------------------- * @@ -555,7 +560,7 @@ TkMacOSXDefaultStartupScript(void) CFURLRef scriptFldrURL; char startupScript[PATH_MAX + 1]; - if (CFURLGetFileSystemRepresentation (appMainURL, true, + if (CFURLGetFileSystemRepresentation(appMainURL, true, (unsigned char *) startupScript, PATH_MAX)) { Tcl_SetStartupScript(Tcl_NewStringObj(startupScript,-1), NULL); scriptFldrURL = CFURLCreateCopyDeletingLastPathComponent(NULL, diff --git a/macosx/tkMacOSXPrivate.h b/macosx/tkMacOSXPrivate.h index a67f894..4dbf536 100644 --- a/macosx/tkMacOSXPrivate.h +++ b/macosx/tkMacOSXPrivate.h @@ -115,9 +115,10 @@ * Macro abstracting use of TkMacOSXGetNamedSymbol to init named symbols. */ +#define UNINITIALISED_SYMBOL ((void*)(-1L)) #define TkMacOSXInitNamedSymbol(module, ret, symbol, ...) \ - static ret (* symbol)(__VA_ARGS__) = (void*)(-1L); \ - if (symbol == (void*)(-1L)) { \ + static ret (* symbol)(__VA_ARGS__) = UNINITIALISED_SYMBOL; \ + if (symbol == UNINITIALISED_SYMBOL) { \ symbol = TkMacOSXGetNamedSymbol(STRINGIFY(module), \ STRINGIFY(symbol)); \ } @@ -430,9 +431,7 @@ VISIBILITY_HIDDEN @end #endif /* _TKMACPRIV */ - -int TkMacOSXGetAppPath(ClientData cd, Tcl_Interp *ip, int objc, Tcl_Obj *CONST objv[]); - + /* * Local Variables: * mode: objc diff --git a/macosx/tkMacOSXServices.c b/macosx/tkMacOSXServices.c index af40a91..9bc22ea 100644 --- a/macosx/tkMacOSXServices.c +++ b/macosx/tkMacOSXServices.c @@ -157,16 +157,16 @@ ServicesEventProc( int TkMacOSXRegisterServiceWidgetObjCmd( ClientData cd, - Tcl_Interp *ip, + Tcl_Interp *interp, int objc, - Tcl_Obj *CONST objv[]) + Tcl_Obj *const objv[]) { /* * Need proper number of args. */ if (objc != 2) { - Tcl_WrongNumArgs(ip, 1, objv, "path?"); + Tcl_WrongNumArgs(interp, 1, objv, "path?"); return TCL_ERROR; } @@ -176,8 +176,8 @@ TkMacOSXRegisterServiceWidgetObjCmd( Rect bounds; NSRect frame; - Tk_Window path = - Tk_NameToWindow(ip, Tcl_GetString(objv[1]), Tk_MainWindow(ip)); + Tk_Window path = Tk_NameToWindow(interp, + Tcl_GetString(objv[1]), Tk_MainWindow(interp)); if (path == NULL) { return TCL_ERROR; -- cgit v0.12 From f959b3aa341686dd18b2e81d19d8b0d13c308702 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 24 Jun 2019 08:02:39 +0000 Subject: Tk_DoOneEvent -> Tcl_DoOneEvent, since the Tk variant is deprecated. See: [505fe5a0e2] --- generic/tkGrab.c | 2 +- macosx/tkMacOSXWm.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/generic/tkGrab.c b/generic/tkGrab.c index 21c06a9..dc0e8fc 100644 --- a/generic/tkGrab.c +++ b/generic/tkGrab.c @@ -1382,7 +1382,7 @@ QueueGrabWindowChange( static int GrabWinEventProc( Tcl_Event *evPtr, /* Event of type NewGrabWinEvent. */ - int flags) /* Flags argument to Tk_DoOneEvent: indicates + int flags) /* Flags argument to Tcl_DoOneEvent: indicates * what kinds of events are being processed * right now. */ { diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c index e7bcbdf..c58dd5a 100644 --- a/macosx/tkMacOSXWm.c +++ b/macosx/tkMacOSXWm.c @@ -1015,7 +1015,7 @@ TkWmDeadWindow( */ if (winPtr->parentPtr) { - while (Tk_DoOneEvent(TK_WINDOW_EVENTS|TK_DONT_WAIT)) {} + while (Tcl_DoOneEvent(TK_WINDOW_EVENTS|TK_DONT_WAIT)) {} } [NSApp _resetAutoreleasePool]; #if DEBUG_ZOMBIES > 0 -- cgit v0.12 From a3129322d24fa7319ca3ad4ec44b37a5ab4f4ec0 Mon Sep 17 00:00:00 2001 From: culler Date: Mon, 24 Jun 2019 18:52:29 +0000 Subject: Remove unnecessary call to NSUpdateDynamicServices() which can cause crashes. --- macosx/tkMacOSXServices.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/macosx/tkMacOSXServices.c b/macosx/tkMacOSXServices.c index af40a91..6ecb12d 100644 --- a/macosx/tkMacOSXServices.c +++ b/macosx/tkMacOSXServices.c @@ -1,6 +1,6 @@ /* * tkMacOSXServices.c -- - * + *\ * This file allows the integration of Tk and the Cocoa NSServices API. * * Copyright (c) 2010-2019 Kevin Walzer/WordTech Communications LLC. @@ -54,7 +54,6 @@ ServicesEventProc( NSArray *sendTypes = [NSArray arrayWithObjects:@"NSStringPboardType", @"NSPasteboardTypeString", nil]; [NSApp registerServicesMenuSendTypes:sendTypes returnTypes:sendTypes]; - NSUpdateDynamicServices(); return; } -- cgit v0.12 From 343bf6c92b634857d5ae6a025f3d9e88077f5283 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 25 Jun 2019 15:25:54 +0000 Subject: Eliminate warning, when compiling with 9.0 Tcl headers on Windows --- win/tkWinWm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win/tkWinWm.c b/win/tkWinWm.c index 69f5d7b..7fae383 100644 --- a/win/tkWinWm.c +++ b/win/tkWinWm.c @@ -4257,7 +4257,7 @@ WmIconnameCmd( if (wmPtr->iconName != NULL) { ckfree(wmPtr->iconName); } - argv3 = Tcl_GetStringFromObj(objv[3], &length); + argv3 = TkGetStringFromObj(objv[3], &length); wmPtr->iconName = ckalloc(length + 1); memcpy(wmPtr->iconName, argv3, length + 1); if (!(wmPtr->flags & WM_NEVER_MAPPED)) { -- cgit v0.12 From fdf8a62f8c24e498f5444a5a110fb51c3b01b8c8 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Tue, 25 Jun 2019 21:27:04 +0000 Subject: CONST -> const. Eliminate unnecessary type-casts and end-of-line spacing --- generic/tkCanvPs.c | 2 +- generic/tkCanvas.c | 4 ++-- generic/tkPlace.c | 2 +- generic/tkStyle.c | 2 +- generic/tkText.c | 2 +- generic/tkTextDisp.c | 4 ++-- generic/tkTextIndex.c | 18 +++++++++--------- generic/tkWindow.c | 2 +- library/text.tcl | 2 +- macosx/README | 2 +- macosx/tkMacOSXHLEvents.c | 8 ++++---- macosx/tkMacOSXInit.c | 34 +++++++++++++++++----------------- macosx/tkMacOSXPrivate.h | 2 +- macosx/tkMacOSXServices.c | 2 +- macosx/tkMacOSXTest.c | 3 +-- unix/tkUnix3d.c | 2 +- unix/tkUnixColor.c | 2 +- 17 files changed, 46 insertions(+), 47 deletions(-) diff --git a/generic/tkCanvPs.c b/generic/tkCanvPs.c index 2bfdcc5..4e41a2a 100644 --- a/generic/tkCanvPs.c +++ b/generic/tkCanvPs.c @@ -381,7 +381,7 @@ TkCanvPostscriptCmd( */ psInfo.chan = Tcl_GetChannel(interp, psInfo.channelName, &mode); - if (psInfo.chan == (Tcl_Channel) NULL) { + if (psInfo.chan == NULL) { result = TCL_ERROR; goto cleanup; } diff --git a/generic/tkCanvas.c b/generic/tkCanvas.c index 414c6fb..4d260dc 100644 --- a/generic/tkCanvas.c +++ b/generic/tkCanvas.c @@ -698,7 +698,7 @@ Tk_CanvasObjCmd( canvasPtr->textInfo.cursorOn = 0; canvasPtr->insertOnTime = 0; canvasPtr->insertOffTime = 0; - canvasPtr->insertBlinkHandler = (Tcl_TimerToken) NULL; + canvasPtr->insertBlinkHandler = NULL; canvasPtr->xOrigin = canvasPtr->yOrigin = 0; canvasPtr->drawableXOrigin = canvasPtr->drawableYOrigin = 0; canvasPtr->bindingTable = NULL; @@ -5307,7 +5307,7 @@ CanvasFocusProc( } else { canvasPtr->textInfo.gotFocus = 0; canvasPtr->textInfo.cursorOn = 0; - canvasPtr->insertBlinkHandler = (Tcl_TimerToken) NULL; + canvasPtr->insertBlinkHandler = NULL; } EventuallyRedrawItem(canvasPtr, canvasPtr->textInfo.focusItemPtr); if (canvasPtr->highlightWidth > 0) { diff --git a/generic/tkPlace.c b/generic/tkPlace.c index 7aa9b04..59b8a2b 100644 --- a/generic/tkPlace.c +++ b/generic/tkPlace.c @@ -616,7 +616,7 @@ ConfigureSlave( Tk_SavedOptions savedOptions; int mask; Slave *slavePtr; - Tk_Window masterWin = (Tk_Window) NULL; + Tk_Window masterWin = NULL; TkWindow *master; if (Tk_TopWinHierarchy(tkwin)) { diff --git a/generic/tkStyle.c b/generic/tkStyle.c index e7401df..d9299d1 100644 --- a/generic/tkStyle.c +++ b/generic/tkStyle.c @@ -1360,7 +1360,7 @@ Tk_GetStyle( "style \"%s\" doesn't exist", name)); Tcl_SetErrorCode(interp, "TK", "LOOKUP", "STYLE", name, NULL); } - return (Tk_Style) NULL; + return NULL; } stylePtr = Tcl_GetHashValue(entryPtr); diff --git a/generic/tkText.c b/generic/tkText.c index ab06089..7c62621 100644 --- a/generic/tkText.c +++ b/generic/tkText.c @@ -4927,7 +4927,7 @@ DumpLine( TkTextEmbWindow *ewPtr = &segPtr->body.ew; const char *pathname; - if (ewPtr->tkwin == (Tk_Window) NULL) { + if (ewPtr->tkwin == NULL) { pathname = ""; } else { pathname = Tk_PathName(ewPtr->tkwin); diff --git a/generic/tkTextDisp.c b/generic/tkTextDisp.c index fcefb9a..c848fd2 100644 --- a/generic/tkTextDisp.c +++ b/generic/tkTextDisp.c @@ -626,7 +626,7 @@ static void AsyncUpdateLineMetrics(ClientData clientData); static void GenerateWidgetViewSyncEvent(TkText *textPtr, Bool InSync); static void AsyncUpdateYScrollbar(ClientData clientData); static int IsStartOfNotMergedLine(TkText *textPtr, - CONST TkTextIndex *indexPtr); + const TkTextIndex *indexPtr); /* * Result values returned by TextGetScrollInfoObj: @@ -6988,7 +6988,7 @@ FindDLine( static int IsStartOfNotMergedLine( TkText *textPtr, /* Widget record for text widget. */ - CONST TkTextIndex *indexPtr) /* Index to check. */ + const TkTextIndex *indexPtr) /* Index to check. */ { TkTextIndex indexPtr2; diff --git a/generic/tkTextIndex.c b/generic/tkTextIndex.c index 582e1a8..7430197 100644 --- a/generic/tkTextIndex.c +++ b/generic/tkTextIndex.c @@ -40,9 +40,9 @@ static const char * StartEnd(TkText *textPtr, const char *string, static int GetIndex(Tcl_Interp *interp, TkSharedText *sharedPtr, TkText *textPtr, const char *string, TkTextIndex *indexPtr, int *canCachePtr); -static int IndexCountBytesOrdered(CONST TkText *textPtr, - CONST TkTextIndex *indexPtr1, - CONST TkTextIndex *indexPtr2); +static int IndexCountBytesOrdered(const TkText *textPtr, + const TkTextIndex *indexPtr1, + const TkTextIndex *indexPtr2); /* * The "textindex" Tcl_Obj definition: @@ -1636,9 +1636,9 @@ TkTextIndexForwChars( int TkTextIndexCountBytes( - CONST TkText *textPtr, - CONST TkTextIndex *indexPtr1, /* Index describing one location. */ - CONST TkTextIndex *indexPtr2) /* Index describing second location. */ + const TkText *textPtr, + const TkTextIndex *indexPtr1, /* Index describing one location. */ + const TkTextIndex *indexPtr2) /* Index describing second location. */ { int compare = TkTextIndexCmp(indexPtr1, indexPtr2); @@ -1653,11 +1653,11 @@ TkTextIndexCountBytes( static int IndexCountBytesOrdered( - CONST TkText *textPtr, - CONST TkTextIndex *indexPtr1, + const TkText *textPtr, + const TkTextIndex *indexPtr1, /* Index describing location of character from * which to count. */ - CONST TkTextIndex *indexPtr2) + const TkTextIndex *indexPtr2) /* Index describing location of last character * at which to stop the count. */ { diff --git a/generic/tkWindow.c b/generic/tkWindow.c index 917d3bd..ee8e1a9 100644 --- a/generic/tkWindow.c +++ b/generic/tkWindow.c @@ -852,7 +852,7 @@ TkCreateMainWindow( * Create the basic TkWindow structure. */ - tkwin = CreateTopLevelWindow(interp, (Tk_Window) NULL, baseName, + tkwin = CreateTopLevelWindow(interp, NULL, baseName, screenName, /* flags */ 0); if (tkwin == NULL) { return NULL; diff --git a/library/text.tcl b/library/text.tcl index d53aa32..7d12e18 100644 --- a/library/text.tcl +++ b/library/text.tcl @@ -1212,6 +1212,6 @@ proc ::tk::TextScanDrag {w x y} { } if {[info exists Priv(mouseMoved)] && $Priv(mouseMoved)} { $w scan dragto $x $y - } + } } diff --git a/macosx/README b/macosx/README index f35c128..7df4893 100644 --- a/macosx/README +++ b/macosx/README @@ -702,7 +702,7 @@ that LaunchServices is launching the correct Wish.app. Instructions for doing this are provided below. The command line tool which manages the LaunchServices database has -an amazingly unwieldy path name. So, first, run this command: +an amazingly unwieldy path name. So, first, run this command: alias lsregister='/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/LaunchServices.framework/Versions/A/Support/lsregister' diff --git a/macosx/tkMacOSXHLEvents.c b/macosx/tkMacOSXHLEvents.c index d2843a8..0f63ea6 100644 --- a/macosx/tkMacOSXHLEvents.c +++ b/macosx/tkMacOSXHLEvents.c @@ -126,7 +126,7 @@ static int ReallyKillMe(Tcl_Event *eventPtr, int flags); - (void) handlePrintDocumentsEvent: (NSAppleEventDescriptor *)event withReplyEvent: (NSAppleEventDescriptor *)replyEvent { - + NSString* file = [[event paramDescriptorForKeyword:keyDirectObject] stringValue]; const char *printFile=[file UTF8String]; @@ -134,7 +134,7 @@ static int ReallyKillMe(Tcl_Event *eventPtr, int flags); Tcl_DStringInit(&print); if (Tcl_FindCommand(_eventInterp, "::tk::mac::PrintDocument", NULL, 0)) { Tcl_DStringAppend(&print, "::tk::mac::PrintDocument", -1); - } + } Tcl_DStringAppendElement(&print, printFile); int tclErr = Tcl_EvalEx(_eventInterp, Tcl_DStringValue(&print), Tcl_DStringLength(&print), TCL_EVAL_GLOBAL); @@ -272,7 +272,7 @@ static int ReallyKillMe(Tcl_Event *eventPtr, int flags); Tcl_DStringInit(&launch); if (Tcl_FindCommand(_eventInterp, "::tk::mac::LaunchURL", NULL, 0)) { Tcl_DStringAppend(&launch, "::tk::mac::LaunchURL", -1); - } + } Tcl_DStringAppendElement(&launch, cURL); int tclErr = Tcl_EvalEx(_eventInterp, Tcl_DStringValue(&launch), Tcl_DStringLength(&launch), TCL_EVAL_GLOBAL); @@ -454,7 +454,7 @@ TkMacOSXInitAppleEvents( [aeManager setEventHandler:NSApp andSelector:@selector(handleURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL]; - + } } diff --git a/macosx/tkMacOSXInit.c b/macosx/tkMacOSXInit.c index 3efe0c6..bf0b9f2 100644 --- a/macosx/tkMacOSXInit.c +++ b/macosx/tkMacOSXInit.c @@ -388,14 +388,14 @@ TkpInit( TkMacOSXRegisterServiceWidgetObjCmd, NULL, NULL); Tcl_CreateObjCommand(interp, "::tk::mac::iconBitmap", TkMacOSXIconBitmapObjCmd, NULL, NULL); - Tcl_CreateObjCommand(interp, "::tk::mac::GetAppPath", TkMacOSXGetAppPath,(ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); + Tcl_CreateObjCommand(interp, "::tk::mac::GetAppPath", TkMacOSXGetAppPath, NULL, NULL); /* * Initialize the NSServices object here. Apple's docs say to do this - * in applicationDidFinishLaunching, but the Tcl interpreter is not - * initialized until this function call. + * in applicationDidFinishLaunching, but the Tcl interpreter is not + * initialized until this function call. */ - + TkMacOSXServices_Init(interp); return TCL_OK; @@ -457,28 +457,28 @@ int TkMacOSXGetAppPath( ClientData cd, Tcl_Interp *ip, int objc, - Tcl_Obj *CONST objv[]) + Tcl_Obj *const objv[]) { CFURLRef mainBundleURL = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - - /* - * Convert the URL reference into a string reference. + + /* + * Convert the URL reference into a string reference. */ - + CFStringRef appPath = CFURLCopyFileSystemPath(mainBundleURL, kCFURLPOSIXPathStyle); - - /* - * Get the system encoding method. + + /* + * Get the system encoding method. */ - + CFStringEncoding encodingMethod = CFStringGetSystemEncoding(); - - /* - * Convert the string reference into a C string. + + /* + * Convert the string reference into a C string. */ - + char *path = (char *) CFStringGetCStringPtr(appPath, encodingMethod); Tcl_SetResult(ip, path, NULL); diff --git a/macosx/tkMacOSXPrivate.h b/macosx/tkMacOSXPrivate.h index a67f894..98ee54f 100644 --- a/macosx/tkMacOSXPrivate.h +++ b/macosx/tkMacOSXPrivate.h @@ -431,7 +431,7 @@ VISIBILITY_HIDDEN #endif /* _TKMACPRIV */ -int TkMacOSXGetAppPath(ClientData cd, Tcl_Interp *ip, int objc, Tcl_Obj *CONST objv[]); +int TkMacOSXGetAppPath(ClientData cd, Tcl_Interp *ip, int objc, Tcl_Obj *const objv[]); /* * Local Variables: diff --git a/macosx/tkMacOSXServices.c b/macosx/tkMacOSXServices.c index 6ecb12d..809c708 100644 --- a/macosx/tkMacOSXServices.c +++ b/macosx/tkMacOSXServices.c @@ -158,7 +158,7 @@ TkMacOSXRegisterServiceWidgetObjCmd( ClientData cd, Tcl_Interp *ip, int objc, - Tcl_Obj *CONST objv[]) + Tcl_Obj *const objv[]) { /* * Need proper number of args. diff --git a/macosx/tkMacOSXTest.c b/macosx/tkMacOSXTest.c index eabc14e..f109b7a 100644 --- a/macosx/tkMacOSXTest.c +++ b/macosx/tkMacOSXTest.c @@ -50,8 +50,7 @@ TkplatformtestInit( */ #if MAC_OS_X_VERSION_MAX_ALLOWED < 1080 - Tcl_CreateObjCommand(interp, "debugger", DebuggerObjCmd, - (ClientData) 0, (Tcl_CmdDeleteProc *) NULL); + Tcl_CreateObjCommand(interp, "debugger", DebuggerObjCmd, NULL, NULL); #endif return TCL_OK; diff --git a/unix/tkUnix3d.c b/unix/tkUnix3d.c index 2969de1..7ea67a1 100644 --- a/unix/tkUnix3d.c +++ b/unix/tkUnix3d.c @@ -443,7 +443,7 @@ TkpGetShadows( } if (borderPtr->shadow == None) { - borderPtr->shadow = Tk_GetBitmap((Tcl_Interp *) NULL, tkwin, + borderPtr->shadow = Tk_GetBitmap(NULL, tkwin, Tk_GetUid("gray50")); if (borderPtr->shadow == None) { Tcl_Panic("TkpGetShadows couldn't allocate bitmap for border"); diff --git a/unix/tkUnixColor.c b/unix/tkUnixColor.c index 43500ad..ccc6f33 100644 --- a/unix/tkUnixColor.c +++ b/unix/tkUnixColor.c @@ -157,7 +157,7 @@ TkpGetColor( } if (strlen(name) > 99) { /* Don't bother to parse this. [Bug 2809525]*/ - return (TkColor *) NULL; + return NULL; } else if (XAllocNamedColor(display, colormap, name, &screen, &color) != 0) { DeleteStressedCmap(display, colormap); } else { -- cgit v0.12 From 3efbb66596ac4683c9f362a19e3e6c4bf979d2b5 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Wed, 26 Jun 2019 07:34:12 +0000 Subject: Remove use of/documentation regarding deprecated symbols/macro's, which moved to Tcl headers long ago. --- doc/CrtCmHdlr.3 | 2 +- doc/CrtGenHdlr.3 | 2 +- doc/EventHndlr.3 | 2 +- doc/MoveToplev.3 | 2 +- doc/RestrictEv.3 | 6 +++--- generic/tkGrab.c | 2 +- macosx/tkMacOSXWindowEvent.c | 4 ++-- tests/bind.test | 4 ++-- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/CrtCmHdlr.3 b/doc/CrtCmHdlr.3 index 54cee95..92d6865 100644 --- a/doc/CrtCmHdlr.3 +++ b/doc/CrtCmHdlr.3 @@ -33,7 +33,7 @@ drop applications. The callback to \fIproc\fR will be made by \fBTk_HandleEvent\fR; this mechanism only works in programs that dispatch events through \fBTk_HandleEvent\fR (or through other Tk procedures that -call \fBTk_HandleEvent\fR, such as \fBTk_DoOneEvent\fR or +call \fBTk_HandleEvent\fR, such as \fBTcl_DoOneEvent\fR or \fBTk_MainLoop\fR). .PP \fIProc\fR should have arguments and result that match the diff --git a/doc/CrtGenHdlr.3 b/doc/CrtGenHdlr.3 index 1e4f10c..bcf324e 100644 --- a/doc/CrtGenHdlr.3 +++ b/doc/CrtGenHdlr.3 @@ -39,7 +39,7 @@ use with Tk, and so on. The callback to \fIproc\fR will be made by \fBTk_HandleEvent\fR; this mechanism only works in programs that dispatch events through \fBTk_HandleEvent\fR (or through other Tk procedures that -call \fBTk_HandleEvent\fR, such as \fBTk_DoOneEvent\fR or +call \fBTk_HandleEvent\fR, such as \fBTcl_DoOneEvent\fR or \fBTk_MainLoop\fR). .PP \fIProc\fR should have arguments and result that match the diff --git a/doc/EventHndlr.3 b/doc/EventHndlr.3 index 80003d8..3a402e8 100644 --- a/doc/EventHndlr.3 +++ b/doc/EventHndlr.3 @@ -39,7 +39,7 @@ by \fImask\fR occurs in the window specified by \fItkwin\fR. The callback to \fIproc\fR will be made by \fBTk_HandleEvent\fR; this mechanism only works in programs that dispatch events through \fBTk_HandleEvent\fR (or through other Tk procedures that -call \fBTk_HandleEvent\fR, such as \fBTk_DoOneEvent\fR or +call \fBTk_HandleEvent\fR, such as \fBTcl_DoOneEvent\fR or \fBTk_MainLoop\fR). .PP \fIProc\fR should have arguments and result that match the diff --git a/doc/MoveToplev.3 b/doc/MoveToplev.3 index 18436a3..12f353b 100644 --- a/doc/MoveToplev.3 +++ b/doc/MoveToplev.3 @@ -47,7 +47,7 @@ menus that want to appear at a particular place on the screen. When \fBTk_MoveToplevelWindow\fR is called it does not immediately pass on the new desired location to the window manager; it defers this action until all other outstanding work has been completed, -using the \fBTk_DoWhenIdle\fR mechanism. +using the \fBTcl_DoWhenIdle\fR mechanism. .SH KEYWORDS position, top-level window, window manager diff --git a/doc/RestrictEv.3 b/doc/RestrictEv.3 index 0d17806..b5cc907 100644 --- a/doc/RestrictEv.3 +++ b/doc/RestrictEv.3 @@ -31,7 +31,7 @@ Pointer to place to save argument to previous restrict procedure. .PP This procedure is useful in certain situations where applications are only prepared to receive certain X events. After -\fBTk_RestrictEvents\fR is called, \fBTk_DoOneEvent\fR (and +\fBTk_RestrictEvents\fR is called, \fBTcl_DoOneEvent\fR (and hence \fBTk_MainLoop\fR) will filter X input events through \fIproc\fR. \fIProc\fR indicates whether a given event is to be processed immediately, deferred until some @@ -49,7 +49,7 @@ to \fBTk_RestrictEvents\fR; it may be used to provide \fIproc\fR with information it needs to filter events. The \fIeventPtr\fR points to an event under consideration. \fIProc\fR returns a restrict action (enumerated type \fBTk_RestrictAction\fR) that indicates what -\fBTk_DoOneEvent\fR should do with the event. If the return value is +\fBTcl_DoOneEvent\fR should do with the event. If the return value is \fBTK_PROCESS_EVENT\fR, then the event will be handled immediately. If the return value is \fBTK_DEFER_EVENT\fR, then the event will be left on the event queue for later processing. If the return value is @@ -75,6 +75,6 @@ solution in these situations is to call \fBXNextEvent\fR or \fBXWindowEvent\fR, but these procedures cannot be used because Tk keeps its own event queue that is separate from the X event queue. Instead, call \fBTk_RestrictEvents\fR to set up a filter, -then call \fBTk_DoOneEvent\fR to retrieve the desired event(s). +then call \fBTcl_DoOneEvent\fR to retrieve the desired event(s). .SH KEYWORDS delay, event, filter, restriction diff --git a/generic/tkGrab.c b/generic/tkGrab.c index 44a4f8c..04a1d84 100644 --- a/generic/tkGrab.c +++ b/generic/tkGrab.c @@ -1369,7 +1369,7 @@ QueueGrabWindowChange( static int GrabWinEventProc( Tcl_Event *evPtr, /* Event of type NewGrabWinEvent. */ - int flags) /* Flags argument to Tk_DoOneEvent: indicates + int flags) /* Flags argument to Tcl_DoOneEvent: indicates * what kinds of events are being processed * right now. */ { diff --git a/macosx/tkMacOSXWindowEvent.c b/macosx/tkMacOSXWindowEvent.c index 75949ba..6d7649c 100644 --- a/macosx/tkMacOSXWindowEvent.c +++ b/macosx/tkMacOSXWindowEvent.c @@ -877,7 +877,7 @@ ConfigureRestrictProc( TkGenWMConfigureEvent(tkwin, Tk_X(tkwin), Tk_Y(tkwin), width, height, TK_SIZE_CHANGED | TK_MACOSX_HANDLE_EVENT_IMMEDIATELY); oldProc = Tk_RestrictEvents(ConfigureRestrictProc, NULL, &oldArg); - while (Tk_DoOneEvent(TK_X_EVENTS|TK_DONT_WAIT)) {} + while (Tcl_DoOneEvent(TCL_WINDOW_EVENTS|TCL_DONT_WAIT)) {} Tk_RestrictEvents(oldProc, oldArg, &oldArg); /* Now that Tk has configured all subwindows we can create the clip regions. */ @@ -889,7 +889,7 @@ ConfigureRestrictProc( HIRect bounds = NSRectToCGRect([self bounds]); HIShapeRef shape = HIShapeCreateWithRect(&bounds); [self generateExposeEvents: shape]; - while (Tk_DoOneEvent(TK_ALL_EVENTS|TK_DONT_WAIT)) {} + while (Tcl_DoOneEvent(TCL_ALL_EVENTS|TCL_DONT_WAIT)) {} [w enableFlushWindow]; [w flushWindowIfNeeded]; NSEnableScreenUpdates(); diff --git a/tests/bind.test b/tests/bind.test index 3abb615..96449d1 100644 --- a/tests/bind.test +++ b/tests/bind.test @@ -2682,7 +2682,7 @@ proc bgerror msg { global x errorInfo set x [list $msg $errorInfo] } -test bind-30.1 {Tk_BackgroundError procedure} { +test bind-30.1 {Tcl_BackgroundError procedure} { setup bind .b.f