diff src/window.c @ 282:c42ec1d1cded r21-0b39

Import from CVS: tag r21-0b39
author cvs
date Mon, 13 Aug 2007 10:33:18 +0200
parents 7df0dd720c89
children 558f606b08ae
line wrap: on
line diff
--- a/src/window.c	Mon Aug 13 10:32:23 2007 +0200
+++ b/src/window.c	Mon Aug 13 10:33:18 2007 +0200
@@ -157,6 +157,10 @@
 #ifdef HAVE_SCROLLBARS
   ((markobj) (window->scrollbar_width));
   ((markobj) (window->scrollbar_height));
+  ((markobj) (window->horizontal_scrollbar_visible_p));
+  ((markobj) (window->vertical_scrollbar_visible_p));
+  ((markobj) (window->scrollbar_on_left_p));
+  ((markobj) (window->scrollbar_on_top_p));
   ((markobj) (window->scrollbar_pointer));
 #endif /* HAVE_SCROLLBARS */
   ((markobj) (window->left_margin_width));
@@ -310,6 +314,10 @@
 #ifdef HAVE_SCROLLBARS
   p->scrollbar_width = Qnil;
   p->scrollbar_height = Qnil;
+  p->horizontal_scrollbar_visible_p = Qnil;
+  p->vertical_scrollbar_visible_p = Qnil;
+  p->scrollbar_on_left_p = Qnil;
+  p->scrollbar_on_top_p = Qnil;
 #endif
   p->left_margin_width = Qnil;
   p->right_margin_width = Qnil;
@@ -772,7 +780,7 @@
 {
 #ifdef HAVE_SCROLLBARS
   return (!window_scrollbar_width (w) &&
-	  ((XFRAME (w->frame)->scrollbar_on_left) ?
+	  (!NILP (w->scrollbar_on_left_p) ?
 	   !window_is_leftmost  (w) :
 	   !window_is_rightmost (w)));
 #else
@@ -786,7 +794,8 @@
 #ifdef HAVE_SCROLLBARS
   if (!WINDOW_WIN_P (w)
       || MINI_WINDOW_P (w)
-      || NILP (w->buffer))
+      || NILP (w->buffer)
+      || NILP (w->vertical_scrollbar_visible_p))
     /* #### when does NILP (w->buffer) happen? */
     return 0;
 
@@ -805,6 +814,7 @@
   if (!WINDOW_WIN_P (w)
       || MINI_WINDOW_P (w)
       || NILP (w->buffer)
+      || NILP (w->horizontal_scrollbar_visible_p)
       || !window_truncation_on (w))
     return 0;
 
@@ -997,7 +1007,7 @@
     return 0;
 
 #ifdef HAVE_SCROLLBARS
-  if (XFRAME (w->frame)->scrollbar_on_top)
+  if (!NILP (w->scrollbar_on_top_p))
     return window_scrollbar_height (w) + toolbar_height;
   else
 #endif
@@ -1016,7 +1026,7 @@
       window_modeline_height (w) + window_bottom_toolbar_height (w);
 
 #ifdef HAVE_SCROLLBARS
-  if (!XFRAME (w->frame)->scrollbar_on_top)
+  if (NILP (w->scrollbar_on_top_p))
     return window_scrollbar_height (w) + other_height;
   else
 #endif
@@ -1062,7 +1072,7 @@
     return 0;
 
 #ifdef HAVE_SCROLLBARS
-  if (XFRAME (w->frame)->scrollbar_on_left)
+  if (!NILP (w->scrollbar_on_left_p))
     {
 #endif
       return (window_left_right_gutter_width_internal (w, modeline) +
@@ -1081,7 +1091,7 @@
     return 0;
 
 #ifdef HAVE_SCROLLBARS
-  if (!XFRAME (w->frame)->scrollbar_on_left)
+  if (NILP (w->scrollbar_on_left_p))
     {
       return (window_left_right_gutter_width_internal (w, modeline) +
 	      window_right_toolbar_width (w));
@@ -1819,7 +1829,7 @@
 	   delete the selected window on any other frame, we shouldn't do
 	   anything but set the frame's selected_window slot.  */
 	if (EQ (frame, Fselected_frame (Qnil)))
-	  Fselect_window (alternative);
+	  Fselect_window (alternative, Qnil);
 	else
 	  set_frame_selected_window (f, alternative);
       }
@@ -2294,7 +2304,7 @@
       w = Fprevious_window (w, Qnil, frame, console);
       i++;
     }
-  Fselect_window (w);
+  Fselect_window (w, Qnil);
   return Qnil;
 }
 
@@ -3118,12 +3128,15 @@
   return Qnil;
 }
 
