diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/window.c | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/src/window.c b/src/window.c index 2d98ae5f156..db324effcce 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -5148,15 +5148,13 @@ Signal an error when WINDOW is the only window on its frame. */) | |||
| 5148 | adjust_frame_glyphs (f); | 5148 | adjust_frame_glyphs (f); |
| 5149 | 5149 | ||
| 5150 | if (!WINDOW_LIVE_P (FRAME_SELECTED_WINDOW (f))) | 5150 | if (!WINDOW_LIVE_P (FRAME_SELECTED_WINDOW (f))) |
| 5151 | /* We deleted the frame's selected window. */ | 5151 | /* We apparently deleted the frame's selected window; use the |
| 5152 | frame's first window as substitute but don't record it yet. | ||
| 5153 | `delete-window' may have something better up its sleeves. */ | ||
| 5152 | { | 5154 | { |
| 5153 | /* Use the frame's first window as fallback ... */ | 5155 | /* Use the frame's first window as fallback ... */ |
| 5154 | Lisp_Object new_selected_window = Fframe_first_window (frame); | 5156 | Lisp_Object new_selected_window = Fframe_first_window (frame); |
| 5155 | /* ... but preferably use its most recently used window. */ | ||
| 5156 | Lisp_Object mru_window; | ||
| 5157 | 5157 | ||
| 5158 | /* `get-mru-window' might fail for some reason so play it safe | ||
| 5159 | - promote the first window _without recording it_ first. */ | ||
| 5160 | if (EQ (FRAME_SELECTED_WINDOW (f), selected_window)) | 5158 | if (EQ (FRAME_SELECTED_WINDOW (f), selected_window)) |
| 5161 | Fselect_window (new_selected_window, Qt); | 5159 | Fselect_window (new_selected_window, Qt); |
| 5162 | else | 5160 | else |
| @@ -5164,24 +5162,9 @@ Signal an error when WINDOW is the only window on its frame. */) | |||
| 5164 | last selected window on F was an active minibuffer, we | 5162 | last selected window on F was an active minibuffer, we |
| 5165 | want to return to it on a later Fselect_frame. */ | 5163 | want to return to it on a later Fselect_frame. */ |
| 5166 | fset_selected_window (f, new_selected_window); | 5164 | fset_selected_window (f, new_selected_window); |
| 5167 | |||
| 5168 | unblock_input (); | ||
| 5169 | |||
| 5170 | /* Now look whether `get-mru-window' gets us something. */ | ||
| 5171 | mru_window = call1 (Qget_mru_window, frame); | ||
| 5172 | if (WINDOW_LIVE_P (mru_window) | ||
| 5173 | && EQ (XWINDOW (mru_window)->frame, frame)) | ||
| 5174 | new_selected_window = mru_window; | ||
| 5175 | |||
| 5176 | /* If all ended up well, we now promote the mru window. */ | ||
| 5177 | if (EQ (FRAME_SELECTED_WINDOW (f), selected_window)) | ||
| 5178 | Fselect_window (new_selected_window, Qnil); | ||
| 5179 | else | ||
| 5180 | fset_selected_window (f, new_selected_window); | ||
| 5181 | } | 5165 | } |
| 5182 | else | ||
| 5183 | unblock_input (); | ||
| 5184 | 5166 | ||
| 5167 | unblock_input (); | ||
| 5185 | FRAME_WINDOW_CHANGE (f) = true; | 5168 | FRAME_WINDOW_CHANGE (f) = true; |
| 5186 | } | 5169 | } |
| 5187 | else | 5170 | else |