[Openmcl-devel] Disabling the listener in when you build an applicaiton

Michael Minerva minerva at agentsheets.com
Mon Aug 30 14:27:13 PDT 2010


Thank you Gary, for your very detailed response, this worked perfectly.  

--Mike

On Aug 29, 2010, at 3:01 AM, Gary Byers wrote:

> A listener pops up on startup (and, on OSX, when the application is
> activated when no other windows are present) in the IDE because the
> IDE is a document-based application and document-based applications
> are supposed to create a new document in those situations.  (There's
> a little bit of an argument for creating a new editor window in those
> cases, but the argument for creating a listener seems to be stronger.)
> 
> There isn't an explicit option to BUILD-APPLICATION that suppresses
> this behavior, just as there aren't thousands of explicit options
> to control the thousands of ways that an application's behavior might
> differ from the IDE's.
> 
> BUILD-APPLICATION does provide options that let you specify this; some
> of that's done declaratively (in the info-plist) and some of it needs
> to be done procedurally (by defining classes and methods on those classes
> that implement application-specific behavior.)
> 
> A lot of a Cocoa application's "application-specific behavior" is implemented
> by the global (NS)Application object's delegate; it should be easier than
> it is to use BUILD-APPLICATION or some similar tool to arrange that an instance
> of some specified, user-defined class will be instantiated and made to be the
> application's delegate on startup.  You currently have to jump through some
> hoops and ... um, mess with some low-level code in order to do this:
> 
> ;;; For no apparent reason, the value of GUI::*DEFAULT-NS-APPLICATION-PROXY-CLASS-NAME*
> ;;; is initialized every time that the IDE starts up.  Its value is just a lisp
> ;;; string (the ObjC class name of the application delegate's class), and it should
> ;;; be possible/easy to override the default.
> 
> (setq ccl::*lisp-system-pointer-functions*
>      (delete 'GUI::*DEFAULT-NS-APPLICATION-PROXY-CLASS-NAME*
>              ccl::*lisp-system-pointer-functions*
>              :key #'ccl::function-name))
> 
> If it were the case that you wanted your application to behave just like the
> IDE except for this listener-creation behavior, you could then do:
> 
> (defclass my-lisp-application-delegate (gui::lisp-application-delegate)
>  ()
>  (:metaclass ns:+ns-object))
> 
> (setq GUI::*DEFAULT-NS-APPLICATION-PROXY-CLASS-NAME* "MyLispApplicationDelegate")
> 
> And, depending on what behavior you want, you could either tell the Cocoa runtime that this business of opening untitled documents on startup doesn't
> really apply to you:
> 
> (objc:defmethod (#/applicationShouldOpenUntitledFile: #>BOOL)
>    ((self my-lisp-application-delegate) app)
>  (declare (ignore app))
>  nil)
> 
> or override requests to open a document on startup/reactivation:
> 
> (objc:defmethod (#/applicationOpenUntitledFile: #>BOOL)
>    ((self my-lisp-application-delegate) app)
>    (maybe-open-something app)
>    (if (opened-something)
>      t
>      nil))
> 
> I suspect that this isn't the only thing that you'd want to customize.
> (the "about" box, the "bundle identifier" - used to name preference
> files, among other things -, the types of files/documents your application
> manipulates and how it does so, application/document icons, other behaviors.)
> BUILD-APPLICATION helps a little in dealing with this.  It could certainly
> help more than it does, but I don't think that application generation is
> ever likely to be a matter of picking the right combination of options or
> keyword arguments from some sort of menu.
> 
> 
> 
> 
> 
> On Fri, 27 Aug 2010, Michael Minerva wrote:
> 
>> I am trying to create an end user mode and I cannot find anywhere in the documentation for build-applicaiton where you can tell the listener to not pop up.  Is there anyway to do this without hacking around with low level ccl methods?
>> 
>> -Mike
>> _______________________________________________
>> Openmcl-devel mailing list
>> Openmcl-devel at clozure.com
>> http://clozure.com/mailman/listinfo/openmcl-devel
>> 
>> 
> 




More information about the Openmcl-devel mailing list