* 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.
This commit is contained in:
parent
46611aa468
commit
1b83e58adb
3 changed files with 36 additions and 33 deletions
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue