Generalize INTERNAL_FIELD between buffers, keyboards and frames.
[bpt/emacs.git] / src / window.c
index 0f88cba..ae0aad7 100644 (file)
@@ -144,11 +144,16 @@ decode_window (register Lisp_Object window)
 static struct window *
 decode_any_window (register Lisp_Object window)
 {
+  struct window *w;
+
   if (NILP (window))
     return XWINDOW (selected_window);
 
   CHECK_WINDOW (window);
-  return XWINDOW (window);
+  w = XWINDOW (window);
+  /* The following test throws up every time a tooltip frame is displayed.  */
+  /* CHECK_LIVE_FRAME (w->frame); */
+  return w;
 }
 
 DEFUN ("windowp", Fwindowp, Swindowp, 1, 1, 0,
@@ -186,13 +191,13 @@ With a window argument, return the root window of that window's frame.  */)
   Lisp_Object window;
 
   if (NILP (frame_or_window))
-    window = SELECTED_FRAME ()->root_window;
+    window = FVAR (SELECTED_FRAME (), root_window);
   else if (WINDOWP (frame_or_window))
-    window = XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window)))->root_window;
+    window = FVAR (XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window))), root_window);
   else
     {
       CHECK_LIVE_FRAME (frame_or_window);
-      window = XFRAME (frame_or_window)->root_window;
+      window = FVAR (XFRAME (frame_or_window), root_window);
     }
 
   return window;
@@ -230,13 +235,13 @@ the first window of that frame.  */)
   Lisp_Object window;
 
   if (NILP (frame_or_window))
-    window = SELECTED_FRAME ()->root_window;
+    window = FVAR (SELECTED_FRAME (), root_window);
   else if (WINDOWP (frame_or_window))
-    window = XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window)))->root_window;
+    window = FVAR (XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window))), root_window);
   else
     {
       CHECK_LIVE_FRAME (frame_or_window);
-      window = XFRAME (frame_or_window)->root_window;
+      window = FVAR (XFRAME (frame_or_window), root_window);
     }
 
   while (NILP (XWINDOW (window)->buffer))
@@ -264,13 +269,14 @@ the selected window of that frame.  */)
   Lisp_Object window;
 
   if (NILP (frame_or_window))
-    window = SELECTED_FRAME ()->selected_window;
+    window = FVAR (SELECTED_FRAME (), selected_window);
   else if (WINDOWP (frame_or_window))
-    window = XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window)))->selected_window;
+    window = FVAR (XFRAME (WINDOW_FRAME (XWINDOW (frame_or_window))),
+                  selected_window);
   else
     {
       CHECK_LIVE_FRAME (frame_or_window);
-      window = XFRAME (frame_or_window)->selected_window;
+      window = FVAR (XFRAME (frame_or_window), selected_window);
     }
 
   return window;
@@ -298,7 +304,7 @@ Return WINDOW.  */)
   if (EQ (frame, selected_frame))
     return Fselect_window (window, norecord);
   else
-    return XFRAME (frame)->selected_window = window;
+    return FVAR (XFRAME (frame), selected_window) = window;
 }
 
 DEFUN ("selected-window", Fselected_window, Sselected_window, 0, 0, 0,
@@ -341,7 +347,7 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap)
   sf = SELECTED_FRAME ();
   if (XFRAME (WINDOW_FRAME (w)) != sf)
     {
-      XFRAME (WINDOW_FRAME (w))->selected_window = window;
+      FVAR (XFRAME (WINDOW_FRAME (w)), selected_window) = window;
       /* Use this rather than Fhandle_switch_frame
         so that FRAME_FOCUS_FRAME is moved appropriately as we
         move around in the state where a minibuffer in a separate
@@ -352,7 +358,7 @@ select_window (Lisp_Object window, Lisp_Object norecord, int inhibit_point_swap)
       return window;
     }
   else
-    sf->selected_window = window;
+    FVAR (sf, selected_window) = window;
 
   /* Store the current buffer's actual point into the
      old selected window.  It belongs to that window,
@@ -484,9 +490,7 @@ for future use.  */)
   (Lisp_Object window, Lisp_Object limit)
 {
   register struct window *w = decode_any_window (window);
-
   w->combination_limit = limit;
-
   return w->combination_limit;
 }
 
