diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2024-01-09 22:59:24 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2024-01-09 22:59:24 (GMT) |
commit | 686ce84d1bf4c56ec222f39ddf9afdc18769f6a6 (patch) | |
tree | 4a8a1f80e113938e5e65fc62a02145e92ca00ec0 /generic | |
parent | b7be3b39a5e1e644f152900caad42eb48e299ce8 (diff) | |
parent | 762750a745c9ebc86774c63883ce92cfae8a14d1 (diff) | |
download | tk-686ce84d1bf4c56ec222f39ddf9afdc18769f6a6.zip tk-686ce84d1bf4c56ec222f39ddf9afdc18769f6a6.tar.gz tk-686ce84d1bf4c56ec222f39ddf9afdc18769f6a6.tar.bz2 |
Merge 8.6
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tkImage.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/generic/tkImage.c b/generic/tkImage.c index e34ced4..fc469d7 100644 --- a/generic/tkImage.c +++ b/generic/tkImage.c @@ -41,6 +41,8 @@ typedef struct Image { void *widgetClientData;/* Argument to pass to changeProc. */ struct Image *nextPtr; /* Next in list of all image instances * associated with the same name. */ + struct Image *prevPtr; /* Previous in list of all image instances + * associated with the same name. */ } Image; /* @@ -644,6 +646,10 @@ Tk_GetImage( imagePtr->changeProc = changeProc; imagePtr->widgetClientData = clientData; imagePtr->nextPtr = modelPtr->instancePtr; + if (imagePtr->nextPtr) { + imagePtr->nextPtr->prevPtr = imagePtr; + } + imagePtr->prevPtr = NULL; modelPtr->instancePtr = imagePtr; return (Tk_Image) imagePtr; @@ -681,7 +687,6 @@ Tk_FreeImage( { Image *imagePtr = (Image *) image; ImageModel *modelPtr = imagePtr->modelPtr; - Image *prevPtr; /* * Clean up the particular instance. @@ -691,14 +696,16 @@ Tk_FreeImage( modelPtr->typePtr->freeProc(imagePtr->instanceData, imagePtr->display); } - prevPtr = modelPtr->instancePtr; - if (prevPtr == imagePtr) { - modelPtr->instancePtr = imagePtr->nextPtr; + if (imagePtr->prevPtr) { + imagePtr->prevPtr->nextPtr = imagePtr->nextPtr; + if (imagePtr->nextPtr) { + imagePtr->nextPtr->prevPtr = imagePtr->prevPtr; + } } else { - while (prevPtr->nextPtr != imagePtr) { - prevPtr = prevPtr->nextPtr; + modelPtr->instancePtr = imagePtr->nextPtr; + if (modelPtr->instancePtr) { + modelPtr->instancePtr->prevPtr = NULL; } - prevPtr->nextPtr = imagePtr->nextPtr; } ckfree(imagePtr); |