emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] trunk r116484: lisp/frameset.el (frameset-restore): Remove


From: Juanma Barranquero
Subject: [Emacs-diffs] trunk r116484: lisp/frameset.el (frameset-restore): Remove duplicate ids only when needed.
Date: Wed, 19 Feb 2014 21:04:16 +0000
User-agent: Bazaar (2.6b2)

------------------------------------------------------------
revno: 116484
revision-id: address@hidden
parent: address@hidden
committer: Juanma Barranquero <address@hidden>
branch nick: trunk
timestamp: Wed 2014-02-19 22:04:06 +0100
message:
  lisp/frameset.el (frameset-restore): Remove duplicate ids only when needed.
modified:
  lisp/ChangeLog                 changelog-20091113204419-o5vbwnq5f7feedwu-1432
  lisp/frameset.el               frameset.el-20130802043218-tfwraxv1c2zlibpw-1
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2014-02-19 19:24:32 +0000
+++ b/lisp/ChangeLog    2014-02-19 21:04:06 +0000
@@ -1,3 +1,8 @@
+2014-02-19  Juanma Barranquero  <address@hidden>
+
+       * frameset.el (frameset-restore): Delay removing an old frame's
+       duplicate id until the new frame has been correctly created.
+
 2014-02-19  Michael Albinus  <address@hidden>
 
        * net/tramp.el (tramp-handle-make-symbolic-link): New defun.

=== modified file 'lisp/frameset.el'
--- a/lisp/frameset.el  2014-02-19 11:01:35 +0000
+++ b/lisp/frameset.el  2014-02-19 21:04:06 +0000
@@ -1116,7 +1116,7 @@
                     (force-display (if (functionp force-display)
                                        (funcall force-display frame-cfg 
window-cfg)
                                      force-display))
-                    frame to-tty)
+                    frame to-tty duplicate)
                ;; Only set target if forcing displays and the target display 
is different.
                (cond ((frameset-keep-original-display-p force-display)
                       (setq frameset--target-display nil))
@@ -1134,16 +1134,14 @@
                             (or (eq force-display :delete)
                                 (and to-tty
                                      (eq (cdr (assq 'minibuffer frame-cfg)) 
'only))))
-                 ;; If keeping non-reusable frames, and the frameset--id of 
one of them
-                 ;; matches the id of a frame being restored (because, for 
example, the
-                 ;; frameset has already been read in the same session), 
remove the
-                 ;; frameset--id from the non-reusable frame, which is not 
useful anymore.
-                 (when (and other-frames
-                            (or (eq reuse-frames :keep) (consp reuse-frames)))
-                   (let ((dup (frameset-frame-with-id (frameset-cfg-id 
frame-cfg)
-                                                      other-frames)))
-                     (when dup
-                       (set-frame-parameter dup 'frameset--id nil))))
+                 ;; To avoid duplicating frame ids after restoration, we note 
any
+                 ;; existing frame whose id matches a frame configuration in 
the
+                 ;; frameset.  Once the frame config is properly restored, we 
can
+                 ;; reset the old frame's id to nil.
+                 (setq duplicate (and other-frames
+                                      (or (eq reuse-frames :keep) (consp 
reuse-frames))
+                                      (frameset-frame-with-id (frameset-cfg-id 
frame-cfg)
+                                                              other-frames)))
                  ;; Restore minibuffers.  Some of this stuff could be done in 
a filter
                  ;; function, but it would be messy because restoring 
minibuffers affects
                  ;; global state; it's best to do it here than add a bunch of 
global
@@ -1177,6 +1175,9 @@
                  (setq frame (frameset--restore-frame frame-cfg window-cfg
                                                       (or filters 
frameset-filter-alist)
                                                       force-onscreen))
+                 ;; Now reset any duplicate frameset--id
+                 (when (and duplicate (not (eq frame duplicate)))
+                   (set-frame-parameter duplicate 'frameset--id nil))
                  ;; Set default-minibuffer if required.
                  (when default (setq default-minibuffer-frame frame))))
            (error


reply via email to

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