Changeset 14996


Ignore:
Timestamp:
Sep 21, 2011, 6:37:57 PM (8 years ago)
Author:
gz
Message:

In new-cocoa-listener-process, initialize process slots before starting the process

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/cocoa-ide/cocoa-listener.lisp

    r14904 r14996  
    248248
    249249(defclass cocoa-listener-process (process)
    250     ((input-stream :reader cocoa-listener-process-input-stream)
    251      (output-stream :reader cocoa-listener-process-output-stream)
     250    ((input-stream :initarg :listener-input-stream :reader cocoa-listener-process-input-stream)
     251     (output-stream :initarg :listener-output-stream :reader cocoa-listener-process-output-stream)
    252252     (backtrace-contexts :initform nil
    253253                         :accessor cocoa-listener-process-backtrace-contexts)
    254      (window :reader cocoa-listener-process-window :initform nil)))
     254     (window :initarg :listener-window :reader cocoa-listener-process-window)))
    255255 
    256256(defloadvar *first-listener* t)
    257257
    258 (defun new-cocoa-listener-process (procname window)
     258(defun new-cocoa-listener-process (procname window &key (class 'cocoa-listener-process) initargs)
    259259  (declare (special *standalone-cocoa-ide*))
    260260  (let* ((input-stream (make-instance 'cocoa-listener-input-stream))
    261261         (output-stream (make-instance 'cocoa-listener-output-stream
    262                           :hemlock-view (hemlock-view window)))
    263          
    264          (proc
    265           (ccl::make-mcl-listener-process
    266            procname
    267            input-stream
    268            output-stream
    269            ;; cleanup function
    270            #'(lambda ()
    271                (mapcar #'(lambda (buf)
    272                            (when (eq (buffer-process buf) *current-process*)
    273                              (let ((doc (hi::buffer-document buf)))
    274                                (when doc
    275                                  (setf (hemlock-document-process doc) nil) ;; so #/close doesn't kill it.
    276                                  (#/performSelectorOnMainThread:withObject:waitUntilDone:
    277                                   doc
    278                                   (@selector #/close)
    279                                   +null-ptr+
    280                                   nil)))))
    281                        hi:*buffer-list*))
    282            :initial-function
    283            #'(lambda ()
    284                (setq ccl::*listener-autorelease-pool* (create-autorelease-pool))
    285                (when (and *standalone-cocoa-ide*
    286                           (prog1 *first-listener* (setq *first-listener* nil)))
    287                  (ccl::startup-ccl (ccl::application-init-file ccl::*application*))
    288                  (ui-object-note-package *nsapp* *package*))
    289                (ccl::listener-function))
    290            :echoing nil
    291            :class 'cocoa-listener-process)))
    292     (setf (slot-value proc 'input-stream) input-stream)
    293     (setf (slot-value proc 'output-stream) output-stream)
    294     (setf (slot-value proc 'window) window)
    295     proc))
     262                          :hemlock-view (hemlock-view window))))
     263    (ccl::make-mcl-listener-process
     264     procname
     265     input-stream
     266     output-stream
     267     ;; cleanup function
     268     #'(lambda ()
     269         (mapcar #'(lambda (buf)
     270                     (when (eq (buffer-process buf) *current-process*)
     271                       (let ((doc (hi::buffer-document buf)))
     272                         (when doc
     273                           (setf (hemlock-document-process doc) nil) ;; so #/close doesn't kill it.
     274                           (#/performSelectorOnMainThread:withObject:waitUntilDone:
     275                            doc
     276                            (@selector #/close)
     277                            +null-ptr+
     278                            nil)))))
     279                 hi:*buffer-list*))
     280     :initial-function
     281     #'(lambda ()
     282         (setq ccl::*listener-autorelease-pool* (create-autorelease-pool))
     283         (when (and *standalone-cocoa-ide*
     284                    (prog1 *first-listener* (setq *first-listener* nil)))
     285           (ccl::startup-ccl (ccl::application-init-file ccl::*application*))
     286           (ui-object-note-package *nsapp* *package*))
     287         (ccl::listener-function))
     288     :echoing nil
     289     :class class
     290     :initargs `(:listener-input-stream ,input-stream
     291                 :listener-output-stream ,output-stream
     292                 :listener-window ,window
     293                 ,@initargs))))
    296294 
    297295(defclass hemlock-listener-frame (hemlock-frame)
Note: See TracChangeset for help on using the changeset viewer.