From e06c38d5e7dffdd9153afbd4c7c976de5167ca68 Mon Sep 17 00:00:00 2001 From: nijtmans Date: Mon, 18 Jan 2010 21:20:09 +0000 Subject: Apply patch [#2932808]: Canvas items not updating on widget state change --- ChangeLog | 5 +++++ generic/tkCanvas.c | 24 +++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ec407ff..8311038 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-01-18 Jan Nijtmans + + * generic/tkCanvas.c Apply patch [#2932808 ]: Canvas items + not updating on widget state change + 2010-01-09 Pat Thoyts * 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. */ -- cgit v0.12