emacs-diffs
[Top][All Lists]
Advanced

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

master 1b83e58adb 1/2: * lisp/frame.el: Don't require 'frameset.el' (bug


From: Juri Linkov
Subject: master 1b83e58adb 1/2: * lisp/frame.el: Don't require 'frameset.el' (bug#51883).
Date: Sun, 30 Jan 2022 11:41:08 -0500 (EST)

branch: master
commit 1b83e58adb46c2ab89320ffba868eb2025138b51
Author: Juri Linkov <juri@linkov.net>
Commit: Juri Linkov <juri@linkov.net>

    * lisp/frame.el: Don't require 'frameset.el' (bug#51883).
    
    (clone-frame): Use frame-internal-parameters.
    (undelete-frame--handle-delete-frame): Instead of using frameset-save,
    save frame-parameters except frame-internal-parameters and 'display'
    on non-graphic display.  Also save window-state from window-state-get.
    (undelete-frame): Instead of using frameset-restore,
    set default-frame-alist for make-frame (like in clone-frame),
    and restore window-state with window-state-put.
    
    * lisp/frameset.el (frameset-session-filter-alist): Append
    parameters from frame-internal-parameters with the filter :never.
    Remove :name that is now in frame-internal-parameters.
    (frameset-persistent-filter-alist): Remove outer-window-id,
    parent-id, window-id that are now in frame-internal-parameters,
    included here via frameset-session-filter-alist.
    
    * src/frame.c (frame-internal-parameters): New variable.
---
 lisp/frame.el    | 49 +++++++++++++++++++++++--------------------------
 lisp/frameset.el | 12 +++++-------
 src/frame.c      |  8 ++++++++
 3 files changed, 36 insertions(+), 33 deletions(-)

diff --git a/lisp/frame.el b/lisp/frame.el
index 13f82ea4c7..56295a56e3 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -799,7 +799,7 @@ also select the new frame."
                     (window-state-get (frame-root-window frame))))
          (default-frame-alist
           (seq-remove (lambda (elem)
-                        (memq (car elem) '(name parent-id)))
+                        (memq (car elem) frame-internal-parameters))
                       (frame-parameters frame)))
          (new-frame (make-frame)))
     (when windows
@@ -2530,8 +2530,6 @@ deleting them."
         (if iconify (iconify-frame this) (delete-frame this)))
       (setq this next))))
 
