* window.c (run_window_configuration_change_hook): New function.
authorStefan Monnier <monnier@iro.umontreal.ca>
Mon, 28 Jan 2008 19:05:13 +0000 (19:05 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Mon, 28 Jan 2008 19:05:13 +0000 (19:05 +0000)
Code extracted from set_window_buffer.  Set the selected frame.
(set_window_buffer): Use it.
* window.h (run_window_configuration_change_hook): Declare.
* dispnew.c (change_frame_size_1): Use it instead of set-window-buffer.

src/ChangeLog
src/dispnew.c
src/window.c
src/window.h

index 3986b4f..0d1a18e 100644 (file)
@@ -1,5 +1,11 @@
 2008-01-28  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * window.c (run_window_configuration_change_hook): New function.
+       Code extracted from set_window_buffer.  Set the selected frame.
+       (set_window_buffer): Use it.
+       * window.h (run_window_configuration_change_hook): Declare.
+       * dispnew.c (change_frame_size_1): Use it instead of set-window-buffer.
+
        * keyboard.c (read_char): Yet another int/Lisp_Object mixup (YAILOM).
 
 2008-01-27  Dan Nicolaescu  <dann@ics.uci.edu>
index ab0f581..284e1fd 100644 (file)
@@ -6386,9 +6386,7 @@ change_frame_size_1 (f, newheight, newwidth, pretend, delay, safe)
 
   record_unwind_protect (Fset_buffer, Fcurrent_buffer ());
 
-  /* This isn't quite a no-op: it runs window-configuration-change-hook.  */
-  Fset_window_buffer (FRAME_SELECTED_WINDOW (f),
-                     XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer, Qt);
+  run_window_configuration_change_hook (f);
 
   unbind_to (count, Qnil);
 }
index bf36cbc..5b0d8f4 100644 (file)
@@ -3307,6 +3307,25 @@ Fset_window_buffer_unwind (obuf)
 EXFUN (Fset_window_fringes, 4);
 EXFUN (Fset_window_scroll_bars, 4);
 
+void
+run_window_configuration_change_hook (struct frame *f)
+{
+  if (! NILP (Vwindow_configuration_change_hook)
+      && ! NILP (Vrun_hooks))
+    {
+      int count = SPECPDL_INDEX ();
+      if (SELECTED_FRAME () != f)
+       {
+         Lisp_Object frame;
+         XSETFRAME (frame, f);
+         record_unwind_protect (Fselect_frame, Fselected_frame ());
+         Fselect_frame (frame);
+       }
+      call1 (Vrun_hooks, Qwindow_configuration_change_hook);
+      unbind_to (count, Qnil);
+    }
+}
+
 /* Make WINDOW display BUFFER as its contents.  RUN_HOOKS_P non-zero
    means it's allowed to run hooks.  See make_frame for a case where
    it's not allowed.  KEEP_MARGINS_P non-zero means that the current
@@ -3408,10 +3427,7 @@ set_window_buffer (window, buffer, run_hooks_p, keep_margins_p)
       if (! NILP (Vwindow_scroll_functions))
        run_hook_with_args_2 (Qwindow_scroll_functions, window,
                              Fmarker_position (w->start));
-
-      if (! NILP (Vwindow_configuration_change_hook)
-         && ! NILP (Vrun_hooks))
-       call1 (Vrun_hooks, Qwindow_configuration_change_hook);
+      run_window_configuration_change_hook (XFRAME (WINDOW_FRAME (w)));
     }
 
   unbind_to (count, Qnil);
index fb56be8..b2c62fd 100644 (file)
@@ -790,6 +790,7 @@ extern void foreach_window P_ ((struct frame *,
 extern void grow_mini_window P_ ((struct window *, int));
 extern void shrink_mini_window P_ ((struct window *));
 
+void run_window_configuration_change_hook (struct frame *f);
 
 /* Make WINDOW display BUFFER as its contents.  RUN_HOOKS_P non-zero
    means it's allowed to run hooks.  See make_frame for a case where