diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | generic/tkCanvas.c | 24 |
2 files changed, 28 insertions, 1 deletions
@@ -1,3 +1,8 @@ +2010-01-18 Jan Nijtmans <nijtmans@users.sf.net> + + * generic/tkCanvas.c Apply patch [#2932808 ]: Canvas items + not updating on widget state change + 2010-01-09 Pat Thoyts <patthoyts@users.sourceforge.net> * doc/menu.n: [TIP 360]: Remove special handling of diff --git a/generic/tkCanvas.c b/generic/tkCanvas.c index ca48d87..eed2d5a 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.46.2.2 2008/10/11 06:55:03 dkf Exp $ + * RCS: @(#) $Id: tkCanvas.c,v 1.46.2.3 2010/01/18 21:20:09 nijtmans Exp $ */ /* #define USE_OLD_TAG_SEARCH 1 */ @@ -1886,6 +1886,7 @@ ConfigureCanvas( { XGCValues gcValues; GC newGC; + Tk_State old_canvas_state=canvasPtr->canvas_state; if (Tk_ConfigureWidget(interp, canvasPtr->tkwin, configSpecs, objc, (CONST char **) objv, (char *) canvasPtr, @@ -1916,6 +1917,27 @@ ConfigureCanvas( canvasPtr->pixmapGC = newGC; /* + * Reconfigure items to reflect changed state disabled/normal. + */ + + if ( old_canvas_state != canvasPtr->canvas_state ) { + Tk_Item *itemPtr; + int result; + + for ( itemPtr = canvasPtr->firstItemPtr; itemPtr != NULL; + itemPtr = itemPtr->nextPtr) { + if ( itemPtr->state == TK_STATE_NULL ) { + result = (*itemPtr->typePtr->configProc)(canvasPtr->interp, + (Tk_Canvas) canvasPtr, itemPtr, 0, NULL, + TK_CONFIG_ARGV_ONLY); + if (result != TCL_OK) { + Tcl_ResetResult(canvasPtr->interp); + } + } + } + } + + /* * Reset the desired dimensions for the window. */ |