aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaroly Lorentey2006-01-02 07:50:53 +0000
committerKaroly Lorentey2006-01-02 07:50:53 +0000
commit160f08170a853b41e974b9645f8dc670c58284ee (patch)
tree90496989905104dfc3887bb6f4252a60b880c418
parent2dfa0facd984e792dd9ac55ff7648d09b4e1855c (diff)
downloademacs-160f08170a853b41e974b9645f8dc670c58284ee.tar.gz
emacs-160f08170a853b41e974b9645f8dc670c58284ee.zip
Make all frames created in an emacsclient session belong to that client.
* lisp/frame.el (make-frame): Also inherit 'client parameter. Don't override explicitly specified values with inherited ones. * server.el (server-delete-client): Delete frames after deleting the tty. Clear 'client parameter before deleting a frame. * server.el (server-handle-delete-frame): Delete the client if this was its last frame. * startup.el (fancy-splash-default-action): Fix typo in comment. git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-484
-rw-r--r--lisp/frame.el11
-rw-r--r--lisp/server.el33
-rw-r--r--lisp/startup.el2
3 files changed, 24 insertions, 22 deletions
diff --git a/lisp/frame.el b/lisp/frame.el
index 818bd9368e1..541d1c364d6 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -681,13 +681,16 @@ setup is for focus to follow the pointer."
681 (run-hooks 'before-make-frame-hook) 681 (run-hooks 'before-make-frame-hook)
682 (setq frame (funcall frame-creation-function (append parameters (cdr (assq w window-system-default-frame-alist))))) 682 (setq frame (funcall frame-creation-function (append parameters (cdr (assq w window-system-default-frame-alist)))))
683 (normal-erase-is-backspace-setup-frame frame) 683 (normal-erase-is-backspace-setup-frame frame)
684 ;; Set up the frame-local environment, if needed. 684 ;; Inherit the 'environment and 'client parameters, if needed.
685 (when (eq (frame-terminal frame) (frame-terminal oldframe)) 685 (when (eq (frame-terminal frame) (frame-terminal oldframe))
686 (let ((env (frame-parameter oldframe 'environment))) 686 (let ((env (frame-parameter oldframe 'environment))
687 (client (frame-parameter oldframe 'client)))
687 (if (not (framep env)) 688 (if (not (framep env))
688 (setq env oldframe)) 689 (setq env oldframe))
689 (if env 690 (if (and env (not (assq 'environment parameters)))
690 (set-frame-parameter frame 'environment env)))) 691 (set-frame-parameter frame 'environment env))
692 (if (and client (not (assq 'client parameters)))
693 (set-frame-parameter frame 'client client))))
691 (run-hook-with-args 'after-make-frame-functions frame) 694 (run-hook-with-args 'after-make-frame-functions frame)
692 frame)) 695 frame))
693 696
diff --git a/lisp/server.el b/lisp/server.el
index a6271c6d00a..40806a1b6c3 100644
--- a/lisp/server.el
+++ b/lisp/server.el
@@ -270,18 +270,21 @@ If NOFRAME is non-nil, let the frames live. (To be used from
270 (server-temp-file-p))) 270 (server-temp-file-p)))
271 (kill-buffer (current-buffer)))))) 271 (kill-buffer (current-buffer))))))
272 272
273 ;; Delete the client's frames.
274 (unless noframe
275 (dolist (frame (frame-list))
276 (when (and (frame-live-p frame)
277 (equal proc (frame-parameter frame 'client)))
278 ;; Prevent `server-handle-delete-frame' from calling us
279 ;; recursively.
280 (set-frame-parameter frame 'client nil)
281 (delete-frame frame))))
282
273 ;; Delete the client's tty. 283 ;; Delete the client's tty.
274 (let ((terminal (server-client-get client 'terminal))) 284 (let ((terminal (server-client-get client 'terminal)))
275 (when (eq (terminal-live-p terminal) t) 285 (when (eq (terminal-live-p terminal) t)
276 (delete-terminal terminal))) 286 (delete-terminal terminal)))
277 287
278 ;; Delete the client's frames.
279 (unless noframe
280 (dolist (frame (frame-list))
281 (if (and (frame-live-p frame)
282 (equal (car client) (frame-parameter frame 'client)))
283 (delete-frame frame))))
284
285 ;; Delete the client's process. 288 ;; Delete the client's process.
286 (if (eq (process-status (car client)) 'open) 289 (if (eq (process-status (car client)) 'open)
287 (delete-process (car client))) 290 (delete-process (car client)))
@@ -318,16 +321,12 @@ message."
318 (let ((proc (frame-parameter frame 'client))) 321 (let ((proc (frame-parameter frame 'client)))
319 (when (and (frame-live-p frame) 322 (when (and (frame-live-p frame)
320 proc 323 proc
321 (or (window-system frame) 324 ;; See if this is the last frame for this client.
322 ;; A terminal device must not yet be deleted if 325 (< 1 (let ((frame-num 0))
323 ;; there are other frames on it. 326 (dolist ((f (frame-list)))
324 (< 0 (let ((frame-num 0)) 327 (when (eq proc (frame-parameter f 'client))
325 (mapc (lambda (f) 328 (setq frame-num (1+ frame-num))))
326 (when (eq (frame-terminal f) 329 frame-num)))
327 (frame-terminal frame))
328 (setq frame-num (1+ frame-num))))
329 (frame-list))
330 frame-num))))
331 (server-log (format "server-handle-delete-frame, frame %s" frame) proc) 330 (server-log (format "server-handle-delete-frame, frame %s" frame) proc)
332 (server-delete-client proc 'noframe)))) ; Let delete-frame delete the frame later. 331 (server-delete-client proc 'noframe)))) ; Let delete-frame delete the frame later.
333 332
diff --git a/lisp/startup.el b/lisp/startup.el
index db65131844c..21e9fce07c1 100644
--- a/lisp/startup.el
+++ b/lisp/startup.el
@@ -1299,7 +1299,7 @@ mouse."
1299 (if (and (memq 'down (event-modifiers last-command-event)) 1299 (if (and (memq 'down (event-modifiers last-command-event))
1300 (eq (posn-window (event-start last-command-event)) 1300 (eq (posn-window (event-start last-command-event))
1301 (selected-window))) 1301 (selected-window)))
1302 ;; This is a mouse-down event in the spash screen window. 1302 ;; This is a mouse-down event in the splash screen window.
1303 ;; Ignore it and consume the corresponding mouse-up event. 1303 ;; Ignore it and consume the corresponding mouse-up event.
1304 (read-event) 1304 (read-event)
1305 (push last-command-event unread-command-events)) 1305 (push last-command-event unread-command-events))