diff options
author | mazda@chromium.org <mazda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 23:08:30 +0000 |
---|---|---|
committer | mazda@chromium.org <mazda@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-17 23:08:30 +0000 |
commit | ced29a71e4b701010a4de6a0de67f79842858853 (patch) | |
tree | fd628af4be7619a89f01663c51eac2ca91a13bff /ui | |
parent | d318a889e90bc5083b7edd4dd30d8797111767f5 (diff) | |
download | chromium_src-ced29a71e4b701010a4de6a0de67f79842858853.zip chromium_src-ced29a71e4b701010a4de6a0de67f79842858853.tar.gz chromium_src-ced29a71e4b701010a4de6a0de67f79842858853.tar.bz2 |
Use Layer's target visibility instead of the current visibility in Window::SetVisible.
Widget::Show does not take effect if it's called while the hide animation is running.
This CL modifies Window::SetVisible to check Layer's target visibility instead of Layer's current visibility so that Window::Show takes effect even when Window::Hide followed immediately by Window::Show.
Also modified the widnow animation code so that Layer's target visibility is correctly set.
BUG=127863
TEST=Tried repro steps (see BUG) and didn't crash. Passed aura_unittests and aura_shell_unittests.
Review URL: https://chromiumcodereview.appspot.com/10387146
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137764 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/aura/window.cc | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/ui/aura/window.cc b/ui/aura/window.cc index 4128d90..1bdd6c7 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc @@ -596,17 +596,15 @@ void Window::SetBoundsInternal(const gfx::Rect& new_bounds) { } void Window::SetVisible(bool visible) { - if (visible == layer_->visible()) + if (visible == layer_->GetTargetVisibility()) return; // No change. - if (visible != layer_->visible()) { - RootWindow* root_window = GetRootWindow(); - if (client::GetVisibilityClient(root_window)) { - client::GetVisibilityClient(root_window)->UpdateLayerVisibility( - this, visible); - } else { - layer_->SetVisible(visible); - } + RootWindow* root_window = GetRootWindow(); + if (client::GetVisibilityClient(root_window)) { + client::GetVisibilityClient(root_window)->UpdateLayerVisibility( + this, visible); + } else { + layer_->SetVisible(visible); } visible_ = visible; SchedulePaint(); @@ -618,7 +616,6 @@ void Window::SetVisible(bool visible) { FOR_EACH_OBSERVER(WindowObserver, observers_, OnWindowVisibilityChanged(this, visible)); - RootWindow* root_window = GetRootWindow(); if (root_window) root_window->OnWindowVisibilityChanged(this, visible); } |