Andy Piper <andy(a)xemacs.org> writes:
Please explain to me how this happens (I genuinely want to know), I
thought
the only way that a window could become dead is through
mark_window_as_deleted - and this explicitly removes the subwindows from
the frame cache. I don't want to paper over this if there is something else
I'm missing.
Well I now put the hard core check I wrote about in my previous
messages in mark_window_as_deleted and sure the check hits there.
(The Fdelete_window is call is part of delete_other window).
The image_instance is involved is an IMAGE_WIDGET with xpos = ypos = 0
and which is very wide and not so high. To me that seems like the
tab widget.
I had a look at image_instantiate
if (UNBOUNDP (instance))
{
Lisp_Object locative =
noseeum_cons (Qnil,
noseeum_cons (pointerp ? ls3 : instantiator,
DEVICEP (governing_domain) ? subtable
: XWINDOW (governing_domain)
->subwindow_instance_cache));
int speccount = specpdl_depth ();
record_unwind_protect (image_instantiate_cache_result,
locative);
instance =
instantiate_image_instantiator (governing_domain,domain,...)
cache_subwindow_instance_in_frame_maybe (instance);
Fsetcar (locative, instance);
unbind_to (speccount, Qnil);
}
Two remarks
1. Shouldn't locative and/or governingdomain
be GCRPO'ed?, instantiate_image_instantiator gcpro's its variables.
2. Isn't it possible that DEVICEP(governing_domain) is true, but
domain is a window?. In that case
cache_subwindow_instance_in_frame_maybe might add it to the frame
cache but it won't be in the window cache, so mark_window_as_deleted does
not see it?
Jan