| Index: extensions/shell/browser/shell_native_app_window_mac.mm
|
| diff --git a/extensions/shell/browser/shell_native_app_window_mac.mm b/extensions/shell/browser/shell_native_app_window_mac.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d2e74c3ef4b8b3d202104fdbe72887cb757e3cdd
|
| --- /dev/null
|
| +++ b/extensions/shell/browser/shell_native_app_window_mac.mm
|
| @@ -0,0 +1,122 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "extensions/shell/browser/shell_native_app_window_mac.h"
|
| +
|
| +#import <Cocoa/Cocoa.h>
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/strings/sys_string_conversions.h"
|
| +#include "content/public/browser/web_contents.h"
|
| +
|
| +@implementation ShellNativeAppWindowController
|
| +
|
| +@synthesize appWindow = appWindow_;
|
| +
|
| +- (void)windowWillClose:(NSNotification*)notification {
|
| + if (appWindow_)
|
| + appWindow_->WindowWillClose();
|
| +}
|
| +
|
| +@end
|
| +
|
| +// TODO(yoz): Do we need to handle commands (keyboard shortcuts)?
|
| +// Do we need need ChromeEventProcessingWindow or UnderlayOpenGLHostingWindow?
|
| +@interface ShellNSWindow : NSWindow
|
| +@end
|
| +
|
| +@implementation ShellNSWindow
|
| +
|
| +- (BOOL)_isTitleHidden {
|
| + return YES;
|
| +}
|
| +
|
| +@end
|
| +
|
| +namespace extensions {
|
| +
|
| +ShellNativeAppWindowMac::ShellNativeAppWindowMac(
|
| + AppWindow* app_window,
|
| + const AppWindow::CreateParams& params)
|
| + : ShellNativeAppWindow(app_window, params) {
|
| + base::scoped_nsobject<NSWindow> shell_window;
|
| + NSUInteger style_mask = NSTitledWindowMask | NSClosableWindowMask;
|
| +
|
| + NSRect cocoa_bounds = params.GetInitialWindowBounds(gfx::Insets()).ToCGRect();
|
| + // TODO(yoz): Flip coordinates here?
|
| +
|
| + shell_window.reset(
|
| + [[ShellNSWindow alloc] initWithContentRect:cocoa_bounds
|
| + styleMask:style_mask
|
| + backing:NSBackingStoreBuffered
|
| + defer:NO]);
|
| +
|
| + window_controller_.reset([[ShellNativeAppWindowController alloc]
|
| + initWithWindow:shell_window.release()]);
|
| +
|
| + [[window_controller_ window] setDelegate:window_controller_];
|
| + [window_controller_ setAppWindow:this];
|
| +
|
| + NSView* view = app_window->web_contents()->GetNativeView();
|
| + NSView* frameView = [window() contentView];
|
| + [view setFrame:[frameView bounds]];
|
| + [frameView addSubview:view];
|
| +}
|
| +
|
| +ShellNativeAppWindowMac::~ShellNativeAppWindowMac() {
|
| +}
|
| +
|
| +bool ShellNativeAppWindowMac::IsActive() const {
|
| + NOTIMPLEMENTED();
|
| + return false;
|
| +}
|
| +
|
| +gfx::NativeWindow ShellNativeAppWindowMac::GetNativeWindow() const {
|
| + return window();
|
| +}
|
| +
|
| +gfx::Rect ShellNativeAppWindowMac::GetBounds() const {
|
| + // Flip coordinates based on the primary screen.
|
| + NSScreen* screen = [[NSScreen screens] objectAtIndex:0];
|
| + NSRect frame = [[window_controller_ window] frame];
|
| + return gfx::Rect(frame.origin.x, NSHeight([screen frame]) - NSMaxY(frame),
|
| + NSWidth(frame), NSHeight(frame));
|
| +}
|
| +
|
| +void ShellNativeAppWindowMac::Show() {
|
| + [window_controller_ showWindow:nil];
|
| +}
|
| +
|
| +void ShellNativeAppWindowMac::Hide() {
|
| + NOTIMPLEMENTED();
|
| +}
|
| +
|
| +void ShellNativeAppWindowMac::Activate() {
|
| + // TODO(yoz): Activate in front of other applications.
|
| + [[window_controller_ window] makeKeyAndOrderFront:window_controller_];
|
| +}
|
| +
|
| +void ShellNativeAppWindowMac::Deactivate() {
|
| + // See crbug.com/51364.
|
| + NOTIMPLEMENTED();
|
| +}
|
| +
|
| +void ShellNativeAppWindowMac::SetBounds(const gfx::Rect& bounds) {
|
| + // TODO(yoz): Windows should be fullscreen.
|
| + NOTIMPLEMENTED();
|
| +}
|
| +
|
| +void ShellNativeAppWindowMac::WindowWillClose() {
|
| + [window_controller_ setAppWindow:NULL];
|
| + app_window()->OnNativeWindowChanged();
|
| + app_window()->OnNativeClose();
|
| +}
|
| +
|
| +ShellNSWindow* ShellNativeAppWindowMac::window() const {
|
| + NSWindow* window = [window_controller_ window];
|
| + CHECK(!window || [window isKindOfClass:[ShellNSWindow class]]);
|
| + return static_cast<ShellNSWindow*>(window);
|
| +}
|
| +
|
| +} // namespace extensions
|
|
|