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.  */