summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--misc_gui.c5
-rw-r--r--window.c8
2 files changed, 10 insertions, 3 deletions
diff --git a/misc_gui.c b/misc_gui.c
index 2f2a8d3bf..92ba1b4fa 100644
--- a/misc_gui.c
+++ b/misc_gui.c
@@ -1226,7 +1226,10 @@ static void QueryWndProc(Window *w, WindowEvent *e)
break;
case WE_DESTROY: /* Call callback function (if any) on window close if not yet called */
- if (!q->calledback && q->proc != NULL) q->proc(w->parent, false);
+ if (!q->calledback && q->proc != NULL) {
+ q->calledback = true;
+ q->proc(w->parent, false);
+ }
break;
}
}
diff --git a/window.c b/window.c
index 75da457b5..1a12c7c6b 100644
--- a/window.c
+++ b/window.c
@@ -308,10 +308,13 @@ Window **FindWindowZPosition(const Window *w)
{
Window **wz;
- for (wz = _z_windows;; wz++) {
- assert(wz < _last_z_window);
+ for (wz = _z_windows; wz != _last_z_window; wz++) {
if (*wz == w) return wz;
}
+
+ DEBUG(misc, 3, "Window (class %d, number %d) is not open, probably removed by recursive calls",
+ w->window_class, w->window_number);
+ return NULL;
}
void DeleteWindow(Window *w)
@@ -342,6 +345,7 @@ void DeleteWindow(Window *w)
/* Find the window in the z-array, and effectively remove it
* by moving all windows after it one to the left */
wz = FindWindowZPosition(w);
+ if (wz == NULL) return;
memmove(wz, wz + 1, (byte*)_last_z_window - (byte*)wz);
_last_z_window--;
}