Add IsDevToolsViewFocused method

This commit is contained in:
Cheng Zhao 2015-09-15 11:04:46 +08:00
parent 9d7fbdfd8e
commit c30f458d4f
7 changed files with 54 additions and 0 deletions

View file

@ -18,6 +18,7 @@ using brightray::InspectableWebContentsViewMac;
base::scoped_nsobject<NSWindow> devtools_window_;
BOOL devtools_visible_;
BOOL devtools_docked_;
BOOL devtools_is_first_responder_;
DevToolsContentsResizingStrategy strategy_;
}
@ -25,6 +26,7 @@ using brightray::InspectableWebContentsViewMac;
- (instancetype)initWithInspectableWebContentsViewMac:(InspectableWebContentsViewMac*)view;
- (void)setDevToolsVisible:(BOOL)visible;
- (BOOL)isDevToolsVisible;
- (BOOL)isDevToolsFocused;
- (void)setIsDocked:(BOOL)docked;
- (void)setContentsResizingStrategy:(const DevToolsContentsResizingStrategy&)strategy;
- (void)setTitle:(NSString*)title;

View file

@ -19,6 +19,13 @@ using namespace brightray;
inspectableWebContentsView_ = view;
devtools_visible_ = NO;
devtools_docked_ = NO;
devtools_is_first_responder_ = NO;
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(viewDidBecomeFirstResponder:)
name:kViewDidBecomeFirstResponder
object:nil];
auto contents = inspectableWebContentsView_->inspectable_web_contents()->GetWebContents();
auto contentsView = contents->GetNativeView();
@ -86,6 +93,14 @@ using namespace brightray;
return devtools_visible_;
}
- (BOOL)isDevToolsFocused {
if (devtools_docked_) {
return [[self window] isKeyWindow] && devtools_is_first_responder_;
} else {
return [devtools_window_ isKeyWindow];
}
}
- (void)setIsDocked:(BOOL)docked {
// Revert to no-devtools state.
[self setDevToolsVisible:NO];
@ -156,6 +171,29 @@ using namespace brightray;
[devtools_window_ setTitle:title];
}
- (void)viewDidBecomeFirstResponder:(NSNotification*)notification {
auto inspectable_web_contents = inspectableWebContentsView_->inspectable_web_contents();
if (!inspectable_web_contents)
return;
auto webContents = inspectable_web_contents->GetWebContents();
auto webContentsView = webContents->GetNativeView();
NSView* view = [notification object];
if ([[webContentsView subviews] containsObject:view]) {
devtools_is_first_responder_ = NO;
return;
}
auto devToolsWebContents = inspectable_web_contents->GetDevToolsWebContents();
if (!devToolsWebContents)
return;
auto devToolsView = devToolsWebContents->GetNativeView();
if ([[devToolsView subviews] containsObject:view]) {
devtools_is_first_responder_ = YES;
}
}
#pragma mark - NSWindowDelegate
- (void)windowWillClose:(NSNotification*)notification {