Sync up with Gnus 5.6.24.
[elisp/gnus.git-] / lisp / gnus-win.el
index 6c29c5b..803d2ea 100644 (file)
@@ -1,7 +1,7 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
 ;; Copyright (C) 1996,97,98 Free Software Foundation, Inc.
 
-;; Author: Lars Magne Ingebrigtsen <larsi@ifi.uio.no>
+;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
 
 ;; This file is part of GNU Emacs.
      (vertical 1.0
               (summary 0.5 point)
               ("*Score Words*" 1.0)))
+    (split-trace
+     (vertical 1.0
+              (summary 0.5 point)
+              ("*Split Trace*" 1.0)))
     (category
      (vertical 1.0
               (category 1.0)))
@@ -185,6 +189,7 @@ See the Gnus manual for an explanation of the syntax used.")
     (picons . gnus-picons-buffer-name)
     (tree . gnus-tree-buffer)
     (score-trace . "*Score Trace*")
+    (split-trace . "*Split Trace*")
     (info . gnus-info-buffer)
     (category . gnus-category-buffer)
     (article-copy . gnus-article-copy)
@@ -197,6 +202,7 @@ See the Gnus manual for an explanation of the syntax used.")
   "The most recently set window configuration.")
 
 (defvar gnus-created-frames nil)
+(defvar gnus-window-frame-focus nil)
 
 (defun gnus-kill-gnus-frames ()
   "Kill all frames Gnus has created."
@@ -268,11 +274,14 @@ See the Gnus manual for an explanation of the syntax used.")
 (defvar gnus-frame-list nil)
 
 (defun gnus-window-to-buffer-helper (obj)
-  (if (symbolp obj)
-      (if (boundp obj)
-         (symbol-value obj)
-       (funcall obj))
-    obj))
+  (cond ((not (symbolp obj))
+        obj)
+       ((boundp obj)
+        (symbol-value obj))
+       ((fboundp obj)
+        (funcall obj))
+       (t
+        nil)))
 
 (defun gnus-configure-frame (split &optional window)
   "Split WINDOW according to SPLIT."
@@ -312,6 +321,8 @@ See the Gnus manual for an explanation of the syntax used.")
          (error "Illegal buffer type: %s" type))
        (switch-to-buffer (get-buffer-create
                           (gnus-window-to-buffer-helper buffer)))
+       (when (memq 'frame-focus split)
+         (setq gnus-window-frame-focus window))
        ;; We return the window if it has the `point' spec.
        (and (memq 'point split) window)))
      ;; This is a frame split.
@@ -435,14 +446,19 @@ See the Gnus manual for an explanation of the syntax used.")
          (select-frame frame)))
 
       (switch-to-buffer nntp-server-buffer)
-      (gnus-configure-frame split (get-buffer-window (current-buffer))))))
+      (let (gnus-window-frame-focus)
+       (gnus-configure-frame split (get-buffer-window (current-buffer)))
+       (when gnus-window-frame-focus
+         (select-frame (window-frame gnus-window-frame-focus)))))))
 
 (defun gnus-delete-windows-in-gnusey-frames ()
   "Do a `delete-other-windows' in all frames that have Gnus windows."
   (let ((buffers
         (mapcar
          (lambda (elem)
-           (get-buffer (gnus-window-to-buffer-helper (cdr elem))))
+           (let ((buf (gnus-window-to-buffer-helper (cdr elem))))
+             (if (not (null buf))
+                 (get-buffer buf))))
          gnus-window-to-buffer)))
     (mapcar
      (lambda (frame)