diff options
Diffstat (limited to 'generic/tkImage.c')
-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); |