From fd42e3dc84ce1fe488e8e25172f58c050b485f13 Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 17 Jun 2016 15:28:43 +0900 Subject: [PATCH] mac: Add win.setParentWindow(parent) API --- atom/browser/api/atom_api_window.cc | 5 +++++ atom/browser/api/atom_api_window.h | 1 + atom/browser/native_window.h | 1 + atom/browser/native_window_mac.h | 1 + atom/browser/native_window_mac.mm | 10 ++++++++++ atom/browser/native_window_views.cc | 3 +++ atom/browser/native_window_views.h | 1 + 7 files changed, 22 insertions(+) diff --git a/atom/browser/api/atom_api_window.cc b/atom/browser/api/atom_api_window.cc index 0d72a74f7d..90d4a08609 100644 --- a/atom/browser/api/atom_api_window.cc +++ b/atom/browser/api/atom_api_window.cc @@ -650,6 +650,10 @@ void Window::SetAspectRatio(double aspect_ratio, mate::Arguments* args) { window_->SetAspectRatio(aspect_ratio, extra_size); } +void Window::SetParentWindow(NativeWindow* parent) { + window_->SetParentWindow(parent); +} + v8::Local Window::GetNativeWindowHandle() { gfx::AcceleratedWidget handle = window_->GetAcceleratedWidget(); return ToBuffer( @@ -697,6 +701,7 @@ void Window::BuildPrototype(v8::Isolate* isolate, .SetMethod("setFullScreen", &Window::SetFullScreen) .SetMethod("isFullScreen", &Window::IsFullscreen) .SetMethod("setAspectRatio", &Window::SetAspectRatio) + .SetMethod("setParentWindow", &Window::SetParentWindow) .SetMethod("getNativeWindowHandle", &Window::GetNativeWindowHandle) .SetMethod("getBounds", &Window::GetBounds) .SetMethod("setBounds", &Window::SetBounds) diff --git a/atom/browser/api/atom_api_window.h b/atom/browser/api/atom_api_window.h index 9d3f7ef240..fb78b6deb5 100644 --- a/atom/browser/api/atom_api_window.h +++ b/atom/browser/api/atom_api_window.h @@ -159,6 +159,7 @@ class Window : public mate::TrackableObject, void SetMenuBarVisibility(bool visible); bool IsMenuBarVisible(); void SetAspectRatio(double aspect_ratio, mate::Arguments* args); + void SetParentWindow(NativeWindow* parent); v8::Local GetNativeWindowHandle(); #if defined(OS_WIN) diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index a644682e34..8dd3dc5f33 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -158,6 +158,7 @@ class NativeWindow : public base::SupportsUserData, virtual void SetFocusable(bool focusable); virtual void SetMenu(ui::MenuModel* menu); virtual bool HasModalDialog(); + virtual void SetParentWindow(NativeWindow* parent) = 0; virtual gfx::NativeWindow GetNativeWindow() = 0; virtual gfx::AcceleratedWidget GetAcceleratedWidget() = 0; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 899043fd6a..2e0b769d2a 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -78,6 +78,7 @@ class NativeWindowMac : public NativeWindow { bool IsDocumentEdited() override; void SetIgnoreMouseEvents(bool ignore) override; bool HasModalDialog() override; + void SetParentWindow(NativeWindow* parent) override; gfx::NativeWindow GetNativeWindow() override; gfx::AcceleratedWidget GetAcceleratedWidget() override; void SetProgressBar(double progress) override; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index e15ff0c6ce..b7e71f749e 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -911,6 +911,16 @@ bool NativeWindowMac::HasModalDialog() { return [window_ attachedSheet] != nil; } +void NativeWindowMac::SetParentWindow(NativeWindow* parent) { + // Remove current parent window. + if ([window_ parentWindow]) + [[window_ parentWindow] removeChildWindow:window_]; + + // Set new current window. + if (parent) + [parent->GetNativeWindow() addChildWindow:window_ ordered:NSWindowAbove]; +} + gfx::NativeWindow NativeWindowMac::GetNativeWindow() { return window_; } diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index 021ceba005..ca93bb08a4 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -772,6 +772,9 @@ void NativeWindowViews::SetMenu(ui::MenuModel* menu_model) { Layout(); } +void NativeWindowViews::SetParentWindow(NativeWindow* parent) { +} + gfx::NativeWindow NativeWindowViews::GetNativeWindow() { return window_->GetNativeWindow(); } diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 5377420374..2c63270815 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -94,6 +94,7 @@ class NativeWindowViews : public NativeWindow, void SetIgnoreMouseEvents(bool ignore) override; void SetFocusable(bool focusable) override; void SetMenu(ui::MenuModel* menu_model) override; + void SetParentWindow(NativeWindow* parent) override; gfx::NativeWindow GetNativeWindow() override; void SetOverlayIcon(const gfx::Image& overlay, const std::string& description) override;