Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Unified Diff: ui/views/widget/native_widget_aura.cc

Issue 1221193009: [Docking] Persists docked state for tab-less browser windows (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: [Docking] Persists docked state for tab-less browser windows (nits) Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/widget/native_widget_aura.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/widget/native_widget_aura.cc
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index aa0f3c727034a7712d9006b8b9e7998803942b58..8099626710db18abf5751e2c015403307ec4ff92 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -364,9 +364,10 @@ gfx::Rect NativeWidgetAura::GetRestoredBounds() const {
if (!window_)
return gfx::Rect();
- // Restored bounds should only be relevant if the window is minimized or
- // maximized. However, in some places the code expects GetRestoredBounds()
- // to return the current window bounds if the window is not in either state.
+ // Restored bounds should only be relevant if the window is minimized,
+ // maximized, fullscreen or docked. However, in some places the code expects
+ // GetRestoredBounds() to return the current window bounds if the window is
+ // not in either state.
if (IsMinimized() || IsMaximized() || IsFullscreen()) {
// Restore bounds are in screen coordinates, no need to convert.
gfx::Rect* restore_bounds =
@@ -374,7 +375,20 @@ gfx::Rect NativeWidgetAura::GetRestoredBounds() const {
if (restore_bounds)
return *restore_bounds;
}
- return window_->GetBoundsInScreen();
+ gfx::Rect bounds = window_->GetBoundsInScreen();
+ if (IsDocked()) {
+ // Restore bounds are in screen coordinates, no need to convert.
+ gfx::Rect* restore_bounds =
+ window_->GetProperty(aura::client::kRestoreBoundsKey);
+ // Use current window horizontal offset origin in order to preserve docked
+ // alignment but preserve restored size and vertical offset for the time
+ // when the |window_| gets undocked.
+ if (restore_bounds) {
+ bounds.set_size(restore_bounds->size());
+ bounds.set_y(restore_bounds->y());
+ }
+ }
+ return bounds;
}
void NativeWidgetAura::SetBounds(const gfx::Rect& bounds) {
@@ -467,8 +481,10 @@ void NativeWidgetAura::ShowWithWindowState(ui::WindowShowState state) {
if (!window_)
return;
- if (state == ui::SHOW_STATE_MAXIMIZED || state == ui::SHOW_STATE_FULLSCREEN)
+ if (state == ui::SHOW_STATE_MAXIMIZED || state == ui::SHOW_STATE_FULLSCREEN ||
+ state == ui::SHOW_STATE_DOCKED) {
window_->SetProperty(aura::client::kShowStateKey, state);
+ }
window_->Show();
if (delegate_->CanActivate()) {
if (state != ui::SHOW_STATE_INACTIVE)
@@ -958,6 +974,12 @@ NativeWidgetAura::~NativeWidgetAura() {
////////////////////////////////////////////////////////////////////////////////
// NativeWidgetAura, private:
+bool NativeWidgetAura::IsDocked() const {
+ return window_ &&
+ window_->GetProperty(aura::client::kShowStateKey) ==
+ ui::SHOW_STATE_DOCKED;
+}
+
void NativeWidgetAura::SetInitialFocus(ui::WindowShowState show_state) {
// The window does not get keyboard messages unless we focus it.
if (!GetWidget()->SetInitialFocus(show_state))
« no previous file with comments | « ui/views/widget/native_widget_aura.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698