From 5e62b5975b1406cd6e000575a3b1e437d65c83b4 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Wed, 24 Jun 2015 16:37:48 +0800 Subject: [PATCH] Move "id" and "fromId" to C++ --- atom/browser/api/atom_api_window.cc | 13 +++++++++++-- atom/browser/api/atom_api_window.h | 5 +++-- atom/browser/api/lib/browser-window.coffee | 8 -------- vendor/native_mate | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 21c6b32..317d5e4 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -435,6 +435,10 @@ bool Window::IsVisibleOnAllWorkspaces() { return window_->IsVisibleOnAllWorkspaces(); } +int32_t Window::ID() const { + return weak_map_id(); +} + v8::Local Window::WebContents(v8::Isolate* isolate) { if (web_contents_.IsEmpty()) { auto handle = @@ -518,6 +522,7 @@ void Window::BuildPrototype(v8::Isolate* isolate, .SetMethod("showDefinitionForSelection", &Window::ShowDefinitionForSelection) #endif + .SetProperty("id", &Window::ID) .SetProperty("webContents", &Window::WebContents) .SetProperty("devToolsWebContents", &Window::DevToolsWebContents); } @@ -529,14 +534,18 @@ void Window::BuildPrototype(v8::Isolate* isolate, namespace { +using atom::api::Window; + void Initialize(v8::Local exports, v8::Local unused, v8::Local context, void* priv) { - using atom::api::Window; v8::Isolate* isolate = context->GetIsolate(); v8::Local constructor = mate::CreateConstructor( isolate, "BrowserWindow", base::Bind(&Window::New)); + mate::Dictionary browser_window(isolate, constructor); + browser_window.SetMethod("fromId", &mate::TrackableObject::FromWeakMapID); + mate::Dictionary dict(isolate, exports); - dict.Set("BrowserWindow", static_cast>(constructor)); + dict.Set("BrowserWindow", browser_window); } } // namespace diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index d2b9d28..c6a3dd6 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -10,8 +10,8 @@ #include "base/memory/scoped_ptr.h" #include "ui/gfx/image/image.h" +#include "atom/browser/api/trackable_object.h" #include "atom/browser/native_window_observer.h" -#include "atom/browser/api/event_emitter.h" #include "native_mate/handle.h" class GURL; @@ -37,7 +37,7 @@ namespace api { class WebContents; -class Window : public mate::EventEmitter, +class Window : public mate::TrackableObject, public NativeWindowObserver { public: static mate::Wrappable* New(v8::Isolate* isolate, @@ -147,6 +147,7 @@ class Window : public mate::EventEmitter, void SetVisibleOnAllWorkspaces(bool visible); bool IsVisibleOnAllWorkspaces(); + int32_t ID() const; v8::Local WebContents(v8::Isolate* isolate); v8::Local DevToolsWebContents(v8::Isolate* isolate); diff --git a/atom/browser/api/lib/browser-window.coffee b/atom/browser/api/lib/browser-window.coffee index 475b98d..68144dd 100644 --- a/atom/browser/api/lib/browser-window.coffee +++ b/atom/browser/api/lib/browser-window.coffee @@ -15,11 +15,6 @@ BrowserWindow::_init = -> menu = app.getApplicationMenu() @setMenu menu if menu? - # Remember the window ID. - Object.defineProperty this, 'id', - value: BrowserWindow.windows.add(this) - enumerable: true - # Make new windows requested by links behave like "window.open" @on '-new-window', (event, url, frameName) => event.sender = @webContents @@ -63,9 +58,6 @@ BrowserWindow.fromDevToolsWebContents = (webContents) -> windows = BrowserWindow.getAllWindows() return window for window in windows when window.devToolsWebContents?.equal webContents -BrowserWindow.fromId = (id) -> - BrowserWindow.windows.get id if BrowserWindow.windows.has id - # Helpers. BrowserWindow::loadUrl = -> @webContents.loadUrl.apply @webContents, arguments BrowserWindow::send = -> @webContents.send.apply @webContents, arguments diff --git a/vendor/native_mate b/vendor/native_mate index cad1fa5..cc4e2fc 160000 --- a/vendor/native_mate +++ b/vendor/native_mate @@ -1 +1 @@ -Subproject commit cad1fa50a95ca4185c435846e4868d5bd6cc94df +Subproject commit cc4e2fcd94b5a22e6720f0fba1c586a89640f1f6 -- 2.7.4