[mcclim-cvs] CVS mcclim/Backends/beagle/windowing

tmoore tmoore at common-lisp.net
Fri Mar 24 11:18:27 UTC 2006


Update of /project/mcclim/cvsroot/mcclim/Backends/beagle/windowing
In directory clnet:/tmp/cvs-serv7141/Backends/beagle/windowing

Modified Files:
	port.lisp 
Log Message:

Ripped out the CLIM event process in the Beagle back end. Events are
delivered to the principal Cocoa thread which can deliver them
directly to the CLIM application processes.


--- /project/mcclim/cvsroot/mcclim/Backends/beagle/windowing/port.lisp	2005/06/16 09:27:51	1.5
+++ /project/mcclim/cvsroot/mcclim/Backends/beagle/windowing/port.lisp	2006/03/24 11:18:27	1.6
@@ -26,8 +26,14 @@
 
 (in-package :beagle)
 
+;;; The beagle backend of McCLIM runs inside a Cocoa application. There is one
+;;; port, associated with that application. There is no separate event process;
+;;; the main thread of the Cocoa app is notified of events and puts them on the
+;;; proper event queues using the mapping in the port object between NSViews
+;;; and sheets.
 
 (defparameter *beagle-port* nil)
+
 (defparameter *default-beagle-frame-manager* 'beagle:beagle-aqua-frame-manager
   "Specifies the frame manager that should be used by default when the port creates its
 frame manager. Permissable values are 'beagle::beagle-standard-frame-manager and
@@ -53,6 +59,10 @@
 ;;; in the long-term. (NB. this duplicates behaviour in McCLIM "PORT" type but that uses
 ;;; 'eq tests in the hashtables, and MACPTRs (which is what a mirror boils down to being in
 ;;; the end) are only ever 'eql.)
+;;;
+;;; I'm not sure what Duncan was getting at with that comment;
+;;; mirror/sheet/NSView seems like a fine correspondence to me, unless you want
+;;; to only use one mirror per window. -- moore
 
 (defclass beagle-port (basic-port)
   ((screen          :initform nil :accessor beagle-port-screen)
@@ -63,9 +73,7 @@
    ;; holds sheet that should receive key events. ::FIXME:: need to tell McCLIM which sheet
    ;; is taking keyboard events; look into how all that bit hangs together, it's changed
    ;; since this was written.
-   (key-focus-sheet :initform nil :accessor beagle-port-key-focus)
-   (event-semaphore :initform nil :accessor beagle-port-event-semaphore)))
-
+   (key-focus-sheet :initform nil :accessor beagle-port-key-focus)))
 
 (defmethod destroy-port :before ((port beagle-port))
   ;; clear out color-table, view-table, cached images etc. ::TODO:: check this logic is correct...
@@ -133,8 +141,10 @@
 ;;; the port-server-path? Not sure...) to permit the user to make use of screens other
 ;;; than the main screen.
 (defmethod initialize-beagle ((port beagle-port))
-
-  (ccl::create-autorelease-pool)
+  ;; If we were not already running inside a Cocoa application (OpenMCL's
+  ;; COCOA), we would obviously have to invoke the magic here to start up a
+  ;; Cocoa main thread.
+  (ccl::create-autorelease-pool)	;XXX Is this necessary? -- moore
   
   ;; CLX port gets some options here and uses those to set stuff up. We should probably do
   ;; this too, in the future ::FIXME::
@@ -150,24 +160,7 @@
 ;;;		  :WITH-OBJECT nil))
   
   (make-cursor-table port)
-  (make-graft port)
-  
-  (setf (beagle-port-event-semaphore port) (ccl:make-semaphore))
-  
-  (setf (port-event-process port)
-	(clim-sys:make-process
-	 (lambda ()
-	   (ccl::create-autorelease-pool)
-	   (loop
-	    (with-simple-restart
-	     (restart-event-loop "Restart CLIM's event loop.")
-;;;		  (with-autorelease-pool
-	     (loop
-	      ;; process-next-event is defined in ports.lisp. It invokes
-	      ;; get-next-event in the backend to actually get the next
-	      ;; event in the queue
-	      (process-next-event port)))))
-	 :name (format nil "~S's event process." port))));)
+  (make-graft port))
 
 
 ;;; From CLX/port.lisp




More information about the Mcclim-cvs mailing list