]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/window.c (Fset_window_configuration): Move select_window later.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 29 Nov 2013 01:14:01 +0000 (20:14 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 29 Nov 2013 01:14:01 +0000 (20:14 -0500)
src/ChangeLog
src/window.c

index 8707a6f9d0217db50eacb20c6bb2b860700a15f6..3231f5b3f54683a0455fff2c045fb3c16c594c36 100644 (file)
@@ -1,3 +1,7 @@
+2013-11-29  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * window.c (Fset_window_configuration): Move select_window later.
+
 2013-11-28  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        Refine redisplay optimizations to only redisplay *some* frames/windows
index 6c336f63ecce41db1e4d572b5688553da212095b..ea2618fe94d24d82475799294ec209a56158aac0 100644 (file)
@@ -5742,14 +5742,6 @@ the return value is nil.  Otherwise the value is t.  */)
                               make_number (old_point),
                               XWINDOW (data->current_window)->contents);
 
-      /* In the following call to `select-window', prevent "swapping out
-        point" in the old selected window using the buffer that has
-        been restored into it.  We already swapped out that point from
-        that window's old buffer.  */
-      select_window (data->current_window, Qnil, 1);
-      BVAR (XBUFFER (XWINDOW (selected_window)->contents), last_selected_window)
-       = selected_window;
-
       if (NILP (data->focus_frame)
          || (FRAMEP (data->focus_frame)
              && FRAME_LIVE_P (XFRAME (data->focus_frame))))
@@ -5800,6 +5792,20 @@ the return value is nil.  Otherwise the value is t.  */)
            delete_deletable_window (window);
        }
 
+      /* In the following call to `select-window', prevent "swapping out
+        point" in the old selected window using the buffer that has
+        been restored into it.  We already swapped out that point from
+        that window's old buffer.  */
+      /* This `select_window' calls record_buffer which calls Fdelq which
+        invokes QUIT, so we do it here at the end rather than earlier,
+        to minimize the risk of interrupting the Fset_window_configuration
+        in an inconsistent state (e.g. before frame-focus redirection is
+        canceled).  */
+      select_window (data->current_window, Qnil, 1);
+      BVAR (XBUFFER (XWINDOW (selected_window)->contents),
+           last_selected_window)
+       = selected_window;
+
       /* Fselect_window will have made f the selected frame, so we
         reselect the proper frame here.  Fhandle_switch_frame will change the
         selected window too, but that doesn't make the call to