diff options
author | beng@google.com <beng@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-27 19:08:10 +0000 |
---|---|---|
committer | beng@google.com <beng@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-02-27 19:08:10 +0000 |
commit | bfe541c8b59c5a88b6d007039198cf12daf7fc56 (patch) | |
tree | 3e7092b95f5e6b7ed5f6a195ad7c55e7a2e7b658 /ui | |
parent | 90cf2d8177b536b87d97890a71ef3693af6cfa57 (diff) | |
download | chromium_src-bfe541c8b59c5a88b6d007039198cf12daf7fc56.zip chromium_src-bfe541c8b59c5a88b6d007039198cf12daf7fc56.tar.gz chromium_src-bfe541c8b59c5a88b6d007039198cf12daf7fc56.tar.bz2 |
Moves stacking client to Env.
It can't live on the RootWindow since there's no way to locate a relevant RootWindow when it is called.
http://crbug.com/112131
TEST=none
Review URL: https://chromiumcodereview.appspot.com/9464048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@123773 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/aura/aura.gyp | 2 | ||||
-rw-r--r-- | ui/aura/client/stacking_client.cc | 14 | ||||
-rw-r--r-- | ui/aura/env.cc | 2 | ||||
-rw-r--r-- | ui/aura/env.h | 7 | ||||
-rw-r--r-- | ui/aura/test/aura_test_base.cc | 4 | ||||
-rw-r--r-- | ui/aura/test/aura_test_base.h | 2 | ||||
-rw-r--r-- | ui/aura/test/test_stacking_client.cc | 26 | ||||
-rw-r--r-- | ui/aura/test/test_stacking_client.h | 35 | ||||
-rw-r--r-- | ui/aura/window.cc | 2 | ||||
-rw-r--r-- | ui/views/test/views_test_base.cc | 4 | ||||
-rw-r--r-- | ui/views/test/views_test_base.h | 2 | ||||
-rw-r--r-- | ui/views/widget/native_widget_aura_unittest.cc | 5 |
12 files changed, 91 insertions, 14 deletions
diff --git a/ui/aura/aura.gyp b/ui/aura/aura.gyp index d70dabf..bc89200 100644 --- a/ui/aura/aura.gyp +++ b/ui/aura/aura.gyp @@ -125,6 +125,8 @@ 'test/test_activation_client.h', 'test/test_event_filter.cc', 'test/test_event_filter.h', + 'test/test_stacking_client.cc', + 'test/test_stacking_client.h', 'test/test_windows.cc', 'test/test_windows.h', 'test/test_window_delegate.cc', diff --git a/ui/aura/client/stacking_client.cc b/ui/aura/client/stacking_client.cc index 9956391..cdf60f4 100644 --- a/ui/aura/client/stacking_client.cc +++ b/ui/aura/client/stacking_client.cc @@ -4,6 +4,7 @@ #include "ui/aura/client/stacking_client.h" +#include "ui/aura/env.h" #include "ui/aura/root_window.h" #include "ui/aura/window_property.h" @@ -11,23 +12,14 @@ DECLARE_WINDOW_PROPERTY_TYPE(aura::client::StackingClient*) namespace aura { namespace client { -namespace { - -// A property key to store a client that handles window parenting. -const WindowProperty<StackingClient*> kRootWindowStackingClientProp = {NULL}; -const WindowProperty<StackingClient*>* const - kRootWindowStackingClientKey = &kRootWindowStackingClientProp; - -} // namespace void SetStackingClient(StackingClient* stacking_client) { - RootWindow::GetInstance()->SetProperty(kRootWindowStackingClientKey, - stacking_client); + Env::GetInstance()->set_stacking_client(stacking_client); } // static StackingClient* GetStackingClient() { - return RootWindow::GetInstance()->GetProperty(kRootWindowStackingClientKey); + return Env::GetInstance()->stacking_client(); } } // namespace client diff --git a/ui/aura/env.cc b/ui/aura/env.cc index 5299f1f..7fa84fb9 100644 --- a/ui/aura/env.cc +++ b/ui/aura/env.cc @@ -15,7 +15,7 @@ Env* Env::instance_ = NULL; //////////////////////////////////////////////////////////////////////////////// // Env, public: -Env::Env() { +Env::Env() : stacking_client_(NULL) { #if !defined(OS_MACOSX) dispatcher_.reset(CreateDispatcher()); #endif diff --git a/ui/aura/env.h b/ui/aura/env.h index 738433c..6a2ced9 100644 --- a/ui/aura/env.h +++ b/ui/aura/env.h @@ -10,6 +10,7 @@ #include "base/message_loop.h" #include "base/observer_list.h" #include "ui/aura/aura_export.h" +#include "ui/aura/client/stacking_client.h" namespace aura { @@ -39,6 +40,11 @@ class AURA_EXPORT Env { void AddObserver(EnvObserver* observer); void RemoveObserver(EnvObserver* observer); + client::StackingClient* stacking_client() { return stacking_client_; } + void set_stacking_client(client::StackingClient* stacking_client) { + stacking_client_ = stacking_client; + } + // Returns the native event dispatcher. The result should only be passed to // MessageLoopForUI::RunWithDispatcher() or // MessageLoopForUI::RunAllPendingWithDispatcher(), or used to dispatch @@ -59,6 +65,7 @@ class AURA_EXPORT Env { #endif static Env* instance_; + client::StackingClient* stacking_client_; DISALLOW_COPY_AND_ASSIGN(Env); }; diff --git a/ui/aura/test/aura_test_base.cc b/ui/aura/test/aura_test_base.cc index 576fac6..5747b38 100644 --- a/ui/aura/test/aura_test_base.cc +++ b/ui/aura/test/aura_test_base.cc @@ -4,8 +4,8 @@ #include "ui/aura/test/aura_test_base.h" -#include "ui/aura/env.h" #include "ui/aura/root_window.h" +#include "ui/aura/test/test_stacking_client.h" namespace aura { namespace test { @@ -27,9 +27,11 @@ AuraTestBase::~AuraTestBase() { void AuraTestBase::SetUp() { testing::Test::SetUp(); helper_.SetUp(); + stacking_client_.reset(new TestStackingClient(root_window())); } void AuraTestBase::TearDown() { + stacking_client_.reset(); helper_.TearDown(); testing::Test::TearDown(); } diff --git a/ui/aura/test/aura_test_base.h b/ui/aura/test/aura_test_base.h index 08b1f84..7b2a134 100644 --- a/ui/aura/test/aura_test_base.h +++ b/ui/aura/test/aura_test_base.h @@ -14,6 +14,7 @@ namespace aura { class RootWindow; namespace test { +class TestStackingClient; // A base class for aura unit tests. // TODO(beng): Instances of this test will create and own a RootWindow. @@ -34,6 +35,7 @@ class AuraTestBase : public testing::Test { private: AuraTestHelper helper_; RootWindow* root_window_; + scoped_ptr<TestStackingClient> stacking_client_; DISALLOW_COPY_AND_ASSIGN(AuraTestBase); }; diff --git a/ui/aura/test/test_stacking_client.cc b/ui/aura/test/test_stacking_client.cc new file mode 100644 index 0000000..3f7fb46 --- /dev/null +++ b/ui/aura/test/test_stacking_client.cc @@ -0,0 +1,26 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/aura/test/test_stacking_client.h" + +#include "ui/aura/root_window.h" + +namespace aura { +namespace test { + +TestStackingClient::TestStackingClient(RootWindow* root_window) + : root_window_(root_window) { + client::SetStackingClient(this); +} + +TestStackingClient::~TestStackingClient() { + client::SetStackingClient(NULL); +} + +Window* TestStackingClient::GetDefaultParent(Window* window) { + return root_window_; +} + +} // namespace test +} // namespace aura diff --git a/ui/aura/test/test_stacking_client.h b/ui/aura/test/test_stacking_client.h new file mode 100644 index 0000000..308ae91 --- /dev/null +++ b/ui/aura/test/test_stacking_client.h @@ -0,0 +1,35 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef UI_AURA_TEST_TEST_STACKING_CLIENT_H_ +#define UI_AURA_TEST_TEST_STACKING_CLIENT_H_ +#pragma once + +#include "base/basictypes.h" +#include "base/compiler_specific.h" +#include "ui/aura/aura_export.h" +#include "ui/aura/client/stacking_client.h" + +namespace aura { +class RootWindow; +namespace test { + +class TestStackingClient : public client::StackingClient { + public: + explicit TestStackingClient(RootWindow* root_window); + virtual ~TestStackingClient(); + + // Overridden from client::StackingClient: + virtual Window* GetDefaultParent(Window* window) OVERRIDE; + + private: + RootWindow* root_window_; + + DISALLOW_COPY_AND_ASSIGN(TestStackingClient); +}; + +} // namespace test +} // namespace aura + +#endif // UI_AURA_TEST_TEST_STACKING_CLIENT_H_ diff --git a/ui/aura/window.cc b/ui/aura/window.cc index 3706b34..febf221 100644 --- a/ui/aura/window.cc +++ b/ui/aura/window.cc @@ -32,7 +32,7 @@ Window* GetParentForWindow(Window* window, Window* suggested_parent) { return suggested_parent; if (client::GetStackingClient()) return client::GetStackingClient()->GetDefaultParent(window); - return RootWindow::GetInstance(); + return NULL; } } // namespace diff --git a/ui/views/test/views_test_base.cc b/ui/views/test/views_test_base.cc index cbcef299..693de93 100644 --- a/ui/views/test/views_test_base.cc +++ b/ui/views/test/views_test_base.cc @@ -14,6 +14,7 @@ #include "ui/aura/env.h" #include "ui/aura/root_window.h" #include "ui/aura/test/test_activation_client.h" +#include "ui/aura/test/test_stacking_client.h" #include "ui/base/ime/input_method.h" namespace { @@ -92,6 +93,8 @@ void ViewsTestBase::SetUp() { test_input_method_.get()); test_activation_client_.reset( new aura::test::TestActivationClient(root_window_)); + test_stacking_client_.reset( + new aura::test::TestStackingClient(root_window_)); #endif } @@ -103,6 +106,7 @@ void ViewsTestBase::TearDown() { views_delegate_.reset(); testing::Test::TearDown(); #if defined(USE_AURA) + test_stacking_client_.reset(); test_activation_client_.reset(); aura::RootWindow::DeleteInstance(); #endif diff --git a/ui/views/test/views_test_base.h b/ui/views/test/views_test_base.h index 3feda5b..eebd9e2b 100644 --- a/ui/views/test/views_test_base.h +++ b/ui/views/test/views_test_base.h @@ -15,6 +15,7 @@ namespace aura { class RootWindow; namespace test { class TestActivationClient; +class TestStackingClient; } } @@ -53,6 +54,7 @@ class ViewsTestBase : public testing::Test { scoped_ptr<TestViewsDelegate> views_delegate_; #if defined(USE_AURA) scoped_ptr<aura::test::TestActivationClient> test_activation_client_; + scoped_ptr<aura::test::TestStackingClient> test_stacking_client_; scoped_ptr<ui::InputMethod> test_input_method_; aura::RootWindow* root_window_; #endif diff --git a/ui/views/widget/native_widget_aura_unittest.cc b/ui/views/widget/native_widget_aura_unittest.cc index 95d3ce6..5561fda 100644 --- a/ui/views/widget/native_widget_aura_unittest.cc +++ b/ui/views/widget/native_widget_aura_unittest.cc @@ -10,6 +10,7 @@ #include "testing/gtest/include/gtest/gtest.h" #include "ui/aura/layout_manager.h" #include "ui/aura/root_window.h" +#include "ui/aura/test/test_stacking_client.h" #include "ui/aura/window.h" #include "ui/views/widget/root_view.h" #include "ui/views/widget/widget_delegate.h" @@ -35,8 +36,11 @@ class NativeWidgetAuraTest : public testing::Test { root_window_ = aura::RootWindow::GetInstance(); root_window_->SetBounds(gfx::Rect(0, 0, 640, 480)); root_window_->SetHostSize(gfx::Size(640, 480)); + test_stacking_client_.reset( + new aura::test::TestStackingClient(root_window_)); } virtual void TearDown() OVERRIDE { + test_stacking_client_.reset(); aura::RootWindow::DeleteInstance(); message_loop_.RunAllPending(); } @@ -47,6 +51,7 @@ class NativeWidgetAuraTest : public testing::Test { private: MessageLoopForUI message_loop_; aura::RootWindow* root_window_; + scoped_ptr<aura::test::TestStackingClient> test_stacking_client_; DISALLOW_COPY_AND_ASSIGN(NativeWidgetAuraTest); }; |