diff options
| author | Gerd Moellmann | 1999-09-13 11:13:47 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 1999-09-13 11:13:47 +0000 |
| commit | a4aafc540436ff8da27547f6704e307fc23500f9 (patch) | |
| tree | 122a6d051267f2f39b504bfbb9bfca97dcab93e1 /src | |
| parent | 37b793e65b6becc17db69b3d95dfd9c5c88686cc (diff) | |
| download | emacs-a4aafc540436ff8da27547f6704e307fc23500f9.tar.gz emacs-a4aafc540436ff8da27547f6704e307fc23500f9.zip | |
(choose_minibuf_frame): Don't try to set the
mini-buffer window's buffer, if the buffer is invalid.
(choose_minibuf_frame): Change for Lisp_Object
selected_frame.
(read_minibuf): Ditto.
Diffstat (limited to 'src')
| -rw-r--r-- | src/minibuf.c | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/src/minibuf.c b/src/minibuf.c index 99b16c19420..8df58b42206 100644 --- a/src/minibuf.c +++ b/src/minibuf.c | |||
| @@ -138,17 +138,25 @@ extern Lisp_Object Qmouse_face; | |||
| 138 | void | 138 | void |
| 139 | choose_minibuf_frame () | 139 | choose_minibuf_frame () |
| 140 | { | 140 | { |
| 141 | if (selected_frame != 0 | 141 | if (FRAMEP (selected_frame) |
| 142 | && !EQ (minibuf_window, selected_frame->minibuffer_window)) | 142 | && FRAME_LIVE_P (XFRAME (selected_frame)) |
| 143 | && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window)) | ||
| 143 | { | 144 | { |
| 145 | struct frame *sf = XFRAME (selected_frame); | ||
| 146 | Lisp_Object buffer; | ||
| 147 | |||
| 144 | /* I don't think that any frames may validly have a null minibuffer | 148 | /* I don't think that any frames may validly have a null minibuffer |
| 145 | window anymore. */ | 149 | window anymore. */ |
| 146 | if (NILP (selected_frame->minibuffer_window)) | 150 | if (NILP (sf->minibuffer_window)) |
| 147 | abort (); | 151 | abort (); |
| 148 | 152 | ||
| 149 | Fset_window_buffer (selected_frame->minibuffer_window, | 153 | /* Under X, we come here with minibuf_window being the |
| 150 | XWINDOW (minibuf_window)->buffer); | 154 | minibuffer window of the unused termcap window created in |
| 151 | minibuf_window = selected_frame->minibuffer_window; | 155 | init_window_once. That window doesn't have a buffer. */ |
| 156 | buffer = XWINDOW (minibuf_window)->buffer; | ||
| 157 | if (BUFFERP (buffer)) | ||
| 158 | Fset_window_buffer (sf->minibuffer_window, buffer); | ||
| 159 | minibuf_window = sf->minibuffer_window; | ||
| 152 | } | 160 | } |
| 153 | 161 | ||
| 154 | /* Make sure no other frame has a minibuffer as its selected window, | 162 | /* Make sure no other frame has a minibuffer as its selected window, |
| @@ -160,7 +168,7 @@ choose_minibuf_frame () | |||
| 160 | 168 | ||
| 161 | FOR_EACH_FRAME (tail, frame) | 169 | FOR_EACH_FRAME (tail, frame) |
| 162 | if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame)))) | 170 | if (MINI_WINDOW_P (XWINDOW (FRAME_SELECTED_WINDOW (XFRAME (frame)))) |
| 163 | && !(XFRAME (frame) == selected_frame | 171 | && !(EQ (frame, selected_frame) |
| 164 | && minibuf_level > 0)) | 172 | && minibuf_level > 0)) |
| 165 | Fset_frame_selected_window (frame, Fframe_first_window (frame)); | 173 | Fset_frame_selected_window (frame, Fframe_first_window (frame)); |
| 166 | } | 174 | } |
| @@ -283,7 +291,7 @@ read_minibuf (map, initial, prompt, backup_n, expflag, | |||
| 283 | /* If the minibuffer window is on a different frame, save that | 291 | /* If the minibuffer window is on a different frame, save that |
| 284 | frame's configuration too. */ | 292 | frame's configuration too. */ |
| 285 | mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window)); | 293 | mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window)); |
| 286 | if (XFRAME (mini_frame) != selected_frame) | 294 | if (!EQ (mini_frame, selected_frame)) |
| 287 | record_unwind_protect (Fset_window_configuration, | 295 | record_unwind_protect (Fset_window_configuration, |
| 288 | Fcurrent_window_configuration (mini_frame)); | 296 | Fcurrent_window_configuration (mini_frame)); |
| 289 | 297 | ||
| @@ -368,8 +376,8 @@ read_minibuf (map, initial, prompt, backup_n, expflag, | |||
| 368 | } | 376 | } |
| 369 | } | 377 | } |
| 370 | 378 | ||
| 371 | if (XFRAME (mini_frame) != selected_frame) | 379 | if (!EQ (mini_frame, selected_frame)) |
| 372 | Fredirect_frame_focus (Fselected_frame (), mini_frame); | 380 | Fredirect_frame_focus (selected_frame, mini_frame); |
| 373 | 381 | ||
| 374 | Vminibuf_scroll_window = selected_window; | 382 | Vminibuf_scroll_window = selected_window; |
| 375 | Fset_window_buffer (minibuf_window, Fcurrent_buffer ()); | 383 | Fset_window_buffer (minibuf_window, Fcurrent_buffer ()); |
| @@ -443,7 +451,7 @@ read_minibuf (map, initial, prompt, backup_n, expflag, | |||
| 443 | XWINDOW (minibuf_window)->cursor.hpos = 0; | 451 | XWINDOW (minibuf_window)->cursor.hpos = 0; |
| 444 | XWINDOW (minibuf_window)->cursor.x = 0; | 452 | XWINDOW (minibuf_window)->cursor.x = 0; |
| 445 | XWINDOW (minibuf_window)->must_be_updated_p = 1; | 453 | XWINDOW (minibuf_window)->must_be_updated_p = 1; |
| 446 | update_frame (selected_frame, 1, 1); | 454 | update_frame (XFRAME (selected_frame), 1, 1); |
| 447 | if (rif && rif->flush_display) | 455 | if (rif && rif->flush_display) |
| 448 | rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame)); | 456 | rif->flush_display (XFRAME (XWINDOW (minibuf_window)->frame)); |
| 449 | } | 457 | } |