diff --git a/browser/native_window_mac.mm b/browser/native_window_mac.mm index 1dca1c6f7069..9ef68f42c515 100644 --- a/browser/native_window_mac.mm +++ b/browser/native_window_mac.mm @@ -29,18 +29,26 @@ static const CGFloat kAtomWindowCornerRadius = 4.0; @interface AtomNSWindowDelegate : NSObject { @private atom::NativeWindowMac* shell_; + BOOL acceptsFirstMouse_; } - (id)initWithShell:(atom::NativeWindowMac*)shell; +- (void)setAcceptsFirstMouse:(BOOL)accept; @end @implementation AtomNSWindowDelegate - (id)initWithShell:(atom::NativeWindowMac*)shell { - if ((self = [super init])) + if ((self = [super init])) { shell_ = shell; + acceptsFirstMouse_ = NO; + } return self; } +- (void)setAcceptsFirstMouse:(BOOL)accept { + acceptsFirstMouse_ = accept; +} + - (void)windowDidResignMain:(NSNotification*)notification { shell_->NotifyWindowBlur(); } @@ -50,6 +58,13 @@ static const CGFloat kAtomWindowCornerRadius = 4.0; shell_->ClipWebView(); } +- (void)windowDidExitFullScreen:(NSNotification*)notification { + if (!shell_->has_frame()) { + NSWindow* window = shell_->GetNativeWindow(); + [[window standardWindowButton:NSWindowFullScreenButton] setHidden:YES]; + } +} + - (void)windowWillClose:(NSNotification*)notification { shell_->window() = nil; [self autorelease]; @@ -63,11 +78,8 @@ static const CGFloat kAtomWindowCornerRadius = 4.0; return NO; } -- (void)windowDidExitFullScreen:(NSNotification*)notification { - if (!shell_->has_frame()) { - NSWindow* window = shell_->GetNativeWindow(); - [[window standardWindowButton:NSWindowFullScreenButton] setHidden:YES]; - } +- (BOOL)acceptsFirstMouse:(NSEvent*)event { + return acceptsFirstMouse_; } @end @@ -77,7 +89,6 @@ static const CGFloat kAtomWindowCornerRadius = 4.0; atom::NativeWindowMac* shell_; } - (void)setShell:(atom::NativeWindowMac*)shell; -- (IBAction)showDevTools:(id)sender; @end @implementation AtomNSWindow @@ -162,7 +173,14 @@ NativeWindowMac::NativeWindowMac(content::WebContents* web_contents, [atomWindow setShell:this]; window_ = atomWindow; - [window() setDelegate:[[AtomNSWindowDelegate alloc] initWithShell:this]]; + AtomNSWindowDelegate* delegate = + [[AtomNSWindowDelegate alloc] initWithShell:this]; + [window() setDelegate:delegate]; + + // Enable the NSView to accept first mouse event. + bool acceptsFirstMouse = false; + options->GetBoolean(switches::kAcceptFirstMouse, &acceptsFirstMouse); + [delegate setAcceptsFirstMouse:acceptsFirstMouse]; // Disable fullscreen button when 'fullscreen' is specified to false. bool fullscreen; diff --git a/common/options_switches.cc b/common/options_switches.cc index f3d849ef176c..9e29340276e3 100644 --- a/common/options_switches.cc +++ b/common/options_switches.cc @@ -33,6 +33,9 @@ const char kAlwaysOnTop[] = "always-on-top"; const char kNodeIntegration[] = "node-integration"; +// Enable the NSView to accept first mouse event. +const char kAcceptFirstMouse[] = "accept-first-mouse"; + } // namespace switches } // namespace atom diff --git a/common/options_switches.h b/common/options_switches.h index ad6b68b2eaa5..b46f46821323 100644 --- a/common/options_switches.h +++ b/common/options_switches.h @@ -27,6 +27,7 @@ extern const char kFullscreen[]; extern const char kKiosk[]; extern const char kAlwaysOnTop[]; extern const char kNodeIntegration[]; +extern const char kAcceptFirstMouse[]; } // namespace switches diff --git a/docs/api/browser/browser-window.md b/docs/api/browser/browser-window.md index b2bfe8382082..deccc53f512a 100644 --- a/docs/api/browser/browser-window.md +++ b/docs/api/browser/browser-window.md @@ -43,6 +43,8 @@ You can also create a window without chrome by using [Frameless Window](frameless-window.md) * `node-integration` String - Can be `all`, `except-iframe`, `manual-enable-iframe` or `disable`. + * `accept-first-mouse` Boolean - Whether the web view accepts a single + mouse-down event that simultaneously activates the window Creates a new `BrowserWindow` with native properties set by the `options`. Usually you only need to set the `width` and `height`, other properties will diff --git a/script/lib/config.py b/script/lib/config.py index 8bd05175aa84..dbf09ea7244d 100644 --- a/script/lib/config.py +++ b/script/lib/config.py @@ -2,4 +2,4 @@ NODE_VERSION = 'v0.11.10' BASE_URL = 'https://gh-contractor-zcbenz.s3.amazonaws.com/libchromiumcontent' -LIBCHROMIUMCONTENT_COMMIT = '607907aed2c1dcdd3b5968a756a990ba3f47bca7' +LIBCHROMIUMCONTENT_COMMIT = '276722e68bb643e3ae3b468b701c276aeb884838'