diff options
author | hobbs <hobbs> | 2006-05-29 21:52:47 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2006-05-29 21:52:47 (GMT) |
commit | 843f3e406c6e4cfad692db418c39912f538e25d6 (patch) | |
tree | e8601b4d9d9447943bc935ddbbb8246e8ed71a56 /generic/tkListbox.c | |
parent | a053e2dbfdbece77b6327687523cec416d6821fd (diff) | |
download | tk-843f3e406c6e4cfad692db418c39912f538e25d6.zip tk-843f3e406c6e4cfad692db418c39912f538e25d6.tar.gz tk-843f3e406c6e4cfad692db418c39912f538e25d6.tar.bz2 |
* tests/entry.test (entry-22.1):
* tests/listbox.test (listbox-6.15):
* generic/tkListbox.c (ListboxInsertSubCmd, ListboxDeleteSubCmd):
Ignore Tcl_SetVar2Ex failure of listVarName, similar to entry
widget handling. [Bug 1424513]
Diffstat (limited to 'generic/tkListbox.c')
-rw-r--r-- | generic/tkListbox.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/generic/tkListbox.c b/generic/tkListbox.c index fd02a27..43342c4 100644 --- a/generic/tkListbox.c +++ b/generic/tkListbox.c @@ -11,7 +11,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkListbox.c,v 1.29.2.2 2004/06/08 20:11:18 dgp Exp $ + * RCS: @(#) $Id: tkListbox.c,v 1.29.2.3 2006/05/29 21:52:47 hobbs Exp $ */ #include "tkPort.h" @@ -2284,25 +2284,24 @@ ListboxInsertSubCmd(listPtr, index, objc, objv) return result; } + /* + * Replace the current object and set attached listvar, if any. + * This may error if listvar points to a var in a deleted namespace, but + * we ignore those errors. If the namespace is recreated, it will + * auto-sync with the current value. [Bug 1424513] + */ + Tcl_IncrRefCount(newListObj); - /* Clean up the old reference */ Tcl_DecrRefCount(listPtr->listObj); - - /* Set the internal pointer to the new obj */ listPtr->listObj = newListObj; - - /* If there is a listvar, make sure it points at the new object */ if (listPtr->listVarName != NULL) { - if (Tcl_SetVar2Ex(listPtr->interp, listPtr->listVarName, - (char *)NULL, newListObj, TCL_GLOBAL_ONLY) == NULL) { - Tcl_DecrRefCount(newListObj); - return TCL_ERROR; - } + Tcl_SetVar2Ex(listPtr->interp, listPtr->listVarName, + (char *) NULL, listPtr->listObj, TCL_GLOBAL_ONLY); } /* Get the new list length */ Tcl_ListObjLength(listPtr->interp, listPtr->listObj, &listPtr->nElements); - + /* * Update the "special" indices (anchor, topIndex, active) to account * for the renumbering that just occurred. Then arrange for the new @@ -2433,24 +2432,23 @@ ListboxDeleteSubCmd(listPtr, first, last) return result; } + /* + * Replace the current object and set attached listvar, if any. + * This may error if listvar points to a var in a deleted namespace, but + * we ignore those errors. If the namespace is recreated, it will + * auto-sync with the current value. [Bug 1424513] + */ + Tcl_IncrRefCount(newListObj); - /* Clean up the old reference */ Tcl_DecrRefCount(listPtr->listObj); - - /* Set the internal pointer to the new obj */ listPtr->listObj = newListObj; + if (listPtr->listVarName != NULL) { + Tcl_SetVar2Ex(listPtr->interp, listPtr->listVarName, + (char *) NULL, listPtr->listObj, TCL_GLOBAL_ONLY); + } /* Get the new list length */ Tcl_ListObjLength(listPtr->interp, listPtr->listObj, &listPtr->nElements); - - /* If there is a listvar, make sure it points at the new object */ - if (listPtr->listVarName != NULL) { - if (Tcl_SetVar2Ex(listPtr->interp, listPtr->listVarName, - (char *)NULL, newListObj, TCL_GLOBAL_ONLY) == NULL) { - Tcl_DecrRefCount(newListObj); - return TCL_ERROR; - } - } /* * Update the selection and viewing information to reflect the change |