diff --git a/atom/browser/native_window.cc b/atom/browser/native_window.cc index 0f757e8c6..292017805 100644 --- a/atom/browser/native_window.cc +++ b/atom/browser/native_window.cc @@ -192,7 +192,7 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) { int width = -1, height = -1; options.Get(switches::kWidth, &width); options.Get(switches::kHeight, &height); - Move(gfx::Rect(x, y, width, height)); + SetBounds(gfx::Rect(x, y, width, height)); } else if (options.Get(switches::kCenter, ¢er) && center) { Center(); } @@ -646,8 +646,7 @@ void NativeWindow::DeactivateContents(content::WebContents* contents) { void NativeWindow::MoveContents(content::WebContents* source, const gfx::Rect& pos) { - SetPosition(pos.origin()); - SetSize(pos.size()); + SetBounds(pos); } void NativeWindow::CloseContents(content::WebContents* source) { diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index d04769f17..720567158 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -98,7 +98,6 @@ class NativeWindow : public brightray::DefaultWebContentsDelegate, virtual void Close() = 0; virtual void CloseImmediately() = 0; - virtual void Move(const gfx::Rect& pos) = 0; virtual void Focus(bool focus) = 0; virtual bool IsFocused() = 0; virtual void Show() = 0; diff --git a/atom/browser/native_window_mac.h b/atom/browser/native_window_mac.h index 24d52664a..0fa3fe9cc 100644 --- a/atom/browser/native_window_mac.h +++ b/atom/browser/native_window_mac.h @@ -30,7 +30,6 @@ class NativeWindowMac : public NativeWindow { // NativeWindow implementation. void Close() override; void CloseImmediately() override; - void Move(const gfx::Rect& pos) override; void Focus(bool focus) override; bool IsFocused() override; void Show() override; @@ -46,7 +45,7 @@ class NativeWindowMac : public NativeWindow { void SetFullScreen(bool fullscreen) override; bool IsFullscreen() const override; void SetBounds(const gfx::Rect& bounds) override; - gfx::Rect GetBounds() override; + gfx::Rect GetBounds() override; void SetSize(const gfx::Size& size) override; gfx::Size GetSize() override; void SetContentSize(const gfx::Size& size) override; diff --git a/atom/browser/native_window_mac.mm b/atom/browser/native_window_mac.mm index d1cb82a2f..e2b58e96c 100644 --- a/atom/browser/native_window_mac.mm +++ b/atom/browser/native_window_mac.mm @@ -382,18 +382,6 @@ void NativeWindowMac::CloseImmediately() { [window_ close]; } -void NativeWindowMac::Move(const gfx::Rect& pos) { - NSRect cocoa_bounds = NSMakeRect(pos.x(), 0, - pos.width(), - pos.height()); - // Flip coordinates based on the primary screen. - NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; - cocoa_bounds.origin.y = - NSHeight([screen frame]) - pos.height() - pos.y(); - - [window_ setFrame:cocoa_bounds display:YES]; -} - void NativeWindowMac::Focus(bool focus) { if (!IsVisible()) return; @@ -471,12 +459,26 @@ bool NativeWindowMac::IsFullscreen() const { } void NativeWindowMac::SetBounds(const gfx::Rect& bounds) { - Move(bounds); + NSRect cocoa_bounds = NSMakeRect(bounds.x(), 0, + bounds.width(), + bounds.height()); + // Flip coordinates based on the primary screen. + NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; + cocoa_bounds.origin.y = + NSHeight([screen frame]) - bounds.height() - bounds.y(); + + [window_ setFrame:cocoa_bounds display:YES]; } gfx::Rect NativeWindowMac::GetBounds() { - return gfx::Rect(GetPosition(), - GetSize()); + NSRect frame = [window_ frame]; + NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; + + gfx::Point pos(frame.origin.x, + NSHeight([screen frame]) - frame.origin.y - frame.size.height); + gfx::Size size(frame.size.width, frame.size.height); + + return gfx::Rect(pos, size); } void NativeWindowMac::SetSize(const gfx::Size& size) { @@ -489,8 +491,7 @@ void NativeWindowMac::SetSize(const gfx::Size& size) { } gfx::Size NativeWindowMac::GetSize() { - NSRect frame = [window_ frame]; - return gfx::Size(frame.size.width, frame.size.height); + return GetBounds().size(); } void NativeWindowMac::SetContentSize(const gfx::Size& size) { @@ -564,15 +565,11 @@ void NativeWindowMac::Center() { } void NativeWindowMac::SetPosition(const gfx::Point& position) { - Move(gfx::Rect(position, GetSize())); + SetBounds(gfx::Rect(position, GetSize())); } gfx::Point NativeWindowMac::GetPosition() { - NSRect frame = [window_ frame]; - NSScreen* screen = [[NSScreen screens] objectAtIndex:0]; - - return gfx::Point(frame.origin.x, - NSHeight([screen frame]) - frame.origin.y - frame.size.height); + return GetBounds().origin(); } void NativeWindowMac::SetTitle(const std::string& title) { diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index d8eed6400..3b283ddbe 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -291,10 +291,6 @@ void NativeWindowViews::CloseImmediately() { window_->CloseNow(); } -void NativeWindowViews::Move(const gfx::Rect& bounds) { - window_->SetBounds(bounds); -} - void NativeWindowViews::Focus(bool focus) { if (focus) window_->Activate(); @@ -374,11 +370,25 @@ bool NativeWindowViews::IsFullscreen() const { } void NativeWindowViews::SetBounds(const gfx::Rect& bounds) { - window_->SetBoundsConstrained(bounds); +#if defined(USE_X11) + // On Linux the minimum and maximum size should be updated with window size + // when window is not resizable. + if (!resizable_) { + SetMaximumSize(bounds.size()); + SetMinimumSize(bounds.size()); + } +#endif + + window_->SetBounds(bounds); } gfx::Rect NativeWindowViews::GetBounds() { - return window_->GetRestoredBounds(); +#if defined(OS_WIN) + if (IsMinimized()) + return window_->GetRestoredBounds(); +#endif + + return window_->GetWindowBoundsInScreen(); } void NativeWindowViews::SetSize(const gfx::Size& size) { @@ -395,12 +405,7 @@ void NativeWindowViews::SetSize(const gfx::Size& size) { } gfx::Size NativeWindowViews::GetSize() { -#if defined(OS_WIN) - if (IsMinimized()) - return window_->GetRestoredBounds().size(); -#endif - - return window_->GetWindowBoundsInScreen().size(); + return GetBounds().size(); } void NativeWindowViews::SetContentSize(const gfx::Size& size) { diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 020e34933..978aac826 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -35,7 +35,6 @@ class NativeWindowViews : public NativeWindow, // NativeWindow: void Close() override; void CloseImmediately() override; - void Move(const gfx::Rect& pos) override; void Focus(bool focus) override; bool IsFocused() override; void Show() override;