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 (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:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

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

Reply via email to