emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] trunk r113242: lisp/desktop.el: More fixes to frame restor


From: Juanma Barranquero
Subject: [Emacs-diffs] trunk r113242: lisp/desktop.el: More fixes to frame restoration.
Date: Mon, 01 Jul 2013 03:29:55 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 113242
revision-id: address@hidden
parent: address@hidden
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Mon 2013-07-01 05:29:46 +0200
message:
  lisp/desktop.el: More fixes to frame restoration.
  (desktop-restore-frames): Rename from desktop-save-windows.
  (desktop-restore-in-current-display): New customization option.
  (desktop--excluded-frame-parameters): Add `font'.
  (desktop--save-frames): Rename from desktop--save-windows.
  (desktop--restore-in-this-display-p): New function.
  (desktop--make-full-frame): Remove unwanted width/height from
  full(width|height) frames.
  (desktop--restore-frames): Rename from desktop--restore-windows.
  Obey desktop-restore-current-display.  Do not delete old frames or
  select a new frame unless we were able to restore at least one frame.
modified:
  etc/NEWS                       news-20100311060928-aoit31wvzf25yr1z-1
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/desktop.el                desktop.el-20091113204419-o5vbwnq5f7feedwu-591
=== modified file 'etc/NEWS'
--- a/etc/NEWS  2013-06-30 22:29:23 +0000
+++ b/etc/NEWS  2013-07-01 03:29:46 +0000
@@ -252,7 +252,7 @@
 *** `desktop-auto-save-timeout' defines the number of seconds between
 auto-saves of the desktop.
 
-*** `desktop-save-windows' enables saving and restoring the window/frame
+*** `desktop-restore-frames enables saving and restoring the window/frame
 configuration.
 
 ** Dired

