(gud-perldb-find-file): Use gud-make-debug-menu.
[bpt/emacs.git] / src / frame.h
index f21d4dc..9e41ad3 100644 (file)
@@ -44,47 +44,12 @@ struct frame
   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
@@ -140,6 +105,63 @@ struct frame
   /* 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;
@@ -149,6 +171,13 @@ struct frame
      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;
 
@@ -227,6 +256,9 @@ struct frame
      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;
 
@@ -234,13 +266,6 @@ struct frame
      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
@@ -252,12 +277,18 @@ struct frame
   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
 
@@ -290,6 +321,7 @@ typedef struct frame *FRAME_PTR;
 #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
@@ -434,6 +466,7 @@ extern FRAME_PTR last_nonminibuf_frame;
 #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)