• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Cocoa re-enables menu item after I disable it
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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

  • Follow-Ups:
    • Re: Cocoa re-enables menu item after I disable it
      • From: Jerry Krinock <email@hidden>
References: 
 >Cocoa re-enables menu item after I disable it (From: Jerry Krinock <email@hidden>)

  • Prev by Date: Cocoa re-enables menu item after I disable it
  • Next by Date: Re: Cocoa re-enables menu item after I disable it
  • Previous by thread: Cocoa re-enables menu item after I disable it
  • Next by thread: Re: Cocoa re-enables menu item after I disable it
  • Index(es):
    • Date
    • Thread