Add webContents.isFocused()
authorKevin Sawicki <kevinsawicki@gmail.com>
Wed, 13 Jul 2016 15:54:40 +0000 (08:54 -0700)
committerKevin Sawicki <kevinsawicki@gmail.com>
Wed, 13 Jul 2016 21:16:56 +0000 (14:16 -0700)
atom/browser/api/atom_api_web_contents.cc
atom/browser/api/atom_api_web_contents.h
atom/browser/api/atom_api_web_contents_mac.mm [new file with mode: 0644]
filenames.gypi
lib/browser/api/web-contents.js

index 8622942..43e078d 100644 (file)
@@ -789,6 +789,13 @@ WebContents::Type WebContents::GetType() const {
   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 {
   return GetID() == web_contents->GetID();
 }
@@ -1418,6 +1425,7 @@ void WebContents::BuildPrototype(v8::Isolate* isolate,
       .SetMethod("showDefinitionForSelection",
                  &WebContents::ShowDefinitionForSelection)
       .SetMethod("capturePage", &WebContents::CapturePage)
+      .SetMethod("isFocused", &WebContents::IsFocused)
       .SetProperty("id", &WebContents::ID)
       .SetProperty("session", &WebContents::Session)
       .SetProperty("hostWebContents", &WebContents::HostWebContents)
index 3895503..5e1a487 100644 (file)
@@ -67,6 +67,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
 
   int GetID() const;
   Type GetType() const;
+  bool IsFocused() const;
   bool Equal(const WebContents* web_contents) const;
   void LoadURL(const GURL& url, const mate::Dictionary& options);
   void DownloadURL(const GURL& url);
diff --git a/atom/browser/api/atom_api_web_contents_mac.mm b/atom/browser/api/atom_api_web_contents_mac.mm
new file mode 100644 (file)
index 0000000..19246e8
--- /dev/null
@@ -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
index c809a2e..0ca3859 100644 (file)
       'atom/browser/api/atom_api_system_preferences_mac.mm',
       'atom/browser/api/atom_api_tray.cc',
       '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.h',
       'atom/browser/api/atom_api_web_request.cc',
index dcd14a4..e418077 100644 (file)
@@ -244,5 +244,8 @@ module.exports = {
 
   fromId (id) {
     return binding.fromId(id)
+  },
+  getAllWebContents () {
+    return binding.getAllWebContents()
   }
 }