This commit was generated by cvs2svn to compensate for changes in r5057,
[chise/xemacs-chise.git.1] / src / frame.c
index 0264e90..5891e24 100644 (file)
@@ -34,12 +34,14 @@ Boston, MA 02111-1307, USA.  */
 #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;
@@ -86,6 +88,7 @@ Lisp_Object Qborder_color;
 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;
@@ -121,17 +124,15 @@ EXFUN (Fset_frame_properties, 2);
 
 \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;
 }
@@ -155,13 +156,13 @@ print_frame (Lisp_Object obj, Lisp_Object printcharfun, int escapeflag)
 }
 
 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"
 }
 
@@ -175,7 +176,7 @@ allocate_frame_core (Lisp_Object device)
   /* 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);
@@ -189,10 +190,10 @@ allocate_frame_core (Lisp_Object device)
   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;
@@ -205,13 +206,6 @@ allocate_frame_core (Lisp_Object device)
   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;
   {
@@ -413,7 +407,7 @@ See `set-frame-properties', `default-x-frame-plist', and
 
   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));
@@ -460,22 +454,16 @@ See `set-frame-properties', `default-x-frame-plist', and
         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;
 
@@ -592,7 +580,7 @@ unhold_frame_size_changes (void)
 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);
 }
@@ -903,11 +891,8 @@ set_frame_selected_window (struct frame *f, Lisp_Object window)
     {
 #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;
     }
 }
@@ -1539,7 +1524,6 @@ delete_frame_internal (struct frame *f, int force,
 #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. */
@@ -1550,13 +1534,6 @@ delete_frame_internal (struct frame *f, int force,
   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. */
 
@@ -1852,7 +1829,7 @@ Note also: Warping the mouse is contrary to the ICCCM, so be very sure
   struct window *w;
   int pix_x, pix_y;
 
-  CHECK_LIVE_WINDOW (window);
+  CHECK_WINDOW (window);
   CHECK_INT (x);
   CHECK_INT (y);
 
@@ -1876,7 +1853,7 @@ before calling this function on it, like this.
 {
   struct window *w;
 
-  CHECK_LIVE_WINDOW (window);
+  CHECK_WINDOW (window);
   CHECK_INT (x);
   CHECK_INT (y);
 
@@ -2818,7 +2795,7 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth)
 
   /* 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 +=
@@ -2826,7 +2803,7 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth)
     + 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)
@@ -2838,13 +2815,13 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth)
     + 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. */
   {
@@ -2930,7 +2907,7 @@ change_frame_size_1 (struct frame *f, int newheight, int newwidth)
       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;
@@ -3077,6 +3054,8 @@ syms_of_frame (void)
 
   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");
@@ -3292,13 +3271,13 @@ Controls the title of the X window corresponding to the selected frame.
 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.
@@ -3306,9 +3285,9 @@ This can be overridden by arguments to `make-frame'.
 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 /*