Unfortunately this isn't as easy as it should be.  Since the menu action can do 
anything, including trigger menu tracking again, it really does need to happen 
last.

I think your best option is to use performSelector:afterDelay: from within 
menuDidClose:.

Another possibility is to tie the lifetime of your resources to the menu items 
themselves (e.g. set them as the represented object of the menu item).  In 
SnowLeopard, we support the scenario of an NSMenuItem being removed from the 
menu after the item is selected by the user, but before the item's action 
fires.  This allows you to tear down the menu (for example, in 
NSMenuDidEndTrackingNotification): the NSMenuItem will be retained until its 
action fires.  However, this does not work in Leopard and earlier.

-Peter

On Jun 25, 2010, at 3:41 PM, augusto callejas wrote:

> peter-
> 
> actually i wanted to be notified before the menu is closed,
> because i'm freeing some resources when the menu is closed,
> but i'm depending on those resources to be around when it
> comes time to execute the menu item's action.  perhaps
> i can't free those resources and need to take care of that
> somewhere else?
> 
> thanks,
> augusto.
> 
> On Jun 25, 2010, at 3:26 PM, Peter Ammon wrote:
> 
>> 
>> On Jun 25, 2010, at 2:58 PM, augusto callejas wrote:
>> 
>>> hi-
>>> 
>>> i'm constructing an NSMenu with a delegate to handle menuDidClose.
>>> that menu has an NSMenuItem that had an action to handle when its selected.
>>> when i select the menu item from the menu, it calls menuDidClose, and then
>>> the action of the NSMenuItem.  i would expect the other order, but the 
>>> documentation
>>> doesn't state what order these messages are sent.  is there a way to 
>>> specify what
>>> order these messages are sent?
>>> 
>>> thanks,
>>> augusto._______________________________________________
>> 
>> Hi Augusto,
>> 
>> The menu always closes before the action is sent.  Imagine the user choosing 
>> File->Open:  if the action were sent before the menu was closed, the File 
>> menu would remain open until the Open panel is dismissed.
>> 
>> If you want to be notified after the action is sent, perhaps you want 
>> NSMenuDidSendActionNotification.
>> 
>> Hope this helps,
>> -Peter
> 

_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to