summaryrefslogtreecommitdiffstats
path: root/generic/tkImage.c
diff options
context:
space:
mode:
Diffstat (limited to 'generic/tkImage.c')
-rw-r--r--generic/tkImage.c21
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);