Mercurial > emacs
diff src/frame.c @ 83323:61487e73bbc2
Cleanup: Move kboard fields from struct frame and device-specific descriptors to struct display.
* src/termhooks.h (display): New field: kboard.
* src/xterm.h (x_display_info): Remove kboard field.
* src/termchar.h (tty_display_info): Ditto.
* src/frame.h (frame): Ditto.
(FRAME_KBOARD): Update.
* src/dispnew.c (init_display): Don't initialize kboard.
* src/frame.c (make_frame, make_initial_frame, make_terminal_frame): Ditto.
* src/frame.c (make_frame_without_minibuffer, Fdelete_frame): Update kboard access.
* src/keyboard.c (delete_kboard): Ditto.
* src/term.c (term_init): Ditto.
* src/xfns.c (Fx_create_frame, x_create_tip_frame): Ditto.
* src/xselect.c (x_handle_selection_clear): Ditto.
* src/xterm.c (x_term_init): Ditto.
* src/term.c (init_initial_display): Initialize kboard.
* src/xterm.c (x_term_init): Ditto.
* src/term.c (delete_tty): Remove kboard deletion.
(delete_display): Delete kboard as well.
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-363
author | Karoly Lorentey <lorentey@elte.hu> |
---|---|
date | Mon, 27 Jun 2005 00:56:21 +0000 |
parents | d07fdd5d7d4e |
children | 6c13700d1c13 |
line wrap: on
line diff
--- a/src/frame.c Mon Jun 27 00:39:58 2005 +0000 +++ b/src/frame.c Mon Jun 27 00:56:21 2005 +0000 @@ -303,9 +303,6 @@ f->menu_bar_items_used = 0; f->buffer_predicate = Qnil; f->buffer_list = Qnil; -#ifdef MULTI_KBOARD - f->kboard = initial_kboard; -#endif f->namebuf = 0; f->title = Qnil; f->menu_bar_window = Qnil; @@ -425,7 +422,7 @@ #ifdef MULTI_KBOARD if (!NILP (mini_window) - && XFRAME (XWINDOW (mini_window)->frame)->kboard != kb) + && XFRAME (XWINDOW (mini_window)->frame)->display->kboard != kb) error ("Frame and minibuffer must be on the same display"); #endif @@ -552,10 +549,6 @@ FRAME_CAN_HAVE_SCROLL_BARS (f) = 0; FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none; -#ifdef MULTI_KBOARD - f->kboard = initial_kboard; -#endif - return f; } @@ -622,10 +615,6 @@ FRAME_CAN_HAVE_SCROLL_BARS (f) = 0; FRAME_VERTICAL_SCROLL_BAR_TYPE (f) = vertical_scroll_bar_none; -#ifdef MULTI_KBOARD - f->kboard = FRAME_TTY (f)->kboard; -#endif - /* Set the top frame to the newly created frame. */ if (FRAME_TTY (f)->top_frame && FRAME_LIVE_P (XFRAME (FRAME_TTY (f)->top_frame))) @@ -1358,6 +1347,8 @@ { struct frame *f; struct frame *sf = SELECTED_FRAME (); + struct kboard *kb; + int minibuffer_selected; if (EQ (frame, Qnil)) @@ -1513,23 +1504,25 @@ if (FRAME_DISPLAY (f)->delete_frame_hook) (*FRAME_DISPLAY (f)->delete_frame_hook) (f); - + { struct display *display = FRAME_DISPLAY (f); - f->output_data.nothing = 0; f->display = 0; /* Now the frame is dead. */ /* If needed, delete the device that this frame was on. - (This must be done after the frame is killed.) */ + (This must be done after the frame is killed.) */ display->reference_count--; if (display->reference_count == 0) - { - if (display->delete_display_hook) - (*display->delete_display_hook) (display); - else - delete_display (display); - } + { + kb = NULL; + if (display->delete_display_hook) + (*display->delete_display_hook) (display); + else + delete_display (display); + } + else + kb = display->kboard; } /* If we've deleted the last_nonminibuf_frame, then try to find @@ -1555,38 +1548,39 @@ /* If there's no other frame on the same kboard, get out of single-kboard state if we're in it for this kboard. */ - { - Lisp_Object frames; - /* Some frame we found on the same kboard, or nil if there are none. */ - Lisp_Object frame_on_same_kboard; - - frame_on_same_kboard = Qnil; - - for (frames = Vframe_list; - CONSP (frames); - frames = XCDR (frames)) - { - Lisp_Object this; - struct frame *f1; - - this = XCAR (frames); - if (!FRAMEP (this)) - abort (); - f1 = XFRAME (this); - - if (FRAME_KBOARD (f) == FRAME_KBOARD (f1)) - frame_on_same_kboard = this; - } - - if (NILP (frame_on_same_kboard)) - not_single_kboard_state (FRAME_KBOARD (f)); - } + if (kb != NULL) + { + Lisp_Object frames; + /* Some frame we found on the same kboard, or nil if there are none. */ + Lisp_Object frame_on_same_kboard; + + frame_on_same_kboard = Qnil; + + for (frames = Vframe_list; + CONSP (frames); + frames = XCDR (frames)) + { + Lisp_Object this; + struct frame *f1; + + this = XCAR (frames); + if (!FRAMEP (this)) + abort (); + f1 = XFRAME (this); + + if (kb == FRAME_KBOARD (f1)) + frame_on_same_kboard = this; + } + + if (NILP (frame_on_same_kboard)) + not_single_kboard_state (kb); + } /* If we've deleted this keyboard's default_minibuffer_frame, try to find another one. Prefer minibuffer-only frames, but also notice frames with other windows. */ - if (EQ (frame, FRAME_KBOARD (f)->Vdefault_minibuffer_frame)) + if (kb != NULL && EQ (frame, kb->Vdefault_minibuffer_frame)) { Lisp_Object frames; @@ -1612,7 +1606,7 @@ /* Consider only frames on the same kboard and only those with minibuffers. */ - if (FRAME_KBOARD (f) == FRAME_KBOARD (f1) + if (kb == FRAME_KBOARD (f1) && FRAME_HAS_MINIBUF_P (f1)) { frame_with_minibuf = this; @@ -1620,7 +1614,7 @@ break; } - if (FRAME_KBOARD (f) == FRAME_KBOARD (f1)) + if (kb == FRAME_KBOARD (f1)) frame_on_same_kboard = this; } @@ -1635,11 +1629,11 @@ if (NILP (frame_with_minibuf)) abort (); - FRAME_KBOARD (f)->Vdefault_minibuffer_frame = frame_with_minibuf; + kb->Vdefault_minibuffer_frame = frame_with_minibuf; } else /* No frames left on this kboard--say no minibuffer either. */ - FRAME_KBOARD (f)->Vdefault_minibuffer_frame = Qnil; + kb->Vdefault_minibuffer_frame = Qnil; } /* Cause frame titles to update--necessary if we now have just one frame. */