-(eval-when-compile (require 'frameset))
-
 (defvar undelete-frame--deleted-frames nil
   "Internal variable used by `undelete-frame--handle-delete-frame'.")
 
@@ -2541,20 +2539,20 @@ Only the 16 most recently deleted frames are saved."
   (when (frame-live-p frame)
     (setq undelete-frame--deleted-frames
           (cons
-           (cons
+           (list
             (display-graphic-p)
-            (frameset-save
-             (list frame)
-             ;; When the daemon is started from a graphical
-             ;; environment, TTY frames have a 'display' parameter set
-             ;; to the value of $DISPLAY (see the note in
-             ;; `server--on-display-p').  Do not store that parameter
-             ;; in the frameset, otherwise `frameset-restore' attempts
-             ;; to restore a graphical frame.
-             :filters (if (display-graphic-p)
-                          frameset-filter-alist
-                        (cons '(display . :never)
-                              frameset-filter-alist))))
+            (seq-remove
+             (lambda (elem)
+               (or (memq (car elem) frame-internal-parameters)
+                   ;; When the daemon is started from a graphical
+                   ;; environment, TTY frames have a 'display' parameter set
+                   ;; to the value of $DISPLAY (see the note in
+                   ;; `server--on-display-p').  Do not store that parameter
+                   ;; in the frame data, otherwise `undelete-frame' attempts
+                   ;; to restore a graphical frame.
+                   (and (eq (car elem) 'display) (not (display-graphic-p)))))
+             (frame-parameters frame))
+            (window-state-get (frame-root-window frame)))
            undelete-frame--deleted-frames))
     (if (> (length undelete-frame--deleted-frames) 16)
         (setq undelete-frame--deleted-frames
@@ -2584,26 +2582,25 @@ When called from Lisp, returns the new frame."
     (if (consp arg)
         (user-error "Missing deleted frame number argument")
       (let* ((number (pcase arg ('nil 1) ('- -1) (_ arg)))
-             (frames (frame-list))
-             (frameset (nth (1- number) undelete-frame--deleted-frames))
+             (frame-data (nth (1- number) undelete-frame--deleted-frames))
              (graphic (display-graphic-p)))
         (if (not (<= 1 number 16))
             (user-error "%d is not a valid deleted frame number argument"
                         number)
-          (if (not frameset)
+          (if (not frame-data)
               (user-error "No deleted frame with number %d" number)
-            (if (not (eq graphic (car frameset)))
+            (if (not (eq graphic (nth 0 frame-data)))
                 (user-error
                  "Cannot undelete a %s display frame on a %s display"
                  (if graphic "non-graphic" "graphic")
                  (if graphic "graphic" "non-graphic"))
               (setq undelete-frame--deleted-frames
-                    (delq frameset undelete-frame--deleted-frames))
-              (frameset-restore (cdr frameset))
-              (let ((frame (car (seq-difference (frame-list) frames))))
-                (when frame
-                  (select-frame-set-input-focus frame)
-                  frame)))))))))
+                    (delq frame-data undelete-frame--deleted-frames))
+              (let* ((default-frame-alist (nth 1 frame-data))
+                     (frame (make-frame)))
+                (window-state-put (nth 2 frame-data) (frame-root-window frame) 
'safe)
+                (select-frame-set-input-focus frame)
+                frame))))))))
 
 ;;; Window dividers.
 (defgroup window-divider nil
diff --git a/lisp/frameset.el b/lisp/frameset.el
index 10714af1fa..05884eed3a 100644
--- a/lisp/frameset.el
+++ b/lisp/frameset.el
@@ -436,10 +436,11 @@ Properties can be set with
 
 ;;;###autoload
 (defvar frameset-session-filter-alist
-  '((name            . :never)
-    (left            . frameset-filter-iconified)
-    (minibuffer      . frameset-filter-minibuffer)
-    (top             . frameset-filter-iconified))
+  (append
+   '((left            . frameset-filter-iconified)
+     (minibuffer      . frameset-filter-minibuffer)
+     (top             . frameset-filter-iconified))
+   (mapcar (lambda (p) (cons p :never)) frame-internal-parameters))
   "Minimum set of parameters to filter for live (on-session) framesets.
 DO NOT MODIFY.  See `frameset-filter-alist' for a full description.")
 
@@ -468,14 +469,11 @@ DO NOT MODIFY.  See `frameset-filter-alist' for a full 
description.")
      (GUI:height                  . frameset-filter-unshelve-param)
      (GUI:width                   . frameset-filter-unshelve-param)
      (height                      . frameset-filter-shelve-param)
-     (outer-window-id             . :never)
      (parent-frame                . :never)
-     (parent-id                   . :never)
      (mouse-wheel-frame           . :never)
      (tty                         . frameset-filter-tty-to-GUI)
      (tty-type                    . frameset-filter-tty-to-GUI)
      (width                       . frameset-filter-shelve-param)
-     (window-id                   . :never)
      (window-system               . :never))
    frameset-session-filter-alist)
   "Parameters to filter for persistent framesets.
diff --git a/src/frame.c b/src/frame.c
index c331cff32b..f94dff0a60 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -6524,6 +6524,14 @@ making the child frame unresponsive to user actions, the 
default is to
 iconify the top level frame instead.  */);
   iconify_child_frame = Qiconify_top_level;
 
+  DEFVAR_LISP ("frame-internal-parameters", frame_internal_parameters,
+              doc: /* Frame parameters specific to every frame.  */);
+#ifdef HAVE_X_WINDOWS
+  frame_internal_parameters = list4 (Qname, Qparent_id, Qwindow_id, 
Qouter_window_id);
+#else
+  frame_internal_parameters = list3 (Qname, Qparent_id, Qwindow_id);
+#endif
+
   defsubr (&Sframep);
   defsubr (&Sframe_live_p);
   defsubr (&Swindow_system);



reply via email to

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