-DEFUN ("select-window", Fselect_window, 1, 1, 0, /*
+DEFUN ("select-window", Fselect_window, 1, 2, 0, /*
 Select WINDOW.  Most editing will apply to WINDOW's buffer.
 The main editor command loop selects the buffer of the selected window
 before each command.
+
+With non-nil optional argument `norecord', do not modify the
+global or per-frame buffer ordering.
 */
-       (window))
+       (window, norecord))
 {
   struct window *w;
   Lisp_Object old_selected_window = Fselected_window (Qnil);
@@ -3158,7 +3171,8 @@
   select_frame_1 (WINDOW_FRAME (w));
 
   /* also select the window's buffer */
-  Frecord_buffer (w->buffer);
+  if (NILP (norecord))
+    Frecord_buffer (w->buffer);
   Fset_buffer (w->buffer);
 
   /* Go to the point recorded in the window.
@@ -3234,7 +3248,7 @@
 		  record_unwind_protect (save_window_excursion_unwind,
 					 Fcurrent_window_configuration (Qnil));
 
-		  Fselect_window (window);
+		  Fselect_window (window, Qnil);
 		  run_hook (Qtemp_buffer_show_hook);
 		  unbind_to (count, Qnil);
 		}
@@ -4537,6 +4551,10 @@
 #ifdef HAVE_SCROLLBARS
   Lisp_Object scrollbar_width;
   Lisp_Object scrollbar_height;
+  Lisp_Object horizontal_scrollbar_visible_p;
+  Lisp_Object vertical_scrollbar_visible_p;
+  Lisp_Object scrollbar_on_left_p;
+  Lisp_Object scrollbar_on_top_p;
   Lisp_Object scrollbar_pointer;
 #endif /* HAVE_SCROLLBARS */
 #ifdef HAVE_TOOLBARS
@@ -4676,6 +4694,10 @@
 #ifdef HAVE_SCROLLBARS
     EQ(win1->scrollbar_width, win2->scrollbar_width) &&
     EQ(win1->scrollbar_height, win2->scrollbar_height) &&
+    EQ(win1->horizontal_scrollbar_visible_p, win2->horizontal_scrollbar_visible_p) &&
+    EQ(win1->vertical_scrollbar_visible_p, win2->vertical_scrollbar_visible_p) &&
+    EQ(win1->scrollbar_on_left_p, win2->scrollbar_on_left_p) &&
+    EQ(win1->scrollbar_on_top_p, win2->scrollbar_on_top_p) &&
     EQ(win1->scrollbar_pointer, win2->scrollbar_pointer) &&
 #endif /* HAVE_SCROLLBARS */
 #ifdef HAVE_TOOLBARS
@@ -4995,6 +5017,10 @@
 #ifdef HAVE_SCROLLBARS
 	  w->scrollbar_width = p->scrollbar_width;
 	  w->scrollbar_height = p->scrollbar_height;
+	  w->horizontal_scrollbar_visible_p = p->horizontal_scrollbar_visible_p;
+	  w->vertical_scrollbar_visible_p = p->vertical_scrollbar_visible_p;
+	  w->scrollbar_on_left_p = p->scrollbar_on_left_p;
+	  w->scrollbar_on_top_p = p->scrollbar_on_top_p;
 	  w->scrollbar_pointer = p->scrollbar_pointer;
 #endif /* HAVE_SCROLLBARS */
 #ifdef HAVE_TOOLBARS
@@ -5125,9 +5151,10 @@
 	  if (!minibuf_level &&
 	      MINI_WINDOW_P (XWINDOW (config->current_window)))
 	    Fselect_window (Fnext_window (config->current_window,
-					  Qnil, Qnil, Qnil));
+					  Qnil, Qnil, Qnil),
+                            Qnil);
 	  else
-	    Fselect_window (config->current_window);
+	    Fselect_window (config->current_window, Qnil);
 	  if (!NILP (new_current_buffer))
 	    Fset_buffer (new_current_buffer);
 	  else
@@ -5256,6 +5283,10 @@
 #ifdef HAVE_SCROLLBARS
       p->scrollbar_width = w->scrollbar_width;
       p->scrollbar_height = w->scrollbar_height;
+      p->horizontal_scrollbar_visible_p = w->horizontal_scrollbar_visible_p;
+      p->vertical_scrollbar_visible_p = w->vertical_scrollbar_visible_p;
+      p->scrollbar_on_left_p = w->scrollbar_on_left_p;
+      p->scrollbar_on_top_p = w->scrollbar_on_top_p;
       p->scrollbar_pointer = w->scrollbar_pointer;
 #endif /* HAVE_SCROLLBARS */
 #ifdef HAVE_TOOLBARS