EMACS_INT size;
struct Lisp_Vector *next;
- /* glyphs as they appear on the frame */
- struct frame_glyphs *current_glyphs;
-
- /* glyphs we'd like to appear on the frame */
- struct frame_glyphs *desired_glyphs;
-
- /* See do_line_insertion_deletion_costs for info on these arrays. */
- /* Cost of inserting 1 line on this frame */
- int *insert_line_cost;
- /* Cost of deleting 1 line on this frame */
- int *delete_line_cost;
- /* Cost of inserting n lines on this frame */
- int *insert_n_lines_cost;
- /* Cost of deleting n lines on this frame */
- int *delete_n_lines_cost;
+ /* All Lisp_Object components must come first.
+ Only EMACS_INT values can be intermixed with them.
+ That ensures they are all aligned normally. */
- /* glyphs for the mode line */
- struct frame_glyphs *temp_glyphs;
-
- /* Intended cursor position of this frame.
- Measured in characters, counting from upper left corner
- within the frame. */
- int cursor_x;
- int cursor_y;
-
- /* Actual cursor position of this frame, and the character under it.
- (Not used for terminal frames.) */
- int phys_cursor_x;
- int phys_cursor_y;
- /* This is handy for undrawing the cursor, because current_glyphs is
- not always accurate when in do_scrolling. */
- GLYPH phys_cursor_glyph;
-
- /* Size of this frame, in units of characters. */
- EMACS_INT height;
- EMACS_INT width;
-
- /* New height and width for pending size change. 0 if no change pending. */
- int new_height, new_width;
-
- /* Name of this frame: a Lisp string. See also `explicit_name'. */
+ /* Name of this frame: a Lisp string. See also `explicit_name'
+ and `namebuf'. */
Lisp_Object name;
/* The frame which should receive keystrokes that occur in this
/* Alist of elements (FACE-NAME . FACE-VECTOR-DATA). */
Lisp_Object face_alist;
+ /* A vector that records the entire structure of this frame's menu bar.
+ For the format of the data, see extensive comments in xmenu.c.
+ Only the X toolkit version uses this. */
+ Lisp_Object menu_bar_vector;
+ /* Number of elements in the vector that have meaningful data. */
+ EMACS_INT menu_bar_items_used;
+
+ /* Predicate for selecting buffers for other-buffer. */
+ Lisp_Object buffer_predicate;
+
+ /* Beyond here, there should be no more Lisp_Object components. */
+
+
+ /* A buffer to hold the frame's name. We can't use the Lisp string's
+ pointer (`name', above) because it might get relocated. */
+ char *namebuf;
+
+ /* glyphs as they appear on the frame */
+ struct frame_glyphs *current_glyphs;
+
+ /* glyphs we'd like to appear on the frame */
+ struct frame_glyphs *desired_glyphs;
+
+ /* See do_line_insertion_deletion_costs for info on these arrays. */
+ /* Cost of inserting 1 line on this frame */
+ int *insert_line_cost;
+ /* Cost of deleting 1 line on this frame */
+ int *delete_line_cost;
+ /* Cost of inserting n lines on this frame */
+ int *insert_n_lines_cost;
+ /* Cost of deleting n lines on this frame */
+ int *delete_n_lines_cost;
+
+ /* glyphs for the mode line */
+ struct frame_glyphs *temp_glyphs;
+
+ /* Intended cursor position of this frame.
+ Measured in characters, counting from upper left corner
+ within the frame. */
+ int cursor_x;
+ int cursor_y;
+
+ /* Actual cursor position of this frame, and the character under it.
+ (Not used for terminal frames.) */
+ int phys_cursor_x;
+ int phys_cursor_y;
+ /* This is handy for undrawing the cursor, because current_glyphs is
+ not always accurate when in do_scrolling. */
+ GLYPH phys_cursor_glyph;
+
+ /* Size of this frame, in units of characters. */
+ EMACS_INT height;
+ EMACS_INT width;
+
+ /* New height and width for pending size change. 0 if no change pending. */
+ int new_height, new_width;
+
/* The output method says how the contents of this frame
are displayed. It could be using termcap, or using an X window. */
enum output_method output_method;
it is defined in xterm.h. */
union display { struct x_display *x; int nothing; } display;
+#ifdef MULTI_KBOARD
+ /* A pointer to the kboard structure associated with this frame.
+ For termcap frames, this points to initial_kboard. For X frames,
+ it will be the same as display.x->display_info->kboard. */
+ struct kboard *kboard;
+#endif
+
/* Number of lines of menu bar. */
int menu_bar_lines;
cleared. */
char explicit_name;
+ /* Nonzero if size of some window on this frame has changed. */
+ char window_sizes_changed;
+
/* Storage for messages to this frame. */
char *message_buf;
for lines beyond a certain vpos. This is the vpos. */
int scroll_bottom_vpos;
- /* A vector that records the entire structure of this frame's menu bar.
- For the format of the data, see extensive comments in xmenu.c.
- Only the X toolkit version uses this. */
- Lisp_Object menu_bar_vector;
- /* Number of elements in the vector that have meaningful data. */
- int menu_bar_items_used;
-
/* Width of the scroll bar, in pixels and in characters.
scroll_bar_cols tracks scroll_bar_pixel_width if the latter is positive;
a zero value in scroll_bar_pixel_width means to compute the actual width
int cost_calculation_baud_rate;
};
+#ifdef MULTI_KBOARD /* Note that MULTI_KBOARD implies MULTI_FRAME */
+#define FRAME_KBOARD(f) ((f)->kboard)
+#else
+#define FRAME_KBOARD(f) (&the_only_kboard)
+#endif
+
#ifdef MULTI_FRAME
typedef struct frame *FRAME_PTR;
#define XFRAME(p) ((struct frame *) XPNTR (p))
-#define XSETFRAME(p, v) XSET (p, Lisp_Frame, v)
+#define XSETFRAME(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FRAME))
#define WINDOW_FRAME(w) (w)->frame
#define FRAME_NO_SPLIT_P(f) (f)->no_split
#define FRAME_WANTS_MODELINE_P(f) (f)->wants_modeline
#define FRAME_ICONIFIED_P(f) (f)->iconified
+#define FRAME_WINDOW_SIZES_CHANGED(f) (f)->window_sizes_changed
#define FRAME_MINIBUF_WINDOW(f) (f)->minibuffer_window
#define FRAME_ROOT_WINDOW(f) (f)->root_window
#define FRAME_SELECTED_WINDOW(f) (f)->selected_window
#define FRAME_NO_SPLIT_P(f) 0
#define FRAME_WANTS_MODELINE_P(f) 1
#define FRAME_ICONIFIED_P(f) 0
+#define FRAME_WINDOW_SIZES_CHANGED(f) the_only_frame.window_sizes_changed
#define FRAME_MINIBUF_WINDOW(f) (minibuf_window)
#define FRAME_ROOT_WINDOW(f) (the_only_frame.root_window)
#define FRAME_SELECTED_WINDOW(f) (selected_window)