#include "faces.h"
#include "frame.h"
#include "glyphs.h"
+#include "gutter.h"
#include "menubar.h"
#include "redisplay.h"
#include "scrollbar.h"
#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));
}
DEFINE_LRECORD_IMPLEMENTATION ("frame", frame,
- mark_frame, print_frame, 0, 0, 0,
+ mark_frame, print_frame, 0, 0, 0, 0,
struct frame);
\f
static void
/* 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);
+
}
MAYBE_FRAMEMETH (f, init_frame_2, (f, props));
Fset_frame_properties (frame, props);
MAYBE_FRAMEMETH (f, init_frame_3, (f));
+ /* now initialise the gutters, this won't change the frame size
+ so is ok here. */
+ if (!DEVICE_STREAM_P (d))
+ init_frame_gutters (f);
+
/* Hallelujah, praise the lord. */
f->init_finished = 1;
{
#ifdef HAVE_TOOLBARS
if (!EQ (f->last_nonminibuf_window, window))
- MARK_TOOLBAR_CHANGED;
+ {
+ MARK_TOOLBAR_CHANGED;
+ MARK_GUTTER_CHANGED;
+ }
#endif
f->last_nonminibuf_window = window;
}
#ifdef HAVE_TOOLBARS
free_frame_toolbars (f);
#endif
+ free_frame_gutters (f);
/* This must be done before the window and window_mirror structures
are freed. The scrollbar information is attached to them. */
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);