Commit b3f71fde authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

winemac: Implement the Mac "Window" menu.

parent 15d4b2ab
...@@ -51,7 +51,18 @@ ...@@ -51,7 +51,18 @@
[item setSubmenu:submenu]; [item setSubmenu:submenu];
[mainMenu addItem:item]; [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 setMainMenu:mainMenu];
[self setWindowsMenu:submenu];
} }
} }
......
...@@ -172,9 +172,17 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) ...@@ -172,9 +172,17 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens)
else else
behavior |= NSWindowCollectionBehaviorManaged; behavior |= NSWindowCollectionBehaviorManaged;
if (state->excluded_by_cycle) if (state->excluded_by_cycle)
{
behavior |= NSWindowCollectionBehaviorIgnoresCycle; behavior |= NSWindowCollectionBehaviorIgnoresCycle;
if ([self isVisible])
[NSApp removeWindowsItem:self];
}
else else
{
behavior |= NSWindowCollectionBehaviorParticipatesInCycle; behavior |= NSWindowCollectionBehaviorParticipatesInCycle;
if ([self isVisible])
[NSApp addWindowsItem:self title:[self title] filename:NO];
}
[self setCollectionBehavior:behavior]; [self setCollectionBehavior:behavior];
} }
...@@ -196,6 +204,9 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) ...@@ -196,6 +204,9 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens)
[latentParentWindow addChildWindow:self ordered:NSWindowAbove]; [latentParentWindow addChildWindow:self ordered:NSWindowAbove];
self.latentParentWindow = nil; self.latentParentWindow = nil;
} }
if (![self isExcludedFromWindowsMenu])
[NSApp addWindowsItem:self title:[self title] filename:NO];
} }
return on_screen; return on_screen;
...@@ -206,6 +217,7 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) ...@@ -206,6 +217,7 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens)
self.latentParentWindow = [self parentWindow]; self.latentParentWindow = [self parentWindow];
[latentParentWindow removeChildWindow:self]; [latentParentWindow removeChildWindow:self];
[self orderOut:nil]; [self orderOut:nil];
[NSApp removeWindowsItem:self];
} }
- (BOOL) setFrameIfOnScreen:(NSRect)contentRect - (BOOL) setFrameIfOnScreen:(NSRect)contentRect
...@@ -277,6 +289,18 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens) ...@@ -277,6 +289,18 @@ static BOOL frame_intersects_screens(NSRect frame, NSArray* screens)
return [self canBecomeKeyWindow]; 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 ---------- * ---------- NSWindowDelegate methods ----------
...@@ -372,6 +396,8 @@ void macdrv_set_cocoa_window_title(macdrv_window w, const unsigned short* title, ...@@ -372,6 +396,8 @@ void macdrv_set_cocoa_window_title(macdrv_window w, const unsigned short* title,
titleString = @""; titleString = @"";
OnMainThreadAsync(^{ OnMainThreadAsync(^{
[window setTitle:titleString]; [window setTitle:titleString];
if ([window isVisible] && ![window isExcludedFromWindowsMenu])
[NSApp changeWindowsItem:window title:titleString filename:NO];
}); });
[pool release]; [pool release];
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment