Re: Checking if a menu is visible??!?!?
Re: Checking if a menu is visible??!?!?
- Subject: Re: Checking if a menu is visible??!?!?
- From: Peter Maurer <email@hidden>
- Date: Wed, 3 Mar 2004 01:01:58 +0100
_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.
True. But the menuReference method I have attached in my first reply
deals with this case -- not too elegant, but it works.
And standard warning:
This API is private and may be removed in future OS X versions. I sooo
hope it never does though.
Me too! (Thanks for pointing this out!)
Peter.
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
___
http://www.petermaurer.de
_______________________________________________
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.