diff options
| author | Karoly Lorentey | 2006-01-02 07:50:53 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-01-02 07:50:53 +0000 |
| commit | 160f08170a853b41e974b9645f8dc670c58284ee (patch) | |
| tree | 90496989905104dfc3887bb6f4252a60b880c418 | |
| parent | 2dfa0facd984e792dd9ac55ff7648d09b4e1855c (diff) | |
| download | emacs-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.el | 11 | ||||
| -rw-r--r-- | lisp/server.el | 33 | ||||
| -rw-r--r-- | lisp/startup.el | 2 |
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)) |