Moved the main menu handling into the class NSMenu and fixed activation problem on Windows.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@20342 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Fred Kiefer 2004-11-11 19:52:24 +00:00
parent ee70d6ab43
commit 7447bc1045
4 changed files with 49 additions and 8 deletions

View file

@ -1,3 +1,12 @@
2004-11-11 Fred Kiefer <FredKiefer@gmx.de>
* Headers/AppKit/NSMenu.h
* Source/NSMenu.m (-setMain:): New internal method to set the main
menu of an application. Uses code from [NSApplication
setMainMenu:] plus a display call for the new main menu.
* Source/NSApplication.m (-setMainMenu:): Use the new method on
NSMenu to flag a menu as main and cleaned up the logic.
2004-11-11 15:08 Alexander Malmberg <alexander@malmberg.org>
* Source/NSCell.m (-_setupTextWithFrame:inView:editor:): Reduce the

View file

@ -589,6 +589,13 @@ The displayed menus on the screen have the following structure:
*/
- (NSWindow*) window;
/**
Flag this menu to be the main menu of the application,
when isMain is YES. Flag it as no longer being the main
menu when NO is handed in.
*/
- (void) setMain: (BOOL)isMain;
/* Shows the menu window on screen */
/**
Show menu on the screen. This method can/should be used by

View file

@ -2278,19 +2278,22 @@ image.
*/
- (void) setMainMenu: (NSMenu*)aMenu
{
if (_main_menu != nil && _main_menu != aMenu)
if (_main_menu == aMenu)
{
[_main_menu close];
[[_main_menu window] setLevel: NSSubmenuWindowLevel];
return;
}
if (_main_menu != nil)
{
[_main_menu setMain: NO];
}
ASSIGN(_main_menu, aMenu);
// Set the title of the window.
// This wont be displayed, but the window manager may need it.
[[_main_menu window] setTitle: [[NSProcessInfo processInfo] processName]];
[[_main_menu window] setLevel: NSMainMenuWindowLevel];
[_main_menu setGeometry];
if (_main_menu != nil)
{
[_main_menu setMain: YES];
}
}
- (void) rightMouseDown: (NSEvent*)theEvent

View file

@ -1431,6 +1431,28 @@ static NSNotificationCenter *nc;
return (NSWindow *)_aWindow;
}
- (void) setMain: (BOOL)isMain
{
if (isMain)
{
// Set the title of the window.
// This wont be displayed, but the window manager may need it.
[[self window] setTitle: [[NSProcessInfo processInfo] processName]];
[[self window] setLevel: NSMainMenuWindowLevel];
[self setGeometry];
if ([NSApp isActive])
{
[self display];
}
}
else
{
[self close];
[[self window] setLevel: NSSubmenuWindowLevel];
}
}
/**
Set the frame origin of the receiver to aPoint. If a submenu of
the receiver is attached. The frame origin of the submenu is set