summaryrefslogtreecommitdiffstats
path: root/generic/tkScale.c
diff options
context:
space:
mode:
authordgp@users.sourceforge.net <dgp>2006-06-14 22:15:17 (GMT)
committerdgp@users.sourceforge.net <dgp>2006-06-14 22:15:17 (GMT)
commit7f0c39c6ff3f261f61e27e1d3112b4058d3b2541 (patch)
treedf0b8f2cba26be1a1f3e87e6b52a49cb79f842ab /generic/tkScale.c
parentf942fa4cc229f1082a70f3cccbd876c3879683d9 (diff)
downloadtk-7f0c39c6ff3f261f61e27e1d3112b4058d3b2541.zip
tk-7f0c39c6ff3f261f61e27e1d3112b4058d3b2541.tar.gz
tk-7f0c39c6ff3f261f61e27e1d3112b4058d3b2541.tar.bz2
* generic/tkScale.c: Revised variable writing logic to account
for [scale]'s design that it deals with its value as a formatted string, and not as a double. [Bug 891141].
Diffstat (limited to 'generic/tkScale.c')
-rw-r--r--generic/tkScale.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/generic/tkScale.c b/generic/tkScale.c
index 9741fde..c392a6d 100644
--- a/generic/tkScale.c
+++ b/generic/tkScale.c
@@ -18,7 +18,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkScale.c,v 1.17 2002/08/05 04:30:40 dgp Exp $
+ * RCS: @(#) $Id: tkScale.c,v 1.17.2.1 2006/06/14 22:15:22 dgp Exp $
*/
#include "tkPort.h"
@@ -580,7 +580,7 @@ ConfigureScale(interp, scalePtr, objc, objv)
Tk_SavedOptions savedOptions;
Tcl_Obj *errorResult = NULL;
int error;
- double oldValue = scalePtr->value;
+ double varValue;
/*
* Eliminate any existing trace on a variable monitored by the scale.
@@ -690,10 +690,17 @@ ConfigureScale(interp, scalePtr, objc, objv)
*/
valuePtr = Tcl_ObjGetVar2(interp, scalePtr->varNamePtr, NULL,
TCL_GLOBAL_ONLY);
- if ((valuePtr == NULL) || (scalePtr->value != oldValue)
- || (Tcl_GetDoubleFromObj(NULL, valuePtr, &oldValue) != TCL_OK)
- || (scalePtr->value != oldValue)) {
+ if ((valuePtr == NULL) || (Tcl_GetDoubleFromObj(NULL,
+ valuePtr, &varValue) != TCL_OK)) {
ScaleSetVariable(scalePtr);
+ } else {
+ char varString[TCL_DOUBLE_SPACE];
+ char scaleString[TCL_DOUBLE_SPACE];
+ sprintf(varString, scalePtr->format, varValue);
+ sprintf(scaleString, scalePtr->format, scalePtr->value);
+ if (strcmp(varString, scaleString)) {
+ ScaleSetVariable(scalePtr);
+ }
}
Tcl_TraceVar(interp, Tcl_GetString(scalePtr->varNamePtr),
TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS,