diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-07 21:02:59 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-07 21:02:59 +0000 |
commit | 87b0d82e3a7323306b3a5b7c94a01226ab601254 (patch) | |
tree | 54f9d25c8e9e71ba1fb2bdbbfad23d7e94f46190 /views | |
parent | 39944f52a7d6495574b27443f9d935a76c5d488a (diff) | |
download | chromium_src-87b0d82e3a7323306b3a5b7c94a01226ab601254.zip chromium_src-87b0d82e3a7323306b3a5b7c94a01226ab601254.tar.gz chromium_src-87b0d82e3a7323306b3a5b7c94a01226ab601254.tar.bz2 |
Changes the way windows are parented when their parent is set to NULL.. Adds a DesktopDelegate interface implemented by the aura client. The implementor handles parenting of windows when their parent is set to NULL, and also figures out how to activate windows.. Replaces Desktop::default_parent() with this. Requires adjusting some of the tests and adding a TestDesktopDelegate implementation that reconstructs what default_parent did.BUG=noneTEST=existing unit tests
Review URL: http://codereview.chromium.org/8194004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@104558 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views')
-rw-r--r-- | views/bubble/bubble_delegate_unittest.cc | 9 | ||||
-rw-r--r-- | views/bubble/bubble_frame_view_unittest.cc | 14 | ||||
-rw-r--r-- | views/bubble/bubble_view_unittest.cc | 15 | ||||
-rw-r--r-- | views/test/views_test_base.cc | 6 | ||||
-rw-r--r-- | views/views.gyp | 7 | ||||
-rw-r--r-- | views/widget/native_widget_aura.cc | 31 |
6 files changed, 61 insertions, 21 deletions
diff --git a/views/bubble/bubble_delegate_unittest.cc b/views/bubble/bubble_delegate_unittest.cc index c8a05e8..b7de55a 100644 --- a/views/bubble/bubble_delegate_unittest.cc +++ b/views/bubble/bubble_delegate_unittest.cc @@ -3,19 +3,21 @@ // found in the LICENSE file. #include "base/memory/scoped_ptr.h" -#include "base/message_loop.h" #include "third_party/skia/include/core/SkColor.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/animation/slide_animation.h" #include "views/bubble/bubble_border.h" #include "views/bubble/bubble_delegate.h" #include "views/bubble/bubble_view.h" +#include "views/test/views_test_base.h" #include "views/widget/widget.h" namespace views { namespace { +typedef ViewsTestBase BubbleDelegateTest; + class TestBubbleDelegate : public BubbleDelegateView { public: explicit TestBubbleDelegate(Widget *frame): BubbleDelegateView(frame) {} @@ -29,8 +31,7 @@ class TestBubbleDelegate : public BubbleDelegateView { View view_; }; -TEST(BubbleDelegateTest, CreateDelegate) { - MessageLoopForUI message_loop; +TEST_F(BubbleDelegateTest, CreateDelegate) { scoped_ptr<Widget> bubble_widget(new Widget()); Widget::InitParams params(Widget::InitParams::TYPE_BUBBLE); TestBubbleDelegate delegate(bubble_widget.get()); @@ -41,7 +42,7 @@ TEST(BubbleDelegateTest, CreateDelegate) { EXPECT_EQ(bubble_widget, delegate.GetWidget()); bubble_widget->CloseNow(); bubble_widget.reset(NULL); - MessageLoop::current()->RunAllPending(); + RunPendingMessages(); } } // namespace diff --git a/views/bubble/bubble_frame_view_unittest.cc b/views/bubble/bubble_frame_view_unittest.cc index b7153bd..d5cd874 100644 --- a/views/bubble/bubble_frame_view_unittest.cc +++ b/views/bubble/bubble_frame_view_unittest.cc @@ -9,20 +9,23 @@ #include "views/bubble/bubble_border.h" #include "views/bubble/bubble_frame_view.h" #include "views/bubble/bubble_delegate.h" +#include "views/test/views_test_base.h" #include "views/widget/widget.h" #if !defined(OS_WIN) #include "views/window/hit_test.h" #endif + namespace views { namespace { +typedef ViewsTestBase BubbleFrameViewBasicTest; + gfx::Rect kBound = gfx::Rect(10, 10, 200, 200); SkColor kBackgroundColor = SK_ColorRED; BubbleBorder::ArrowLocation kArrow = BubbleBorder::LEFT_BOTTOM; -TEST(BubbleFrameViewBasicTest, GetBoundsForClientView) { - MessageLoopForUI message_loop; +TEST_F(BubbleFrameViewBasicTest, GetBoundsForClientView) { scoped_ptr<Widget> widget(new views::Widget()); views::Widget::InitParams params(views::Widget::InitParams::TYPE_BUBBLE); params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; @@ -40,7 +43,7 @@ TEST(BubbleFrameViewBasicTest, GetBoundsForClientView) { EXPECT_EQ(expected_insets.top(), frame.GetBoundsForClientView().y()); widget->CloseNow(); widget.reset(NULL); - MessageLoop::current()->RunAllPending(); + RunPendingMessages(); } class TestBubbleDelegate : public BubbleDelegateView { @@ -54,8 +57,7 @@ class TestBubbleDelegate : public BubbleDelegateView { View view_; }; -TEST(BubbleFrameViewBasicTest, NonClientHitTest) { - MessageLoopForUI message_loop; +TEST_F(BubbleFrameViewBasicTest, NonClientHitTest) { scoped_ptr<Widget> widget(new Widget()); views::Widget::InitParams params(views::Widget::InitParams::TYPE_BUBBLE); TestBubbleDelegate delegate(widget.get()); @@ -69,7 +71,7 @@ TEST(BubbleFrameViewBasicTest, NonClientHitTest) { widget->non_client_view()->NonClientHitTest(kPtOutsideBound)); widget->CloseNow(); widget.reset(NULL); - MessageLoop::current()->RunAllPending(); + RunPendingMessages(); } } // namespace diff --git a/views/bubble/bubble_view_unittest.cc b/views/bubble/bubble_view_unittest.cc index d64fbb6..9fac7f4 100644 --- a/views/bubble/bubble_view_unittest.cc +++ b/views/bubble/bubble_view_unittest.cc @@ -9,12 +9,16 @@ #include "views/bubble/bubble_border.h" #include "views/bubble/bubble_delegate.h" #include "views/bubble/bubble_view.h" +#include "views/test/views_test_base.h" #include "views/widget/widget.h" namespace views { namespace { +typedef ViewsTestBase BubbleViewBasicTest; +typedef ViewsTestBase BubbleViewTest; + class TestBubbleDelegate : public BubbleDelegateView { public: explicit TestBubbleDelegate(Widget *frame): BubbleDelegateView(frame) {} @@ -42,8 +46,7 @@ class TestAnimationDelegate : public ui::AnimationDelegate { }; -TEST(BubbleViewBasicTest, CreateArrowBubble) { - MessageLoopForUI message_loop; +TEST_F(BubbleViewBasicTest, CreateArrowBubble) { scoped_ptr<Widget> bubble_widget(new Widget()); Widget::InitParams params(Widget::InitParams::TYPE_BUBBLE); TestBubbleDelegate delegate(bubble_widget.get()); @@ -57,14 +60,12 @@ TEST(BubbleViewBasicTest, CreateArrowBubble) { EXPECT_EQ(delegate.GetFrameArrowLocation(), border->arrow_location()); bubble_widget->CloseNow(); bubble_widget.reset(NULL); - MessageLoop::current()->RunAllPending(); + RunPendingMessages(); } } // namespace -TEST(BubbleViewTest, FadeAnimation) { - MessageLoopForUI message_loop; - +TEST_F(BubbleViewTest, FadeAnimation) { scoped_ptr<Widget> bubble_widget(new Widget()); Widget::InitParams params(Widget::InitParams::TYPE_BUBBLE); TestBubbleDelegate delegate(bubble_widget.get()); @@ -84,7 +85,7 @@ TEST(BubbleViewTest, FadeAnimation) { EXPECT_EQ(1, test_animation_delegate.animation_ended_); bubble_widget->CloseNow(); bubble_widget.reset(NULL); - MessageLoop::current()->RunAllPending(); + RunPendingMessages(); } } // namespace views diff --git a/views/test/views_test_base.cc b/views/test/views_test_base.cc index ae20b43..bbd8e75 100644 --- a/views/test/views_test_base.cc +++ b/views/test/views_test_base.cc @@ -13,6 +13,7 @@ #if defined(USE_AURA) #include "ui/aura/desktop.h" +#include "ui/aura/test_desktop_delegate.h" #endif namespace views { @@ -27,6 +28,9 @@ ViewsTestBase::ViewsTestBase() #if defined(OS_WIN) OleInitialize(NULL); #endif +#if defined(USE_AURA) + new aura::TestDesktopDelegate; +#endif } ViewsTestBase::~ViewsTestBase() { @@ -44,8 +48,6 @@ void ViewsTestBase::SetUp() { setup_called_ = true; #if defined(USE_AURA) aura::Desktop::set_compositor_factory_for_testing(&TestCreateCompositor); - if (!aura::Desktop::GetInstance()->default_parent()) - aura::Desktop::GetInstance()->CreateDefaultParentForTesting(); #else Widget::set_compositor_factory_for_testing(&TestCreateCompositor); #endif diff --git a/views/views.gyp b/views/views.gyp index 8c1ef7c..d71f21e 100644 --- a/views/views.gyp +++ b/views/views.gyp @@ -602,6 +602,8 @@ '../ui/gfx/compositor/test_compositor.h', '../ui/gfx/compositor/test_texture.cc', '../ui/gfx/compositor/test_texture.h', + '../ui/aura/test_desktop_delegate.cc', + '../ui/aura/test_desktop_delegate.h', '<(SHARED_INTERMEDIATE_DIR)/ui/gfx/gfx_resources.rc', '<(SHARED_INTERMEDIATE_DIR)/ui/ui_resources/ui_resources.rc', @@ -656,6 +658,11 @@ ['exclude', 'controls/table/table_view_unittest.cc'], ['exclude', 'controls/tabbed_pane/tabbed_pane_unittest.cc'], ], + }, { + 'sources/': [ + ['exclude', '../ui/aura/test_desktop_delegate.cc'], + ['exclude', '../ui/aura/test_desktop_delegate.h'], + ], }], ['OS!="mac"', { 'dependencies': [ diff --git a/views/widget/native_widget_aura.cc b/views/widget/native_widget_aura.cc index d5c1190..2a418ad 100644 --- a/views/widget/native_widget_aura.cc +++ b/views/widget/native_widget_aura.cc @@ -8,6 +8,7 @@ #include "ui/aura/desktop.h" #include "ui/aura/event.h" #include "ui/aura/window.h" +#include "ui/aura/window_types.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/canvas.h" #include "ui/gfx/compositor/layer.h" @@ -29,6 +30,30 @@ namespace views { +namespace { + +int GetAuraWindowTypeForWidgetType(Widget::InitParams::Type type) { + switch (type) { + case Widget::InitParams::TYPE_WINDOW: + case Widget::InitParams::TYPE_WINDOW_FRAMELESS: + case Widget::InitParams::TYPE_POPUP: + case Widget::InitParams::TYPE_BUBBLE: + return aura::kWindowType_Toplevel; + case Widget::InitParams::TYPE_CONTROL: + return aura::kWindowType_Control; + case Widget::InitParams::TYPE_MENU: + return aura::kWindowType_Menu; + case Widget::InitParams::TYPE_TOOLTIP: + return aura::kWindowType_Tooltip; + default: + NOTREACHED(); + break; + } + return aura::kWindowType_Toplevel; +} + +} // namespace + //////////////////////////////////////////////////////////////////////////////// // NativeWidgetAura, public: @@ -67,12 +92,14 @@ gfx::Font NativeWidgetAura::GetWindowTitleFont() { void NativeWidgetAura::InitNativeWidget(const Widget::InitParams& params) { ownership_ = params.ownership; window_->set_user_data(this); + window_->SetType(GetAuraWindowTypeForWidgetType(params.type)); window_->Init(); // TODO(beng): respect |params| authoritah wrt transparency. window_->layer()->SetFillsBoundsOpaquely(false); delegate_->OnNativeWidgetCreated(); window_->SetBounds(params.bounds); - window_->SetParent(params.parent); + window_->SetParent( + params.type == Widget::InitParams::TYPE_MENU ? NULL : params.parent); // TODO(beng): do this some other way. delegate_->OnNativeWidgetSizeChanged(params.bounds.size()); can_activate_ = params.can_activate; @@ -550,7 +577,7 @@ NativeWidgetPrivate* NativeWidgetPrivate::GetTopLevelNativeWidget( aura::Window* toplevel = native_view; aura::Window* parent = native_view->parent(); while (parent) { - if (parent->IsToplevelWindowContainer()) + if (parent->AsToplevelWindowContainer()) return GetNativeWidgetForNativeView(toplevel); toplevel = parent; parent = parent->parent(); |