keep main menu available when using micrtosoft style

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@27692 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2009-01-25 18:28:20 +00:00
parent d9f18ec9b4
commit e5a4ab5b40
4 changed files with 50 additions and 6 deletions

View file

@ -1,3 +1,10 @@
2009-01-25 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSMenu.m: Keep the main menu in the main window (or visible
if there is no main menu) when using microsoft style menus.
* Source/NSWindow.m: If the main windows closes and it contains
the main menu, unset the menu.
2009-01-25 11:51-EST Gregory John Casamento <greg_casamento@yahoo.com> 2009-01-25 11:51-EST Gregory John Casamento <greg_casamento@yahoo.com>
* Source/NSMenuView.m: Return from the trackWithEvent: method * Source/NSMenuView.m: Return from the trackWithEvent: method

View file

@ -438,6 +438,7 @@
return AUTORELEASE(v); return AUTORELEASE(v);
} }
} }
return nil;
} }
@end @end

View file

@ -942,6 +942,31 @@ static BOOL menuBarVisible = YES;
- (void) update - (void) update
{ {
if (self == [NSApp mainMenu])
{
/* For microsoft style menus, we attempt to notice that we have
* a main window, and make sure that the menu appears in it.
*/
if (NSInterfaceStyleForKey(@"NSMenuInterfaceStyle", nil) ==
NSWindows95InterfaceStyle)
{
NSWindow *w = [NSApp mainWindow];
if (w == nil)
{
/* Make sure we are set up properly and displayed.
*/
if ([_aWindow isVisible] == NO)
{
[self setMain: YES];
}
}
else if ([w menu] != self)
{
[w setMenu: self];
}
}
}
if (_delegate) if (_delegate)
{ {
if ([_delegate respondsToSelector:@selector(menuNeedsUpdate:)]) if ([_delegate respondsToSelector:@selector(menuNeedsUpdate:)])
@ -1186,10 +1211,10 @@ static BOOL menuBarVisible = YES;
- (void) setDelegate: (id)delegate - (void) setDelegate: (id)delegate
{ {
_delegate=delegate; _delegate = delegate;
} }
- (float)menuBarHeight - (float) menuBarHeight
{ {
// FIXME // FIXME
return [NSMenuView menuBarHeight]; return [NSMenuView menuBarHeight];
@ -1683,7 +1708,6 @@ static BOOL menuBarVisible = YES;
{ {
NSMenu *sub = [self attachedMenu]; NSMenu *sub = [self attachedMenu];
if (_menu.transient) if (_menu.transient)
{ {
NSDebugLLog (@"NSMenu", @"We should not close ordinary menu while transient version is still open"); NSDebugLLog (@"NSMenu", @"We should not close ordinary menu while transient version is still open");
@ -1784,15 +1808,22 @@ static BOOL menuBarVisible = YES;
RELEASE(newRep); RELEASE(newRep);
if (newStyle == NSWindows95InterfaceStyle) if (newStyle == NSWindows95InterfaceStyle)
{ {
/* Put menu in the main window for microsoft style.
*/
[[NSApp mainWindow] setMenu: self]; [[NSApp mainWindow] setMenu: self];
} }
else if ([[NSApp mainWindow] menu] == self) else if ([[NSApp mainWindow] menu] == self)
{ {
/* Remove the menu from the main window.
*/
[[NSApp mainWindow] setMenu: nil]; [[NSApp mainWindow] setMenu: nil];
} }
} }
if (newStyle != NSWindows95InterfaceStyle) /* Adjust the menu window to suit the menu view unless the menu
* is being displayed in the application main window.
*/
if ([[NSApp mainWindow] menu] != self)
{ {
[[self window] setTitle: [[NSProcessInfo processInfo] processName]]; [[self window] setTitle: [[NSProcessInfo processInfo] processName]];
[[self window] setLevel: NSMainMenuWindowLevel]; [[self window] setLevel: NSMainMenuWindowLevel];

View file

@ -1775,6 +1775,12 @@ many times.
{ {
[_wv setInputState: GSTitleBarNormal]; [_wv setInputState: GSTitleBarNormal];
} }
if ([self menu] == [NSApp mainMenu])
{
/* This window contains the main menu ... remove it.
*/
[self setMenu: nil];
}
[nc postNotificationName: NSWindowDidResignMainNotification object: self]; [nc postNotificationName: NSWindowDidResignMainNotification object: self];
} }
} }
@ -2645,9 +2651,7 @@ resetCursorRectsForView(NSView *theView)
_f.has_opened = NO; _f.has_opened = NO;
[NSApp removeWindowsItem: self]; [NSApp removeWindowsItem: self];
[self orderOut: self]; [self orderOut: self];
RELEASE(pool); RELEASE(pool);
_f.has_closed = YES; _f.has_closed = YES;
RELEASE(self); RELEASE(self);
} }
@ -5175,6 +5179,7 @@ current key view.<br />
*/ */
menuView = [_wv removeMenuView]; menuView = [_wv removeMenuView];
[[self menu] setMenuRepresentation: menuView]; [[self menu] setMenuRepresentation: menuView];
[menuView sizeToFit];
/* Set the new menu, and transfer the new menu representation /* Set the new menu, and transfer the new menu representation
* to the window decoration view. * to the window decoration view.