#define MARKED_SLOT(x) ((void) (markobj (f->x)));
#include "frameslots.h"
+ mark_subwindow_cachels (f->subwindow_cachels, markobj);
+
if (FRAME_LIVE_P (f)) /* device is nil for a dead frame */
MAYBE_FRAMEMETH (f, mark_frame, (f, markobj));
/* This function can GC */
Lisp_Object frame;
Lisp_Object root_window;
- struct frame *f = alloc_lcrecord_type (struct frame, lrecord_frame);
+ struct frame *f = alloc_lcrecord_type (struct frame, &lrecord_frame);
zero_lcrecord (f);
nuke_all_frame_slots (f);
f->selected_window = root_window;
f->last_nonminibuf_window = root_window;
+ /* cache of subwindows visible on frame */
+ f->subwindow_cachels = Dynarr_new (subwindow_cachel);
+
/* Choose a buffer for the frame's root window. */
XWINDOW (root_window)->buffer = Qt;
{
things. */
init_frame_toolbars (f);
#endif
-
reset_face_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
reset_glyph_cachels (XWINDOW (FRAME_SELECTED_WINDOW (f)));
+ reset_subwindow_cachels (f);
change_frame_size (f, f->height, f->width, 0);
}
delete_all_subwindows (XWINDOW (f->root_window));
f->root_window = Qnil;
+ /* clear out the cached glyph information */
+ if (f->subwindow_cachels)
+ {
+ Dynarr_free (f->subwindow_cachels);
+ f->subwindow_cachels = 0;
+ }
+
/* Remove the frame now from the list. This way, any events generated
on this frame by the maneuvers below will disperse themselves. */
struct window *w;
int pix_x, pix_y;
- CHECK_WINDOW (window);
+ CHECK_LIVE_WINDOW (window);
CHECK_INT (x);
CHECK_INT (y);
{
struct window *w;
- CHECK_WINDOW (window);
+ CHECK_LIVE_WINDOW (window);
CHECK_INT (x);
CHECK_INT (y);