@@ -1216,13 +1220,13 @@ window_from_coordinates (struct frame *f, int x, int y,
      bar exists.  */
   if (NILP (window)
       && tool_bar_p
-      && WINDOWP (f->tool_bar_window)
-      && WINDOW_TOTAL_LINES (XWINDOW (f->tool_bar_window)) > 0
-      && (coordinates_in_window (XWINDOW (f->tool_bar_window), x, y)
+      && WINDOWP (FVAR (f, tool_bar_window))
+      && WINDOW_TOTAL_LINES (XWINDOW (FVAR (f, tool_bar_window))) > 0
+      && (coordinates_in_window (XWINDOW (FVAR (f, tool_bar_window)), x, y)
          != ON_NOTHING))
     {
       *part = ON_TEXT;
-      window = f->tool_bar_window;
+      window = FVAR (f, tool_bar_window);
     }
 
   return window;
@@ -2316,7 +2320,7 @@ MINIBUF neither nil nor t means never include the minibuffer window.  */)
   (Lisp_Object frame, Lisp_Object minibuf, Lisp_Object window)
 {
   if (NILP (window))
-    window = FRAMEP (frame) ? XFRAME (frame)->selected_window : selected_window;
+    window = FRAMEP (frame) ? FVAR (XFRAME (frame), selected_window) : selected_window;
   CHECK_WINDOW (window);
   if (NILP (frame))
     frame = selected_frame;
@@ -3552,9 +3556,9 @@ be applied on the Elisp level.  */)
 void
 resize_frame_windows (struct frame *f, int size, int horflag)
 {
-  Lisp_Object root = f->root_window;
+  Lisp_Object root = FVAR (f, root_window);
   struct window *r = XWINDOW (root);
-  Lisp_Object mini = f->minibuffer_window;
+  Lisp_Object mini = FVAR (f, minibuffer_window);
   struct window *m;
   /* new_size is the new size of the frame's root window.  */
   int new_size = (horflag
@@ -3600,7 +3604,7 @@ resize_frame_windows (struct frame *f, int size, int horflag)
                {
                  /* We lost.  Delete all windows but the frame's
                     selected one.  */
-                 root = f->selected_window;
+                 root = FVAR (f, selected_window);
                  Fdelete_other_windows_internal (root, Qnil);
                  if (horflag)
                    XSETFASTINT (XWINDOW (root)->total_cols, new_size);
@@ -4854,7 +4858,7 @@ specifies the window to scroll.  This takes precedence over
   else
     {
       if (CONSP (arg))
-       arg = Fcar (arg);
+       arg = XCAR (arg);
       CHECK_NUMBER (arg);
       window_scroll (window, XINT (arg), 0, 1);
     }
@@ -5911,12 +5915,9 @@ save_window_save (Lisp_Object window, struct Lisp_Vector *vector, int i)
             is the selected window, then get the value of point from
             the buffer; pointm is garbage in the selected window.  */
          if (EQ (window, selected_window))
-           {
-             p->pointm = Fmake_marker ();
-             set_marker_both (p->pointm, w->buffer,
-                              BUF_PT (XBUFFER (w->buffer)),
-                              BUF_PT_BYTE (XBUFFER (w->buffer)));
-           }
+           p->pointm = build_marker (XBUFFER (w->buffer),
+                                     BUF_PT (XBUFFER (w->buffer)),
+                                     BUF_PT_BYTE (XBUFFER (w->buffer)));
          else
            p->pointm = Fcopy_marker (w->pointm, Qnil);
          XMARKER (p->pointm)->insertion_type
@@ -6464,8 +6465,8 @@ init_window_once (void)
   struct frame *f = make_initial_frame ();
   XSETFRAME (selected_frame, f);
   Vterminal_frame = selected_frame;
-  minibuf_window = f->minibuffer_window;
-  selected_window = f->selected_window;
+  minibuf_window = FVAR (f, minibuffer_window);
+  selected_window = FVAR (f, selected_window);
   last_nonminibuf_frame = f;
 
   window_initialized = 1;