summaryrefslogtreecommitdiffstats
path: root/ui
diff options
context:
space:
mode:
authorbeng@google.com <beng@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-27 19:08:10 +0000
committerbeng@google.com <beng@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-27 19:08:10 +0000
commitbfe541c8b59c5a88b6d007039198cf12daf7fc56 (patch)
tree3e7092b95f5e6b7ed5f6a195ad7c55e7a2e7b658 /ui
parent90cf2d8177b536b87d97890a71ef3693af6cfa57 (diff)
downloadchromium_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.gyp2
-rw-r--r--ui/aura/client/stacking_client.cc14
-rw-r--r--ui/aura/env.cc2
-rw-r--r--ui/aura/env.h7
-rw-r--r--ui/aura/test/aura_test_base.cc4
-rw-r--r--ui/aura/test/aura_test_base.h2
-rw-r--r--ui/aura/test/test_stacking_client.cc26
-rw-r--r--ui/aura/test/test_stacking_client.h35
-rw-r--r--ui/aura/window.cc2
-rw-r--r--ui/views/test/views_test_base.cc4
-rw-r--r--ui/views/test/views_test_base.h2
-rw-r--r--ui/views/widget/native_widget_aura_unittest.cc5
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);
};