static struct display_line title_string_display_line;
/* Used by generate_title_string. Global because they get used so much that
the dynamic allocation time adds up. */
-static Emchar_dynarr *title_string_emchar_dynarr;
+static Charc_dynarr *title_string_charc_dynarr;
\f
static Lisp_Object
#define MARKED_SLOT(x) mark_object (f->x)
#include "frameslots.h"
- mark_subwindow_cachels (f->subwindow_cachels);
-
if (FRAME_LIVE_P (f)) /* device is nil for a dead frame */
MAYBE_FRAMEMETH (f, mark_frame, (f));
f->last_nonminibuf_window = root_window;
/* cache of subwindows visible on frame */
- f->subwindow_cachels = Dynarr_new (subwindow_cachel);
+ f->subwindow_instance_cache = make_weak_list (WEAK_LIST_SIMPLE);
/* associated exposure ignore list */
f->subwindow_exposures = 0;
#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);
}
free_frame_toolbars (f);
#endif
free_frame_gutters (f);
+ /* Unfortunately deleting the frame will also delete the parent of
+ all of the subwindow instances current on the frame. I think this
+ can lead to bad things when trying to finalize the
+ instances. Thus we loop over the instance cache calling the
+ finalize method for each instance. */
+ free_frame_subwindow_instance_cache (f);
/* This must be done before the window and window_mirror structures
are freed. The scrollbar information is attached to them. */
f->root_window = Qnil;
/* clear out the cached glyph information */
- if (f->subwindow_cachels)
- {
- Dynarr_free (f->subwindow_cachels);
- f->subwindow_cachels = 0;
- }
+ f->subwindow_instance_cache = Qnil;
/* Remove the frame now from the list. This way, any events generated
on this frame by the maneuvers below will disperse themselves. */
minibuffer Gives the minibuffer behavior for this frame. Either
t (frame has its own minibuffer), `only' (frame is
- a minibuffer-only frame), or a window (frame uses that
- window, which is on another frame, as the minibuffer).
+ a minibuffer-only frame), `none' (frame has no minibuffer)
+ or a window (frame uses that window, which is on another
+ frame, as the minibuffer).
unsplittable If non-nil, frame cannot be split by `display-buffer'.
left-toolbar-visible-p, right-toolbar-visible-p, toolbar-buttons-captioned-p,
top-toolbar-border-width, bottom-toolbar-border-width,
left-toolbar-border-width, right-toolbar-border-width,
- modeline-shadow-thickness, has-modeline-p
+ modeline-shadow-thickness, has-modeline-p,
+ default-gutter, top-gutter, bottom-gutter, left-gutter, right-gutter,
+ default-gutter-height, default-gutter-width, top-gutter-height,
+ bottom-gutter-height, left-gutter-width, right-gutter-width,
+ default-gutter-visible-p, top-gutter-visible-p, bottom-gutter-visible-p,
+ left-gutter-visible-p, right-gutter-visible-p, top-gutter-border-width,
+ bottom-gutter-border-width, left-gutter-border-width, right-gutter-border-width,
[Giving the name of any built-in specifier variable is
equivalent to calling `set-specifier' on the specifier,
with a locale of FRAME. Giving the name to `frame-property'
- FRAME_REAL_BOTTOM_TOOLBAR_HEIGHT (f)
- 2 * FRAME_REAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f);
- new_pixheight -=
- (FRAME_TOP_GUTTER_BOUNDS (f) + FRAME_BOTTOM_GUTTER_BOUNDS (f));
-
new_pixwidth +=
+ FRAME_THEORETICAL_LEFT_TOOLBAR_WIDTH (f)
+ 2 * FRAME_THEORETICAL_LEFT_TOOLBAR_BORDER_WIDTH (f)
- FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f)
- 2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH (f);
- new_pixwidth -=
- (FRAME_LEFT_GUTTER_BOUNDS (f) + FRAME_RIGHT_GUTTER_BOUNDS (f));
-
/* Adjust the width for the end glyph which may be a different width
than the default character width. */
{
if (new_pixheight)
{
+ /* Adjust for gutters here so that we always get set
+ properly. */
+ new_pixheight -=
+ (FRAME_TOP_GUTTER_BOUNDS (f)
+ + FRAME_BOTTOM_GUTTER_BOUNDS (f));
+
XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_top
= FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f);
if (new_pixwidth)
{
+ /* Adjust for gutters here so that we always get set
+ properly. */
+ new_pixwidth -=
+ (FRAME_LEFT_GUTTER_BOUNDS (f)
+ + FRAME_RIGHT_GUTTER_BOUNDS (f));
+
XWINDOW (FRAME_ROOT_WINDOW (f))->pixel_left =
FRAME_LEFT_BORDER_END (f) + FRAME_LEFT_GUTTER_BOUNDS (f);
set_window_pixwidth (FRAME_ROOT_WINDOW (f), new_pixwidth, 0);
generate_formatted_string_db (format_str, Qnil, w, dl, db, findex, 0,
-1, type);
- Dynarr_reset (title_string_emchar_dynarr);
+ Dynarr_reset (title_string_charc_dynarr);
while (elt < Dynarr_length (db->runes))
{
if (Dynarr_atp (db->runes, elt)->type == RUNE_CHAR)
- Dynarr_add (title_string_emchar_dynarr,
- Dynarr_atp (db->runes, elt)->object.chr.ch);
+ Dynarr_add (title_string_charc_dynarr,
+ Dynarr_atp (db->runes, elt)->object.cglyph);
elt++;
}
return
- convert_emchar_string_into_malloced_string
- (Dynarr_atp (title_string_emchar_dynarr, 0),
- Dynarr_length (title_string_emchar_dynarr), 0);
+ convert_charc_string_into_malloced_string
+ (Dynarr_atp (title_string_charc_dynarr, 0),
+ Dynarr_length (title_string_charc_dynarr), 0);
}
void
if (!initialized)
#endif
{
- title_string_emchar_dynarr = Dynarr_new (Emchar);
+ title_string_charc_dynarr = Dynarr_new (Charc);
xzero (title_string_display_line);
}
}