diff options
Diffstat (limited to 'lisp/server.el')
| -rw-r--r-- | lisp/server.el | 63 | 
1 files changed, 34 insertions, 29 deletions
| diff --git a/lisp/server.el b/lisp/server.el index d45c7c28482..32cecd508b5 100644 --- a/lisp/server.el +++ b/lisp/server.el @@ -826,35 +826,40 @@ This handles splitting the command if it would be bigger than  (defun server-create-window-system-frame (display nowait proc parent-id  						  &optional parameters) -  (add-to-list 'frame-inherited-parameters 'client) -  (if (not (fboundp 'make-frame-on-display)) -      (progn -        ;; This emacs does not support X. -        (server-log "Window system unsupported" proc) -        (server-send-string proc "-window-system-unsupported \n") -        nil) -    ;; Flag frame as client-created, but use a dummy client. -    ;; This will prevent the frame from being deleted when -    ;; emacsclient quits while also preventing -    ;; `server-save-buffers-kill-terminal' from unexpectedly -    ;; killing emacs on that frame. -    (let* ((params `((client . ,(if nowait 'nowait proc)) -                     ;; This is a leftover, see above. -                     (environment . ,(process-get proc 'env)) -                     ,@parameters)) -	   (display (or display -			(frame-parameter nil 'display) -			(getenv "DISPLAY") -			(error "Please specify display"))) -	   frame) -      (if parent-id -	  (push (cons 'parent-id (string-to-number parent-id)) params)) -      (setq frame (make-frame-on-display display params)) -      (server-log (format "%s created" frame) proc) -      (select-frame frame) -      (process-put proc 'frame frame) -      (process-put proc 'terminal (frame-terminal frame)) -      frame))) +  (let* ((display (or display +                      (frame-parameter nil 'display) +                      (error "Please specify display."))) +         (w (or (cdr (assq 'window-system parameters)) +                (window-system-for-display display)))) + +    (unless (assq w window-system-initialization-alist) +      (setq w nil)) + +    (cond (w +           ;; Flag frame as client-created, but use a dummy client. +           ;; This will prevent the frame from being deleted when +           ;; emacsclient quits while also preventing +           ;; `server-save-buffers-kill-terminal' from unexpectedly +           ;; killing emacs on that frame. +           (let* ((params `((client . ,(if nowait 'nowait proc)) +                            ;; This is a leftover, see above. +                            (environment . ,(process-get proc 'env)) +                            ,@parameters)) +                  frame) +             (if parent-id +                 (push (cons 'parent-id (string-to-number parent-id)) params)) +             (add-to-list 'frame-inherited-parameters 'client) +             (setq frame (make-frame-on-display display params)) +             (server-log (format "%s created" frame) proc) +             (select-frame frame) +             (process-put proc 'frame frame) +             (process-put proc 'terminal (frame-terminal frame)) +             frame)) + +          (t +           (server-log "Window system unsupported" proc) +           (server-send-string proc "-window-system-unsupported \n") +           nil))))  (defun server-goto-toplevel (proc)    (condition-case nil | 
