Add webContents.isFocused()

This commit is contained in:
Kevin Sawicki 2016-07-13 08:54:40 -07:00
parent 6d2e633c82
commit 7877fa7c0a
5 changed files with 43 additions and 0 deletions

View file

@ -789,6 +789,13 @@ WebContents::Type WebContents::GetType() const {
return type_; return type_;
} }
#if !defined(OS_MACOSX)
bool WebContents::IsFocused() const {
auto view = web_contents()->GetRenderWidgetHostView();
return view && view->HasFocus();
}
#endif
bool WebContents::Equal(const WebContents* web_contents) const { bool WebContents::Equal(const WebContents* web_contents) const {
return GetID() == web_contents->GetID(); return GetID() == web_contents->GetID();
} }
@ -1418,6 +1425,7 @@ void WebContents::BuildPrototype(v8::Isolate* isolate,
.SetMethod("showDefinitionForSelection", .SetMethod("showDefinitionForSelection",
&WebContents::ShowDefinitionForSelection) &WebContents::ShowDefinitionForSelection)
.SetMethod("capturePage", &WebContents::CapturePage) .SetMethod("capturePage", &WebContents::CapturePage)
.SetMethod("isFocused", &WebContents::IsFocused)
.SetProperty("id", &WebContents::ID) .SetProperty("id", &WebContents::ID)
.SetProperty("session", &WebContents::Session) .SetProperty("session", &WebContents::Session)
.SetProperty("hostWebContents", &WebContents::HostWebContents) .SetProperty("hostWebContents", &WebContents::HostWebContents)

View file

@ -67,6 +67,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
int GetID() const; int GetID() const;
Type GetType() const; Type GetType() const;
bool IsFocused() const;
bool Equal(const WebContents* web_contents) const; bool Equal(const WebContents* web_contents) const;
void LoadURL(const GURL& url, const mate::Dictionary& options); void LoadURL(const GURL& url, const mate::Dictionary& options);
void DownloadURL(const GURL& url); void DownloadURL(const GURL& url);

View file

@ -0,0 +1,30 @@
// Copyright (c) 2016 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/atom_api_web_contents.h"
@interface NSWindow
- (BOOL)isKeyWindow;
@end
namespace atom {
namespace api {
bool WebContents::IsFocused() const {
if (GetType() != BACKGROUND_PAGE) {
auto window = web_contents()->GetTopLevelNativeWindow();
// On Mac the render widget host view does not lose focus when the window
// loses focus so check if the top level window is the key window.
if (window && ![window isKeyWindow])
return false;
}
auto view = web_contents()->GetRenderWidgetHostView();
return view && view->HasFocus();
}
} // namespace api
} // namespace atom

View file

@ -129,6 +129,7 @@
'atom/browser/api/atom_api_system_preferences_mac.mm', 'atom/browser/api/atom_api_system_preferences_mac.mm',
'atom/browser/api/atom_api_tray.cc', 'atom/browser/api/atom_api_tray.cc',
'atom/browser/api/atom_api_tray.h', 'atom/browser/api/atom_api_tray.h',
'atom/browser/api/atom_api_web_contents_mac.mm',
'atom/browser/api/atom_api_web_contents.cc', 'atom/browser/api/atom_api_web_contents.cc',
'atom/browser/api/atom_api_web_contents.h', 'atom/browser/api/atom_api_web_contents.h',
'atom/browser/api/atom_api_web_request.cc', 'atom/browser/api/atom_api_web_request.cc',

View file

@ -244,5 +244,8 @@ module.exports = {
fromId (id) { fromId (id) {
return binding.fromId(id) return binding.fromId(id)
},
getAllWebContents () {
return binding.getAllWebContents()
} }
} }