Cocoa re-enables menu item after I disable it
Cocoa re-enables menu item after I disable it
- Subject: Cocoa re-enables menu item after I disable it
- From: Jerry Krinock <email@hidden>
- Date: Mon, 16 Apr 2012 05:27:30 -0700
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