Re: Cocoa re-enables menu item after I disable it
Re: Cocoa re-enables menu item after I disable it
- Subject: Re: Cocoa re-enables menu item after I disable it
- From: Mike Abdullah <email@hidden>
- Date: Mon, 16 Apr 2012 15:02:13 +0100
Is there a good reason why you're not using automatic menu enabling? https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MenuList/Articles/EnablingMenuItems.html
On 16 Apr 2012, at 13:27, Jerry Krinock wrote:
> When I have a menu item which needs to be disabled based on current conditions, I implement -menuNeedsUpdate: in its menu's delegate, grab the item by its tag, and then -setEnabled:(YES or NO). I've been doing this for years.
>
> Today I have a problem. If I set a particular item in the Application menu to be disabled in this way, a few milliseconds later, Cocoa resends -[NSMenuItem setEnabled:] with parameter YES, thus re-enabling the item. Culprit is -[NSCarbonMenuImpl _carbonUpdateStatusEvent:handlerCallRef:]. Complete call stack is shown below.
>
> What is doing this?
>
> I've worked around the problem by following setEnabled:NO with setAction:NULL.
>
> Thanks,
>
> Jerry Krinock
>
> * Mystery Call Stack
>
> (Note that I tapped into -[NSMenuItem setEnabled:] using Method Replacement, because breaking to Xcode when updating a menu aborts the menu updating, and also gdb was giving me crap for some reason when I set breakpoint actions to print the registers in -[NSMenuItem setEnabled:].)
>
> 1 MyFramework 0x001cf3e8 -[NSMenuItem(DebugByReplacingMethod) replacement_setEnabled:] + 136
> 2 AppKit 0x90d614c4 -[NSMenu _enableItem:] + 1081
> 3 AppKit 0x90ef88f6 -[NSCarbonMenuImpl _carbonUpdateStatusEvent:handlerCallRef:] + 559
> 4 AppKit 0x90e70d02 NSSLMMenuEventHandler + 452
> 5 HIToolbox 0x9064d62c _Z22_InvokeEventHandlerUPPP25OpaqueEventHandlerCallRefP14OpaqueEventRefPvPFlS0_S2_S3_E + 36
> 6 HIToolbox 0x904c8f4f _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1602
> 7 HIToolbox 0x904c83cc _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 482
> 8 HIToolbox 0x904dd0d5 SendEventToEventTarget + 76
> 9 HIToolbox 0x9064daf0 _ZL18SendHICommandEventmPK9HICommandmmhPKvP20OpaqueEventTargetRefS5_PP14OpaqueEventRef + 482
> 10 HIToolbox 0x9064dbf2 UpdateHICommandStatusWithCachedEvent + 70
> 11 HIToolbox 0x904c4aa3 _ZN13HIApplication12EventHandlerEP25OpaqueEventHandlerCallRefP14OpaqueEventRefPv + 2699
> 12 HIToolbox 0x9064d62c _Z22_InvokeEventHandlerUPPP25OpaqueEventHandlerCallRefP14OpaqueEventRefPvPFlS0_S2_S3_E + 36
> 13 HIToolbox 0x904c8f4f _ZL23DispatchEventToHandlersP14EventTargetRecP14OpaqueEventRefP14HandlerCallRec + 1602
> 14 HIToolbox 0x904c83cc _ZL30SendEventToEventTargetInternalP14OpaqueEventRefP20OpaqueEventTargetRefP14HandlerCallRec + 482
> 15 HIToolbox 0x904dd0d5 SendEventToEventTarget + 76
> 16 HIToolbox 0x906a1310 _ZL15SendMenuOpeningP14MenuSelectDataP8MenuDatadmmP14__CFDictionaryhPh + 847
> 17 HIToolbox 0x906a567c _ZL11DrawTheMenuP14MenuSelectDataPP9__CFArrayhPh + 202
> 18 HIToolbox 0x906a5bee _ZL11MenuChangedP14MenuSelectDatahh + 608
> 19 HIToolbox 0x9051529d _ZL15TrackMenuCommonR14MenuSelectDataPh + 1235
> 20 HIToolbox 0x906a9474 _ZL14MenuSelectCoreP8MenuData5PointdmPP13OpaqueMenuRefPt + 420
> 21 HIToolbox 0x9051152e _HandleMenuSelection2 + 636
> 22 HIToolbox 0x905112ad _HandleMenuSelection + 53
> 23 AppKit 0x90d6cd4a _NSHandleCarbonMenuEvent + 302
> 24 AppKit 0x90cfd08a _DPSNextEvent + 2196
> 25 AppKit 0x90cfc306 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 113
> 26 AppKit 0x90cf8675 -[NSApplication run] + 911
> 27 AppKit 0x90f8c261 NSApplicationMain + 1054
> 28 MyApp 0x00001e15 main + 245
> 29 MyApp 0x00001d15 start + 53
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> 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:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden