gnus-win.el (gnus-configure-frame): Spelling fix
[gnus] / lisp / gnus-win.el
index c38f57d..efe2a31 100644 (file)
@@ -1,6 +1,6 @@
 ;;; gnus-win.el --- window configuration functions for Gnus
 
-;; Copyright (C) 1996-2011 Free Software Foundation, Inc.
+;; Copyright (C) 1996-2012 Free Software Foundation, Inc.
 
 ;; Author: Lars Magne Ingebrigtsen <larsi@gnus.org>
 ;; Keywords: news
@@ -54,7 +54,7 @@
   :type 'boolean)
 
 (defcustom gnus-use-frames-on-any-display nil
-  "*If non-nil, frames on all displays will be considered useable by Gnus.
+  "*If non-nil, frames on all displays will be considered usable by Gnus.
 When nil, only frames on the same display as the selected frame will be
 used to display Gnus windows."
   :version "22.1"
@@ -239,10 +239,11 @@ See the Gnus manual for an explanation of the syntax used.")
 
 (defun gnus-configure-frame (split &optional window)
   "Split WINDOW according to SPLIT."
-  (let* ((current-window (or (get-buffer-window (current-buffer)) (selected-window)))
+  (let* ((current-window (or (get-buffer-window (current-buffer))
+                             (selected-window)))
          (window (or window current-window)))
     (select-window window)
-    ;; The SPLIT might be something that is to be evaled to
+    ;; The SPLIT might be something that is to be evalled to
     ;; return a new SPLIT.
     (while (and (not (assq (car split) gnus-window-to-buffer))
                (symbolp (car split)) (fboundp (car split)))
@@ -269,9 +270,21 @@ See the Gnus manual for an explanation of the syntax used.")
          (let ((buf (gnus-get-buffer-create
                      (gnus-window-to-buffer-helper buffer))))
            (when (buffer-name buf)
-             (if (eq buf (window-buffer (selected-window)))
-                 (set-buffer buf)
-               (switch-to-buffer buf))))
+             (cond
+               ((eq buf (window-buffer (selected-window)))
+                (set-buffer buf))
+               ((eq t (window-dedicated-p))
+                ;; If the window is hard-dedicated, we have a problem because
+                ;; we just can't do what we're asked.  But signaling an error,
+                ;; like `switch-to-buffer' would do, is not an option because
+                ;; it would prevent things like "^" (to jump to the *Servers*)
+                ;; in a dedicated *Group*.
+                ;; FIXME: Maybe a better/additional fix would be to change
+                ;; gnus-configure-windows so that when called
+                ;; from a hard-dedicated frame, it creates (and
+                ;; configures) a new frame, leaving the dedicated frame alone.
+                (pop-to-buffer buf))
+               (t (switch-to-buffer buf)))))
          (when (memq 'frame-focus split)
            (setq gnus-window-frame-focus window))
          ;; We return the window if it has the `point' spec.
@@ -340,9 +353,9 @@ See the Gnus manual for an explanation of the syntax used.")
          ;; fashion.
          (setq comp-subs (nreverse comp-subs))
          (while comp-subs
-           (if (null (cdr comp-subs))
-               (setq new-win window)
-             (setq new-win
+           (setq new-win
+                  (if (null (cdr comp-subs))
+                      window
                    (split-window window (cadar comp-subs)
                                  (eq type 'horizontal))))
            (setq result (or (gnus-configure-frame
@@ -358,8 +371,13 @@ See the Gnus manual for an explanation of the syntax used.")
 (defvar gnus-frame-split-p nil)
 
 (defun gnus-configure-windows (setting &optional force)
-  (if (window-configuration-p setting)
-      (set-window-configuration setting)
+  (cond
+   ((null setting)
+    ;; Do nothing.
+    )
+   ((window-configuration-p setting)
+    (set-window-configuration setting))
+   (t
     (setq gnus-current-window-configuration setting)
     (setq force (or force gnus-always-force-window-configuration))
     (let ((split (if (symbolp setting)
@@ -410,7 +428,7 @@ See the Gnus manual for an explanation of the syntax used.")
           (run-hooks 'gnus-configure-windows-hook)
           (when gnus-window-frame-focus
             (gnus-select-frame-set-input-focus
-             (window-frame gnus-window-frame-focus))))))))
+             (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."
@@ -442,7 +460,7 @@ should have point."
       (when (consp (car split))
        (push 1.0 split)
        (push 'vertical split))
-      ;; The SPLIT might be something that is to be evaled to
+      ;; The SPLIT might be something that is to be evalled to
       ;; return a new SPLIT.
       (while (and (not (assq (car split) gnus-window-to-buffer))
                  (symbolp (car split)) (fboundp (car split)))
@@ -459,6 +477,7 @@ should have point."
        (unless buffer
          (error "Invalid buffer type: %s" type))
        (if (and (setq buf (get-buffer (gnus-window-to-buffer-helper buffer)))
+                (buffer-live-p buf)
                 (setq win (gnus-get-buffer-window buf t)))
            (if (memq 'point split)
                (setq all-visible win))