On Thursday, February 5, 2004, at 10:58 PM, mikel evins wrote:
On Feb 5, 2004, at 2:39 PM, Duncan Rose wrote:
The add-event-to-queue method converts the Cocoa event into a CLIM event and appends it to a list; the McCLIM event processing pops events off the list when it wants them and does its stuff. This provides a mechanism allowing Cocoa to force events on the back end code, and for CLIM to request them as needed.
Seems like it should be possible to make a thread for CLIM that waits on this queue, so that each time you enqueue a synthesized event the CLIM thread wakes up and dequeues it.
When you hand events to the CLIM code, do you tell Cocoa that the event was handled? Whichever way you answer there may be subtleties that could cause weird behavior; some events are meant to be handled by the first responder and that's it; others are meant to be maybe-handled by the first responder and then maybe handed off to one or more other responders. Finally, Command-key events traverse the responder chain *backwards* so that the application has first chance to process them.
Currently (disclaimer: pre-pre-alpha 8-) any event that's of a type CLIM would be interested in gets put onto the event list for CLIM. Any other events continue up the responder chain as normal. (This seems to be acceptable for most events. Mouse moved events get sent to the window irrespective of where the mouse is - CLIM probably isn't too interested in these if they don't happen over a CLIM window).
I only handle key events in my lisp-window NSWindow subclass at the moment in any case, so *at the moment* it doesn't make any difference if they go up or down. There's no event handling in the NSApplication.
I can't say I'm particularly happy with the way I'm handling events at the moment; or, to be honest, with the way I'm handling anything else either! (I'm thinking at the moment it may have been a bad idea to attempt to "Cocoaify" the CLX back end, which is what I've done in effect, rather than start from scratch.)
-Duncan
mac-lisp-ide site list mac-lisp-ide@common-lisp.net http://common-lisp.net/mailman/listinfo/mac-lisp-ide