diff options
author | hobbs <hobbs> | 2002-07-24 19:41:38 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2002-07-24 19:41:38 (GMT) |
commit | 258a9aa3872b8f0556f1cc7802f996e9f340a69d (patch) | |
tree | f644f0080bd787e86516f776d01d009597b46a0e /generic | |
parent | d25a5da28b653367b692c8dff3e157acfc03d65f (diff) | |
download | tk-258a9aa3872b8f0556f1cc7802f996e9f340a69d.zip tk-258a9aa3872b8f0556f1cc7802f996e9f340a69d.tar.gz tk-258a9aa3872b8f0556f1cc7802f996e9f340a69d.tar.bz2 |
* tests/canvas.test: added canvas-14.[1-6]
* generic/tkCanvas.c (CanvasWidgetCmd): corrected handling of
'scan' subcommand args. Also removed early return cases to goto
done instead where the canvasPtr would be Tcl_Release'd. This may
solve other problems with unreleased canvasPtr's. [Bug #581560]
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkCanvas.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/generic/tkCanvas.c b/generic/tkCanvas.c index 5b7d92c..37f9683 100644 --- a/generic/tkCanvas.c +++ b/generic/tkCanvas.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkCanvas.c,v 1.18 2002/01/25 21:09:36 dgp Exp $ + * RCS: @(#) $Id: tkCanvas.c,v 1.19 2002/07/24 19:41:38 hobbs Exp $ */ /* #define USE_OLD_TAG_SEARCH 1 */ @@ -1388,7 +1388,8 @@ CanvasWidgetCmd(clientData, interp, argc, argv) case CANV_ITEMCGET: { if (argc != 4) { Tcl_WrongNumArgs(interp, 2, argv, "tagOrId option"); - return TCL_ERROR; + result = TCL_ERROR; + goto done; } #ifdef USE_OLD_TAG_SEARCH itemPtr = StartTagSearch(canvasPtr, argv[2], &search); @@ -1623,26 +1624,22 @@ CanvasWidgetCmd(clientData, interp, argc, argv) "mark", "dragto", NULL }; - if (Tcl_GetIndexFromObj(interp, argv[2], optionStrings, "scan option", 0, - &index) != TCL_OK) { - return TCL_ERROR; - } - - if ((argc != 5) && (argc != 5+index)) { + if (argc < 5) { + Tcl_WrongNumArgs(interp, 2, argv, "mark|dragto x y ?dragGain?"); + result = TCL_ERROR; + } else if (Tcl_GetIndexFromObj(interp, argv[2], optionStrings, + "scan option", 0, &index) != TCL_OK) { + result = TCL_ERROR; + } else if ((argc != 5) && (argc != 5+index)) { Tcl_WrongNumArgs(interp, 3, argv, index?"x y ?gain?":"x y"); result = TCL_ERROR; - goto done; - } - if ((Tcl_GetIntFromObj(interp, argv[3], &x) != TCL_OK) + } else if ((Tcl_GetIntFromObj(interp, argv[3], &x) != TCL_OK) || (Tcl_GetIntFromObj(interp, argv[4], &y) != TCL_OK)){ result = TCL_ERROR; - goto done; - } - if ((argc == 6) && (Tcl_GetIntFromObj(interp, argv[5], &gain) != TCL_OK)) { + } else if ((argc == 6) && + (Tcl_GetIntFromObj(interp, argv[5], &gain) != TCL_OK)) { result = TCL_ERROR; - goto done; - } - if (!index) { + } else if (!index) { canvasPtr->scanX = x; canvasPtr->scanXOrigin = canvasPtr->xOrigin; canvasPtr->scanY = y; @@ -1717,7 +1714,8 @@ CanvasWidgetCmd(clientData, interp, argc, argv) } if (Tcl_GetIndexFromObj(interp, argv[2], optionStrings, "select option", 0, &optionindex) != TCL_OK) { - return TCL_ERROR; + result = TCL_ERROR; + goto done; } switch ((enum options) optionindex) { case CANV_ADJUST: { |