• 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: Checking if a menu is visible??!?!?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Checking if a menu is visible??!?!?


  • Subject: Re: Checking if a menu is visible??!?!?
  • From: Rosyna <email@hidden>
  • Date: Tue, 2 Mar 2004 16:49:28 -0700

_NSGetCarbonMenu will return NULL if the menu is not visible, has never been visible and is not attached to the menu bar. Cocoa seems to not make the menu into a real menu item until it is made visible.

And standard warning:

This API is private and may be removed in future OS X versions. I sooo hope it never does though.

GetMenuTrackingData will return noErr and a non-NULL menu if no menu is visible but the title of the menu is hilighted. You might want to make sure theMenuTrackingData.menu and theMenuTrackingData.menuItemIndex are not NULL (or 0, Carbon indexes start at 1)

Ack, at 3/2/04, Peter Maurer said:

but I cannot find a way to check if a NSMenu is visible or not..

With a little help from carbon, this should be possible (at least for OS X versions whose NSMenus are based on carbon menus). First, get the NSMenu's menu reference via _NSGetCarbonMenu(NSMenu *) -- I have a NSMenu category that contains the following menuReference method...

extern MenuRef _NSGetCarbonMenu(NSMenu *);

- (MenuRef) menuReference {
MenuRef theMenuReference = _NSGetCarbonMenu(self);
if (theMenuReference==0) {
// this is necessary to make cocoa actually create the underlying carbon menu
NSMenu *theMainMenu = [NSApp mainMenu];
NSMenuItem *theDummyMenuItem = [theMainMenu addItemWithTitle: @"sub" action: NULL keyEquivalent: @""];
[theDummyMenuItem setSubmenu: self];
[theDummyMenuItem setSubmenu: nil];
[theMainMenu removeItem: theDummyMenuItem];
return _NSGetCarbonMenu(self);
}
return theMenuReference;
}

Then check for visibility...

NSMenu *theNSMenuInQuestion; // assume this is the menu you want to test
MenuTrackingData theMenuTrackingData;
if (GetMenuTrackingData([theNSMenuInQuestion menuReference], &theMenuTrackingData)==noErr) {
// the menu is visible
}

Does this help?

--


Sincerely,
Rosyna Keller
Technical Support/Holy Knight/Always needs a hug

Unsanity: Unsane Tools for Insanely Great People
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.


  • Follow-Ups:
    • Re: Checking if a menu is visible??!?!?
      • From: Peter Maurer <email@hidden>
References: 
 >Checking if a menu is visible??!?!? (From: "Jean-Olivier Lanctôt-D." <email@hidden>)
 >Re: Checking if a menu is visible??!?!? (From: Peter Maurer <email@hidden>)

  • Prev by Date: NSTableView: detecting key input when NOT editing?
  • Next by Date: Re: Checking if a menu is visible??!?!?
  • Previous by thread: Re: Checking if a menu is visible??!?!?
  • Next by thread: Re: Checking if a menu is visible??!?!?
  • Index(es):
    • Date
    • Thread