summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2024-01-09 22:59:24 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2024-01-09 22:59:24 (GMT)
commit686ce84d1bf4c56ec222f39ddf9afdc18769f6a6 (patch)
tree4a8a1f80e113938e5e65fc62a02145e92ca00ec0 /generic
parentb7be3b39a5e1e644f152900caad42eb48e299ce8 (diff)
parent762750a745c9ebc86774c63883ce92cfae8a14d1 (diff)
downloadtk-686ce84d1bf4c56ec222f39ddf9afdc18769f6a6.zip
tk-686ce84d1bf4c56ec222f39ddf9afdc18769f6a6.tar.gz
tk-686ce84d1bf4c56ec222f39ddf9afdc18769f6a6.tar.bz2
Merge 8.6
Diffstat (limited to 'generic')
-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);