changeset 18657:1dc4d7e374d5

Include blockinput.h. (Fset_window_configuration): Block input around frobbing the frame. Preseve point in the current buffer if we do not switch to a different one.
author Richard M. Stallman <rms@gnu.org>
date Mon, 07 Jul 1997 05:32:01 +0000
parents 52a3dec2b6cc
children 959bf7b006ad
files src/window.c
diffstat 1 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/window.c	Mon Jul 07 04:48:15 1997 +0000
+++ b/src/window.c	Mon Jul 07 05:32:01 1997 +0000
@@ -29,6 +29,7 @@
 #include "termchar.h"
 #include "disptab.h"
 #include "keyboard.h"
+#include "blockinput.h"
 
 Lisp_Object Qwindowp, Qwindow_live_p;
 
@@ -3213,6 +3214,7 @@
   Lisp_Object new_current_buffer;
   Lisp_Object frame;
   FRAME_PTR f;
+  int old_point = -1;
 
   while (!WINDOW_CONFIGURATIONP (configuration))
     {
@@ -3226,6 +3228,11 @@
   new_current_buffer = data->current_buffer;
   if (NILP (XBUFFER (new_current_buffer)->name))
     new_current_buffer = Qnil;
+  else
+    {
+      if (XBUFFER (new_current_buffer) == current_buffer)
+	old_point = PT;
+    }
 
   frame = XWINDOW (SAVED_WINDOW_N (saved_windows, 0)->window)->frame;
   f = XFRAME (frame);
@@ -3246,6 +3253,10 @@
       int previous_frame_width =  FRAME_WIDTH  (f);
       int previous_frame_menu_bar_lines = FRAME_MENU_BAR_LINES (f);
 
+      /* The mouse highlighting code could get screwed up
+	 if it runs during this.  */
+      BLOCK_INPUT;
+
       if (XFASTINT (data->frame_height) != previous_frame_height
 	  || XFASTINT (data->frame_width) != previous_frame_width)
 	change_frame_size (f, data->frame_height, data->frame_width, 0, 0);
@@ -3401,6 +3412,8 @@
       if (previous_frame_menu_bar_lines != FRAME_MENU_BAR_LINES (f))
 	x_set_menu_bar_lines (f, previous_frame_menu_bar_lines, 0);
 #endif
+
+      UNBLOCK_INPUT;
     }
 
   /* Restore the minimum heights recorded in the configuration.  */
@@ -3416,7 +3429,15 @@
     do_switch_frame (data->selected_frame, Qnil, 0);
 
   if (!NILP (new_current_buffer))
-    Fset_buffer (new_current_buffer);
+    {
+      Fset_buffer (new_current_buffer);
+
+      /* If the buffer that is current now is the same
+	 that was current before setting the window configuration,
+	 don't alter its PT.  */
+      if (old_point >= 0)
+	SET_PT (old_point);
+    }
 
   Vminibuf_scroll_window = data->minibuf_scroll_window;