summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2019-05-15 17:30:35 (GMT)
committerdgp <dgp@users.sourceforge.net>2019-05-15 17:30:35 (GMT)
commitaefe754799655f3fa04cc84f4ea5d110d0289c46 (patch)
tree427835e7e649f10096c7805f313ff8a974c7844b /generic
parent53669ac6b8743ed34a13bcb8d68521966b4d479a (diff)
downloadtk-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.c23
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);