From dc4432db15fb2cbb21a3411834e283d5208945e8 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 18 Feb 2013 13:20:43 +0000 Subject: Use (preferred) Tcl_ObjSetVar2 in stead of Tcl_SetVar in tkAppInit.c/winMain.c. Remove unneeded use of TEXT() macro, as in tclAppInit.c --- unix/tkAppInit.c | 5 +++-- win/winMain.c | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 28 insertions(+), 23 deletions(-) diff --git a/unix/tkAppInit.c b/unix/tkAppInit.c index 5fce66e..b18179b 100644 --- a/unix/tkAppInit.c +++ b/unix/tkAppInit.c @@ -42,7 +42,7 @@ MODULE_SCOPE int main(int, char **); */ #ifdef TK_LOCAL_MAIN_HOOK -extern int TK_LOCAL_MAIN_HOOK(int *argc, char ***argv); +MODULE_SCOPE int TK_LOCAL_MAIN_HOOK(int *argc, char ***argv); #endif /* @@ -138,7 +138,8 @@ Tcl_AppInit( * specific startup file will be run under any conditions. */ - (Tcl_SetVar)(interp, "tcl_rcFileName", "~/.wishrc", TCL_GLOBAL_ONLY); + (Tcl_ObjSetVar2)(interp, Tcl_NewStringObj("tcl_rcFileName", -1), NULL, + Tcl_NewStringObj("~/.wishrc", -1), TCL_GLOBAL_ONLY); return TCL_OK; } diff --git a/win/winMain.c b/win/winMain.c index 353c2b8..d245038 100644 --- a/win/winMain.c +++ b/win/winMain.c @@ -49,7 +49,10 @@ static BOOL consoleRequired = TRUE; #ifndef TK_LOCAL_APPINIT #define TK_LOCAL_APPINIT Tcl_AppInit #endif -extern int TK_LOCAL_APPINIT(Tcl_Interp *interp); +#ifndef MODULE_SCOPE +# define MODULE_SCOPE extern +#endif +MODULE_SCOPE int TK_LOCAL_APPINIT(Tcl_Interp *interp); /* * The following #if block allows you to change how Tcl finds the startup @@ -58,7 +61,7 @@ extern int TK_LOCAL_APPINIT(Tcl_Interp *interp); */ #ifdef TK_LOCAL_MAIN_HOOK -extern int TK_LOCAL_MAIN_HOOK(int *argc, TCHAR ***argv); +MODULE_SCOPE int TK_LOCAL_MAIN_HOOK(int *argc, TCHAR ***argv); #endif /* @@ -126,9 +129,9 @@ _tWinMain( * Forward slashes substituted for backslashes. */ - for (p = argv[0]; *p != TEXT('\0'); p++) { - if (*p == TEXT('\\')) { - *p = TEXT('/'); + for (p = argv[0]; *p != '\0'; p++) { + if (*p == '\\') { + *p = '/'; } } @@ -224,7 +227,8 @@ Tcl_AppInit( * specific startup file will be run under any conditions. */ - (Tcl_SetVar)(interp, "tcl_rcFileName", "~/wishrc.tcl", TCL_GLOBAL_ONLY); + (Tcl_ObjSetVar2)(interp, Tcl_NewStringObj("tcl_rcFileName", -1), NULL, + Tcl_NewStringObj("~/wishrc.tcl", -1), TCL_GLOBAL_ONLY); return TCL_OK; } @@ -336,13 +340,13 @@ setargv( */ size = 2; - for (p = cmdLine; *p != TEXT('\0'); p++) { - if ((*p == TEXT(' ')) || (*p == TEXT('\t'))) { /* INTL: ISO space. */ + for (p = cmdLine; *p != '\0'; p++) { + if ((*p == ' ') || (*p == '\t')) { /* INTL: ISO space. */ size++; - while ((*p == TEXT(' ')) || (*p == TEXT('\t'))) { /* INTL: ISO space. */ + while ((*p == ' ') || (*p == '\t')) { /* INTL: ISO space. */ p++; } - if (*p == TEXT('\0')) { + if (*p == '\0') { break; } } @@ -352,8 +356,8 @@ setargv( #undef Tcl_Alloc #undef Tcl_DbCkalloc - argSpace = ckalloc(size*sizeof(char *) - + (_tcslen(cmdLine)+1) * sizeof(TCHAR)); + argSpace = ckalloc(size * sizeof(char *) + + (_tcslen(cmdLine) * sizeof(TCHAR)) + sizeof(TCHAR)); argv = (TCHAR **) argSpace; argSpace += size * (sizeof(char *)/sizeof(TCHAR)); size--; @@ -361,10 +365,10 @@ setargv( p = cmdLine; for (argc = 0; argc < size; argc++) { argv[argc] = arg = argSpace; - while ((*p == TEXT(' ')) || (*p == TEXT('\t'))) { /* INTL: ISO space. */ + while ((*p == ' ') || (*p == '\t')) { /* INTL: ISO space. */ p++; } - if (*p == TEXT('\0')) { + if (*p == '\0') { break; } @@ -372,14 +376,14 @@ setargv( slashes = 0; while (1) { copy = 1; - while (*p == TEXT('\\')) { + while (*p == '\\') { slashes++; p++; } - if (*p == TEXT('"')) { + if (*p == '"') { if ((slashes & 1) == 0) { copy = 0; - if ((inquote) && (p[1] == TEXT('"'))) { + if ((inquote) && (p[1] == '"')) { p++; copy = 1; } else { @@ -390,13 +394,13 @@ setargv( } while (slashes) { - *arg = TEXT('\\'); + *arg = '\\'; arg++; slashes--; } - if ((*p == TEXT('\0')) || (!inquote && - ((*p == TEXT(' ')) || (*p == TEXT('\t'))))) { /* INTL: ISO space. */ + if ((*p == '\0') || (!inquote && + ((*p == ' ') || (*p == '\t')))) { /* INTL: ISO space. */ break; } if (copy != 0) { @@ -408,7 +412,7 @@ setargv( *arg = '\0'; argSpace = arg + 1; } - argv[argc] = 0; + argv[argc] = NULL; *argcPtr = argc; *argvPtr = argv; -- cgit v0.12 From 2103923eee4d74b8f49cfdb91a73c3ef32baab5f Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Mon, 18 Feb 2013 13:31:12 +0000 Subject: Call XInitThreads once before the first Xlib call. Suggested by Brian Griffin. --- ChangeLog | 5 +++++ unix/tkUnixEvent.c | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 09f0acd..75a617f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2013-02-18 Jan Nijtmans + + * unix/tkUnixEvent.c: Call XInitThreads once before the + first Xlib call. Suggested by Brian Griffin. + 2013-01-14 Jan Nijtmans * win/tcl.m4: More flexible search for win32 tclConfig.sh, diff --git a/unix/tkUnixEvent.c b/unix/tkUnixEvent.c index 4d0ccfa..6268b25 100644 --- a/unix/tkUnixEvent.c +++ b/unix/tkUnixEvent.c @@ -116,8 +116,20 @@ TkpOpenDisplay( const char *displayNameStr) { TkDisplay *dispPtr; - Display *display = XOpenDisplay(displayNameStr); + Display *display; +#ifdef TCL_THREADS + static int xinited = 0; + + if (!xinited) { + /* Necessary for threaded apps, of no consequence otherwise */ + /* need only be called once, but must be called before *any* */ + /* Xlib call is made. */ + XInitThreads(); + xinited = 1; + } +#endif + display = XOpenDisplay(displayNameStr); if (display == NULL) { return NULL; } -- cgit v0.12 From f584bb01ccf547af727096674302e8a6dbae1252 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Fri, 22 Feb 2013 08:44:24 +0000 Subject: Replace all Tcl_TraceVar/Tcl_UntraceVar with Tcl_TraceVar2/Tcl_UntraceVar2 calls: The former are just thin wrappers around the latter. --- generic/tkButton.c | 16 ++++++++-------- generic/tkCmds.c | 4 ++-- generic/tkEntry.c | 6 +++--- generic/tkListbox.c | 4 ++-- generic/tkMenu.c | 6 +++--- generic/tkMenubutton.c | 4 ++-- generic/tkMessage.c | 4 ++-- generic/tkScale.c | 8 ++++---- generic/ttk/ttkTrace.c | 4 ++-- 9 files changed, 28 insertions(+), 28 deletions(-) diff --git a/generic/tkButton.c b/generic/tkButton.c index 30d8ae9..b7e314e 100644 --- a/generic/tkButton.c +++ b/generic/tkButton.c @@ -962,8 +962,8 @@ DestroyButton( Tcl_DeleteCommandFromToken(butPtr->interp, butPtr->widgetCmd); if (butPtr->textVarNamePtr != NULL) { - Tcl_UntraceVar(butPtr->interp, Tcl_GetString(butPtr->textVarNamePtr), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(butPtr->interp, Tcl_GetString(butPtr->textVarNamePtr), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonTextVarProc, butPtr); } if (butPtr->image != NULL) { @@ -997,8 +997,8 @@ DestroyButton( Tk_FreeTextLayout(butPtr->textLayout); } if (butPtr->selVarNamePtr != NULL) { - Tcl_UntraceVar(butPtr->interp, Tcl_GetString(butPtr->selVarNamePtr), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(butPtr->interp, Tcl_GetString(butPtr->selVarNamePtr), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonVarProc, butPtr); } Tk_FreeConfigOptions((char *) butPtr, butPtr->optionTable, @@ -1045,13 +1045,13 @@ ConfigureButton( */ if (butPtr->textVarNamePtr != NULL) { - Tcl_UntraceVar(interp, Tcl_GetString(butPtr->textVarNamePtr), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(interp, Tcl_GetString(butPtr->textVarNamePtr), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonTextVarProc, butPtr); } if (butPtr->selVarNamePtr != NULL) { - Tcl_UntraceVar(interp, Tcl_GetString(butPtr->selVarNamePtr), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(interp, Tcl_GetString(butPtr->selVarNamePtr), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ButtonVarProc, butPtr); } diff --git a/generic/tkCmds.c b/generic/tkCmds.c index 9f0097e..4933d34 100644 --- a/generic/tkCmds.c +++ b/generic/tkCmds.c @@ -1031,8 +1031,8 @@ Tk_TkwaitObjCmd( } Tcl_DoOneEvent(0); } - Tcl_UntraceVar(interp, Tcl_GetString(objv[2]), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(interp, Tcl_GetString(objv[2]), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, WaitVariableProc, &done); break; diff --git a/generic/tkEntry.c b/generic/tkEntry.c index 551da30..eb94cbd 100644 --- a/generic/tkEntry.c +++ b/generic/tkEntry.c @@ -1021,8 +1021,8 @@ DestroyEntry( ckfree((char *)entryPtr->string); if (entryPtr->textVarName != NULL) { - Tcl_UntraceVar(entryPtr->interp, entryPtr->textVarName, - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(entryPtr->interp, entryPtr->textVarName, + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, EntryTextVarProc, entryPtr); entryPtr->flags &= ~ENTRY_VAR_TRACED; } @@ -1105,7 +1105,7 @@ ConfigureEntry( if ((entryPtr->textVarName != NULL) && (entryPtr->flags & ENTRY_VAR_TRACED)) { - Tcl_UntraceVar(interp, entryPtr->textVarName, + Tcl_UntraceVar2(interp, entryPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, EntryTextVarProc, entryPtr); entryPtr->flags &= ~ENTRY_VAR_TRACED; diff --git a/generic/tkListbox.c b/generic/tkListbox.c index aad0163..c5460f9 100644 --- a/generic/tkListbox.c +++ b/generic/tkListbox.c @@ -1444,7 +1444,7 @@ DestroyListbox( } if (listPtr->listVarName != NULL) { - Tcl_UntraceVar(listPtr->interp, listPtr->listVarName, + Tcl_UntraceVar2(listPtr->interp, listPtr->listVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ListboxListVarProc, listPtr); } @@ -1552,7 +1552,7 @@ ConfigureListbox( oldExport = listPtr->exportSelection; if (listPtr->listVarName != NULL) { - Tcl_UntraceVar(interp, listPtr->listVarName, + Tcl_UntraceVar2(interp, listPtr->listVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ListboxListVarProc, listPtr); } diff --git a/generic/tkMenu.c b/generic/tkMenu.c index 70e8335..267acd7 100644 --- a/generic/tkMenu.c +++ b/generic/tkMenu.c @@ -1492,7 +1492,7 @@ DestroyMenuEntry( && (mePtr->namePtr != NULL)) { const char *varName = Tcl_GetString(mePtr->namePtr); - Tcl_UntraceVar(menuPtr->interp, varName, + Tcl_UntraceVar2(menuPtr->interp, varName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuVarProc, mePtr); } @@ -1959,7 +1959,7 @@ ConfigureMenuEntry( || (mePtr->type == RADIO_BUTTON_ENTRY))) { const char *name = Tcl_GetString(mePtr->namePtr); - Tcl_UntraceVar(menuPtr->interp, name, + Tcl_UntraceVar2(menuPtr->interp, name, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuVarProc, mePtr); } @@ -2544,7 +2544,7 @@ MenuVarProc( if (flags & TCL_TRACE_UNSETS) { mePtr->entryFlags &= ~ENTRY_SELECTED; if (flags & TCL_TRACE_DESTROYED) { - Tcl_TraceVar(interp, name, + Tcl_TraceVar2(interp, name, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuVarProc, clientData); } diff --git a/generic/tkMenubutton.c b/generic/tkMenubutton.c index 9b1e643..1a4d5ae 100644 --- a/generic/tkMenubutton.c +++ b/generic/tkMenubutton.c @@ -436,7 +436,7 @@ DestroyMenuButton( Tcl_DeleteCommandFromToken(mbPtr->interp, mbPtr->widgetCmd); if (mbPtr->textVarName != NULL) { - Tcl_UntraceVar(mbPtr->interp, mbPtr->textVarName, + Tcl_UntraceVar2(mbPtr->interp, mbPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuButtonTextVarProc, mbPtr); } @@ -506,7 +506,7 @@ ConfigureMenuButton( */ if (mbPtr->textVarName != NULL) { - Tcl_UntraceVar(interp, mbPtr->textVarName, + Tcl_UntraceVar2(interp, mbPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuButtonTextVarProc, mbPtr); } diff --git a/generic/tkMessage.c b/generic/tkMessage.c index 3e4bdce..2b71998 100644 --- a/generic/tkMessage.c +++ b/generic/tkMessage.c @@ -405,7 +405,7 @@ DestroyMessage( Tk_FreeTextLayout(msgPtr->textLayout); } if (msgPtr->textVarName != NULL) { - Tcl_UntraceVar(msgPtr->interp, msgPtr->textVarName, + Tcl_UntraceVar2(msgPtr->interp, msgPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MessageTextVarProc, msgPtr); } @@ -450,7 +450,7 @@ ConfigureMessage( */ if (msgPtr->textVarName != NULL) { - Tcl_UntraceVar(interp, msgPtr->textVarName, + Tcl_UntraceVar2(interp, msgPtr->textVarName, NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MessageTextVarProc, msgPtr); } diff --git a/generic/tkScale.c b/generic/tkScale.c index f2024ad..7d72990 100644 --- a/generic/tkScale.c +++ b/generic/tkScale.c @@ -504,8 +504,8 @@ DestroyScale( */ if (scalePtr->varNamePtr != NULL) { - Tcl_UntraceVar(scalePtr->interp, Tcl_GetString(scalePtr->varNamePtr), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(scalePtr->interp, Tcl_GetString(scalePtr->varNamePtr), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ScaleVarProc, scalePtr); } if (scalePtr->troughGC != None) { @@ -561,8 +561,8 @@ ConfigureScale( */ if (scalePtr->varNamePtr != NULL) { - Tcl_UntraceVar(interp, Tcl_GetString(scalePtr->varNamePtr), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(interp, Tcl_GetString(scalePtr->varNamePtr), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ScaleVarProc, scalePtr); } diff --git a/generic/ttk/ttkTrace.c b/generic/ttk/ttkTrace.c index 6cd6061..ba66db4 100644 --- a/generic/ttk/ttkTrace.c +++ b/generic/ttk/ttkTrace.c @@ -150,8 +150,8 @@ void Ttk_UntraceVariable(Ttk_TraceHandle *h) h->interp = NULL; return; } - Tcl_UntraceVar(h->interp, Tcl_GetString(h->varnameObj), - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + Tcl_UntraceVar2(h->interp, Tcl_GetString(h->varnameObj), + NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, VarTraceProc, (ClientData)h); Tcl_DecrRefCount(h->varnameObj); ckfree(h); -- cgit v0.12