XEmacs 21.2.28 "Hermes".
[chise/xemacs-chise.git.1] / src / frame.h
index ff5b332..93669da 100644 (file)
@@ -20,8 +20,8 @@ Boston, MA 02111-1307, USA.  */
 
 /* Synched up with: FSF 19.30. */
 
-#ifndef _XEMACS_FRAME_H_
-#define _XEMACS_FRAME_H_
+#ifndef INCLUDED_frame_h_
+#define INCLUDED_frame_h_
 
 #ifdef HAVE_SCROLLBARS
 #include "scrollbar.h"
@@ -33,6 +33,7 @@ Boston, MA 02111-1307, USA.  */
 
 #include "device.h"
 #include "glyphs.h"
+#include "redisplay.h"
 
 #define FRAME_TYPE_NAME(f) ((f)->framemeths->name)
 #define FRAME_TYPE(f) ((f)->framemeths->symbol)
@@ -93,6 +94,9 @@ struct frame
   /* subwindow cache elements for this frame */
   subwindow_cachel_dynarr *subwindow_cachels;
 
+  struct expose_ignore* subwindow_exposures;
+  struct expose_ignore* subwindow_exposures_tail;
+
 #ifdef HAVE_SCROLLBARS
   /* frame-local scrollbar information.  See scrollbar.c. */
   int scrollbar_y_offset;
@@ -109,6 +113,10 @@ struct frame
   unsigned int current_toolbar_size[4];
 #endif
 
+  /* Dynamic array of display lines for gutters */
+  display_line_dynarr *current_display_lines;
+  display_line_dynarr *desired_display_lines;
+
   /* A structure of auxiliary data specific to the device type.
      struct x_frame is used for X window frames; defined in console-x.h */
   void *frame_data;
@@ -160,6 +168,11 @@ Value : Emacs meaning                           :f-v-p : X meaning
   unsigned int bottom_toolbar_was_visible :1;
   unsigned int left_toolbar_was_visible :1;
   unsigned int right_toolbar_was_visible :1;
+  /* gutter visibility */
+  unsigned int top_gutter_was_visible :1;
+  unsigned int bottom_gutter_was_visible :1;
+  unsigned int left_gutter_was_visible :1;
+  unsigned int right_gutter_was_visible :1;
 
   /* redisplay flags */
   unsigned int buffers_changed :1;
@@ -168,6 +181,7 @@ Value : Emacs meaning                           :f-v-p : X meaning
   unsigned int faces_changed :1;
   unsigned int frame_changed :1;
   unsigned int subwindows_changed :1;
+  unsigned int subwindows_state_changed :1;
   unsigned int glyphs_changed :1;
   unsigned int icon_changed :1;
   unsigned int menubar_changed :1;
@@ -175,6 +189,7 @@ Value : Emacs meaning                           :f-v-p : X meaning
   unsigned int point_changed :1;
   unsigned int size_changed :1;
   unsigned int toolbar_changed :1;
+  unsigned int gutter_changed :1;
   unsigned int windows_changed :1;
   unsigned int windows_structure_changed :1;
   unsigned int window_face_cache_reset :1;     /* used by expose handler */
@@ -222,7 +237,6 @@ DECLARE_LRECORD (frame, struct frame);
 #define XFRAME(x) XRECORD (x, frame, struct frame)
 #define XSETFRAME(x, p) XSETRECORD (x, p, frame)
 #define FRAMEP(x) RECORDP (x, frame)
-#define GC_FRAMEP(x) GC_RECORDP (x, frame)
 #define CHECK_FRAME(x) CHECK_RECORD (x, frame)
 #define CONCHECK_FRAME(x) CONCHECK_RECORD (x, frame)
 
@@ -249,7 +263,7 @@ error_check_frame_type (struct frame * f, Lisp_Object sym)
   return f;
 }
 # define FRAME_TYPE_DATA(f, type)                      \
- ((struct type##_frame *) (error_check_frame_type (f, Q##type))->frame_data)
+ ((struct type##_frame *) error_check_frame_type (f, Q##type)->frame_data)
 #else
 # define FRAME_TYPE_DATA(f, type)                      \
   ((struct type##_frame *) (f)->frame_data)
@@ -329,6 +343,19 @@ extern int frame_changed;
     subwindows_changed = 1;                                    \
 } while (0)
 
+#define MARK_FRAME_SUBWINDOWS_STATE_CHANGED(f) do {    \
+  struct frame *mfgc_f = (f);                          \
+  mfgc_f->subwindows_state_changed = 1;                \
+  mfgc_f->modiff++;                                    \
+  if (!NILP (mfgc_f->device))                          \
+    {                                                  \
+      struct device *mfgc_d = XDEVICE (mfgc_f->device);        \
+      MARK_DEVICE_SUBWINDOWS_STATE_CHANGED (mfgc_d);   \
+    }                                                  \
+  else                                                 \
+    subwindows_state_changed = 1;                      \
+} while (0)
+
 #define MARK_FRAME_TOOLBARS_CHANGED(f) do {            \
   struct frame *mftc_f = (f);                          \
   mftc_f->toolbar_changed = 1;                         \
@@ -342,6 +369,19 @@ extern int frame_changed;
     toolbar_changed = 1;                               \
 } while (0)
 
+#define MARK_FRAME_GUTTERS_CHANGED(f) do {     \
+  struct frame *mftc_f = (f);                          \
+  mftc_f->gutter_changed = 1;                          \
+  mftc_f->modiff++;                                    \
+  if (!NILP (mftc_f->device))                          \
+    {                                                  \
+      struct device *mftc_d = XDEVICE (mftc_f->device);        \
+      MARK_DEVICE_GUTTERS_CHANGED (mftc_d);    \
+    }                                                  \
+  else                                                 \
+    gutter_changed = 1;                                        \
+} while (0)
+
 #define MARK_FRAME_SIZE_CHANGED(f) do {                        \
   struct frame *mfsc_f = (f);                          \
   mfsc_f->size_changed = 1;                            \
@@ -737,4 +777,6 @@ int is_surrogate_for_selected_frame (struct frame *f);
 void update_frame_icon (struct frame *f);
 void invalidate_vertical_divider_cache_in_frame (struct frame *f);
 
-#endif /* _XEMACS_FRAME_H_ */
+void init_frame (void);
+
+#endif /* INCLUDED_frame_h_ */