#include "faces.h"
#include "frame.h"
#include "glyphs.h"
-#include "gutter.h"
#include "menubar.h"
#include "redisplay.h"
#include "scrollbar.h"
#include "window.h"
+#include <errno.h>
+#include "sysdep.h"
+
Lisp_Object Vselect_frame_hook, Qselect_frame_hook;
Lisp_Object Vdeselect_frame_hook, Qdeselect_frame_hook;
Lisp_Object Vcreate_frame_hook, Qcreate_frame_hook;
Lisp_Object Qborder_width;
Lisp_Object Qframep, Qframe_live_p;
+Lisp_Object Qframe_x_p, Qframe_tty_p;
Lisp_Object Qdelete_frame;
Lisp_Object Qframe_title_format, Vframe_title_format;
\f
static Lisp_Object
-mark_frame (Lisp_Object obj)
+mark_frame (Lisp_Object obj, void (*markobj) (Lisp_Object))
{
struct frame *f = XFRAME (obj);
-#define MARKED_SLOT(x) mark_object (f->x)
+#define MARKED_SLOT(x) ((markobj) (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));
+ MAYBE_FRAMEMETH (f, mark_frame, (f, markobj));
return Qnil;
}
}
DEFINE_LRECORD_IMPLEMENTATION ("frame", frame,
- mark_frame, print_frame, 0, 0, 0, 0,
+ mark_frame, print_frame, 0, 0, 0,
struct frame);
\f
static void
nuke_all_frame_slots (struct frame *f)
{
-#define MARKED_SLOT(x) f->x = Qnil
+#define MARKED_SLOT(x) f->x = Qnil;
#include "frameslots.h"
}
/* 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);
XWINDOW (root_window)->frame = frame;
/* 10 is arbitrary,
- Just so that there is "something there."
+ just so that there is "something there."
Correct size will be set up later with change_frame_size. */
- f->width = 10;
+ f->width = 10;
f->height = 10;
XWINDOW (root_window)->pixel_width = 10;
f->selected_window = root_window;
f->last_nonminibuf_window = root_window;
- /* cache of subwindows visible on frame */
- f->subwindow_cachels = Dynarr_new (subwindow_cachel);
-
- /* associated exposure ignore list */
- f->subwindow_exposures = 0;
- f->subwindow_exposures_tail = 0;
-
/* Choose a buffer for the frame's root window. */
XWINDOW (root_window)->buffer = Qt;
{
update_frame_window_mirror (f);
- if (initialized && !DEVICE_STREAM_P (d))
+ if (initialized)
{
if (!NILP (f->minibuffer_window))
reset_face_cachels (XWINDOW (f->minibuffer_window));
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;
void
invalidate_vertical_divider_cache_in_frame (struct frame *f)
{
- /* Invalidate cached value of needs_vertical_divider_p in
+ /* Invalidate cached value of needs_vertical_divider_p in
every and all windows */
map_windows (f, invalidate_vertical_divider_cache_in_window, 0);
}
{
#ifdef HAVE_TOOLBARS
if (!EQ (f->last_nonminibuf_window, window))
- {
- MARK_TOOLBAR_CHANGED;
- MARK_GUTTER_CHANGED;
- }
-#endif
+ MARK_TOOLBAR_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_LIVE_WINDOW (window);
+ CHECK_WINDOW (window);
CHECK_INT (x);
CHECK_INT (y);
{
struct window *w;
- CHECK_LIVE_WINDOW (window);
+ CHECK_WINDOW (window);
CHECK_INT (x);
CHECK_INT (y);
/* when frame_conversion_internal() calculated the number of rows/cols
in the frame, the theoretical toolbar sizes were subtracted out.
- The calculations below adjust for real toolbar height/width in
+ The caluclations below adjust for real toolbar height/width in
frame, which may be different from frame spec, taking the above
fact into account */
new_pixheight +=
+ 2 * FRAME_THEORETICAL_TOP_TOOLBAR_BORDER_WIDTH (f)
- FRAME_REAL_TOP_TOOLBAR_HEIGHT (f)
- 2 * FRAME_REAL_TOP_TOOLBAR_BORDER_WIDTH (f);
-
+
new_pixheight +=
+ FRAME_THEORETICAL_BOTTOM_TOOLBAR_HEIGHT (f)
+ 2 * FRAME_THEORETICAL_BOTTOM_TOOLBAR_BORDER_WIDTH (f)
+ 2 * FRAME_THEORETICAL_LEFT_TOOLBAR_BORDER_WIDTH (f)
- FRAME_REAL_LEFT_TOOLBAR_WIDTH (f)
- 2 * FRAME_REAL_LEFT_TOOLBAR_BORDER_WIDTH (f);
-
+
new_pixwidth +=
+ FRAME_THEORETICAL_RIGHT_TOOLBAR_WIDTH (f)
+ 2 * FRAME_THEORETICAL_RIGHT_TOOLBAR_BORDER_WIDTH (f)
- FRAME_REAL_RIGHT_TOOLBAR_WIDTH (f)
- 2 * FRAME_REAL_RIGHT_TOOLBAR_BORDER_WIDTH (f);
-
+
/* Adjust the width for the end glyph which may be a different width
than the default character width. */
{
FRAME_CHARWIDTH (f) = FRAME_WIDTH (f);
FRAME_CHARHEIGHT (f) = FRAME_HEIGHT (f);
}
-
+
MARK_FRAME_TOOLBARS_CHANGED (f);
MARK_FRAME_CHANGED (f);
f->echo_area_garbaged = 1;
defsymbol (&Qframep, "framep");
defsymbol (&Qframe_live_p, "frame-live-p");
+ defsymbol (&Qframe_x_p, "frame-x-p");
+ defsymbol (&Qframe_tty_p, "frame-tty-p");
defsymbol (&Qdelete_frame, "delete-frame");
defsymbol (&Qsynchronize_minibuffers, "synchronize-minibuffers");
defsymbol (&Qbuffer_predicate, "buffer-predicate");
This is the same format as `modeline-format' with the exception that
%- is ignored.
*/ );
- Vframe_title_format = build_string ("%S: %b");
+ Vframe_title_format = Fpurecopy (build_string ("%S: %b"));
DEFVAR_LISP ("frame-icon-title-format", &Vframe_icon_title_format /*
Controls the title of the icon corresponding to the selected frame.
See also the variable `frame-title-format'.
*/ );
- Vframe_icon_title_format = build_string ("%b");
+ Vframe_icon_title_format = Fpurecopy (build_string ("%b"));
DEFVAR_LISP ("default-frame-name", &Vdefault_frame_name /*
The default name to assign to newly-created frames.
This must be a string.
*/ );
#ifndef INFODOCK
- Vdefault_frame_name = build_string ("emacs");
+ Vdefault_frame_name = Fpurecopy (build_string ("emacs"));
#else
- Vdefault_frame_name = build_string ("InfoDock");
+ Vdefault_frame_name = Fpurecopy (build_string ("InfoDock"));
#endif
DEFVAR_LISP ("default-frame-plist", &Vdefault_frame_plist /*