=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2013-07-01 00:19:15 +0000
+++ b/lisp/ChangeLog    2013-07-01 03:29:46 +0000
@@ -1,3 +1,16 @@
+2013-07-01  Juanma Barranquero  <address@hidden>
+
+       * desktop.el (desktop-restore-frames): Rename from desktop-save-windows.
+       (desktop-restore-in-current-display): New customization option.
+       (desktop--excluded-frame-parameters): Add `font'.
+       (desktop--save-frames): Rename from desktop--save-windows.
+       (desktop--restore-in-this-display-p): New function.
+       (desktop--make-full-frame): Remove unwanted width/height from
+       full(width|height) frames.
+       (desktop--restore-frames): Rename from desktop--restore-windows.
+       Obey desktop-restore-current-display.  Do not delete old frames or
+       select a new frame unless we were able to restore at least one frame.
+
 2013-06-30  Michal Nazarewicz  <address@hidden>
 
        * files.el (find-file-noselect): Simplify conditional expression.

=== modified file 'lisp/desktop.el'
--- a/lisp/desktop.el   2013-06-30 05:08:23 +0000
+++ b/lisp/desktop.el   2013-07-01 03:29:46 +0000
@@ -371,12 +371,19 @@
   :type '(repeat symbol)
   :group 'desktop)
 
-(defcustom desktop-save-windows nil
+(defcustom desktop-restore-frames nil
   "When non-nil, save window/frame configuration to desktop file."
   :type 'boolean
   :group 'desktop
   :version "24.4")
 
+(defcustom desktop-restore-in-current-display nil
+  "When non-nil, frames are restored in the current display.
+Otherwise they are restored, if possible, in their original displays."
+  :type 'boolean
+  :group 'desktop
+  :version "24.4")
+
 (defcustom desktop-file-name-format 'absolute
   "Format in which desktop file names should be saved.
 Possible values are:
@@ -872,6 +879,7 @@
     buffer-predicate
     buried-buffer-list
     explicit-name
+    font
     font-backend
     minibuffer
     name
@@ -891,12 +899,12 @@
        (push param params)))
     params))
 
-(defun desktop--save-windows ()
+(defun desktop--save-frames ()
   "Save window/frame state, as a global variable.
 Intended to be called from `desktop-save'.
 Internal use only."
   (setq desktop--saved-states
-       (and desktop-save-windows
+       (and desktop-restore-frames
             (mapcar (lambda (frame)
                       (cons (desktop--filter-frame-parms frame)
                             (window-state-get (frame-root-window frame) t)))
@@ -944,7 +952,7 @@
          (insert "\n;; Global section:\n")
          ;; Called here because we save the window/frame state as a global
          ;; variable for compatibility with previous Emacsen.
-         (desktop--save-windows)
+         (desktop--save-frames)
          (mapc (function desktop-outvar) desktop-globals-to-save)
          (when (memq 'kill-ring desktop-globals-to-save)
            (insert
@@ -1003,6 +1011,10 @@
 (defvar desktop-lazy-timer nil)
 
 ;; ----------------------------------------------------------------------------
+(defun desktop--restore-in-this-display-p ()
+  (or desktop-restore-in-current-display
+      (and (eq system-type 'windows-nt) (not (display-graphic-p)))))
+
 (defun desktop--find-frame-in-display (frames display)
   (let (result)
     (while (and frames (not result))
@@ -1017,47 +1029,53 @@
        (params '((visibility)))
        frame)
     (when width
-      (setq params (append `((user-size . t) (width . ,width)) params)))
+      (setq params (append `((user-size . t) (width . ,width)) params)
+            config (assq-delete-all 'height config)))
     (when height
-      (setq params (append `((user-size . t) (height . ,height)) params)))
+      (setq params (append `((user-size . t) (height . ,height)) params)
+            config (assq-delete-all 'width config)))
     (setq frame (make-frame-on-display display params))
     (modify-frame-parameters frame config)
     frame))
 
-(defun desktop--restore-windows ()
+(defun desktop--restore-frames ()
   "Restore window/frame configuration.
 Internal use only."
-  (when (and desktop-save-windows desktop--saved-states)
+  (when (and desktop-restore-frames desktop--saved-states)
     (let ((frames (frame-list))
+         (current (frame-parameter nil 'display))
          (selected nil))
       (dolist (state desktop--saved-states)
        (condition-case err
-           (let* ((fconfig (car state))
-                  (display (cdr (assq 'display fconfig)))
-                  (full (cdr (assq 'fullscreen fconfig)))
+           (let* ((config (car state))
+                  (display (if (desktop--restore-in-this-display-p)
+                               (setcdr (assq 'display config) current)
+                             (cdr (assq 'display config))))
+                  (full (cdr (assq 'fullscreen config)))
                   (frame (and (not full)
                               (desktop--find-frame-in-display frames 
display))))
              (cond (full
                     ;; treat fullscreen/maximized frames specially
-                    (setq frame (desktop--make-full-frame full display 
fconfig)))
+                    (setq frame (desktop--make-full-frame full display 
config)))
                    (frame
                     ;; found a frame in the right display -- reuse
                     (setq frames (delq frame frames))
-                    (modify-frame-parameters frame fconfig))
+                    (modify-frame-parameters frame config))
                    (t
                     ;; no frames in the display -- make a new one
-                    (setq frame (make-frame-on-display display fconfig))))
+                    (setq frame (make-frame-on-display display config))))
              ;; restore windows
              (window-state-put (cdr state) (frame-root-window frame) 'safe)
              (unless selected (setq selected frame)))
          (error
           (message "Error restoring frame: %S" (error-message-string err)))))
-      ;; make sure the original selected frame is visible and selected
-      (unless (or (frame-parameter selected 'visibility) (daemonp))
-       (modify-frame-parameters selected '((visibility . t))))
-      (select-frame-set-input-focus selected)
-      ;; delete any remaining frames
-      (mapc #'delete-frame frames))))
+      (when selected
+       ;; make sure the original selected frame is visible and selected
+       (unless (or (frame-parameter selected 'visibility) (daemonp))
+         (modify-frame-parameters selected '((visibility . t))))
+       (select-frame-set-input-focus selected)
+       ;; delete any remaining frames
+       (mapc #'delete-frame frames)))))
 
 ;;;###autoload
 (defun desktop-read (&optional dirname)
@@ -1127,7 +1145,7 @@
            (switch-to-buffer (car (buffer-list)))
            (run-hooks 'desktop-delay-hook)
            (setq desktop-delay-hook nil)
-           (desktop--restore-windows)
+           (desktop--restore-frames)
            (run-hooks 'desktop-after-read-hook)
            (message "Desktop: %d buffer%s restored%s%s."
                     desktop-buffer-ok-count


reply via email to

[Prev in Thread] Current Thread [Next in Thread]