diff options
author | dgp <dgp@users.sourceforge.net> | 2019-05-15 17:30:35 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2019-05-15 17:30:35 (GMT) |
commit | aefe754799655f3fa04cc84f4ea5d110d0289c46 (patch) | |
tree | 427835e7e649f10096c7805f313ff8a974c7844b /generic | |
parent | 53669ac6b8743ed34a13bcb8d68521966b4d479a (diff) | |
download | tk-aefe754799655f3fa04cc84f4ea5d110d0289c46.zip tk-aefe754799655f3fa04cc84f4ea5d110d0289c46.tar.gz tk-aefe754799655f3fa04cc84f4ea5d110d0289c46.tar.bz2 |
Tests and fix for [scale ... -variable].
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkScale.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/generic/tkScale.c b/generic/tkScale.c index ef67630..3920aea 100644 --- a/generic/tkScale.c +++ b/generic/tkScale.c @@ -1198,7 +1198,28 @@ ScaleVarProc( */ if (flags & TCL_TRACE_UNSETS) { - if ((flags & TCL_TRACE_DESTROYED) && !(flags & TCL_INTERP_DESTROYED)) { + + if (!Tcl_InterpDeleted(interp) && scalePtr->varNamePtr) { + ClientData probe = NULL; + + do { + probe = Tcl_VarTraceInfo(interp, + Tcl_GetString(scalePtr->varNamePtr), + TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + ScaleVarProc, probe); + if (probe == (ClientData)scalePtr) { + break; + } + } while (probe); + if (probe) { + /* + * We were able to fetch the unset trace for our + * varNamePtr, which means it is not unset and not + * the cause of this unset trace. Instead some outdated + * former variable must be, and we should ignore it. + */ + return NULL; + } Tcl_TraceVar2(interp, Tcl_GetString(scalePtr->varNamePtr), NULL, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, ScaleVarProc, clientData); |