Module: wine Branch: master Commit: b3f71fdeb101945ce6d971016278e1d8248035c1 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b3f71fdeb101945ce6d9710162...
Author: Ken Thomases ken@codeweavers.com Date: Fri Jan 11 06:21:06 2013 -0600
winemac: Implement the Mac "Window" menu.
---
dlls/winemac.drv/cocoa_app.m | 11 +++++++++++ dlls/winemac.drv/cocoa_window.m | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 0 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_app.m b/dlls/winemac.drv/cocoa_app.m index 28d2ad2..d869a05 100644 --- a/dlls/winemac.drv/cocoa_app.m +++ b/dlls/winemac.drv/cocoa_app.m @@ -51,7 +51,18 @@ [item setSubmenu:submenu]; [mainMenu addItem:item];
+ submenu = [[[NSMenu alloc] initWithTitle:@"Window"] autorelease]; + [submenu addItemWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@""]; + [submenu addItemWithTitle:@"Zoom" action:@selector(performZoom:) keyEquivalent:@""]; + [submenu addItem:[NSMenuItem separatorItem]]; + [submenu addItemWithTitle:@"Bring All to Front" action:@selector(arrangeInFront:) keyEquivalent:@""]; + item = [[[NSMenuItem alloc] init] autorelease]; + [item setTitle:@"Window"]; + [item setSubmenu:submenu]; + [mainMenu addItem:item]; + [self setMainMenu:mainMenu]; + [self setWindowsMenu:submenu]; } }
diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m index 9d359ff..49dd31b 100644 --- a/dlls/winemac.drv/cocoa_window.m +++ b/dlls/winemac.drv/cocoa_window.m @@ -172,9 +172,17 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) else behavior |= NSWindowCollectionBehaviorManaged; if (state->excluded_by_cycle) + { behavior |= NSWindowCollectionBehaviorIgnoresCycle; + if ([self isVisible]) + [NSApp removeWindowsItem:self]; + } else + { behavior |= NSWindowCollectionBehaviorParticipatesInCycle; + if ([self isVisible]) + [NSApp addWindowsItem:self title:[self title] filename:NO]; + } [self setCollectionBehavior:behavior]; }
@@ -196,6 +204,9 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) [latentParentWindow addChildWindow:self ordered:NSWindowAbove]; self.latentParentWindow = nil; } + + if (![self isExcludedFromWindowsMenu]) + [NSApp addWindowsItem:self title:[self title] filename:NO]; }
return on_screen; @@ -206,6 +217,7 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) self.latentParentWindow = [self parentWindow]; [latentParentWindow removeChildWindow:self]; [self orderOut:nil]; + [NSApp removeWindowsItem:self]; }
- (BOOL) setFrameIfOnScreen:(NSRect)contentRect @@ -277,6 +289,18 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) return [self canBecomeKeyWindow]; }
+ - (BOOL) isExcludedFromWindowsMenu + { + return !([self collectionBehavior] & NSWindowCollectionBehaviorParticipatesInCycle); + } + + - (BOOL) validateMenuItem:(NSMenuItem *)menuItem + { + if ([menuItem action] == @selector(makeKeyAndOrderFront:)) + return [self isKeyWindow] || (!self.disabled && !self.noActivate); + return [super validateMenuItem:menuItem]; + } +
/* * ---------- NSWindowDelegate methods ---------- @@ -372,6 +396,8 @@ void macdrv_set_cocoa_window_title(macdrv_window w, const unsigned short* title, titleString = @""; OnMainThreadAsync(^{ [window setTitle:titleString]; + if ([window isVisible] && ![window isExcludedFromWindowsMenu]) + [NSApp changeWindowsItem:window title:titleString filename:NO]; });
[pool release];