OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/views/widget/native_widget_aura.h" | 5 #include "ui/views/widget/native_widget_aura.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 // maximized, fullscreen or docked. However, in some places the code expects | 433 // maximized, fullscreen or docked. However, in some places the code expects |
434 // GetRestoredBounds() to return the current window bounds if the window is | 434 // GetRestoredBounds() to return the current window bounds if the window is |
435 // not in either state. | 435 // not in either state. |
436 if (IsMinimized() || IsMaximized() || IsFullscreen()) { | 436 if (IsMinimized() || IsMaximized() || IsFullscreen()) { |
437 // Restore bounds are in screen coordinates, no need to convert. | 437 // Restore bounds are in screen coordinates, no need to convert. |
438 gfx::Rect* restore_bounds = | 438 gfx::Rect* restore_bounds = |
439 window_->GetProperty(aura::client::kRestoreBoundsKey); | 439 window_->GetProperty(aura::client::kRestoreBoundsKey); |
440 if (restore_bounds) | 440 if (restore_bounds) |
441 return *restore_bounds; | 441 return *restore_bounds; |
442 } | 442 } |
443 gfx::Rect bounds = window_->GetBoundsInScreen(); | 443 return window_->GetBoundsInScreen(); |
444 if (IsDocked()) { | |
445 // Restore bounds are in screen coordinates, no need to convert. | |
446 gfx::Rect* restore_bounds = | |
447 window_->GetProperty(aura::client::kRestoreBoundsKey); | |
448 // Use current window horizontal offset origin in order to preserve docked | |
449 // alignment but preserve restored size and vertical offset for the time | |
450 // when the |window_| gets undocked. | |
451 if (restore_bounds) { | |
452 bounds.set_size(restore_bounds->size()); | |
453 bounds.set_y(restore_bounds->y()); | |
454 } | |
455 } | |
456 return bounds; | |
457 } | 444 } |
458 | 445 |
459 std::string NativeWidgetAura::GetWorkspace() const { | 446 std::string NativeWidgetAura::GetWorkspace() const { |
460 return std::string(); | 447 return std::string(); |
461 } | 448 } |
462 | 449 |
463 void NativeWidgetAura::SetBounds(const gfx::Rect& bounds) { | 450 void NativeWidgetAura::SetBounds(const gfx::Rect& bounds) { |
464 if (!window_) | 451 if (!window_) |
465 return; | 452 return; |
466 | 453 |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 void NativeWidgetAura::ShowMaximizedWithBounds( | 521 void NativeWidgetAura::ShowMaximizedWithBounds( |
535 const gfx::Rect& restored_bounds) { | 522 const gfx::Rect& restored_bounds) { |
536 SetRestoreBounds(window_, restored_bounds); | 523 SetRestoreBounds(window_, restored_bounds); |
537 ShowWithWindowState(ui::SHOW_STATE_MAXIMIZED); | 524 ShowWithWindowState(ui::SHOW_STATE_MAXIMIZED); |
538 } | 525 } |
539 | 526 |
540 void NativeWidgetAura::ShowWithWindowState(ui::WindowShowState state) { | 527 void NativeWidgetAura::ShowWithWindowState(ui::WindowShowState state) { |
541 if (!window_) | 528 if (!window_) |
542 return; | 529 return; |
543 | 530 |
544 // TODO(afakhry): Remove Docked Windows in M58. | 531 if (state == ui::SHOW_STATE_MAXIMIZED || state == ui::SHOW_STATE_FULLSCREEN) |
545 if (state == ui::SHOW_STATE_MAXIMIZED || state == ui::SHOW_STATE_FULLSCREEN || | |
546 state == ui::SHOW_STATE_DOCKED) { | |
547 window_->SetProperty(aura::client::kShowStateKey, state); | 532 window_->SetProperty(aura::client::kShowStateKey, state); |
548 } | |
549 window_->Show(); | 533 window_->Show(); |
550 if (delegate_->CanActivate()) { | 534 if (delegate_->CanActivate()) { |
551 if (state != ui::SHOW_STATE_INACTIVE) | 535 if (state != ui::SHOW_STATE_INACTIVE) |
552 Activate(); | 536 Activate(); |
553 // SetInitialFocus() should be always be called, even for | 537 // SetInitialFocus() should be always be called, even for |
554 // SHOW_STATE_INACTIVE. If the window has to stay inactive, the method will | 538 // SHOW_STATE_INACTIVE. If the window has to stay inactive, the method will |
555 // do the right thing. | 539 // do the right thing. |
556 // Activate() might fail if the window is non-activatable. In this case, we | 540 // Activate() might fail if the window is non-activatable. In this case, we |
557 // should pass SHOW_STATE_INACTIVE to SetInitialFocus() to stop the initial | 541 // should pass SHOW_STATE_INACTIVE to SetInitialFocus() to stop the initial |
558 // focused view from getting focused. See crbug.com/515594 for example. | 542 // focused view from getting focused. See crbug.com/515594 for example. |
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
993 destroying_ = true; | 977 destroying_ = true; |
994 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) | 978 if (ownership_ == Widget::InitParams::NATIVE_WIDGET_OWNS_WIDGET) |
995 delete delegate_; | 979 delete delegate_; |
996 else | 980 else |
997 CloseNow(); | 981 CloseNow(); |
998 } | 982 } |
999 | 983 |
1000 //////////////////////////////////////////////////////////////////////////////// | 984 //////////////////////////////////////////////////////////////////////////////// |
1001 // NativeWidgetAura, private: | 985 // NativeWidgetAura, private: |
1002 | 986 |
1003 // TODO(afakhry): Remove Docked Windows in M58. | |
1004 bool NativeWidgetAura::IsDocked() const { | |
1005 return window_ && | |
1006 window_->GetProperty(aura::client::kShowStateKey) == | |
1007 ui::SHOW_STATE_DOCKED; | |
1008 } | |
1009 | |
1010 void NativeWidgetAura::SetInitialFocus(ui::WindowShowState show_state) { | 987 void NativeWidgetAura::SetInitialFocus(ui::WindowShowState show_state) { |
1011 // The window does not get keyboard messages unless we focus it. | 988 // The window does not get keyboard messages unless we focus it. |
1012 if (!GetWidget()->SetInitialFocus(show_state)) | 989 if (!GetWidget()->SetInitialFocus(show_state)) |
1013 window_->Focus(); | 990 window_->Focus(); |
1014 } | 991 } |
1015 | 992 |
1016 //////////////////////////////////////////////////////////////////////////////// | 993 //////////////////////////////////////////////////////////////////////////////// |
1017 // Widget, public: | 994 // Widget, public: |
1018 | 995 |
1019 namespace { | 996 namespace { |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1212 gfx::NativeView native_view) { | 1189 gfx::NativeView native_view) { |
1213 aura::client::CaptureClient* capture_client = | 1190 aura::client::CaptureClient* capture_client = |
1214 aura::client::GetCaptureClient(native_view->GetRootWindow()); | 1191 aura::client::GetCaptureClient(native_view->GetRootWindow()); |
1215 if (!capture_client) | 1192 if (!capture_client) |
1216 return nullptr; | 1193 return nullptr; |
1217 return capture_client->GetGlobalCaptureWindow(); | 1194 return capture_client->GetGlobalCaptureWindow(); |
1218 } | 1195 } |
1219 | 1196 |
1220 } // namespace internal | 1197 } // namespace internal |
1221 } // namespace views | 1198 } // namespace views |
OLD | NEW |