diff options
33 files changed, 177 insertions, 121 deletions
diff --git a/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc b/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc index 3c4ffbf..49328c7 100644 --- a/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc +++ b/chrome/browser/ui/views/accessibility/accessibility_event_router_views_unittest.cc @@ -35,6 +35,7 @@ #include "ui/aura/test/aura_test_helper.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/compositor/test/context_factories_for_test.h" +#include "ui/wm/core/default_activation_client.h" #endif using base::ASCIIToUTF16; @@ -113,6 +114,7 @@ class AccessibilityEventRouterViewsTest aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); aura_test_helper_->SetUp(); + new wm::DefaultActivationClient(aura_test_helper_->root_window()); #endif // USE_AURA EnableAccessibilityAndListenToFocusNotifications(); } diff --git a/chrome/browser/ui/views/apps/shaped_app_window_targeter_unittest.cc b/chrome/browser/ui/views/apps/shaped_app_window_targeter_unittest.cc index 7bac67cb..ace30ac 100644 --- a/chrome/browser/ui/views/apps/shaped_app_window_targeter_unittest.cc +++ b/chrome/browser/ui/views/apps/shaped_app_window_targeter_unittest.cc @@ -10,6 +10,7 @@ #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/views/controls/webview/webview.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/core/easy_resize_window_targeter.h" class ShapedAppWindowTargeterTest : public aura::test::AuraTestBase { @@ -28,6 +29,7 @@ class ShapedAppWindowTargeterTest : public aura::test::AuraTestBase { protected: virtual void SetUp() OVERRIDE { aura::test::AuraTestBase::SetUp(); + new wm::DefaultActivationClient(root_window()); widget_.reset(new views::Widget); views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); params.remove_standard_frame = true; diff --git a/chrome/test/base/browser_with_test_window_test.cc b/chrome/test/base/browser_with_test_window_test.cc index c45f7fa..e5de4b2 100644 --- a/chrome/test/base/browser_with_test_window_test.cc +++ b/chrome/test/base/browser_with_test_window_test.cc @@ -20,6 +20,7 @@ #if defined(USE_AURA) #include "ui/aura/test/aura_test_helper.h" #include "ui/compositor/test/context_factories_for_test.h" +#include "ui/wm/core/default_activation_client.h" #endif #if defined(USE_ASH) @@ -70,6 +71,7 @@ void BrowserWithTestWindowTest::SetUp() { aura_test_helper_.reset(new aura::test::AuraTestHelper( base::MessageLoopForUI::current())); aura_test_helper_->SetUp(); + new wm::DefaultActivationClient(aura_test_helper_->root_window()); #endif // USE_AURA #if defined(TOOLKIT_VIEWS) views_delegate_.reset(CreateViewsDelegate()); diff --git a/chrome/test/base/view_event_test_base.cc b/chrome/test/base/view_event_test_base.cc index d2ace62..aae31d9 100644 --- a/chrome/test/base/view_event_test_base.cc +++ b/chrome/test/base/view_event_test_base.cc @@ -24,6 +24,7 @@ #include "ui/message_center/message_center.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/core/wm_state.h" #if defined(USE_ASH) @@ -140,6 +141,7 @@ void ViewEventTestBase::SetUp() { aura_test_helper_.reset( new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); aura_test_helper_->SetUp(); + new wm::DefaultActivationClient(aura_test_helper_->root_window()); context = aura_test_helper_->root_window(); #endif // !USE_ASH && USE_AURA diff --git a/content/DEPS b/content/DEPS index 11f13d0..d02ee64 100644 --- a/content/DEPS +++ b/content/DEPS @@ -91,7 +91,7 @@ include_rules = [ "+ui/shell_dialogs", "+ui/snapshot", "+ui/surface", - "+ui/wm/public", + "+ui/wm", # Content knows about grd files, but the specifics of how to get a resource # given its id is left to the embedder. "-ui/base/l10n", diff --git a/content/browser/media/capture/desktop_capture_device_aura_unittest.cc b/content/browser/media/capture/desktop_capture_device_aura_unittest.cc index 99577d6..608c574 100644 --- a/content/browser/media/capture/desktop_capture_device_aura_unittest.cc +++ b/content/browser/media/capture/desktop_capture_device_aura_unittest.cc @@ -15,6 +15,7 @@ #include "ui/aura/test/test_window_delegate.h" #include "ui/aura/window.h" #include "ui/compositor/test/context_factories_for_test.h" +#include "ui/wm/core/default_activation_client.h" using ::testing::_; using ::testing::AnyNumber; @@ -65,6 +66,7 @@ class DesktopCaptureDeviceAuraTest : public testing::Test { ui::InitializeContextFactoryForTests(enable_pixel_output); helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); helper_->SetUp(); + new wm::DefaultActivationClient(helper_->root_window()); // We need a window to cover desktop area so that DesktopCaptureDeviceAura // can use gfx::NativeWindow::GetWindowAtScreenPoint() to locate the diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc index 9860665..591c725 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc @@ -47,6 +47,7 @@ #include "ui/compositor/test/in_process_context_factory.h" #include "ui/events/event.h" #include "ui/events/event_utils.h" +#include "ui/wm/core/default_activation_client.h" using testing::_; @@ -207,6 +208,7 @@ class RenderWidgetHostViewAuraTest : public testing::Test { scoped_ptr<ui::ContextFactory>(new ui::InProcessContextFactory)); aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); aura_test_helper_->SetUp(); + new wm::DefaultActivationClient(aura_test_helper_->root_window()); browser_context_.reset(new TestBrowserContext); process_host_ = new MockRenderProcessHost(browser_context_.get()); diff --git a/content/content_tests.gypi b/content/content_tests.gypi index 0a1d406..f8aa17c1 100644 --- a/content/content_tests.gypi +++ b/content/content_tests.gypi @@ -305,6 +305,7 @@ 'dependencies': [ '../ui/aura/aura.gyp:aura_test_support', '../ui/resources/ui_resources.gyp:ui_test_pak', + '../ui/wm/wm.gyp:wm', ], }], ['use_aura==1 or OS=="mac"', { @@ -859,6 +860,7 @@ ['use_aura==1', { 'dependencies': [ '../ui/aura/aura.gyp:aura', + '../ui/wm/wm.gyp:wm', ] }], ['use_aura==1 or toolkit_views==1', { diff --git a/content/public/test/test_renderer_host.cc b/content/public/test/test_renderer_host.cc index dc323ca..abaa4ce 100644 --- a/content/public/test/test_renderer_host.cc +++ b/content/public/test/test_renderer_host.cc @@ -25,6 +25,7 @@ #if defined(USE_AURA) #include "ui/aura/test/aura_test_helper.h" #include "ui/compositor/test/context_factories_for_test.h" +#include "ui/wm/core/default_activation_client.h" #endif namespace content { @@ -174,6 +175,7 @@ void RenderViewHostTestHarness::SetUp() { aura_test_helper_.reset( new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); aura_test_helper_->SetUp(); + new wm::DefaultActivationClient(aura_test_helper_->root_window()); #endif DCHECK(!browser_context_); diff --git a/content/shell/browser/shell_platform_data_aura.cc b/content/shell/browser/shell_platform_data_aura.cc index 0a63279..33b8073 100644 --- a/content/shell/browser/shell_platform_data_aura.cc +++ b/content/shell/browser/shell_platform_data_aura.cc @@ -6,7 +6,6 @@ #include "content/shell/browser/shell.h" #include "ui/aura/client/aura_constants.h" -#include "ui/aura/client/default_activation_client.h" #include "ui/aura/client/default_capture_client.h" #include "ui/aura/env.h" #include "ui/aura/layout_manager.h" @@ -18,6 +17,7 @@ #include "ui/base/ime/input_method_delegate.h" #include "ui/base/ime/input_method_factory.h" #include "ui/gfx/screen.h" +#include "ui/wm/core/default_activation_client.h" namespace content { @@ -121,8 +121,7 @@ ShellPlatformDataAura::ShellPlatformDataAura(const gfx::Size& initial_size) { focus_client_.reset(new aura::test::TestFocusClient()); aura::client::SetFocusClient(host_->window(), focus_client_.get()); - activation_client_.reset( - new aura::client::DefaultActivationClient(host_->window())); + new wm::DefaultActivationClient(host_->window()); capture_client_.reset( new aura::client::DefaultCaptureClient(host_->window())); window_tree_client_.reset( diff --git a/content/shell/browser/shell_platform_data_aura.h b/content/shell/browser/shell_platform_data_aura.h index 4027bc3..bc45ec6 100644 --- a/content/shell/browser/shell_platform_data_aura.h +++ b/content/shell/browser/shell_platform_data_aura.h @@ -10,7 +10,6 @@ namespace aura { namespace client { -class DefaultActivationClient; class DefaultCaptureClient; class FocusClient; class WindowTreeClient; @@ -40,7 +39,6 @@ class ShellPlatformDataAura { private: scoped_ptr<aura::WindowTreeHost> host_; scoped_ptr<aura::client::FocusClient> focus_client_; - scoped_ptr<aura::client::DefaultActivationClient> activation_client_; scoped_ptr<aura::client::DefaultCaptureClient> capture_client_; scoped_ptr<aura::client::WindowTreeClient> window_tree_client_; scoped_ptr<ui::EventHandler> ime_filter_; diff --git a/mojo/examples/launcher/DEPS b/mojo/examples/launcher/DEPS index 6242444..270ff3a 100644 --- a/mojo/examples/launcher/DEPS +++ b/mojo/examples/launcher/DEPS @@ -8,5 +8,6 @@ include_rules = [ "+ui/gfx", "+ui/gl", "+ui/views", + "+ui/wm", "+webkit/common/gpu", ] diff --git a/mojo/examples/launcher/launcher.cc b/mojo/examples/launcher/launcher.cc index 11baf57..042a7bdb 100644 --- a/mojo/examples/launcher/launcher.cc +++ b/mojo/examples/launcher/launcher.cc @@ -23,7 +23,6 @@ #include "mojo/public/interfaces/shell/shell.mojom.h" #include "mojo/services/native_viewport/native_viewport.mojom.h" #include "ui/aura/client/aura_constants.h" -#include "ui/aura/client/default_activation_client.h" #include "ui/aura/client/default_capture_client.h" #include "ui/aura/client/window_tree_client.h" #include "ui/aura/env.h" @@ -45,6 +44,7 @@ #include "ui/views/layout/fill_layout.h" #include "ui/views/view.h" #include "ui/views/widget/widget.h" +#include "ui/wm/core/default_activation_client.h" #include "url/gurl.h" #if defined(WIN32) @@ -244,8 +244,7 @@ class LauncherImpl : public Application, focus_client_.reset(new aura::test::TestFocusClient()); aura::client::SetFocusClient(window_tree_host_->window(), focus_client_.get()); - activation_client_.reset( - new aura::client::DefaultActivationClient(window_tree_host_->window())); + new wm::DefaultActivationClient(window_tree_host_->window()); capture_client_.reset( new aura::client::DefaultCaptureClient(window_tree_host_->window())); ime_filter_.reset(new MinimalInputEventFilter(window_tree_host_->window())); @@ -263,7 +262,6 @@ class LauncherImpl : public Application, scoped_ptr<DemoScreen> screen_; scoped_ptr<LauncherWindowTreeClient> window_tree_client_; - scoped_ptr<aura::client::DefaultActivationClient> activation_client_; scoped_ptr<aura::client::FocusClient> focus_client_; scoped_ptr<aura::client::DefaultCaptureClient> capture_client_; scoped_ptr<ui::EventHandler> ime_filter_; diff --git a/mojo/mojo_examples.gypi b/mojo/mojo_examples.gypi index 5bece9b..00d5e81 100644 --- a/mojo/mojo_examples.gypi +++ b/mojo/mojo_examples.gypi @@ -255,6 +255,7 @@ '../ui/gfx/gfx.gyp:gfx', '../ui/gfx/gfx.gyp:gfx_geometry', '../ui/views/views.gyp:views', + '../ui/wm/wm.gyp:wm', '../url/url.gyp:url_lib', 'mojo_aura_demo_support', 'mojo_common_lib', diff --git a/ui/aura/aura.gyp b/ui/aura/aura.gyp index 9ddb104..a8900f8 100644 --- a/ui/aura/aura.gyp +++ b/ui/aura/aura.gyp @@ -36,8 +36,6 @@ 'client/cursor_client.h', 'client/cursor_client_observer.h', 'client/cursor_client_observer.cc', - 'client/default_activation_client.cc', - 'client/default_activation_client.h', 'client/default_capture_client.cc', 'client/default_capture_client.h', 'client/event_client.cc', diff --git a/ui/aura/client/default_activation_client.h b/ui/aura/client/default_activation_client.h deleted file mode 100644 index 0271a71..0000000 --- a/ui/aura/client/default_activation_client.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014 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_CLIENT_DEFAULT_ACTIVATION_CLIENT_H_ -#define UI_AURA_CLIENT_DEFAULT_ACTIVATION_CLIENT_H_ - -#include <vector> - -#include "base/compiler_specific.h" -#include "base/logging.h" -#include "base/observer_list.h" -#include "ui/aura/aura_export.h" -#include "ui/aura/window_observer.h" -#include "ui/wm/public/activation_client.h" - -namespace aura { -namespace client { -class ActivationChangeObserver; -} - -namespace client { - -// Simple ActivationClient implementation for use by tests and other targets -// that just need basic behavior (e.g. activate windows whenever requested, -// restack windows at the top when they're activated, etc.). -class AURA_EXPORT DefaultActivationClient : public client::ActivationClient, - public WindowObserver { - public: - explicit DefaultActivationClient(Window* root_window); - virtual ~DefaultActivationClient(); - - // Overridden from client::ActivationClient: - virtual void AddObserver(client::ActivationChangeObserver* observer) OVERRIDE; - virtual void RemoveObserver( - client::ActivationChangeObserver* observer) OVERRIDE; - virtual void ActivateWindow(Window* window) OVERRIDE; - virtual void DeactivateWindow(Window* window) OVERRIDE; - virtual Window* GetActiveWindow() OVERRIDE; - virtual Window* GetActivatableWindow(Window* window) OVERRIDE; - virtual Window* GetToplevelWindow(Window* window) OVERRIDE; - virtual bool OnWillFocusWindow(Window* window, - const ui::Event* event) OVERRIDE; - virtual bool CanActivateWindow(Window* window) const OVERRIDE; - - // Overridden from WindowObserver: - virtual void OnWindowDestroyed(Window* window) OVERRIDE; - - private: - void RemoveActiveWindow(Window* window); - - // This class explicitly does NOT store the active window in a window property - // to make sure that ActivationChangeObserver is not treated as part of the - // aura API. Assumptions to that end will cause tests that use this client to - // fail. - std::vector<Window*> active_windows_; - - // The window which was active before the currently active one. - Window* last_active_; - - ObserverList<client::ActivationChangeObserver> observers_; - - DISALLOW_COPY_AND_ASSIGN(DefaultActivationClient); -}; - -} // namespace client -} // namespace aura - -#endif // UI_AURA_CLIENT_DEFAULT_ACTIVATION_CLIENT_H_ diff --git a/ui/aura/test/aura_test_helper.cc b/ui/aura/test/aura_test_helper.cc index b300dcf..34183db 100644 --- a/ui/aura/test/aura_test_helper.cc +++ b/ui/aura/test/aura_test_helper.cc @@ -7,7 +7,6 @@ #include "base/message_loop/message_loop.h" #include "base/run_loop.h" #include "ui/aura/client/aura_constants.h" -#include "ui/aura/client/default_activation_client.h" #include "ui/aura/client/default_capture_client.h" #include "ui/aura/client/focus_client.h" #include "ui/aura/env.h" @@ -71,8 +70,6 @@ void AuraTestHelper::SetUp() { focus_client_.reset(new TestFocusClient); client::SetFocusClient(root_window(), focus_client_.get()); stacking_client_.reset(new TestWindowTreeClient(root_window())); - activation_client_.reset( - new client::DefaultActivationClient(root_window())); capture_client_.reset(new client::DefaultCaptureClient(root_window())); test_input_method_.reset(new ui::DummyInputMethod); root_window()->SetProperty( @@ -88,7 +85,6 @@ void AuraTestHelper::TearDown() { teardown_called_ = true; test_input_method_.reset(); stacking_client_.reset(); - activation_client_.reset(); capture_client_.reset(); focus_client_.reset(); client::SetFocusClient(root_window(), NULL); diff --git a/ui/aura/test/aura_test_helper.h b/ui/aura/test/aura_test_helper.h index f79ca76..05d59ab 100644 --- a/ui/aura/test/aura_test_helper.h +++ b/ui/aura/test/aura_test_helper.h @@ -22,7 +22,6 @@ class ScopedAnimationDurationScaleMode; namespace aura { class TestScreen; namespace client { -class DefaultActivationClient; class DefaultCaptureClient; class FocusClient; } @@ -60,7 +59,6 @@ class AuraTestHelper { bool owns_host_; scoped_ptr<WindowTreeHost> host_; scoped_ptr<TestWindowTreeClient> stacking_client_; - scoped_ptr<client::DefaultActivationClient> activation_client_; scoped_ptr<client::DefaultCaptureClient> capture_client_; scoped_ptr<ui::InputMethod> test_input_method_; scoped_ptr<client::FocusClient> focus_client_; diff --git a/ui/keyboard/keyboard.gyp b/ui/keyboard/keyboard.gyp index 153b38c..c4ca714 100644 --- a/ui/keyboard/keyboard.gyp +++ b/ui/keyboard/keyboard.gyp @@ -91,6 +91,7 @@ '../gfx/gfx.gyp:gfx', '../gfx/gfx.gyp:gfx_geometry', '../resources/ui_resources.gyp:ui_test_pak', + '../wm/wm.gyp:wm', 'keyboard', ], 'sources': [ diff --git a/ui/keyboard/keyboard_controller_unittest.cc b/ui/keyboard/keyboard_controller_unittest.cc index 4333c84..62b0d73 100644 --- a/ui/keyboard/keyboard_controller_unittest.cc +++ b/ui/keyboard/keyboard_controller_unittest.cc @@ -28,6 +28,7 @@ #include "ui/keyboard/keyboard_controller_proxy.h" #include "ui/keyboard/keyboard_switches.h" #include "ui/keyboard/keyboard_util.h" +#include "ui/wm/core/default_activation_client.h" namespace keyboard { namespace { @@ -168,6 +169,7 @@ class KeyboardControllerTest : public testing::Test { aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); aura_test_helper_->SetUp(); + new wm::DefaultActivationClient(aura_test_helper_->root_window()); ui::SetUpInputMethodFactoryForTesting(); focus_controller_.reset(new TestFocusController(root_window())); proxy_ = new TestKeyboardControllerProxy(); diff --git a/ui/snapshot/DEPS b/ui/snapshot/DEPS index 08ad30c..f6768d1 100644 --- a/ui/snapshot/DEPS +++ b/ui/snapshot/DEPS @@ -8,4 +8,5 @@ include_rules = [ "+ui/compositor", "+ui/gfx", "+ui/gl", + "+ui/wm", ] diff --git a/ui/snapshot/snapshot.gyp b/ui/snapshot/snapshot.gyp index 1f0c645..e34b0c2 100644 --- a/ui/snapshot/snapshot.gyp +++ b/ui/snapshot/snapshot.gyp @@ -68,6 +68,7 @@ '../aura/aura.gyp:aura_test_support', '../compositor/compositor.gyp:compositor', '../compositor/compositor.gyp:compositor_test_support', + '../wm/wm.gyp:wm', ], }], # See http://crbug.com/162998#c4 for why this is needed. diff --git a/ui/snapshot/snapshot_aura_unittest.cc b/ui/snapshot/snapshot_aura_unittest.cc index b000ad1..eee20b3 100644 --- a/ui/snapshot/snapshot_aura_unittest.cc +++ b/ui/snapshot/snapshot_aura_unittest.cc @@ -23,6 +23,7 @@ #include "ui/gfx/size_conversions.h" #include "ui/gfx/transform.h" #include "ui/gl/gl_implementation.h" +#include "ui/wm/core/default_activation_client.h" namespace ui { namespace { @@ -93,6 +94,7 @@ class SnapshotAuraTest : public testing::Test { helper_.reset( new aura::test::AuraTestHelper(base::MessageLoopForUI::current())); helper_->SetUp(); + new ::wm::DefaultActivationClient(helper_->root_window()); } virtual void TearDown() OVERRIDE { diff --git a/ui/views/corewm/tooltip_controller_unittest.cc b/ui/views/corewm/tooltip_controller_unittest.cc index 4764fc7..f09a2a0 100644 --- a/ui/views/corewm/tooltip_controller_unittest.cc +++ b/ui/views/corewm/tooltip_controller_unittest.cc @@ -25,6 +25,7 @@ #include "ui/views/view.h" #include "ui/views/widget/tooltip_manager.h" #include "ui/views/widget/widget.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/core/wm_state.h" #include "ui/wm/public/tooltip_client.h" #include "ui/wm/public/window_types.h" @@ -78,6 +79,7 @@ class TooltipControllerTest : public aura::test::AuraTestBase { virtual void SetUp() OVERRIDE { wm_state_.reset(new wm::WMState); aura::test::AuraTestBase::SetUp(); + new wm::DefaultActivationClient(root_window()); #if defined(OS_CHROMEOS) controller_.reset(new TooltipController( scoped_ptr<views::corewm::Tooltip>( @@ -698,6 +700,7 @@ class TooltipControllerTest2 : public aura::test::AuraTestBase { virtual void SetUp() OVERRIDE { wm_state_.reset(new wm::WMState); aura::test::AuraTestBase::SetUp(); + new wm::DefaultActivationClient(root_window()); controller_.reset(new TooltipController( scoped_ptr<corewm::Tooltip>(test_tooltip_))); root_window()->AddPreTargetHandler(controller_.get()); diff --git a/ui/views/test/views_test_base.cc b/ui/views/test/views_test_base.cc index 4bf036c..1a7f3aa 100644 --- a/ui/views/test/views_test_base.cc +++ b/ui/views/test/views_test_base.cc @@ -12,6 +12,7 @@ #include "ui/aura/window_event_dispatcher.h" #include "ui/compositor/test/context_factories_for_test.h" #include "ui/wm/core/capture_controller.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/core/wm_state.h" namespace views { @@ -39,6 +40,7 @@ void ViewsTestBase::SetUp() { aura_test_helper_.reset(new aura::test::AuraTestHelper(&message_loop_)); aura_test_helper_->SetUp(); + new wm::DefaultActivationClient(aura_test_helper_->root_window()); wm_state_.reset(new ::wm::WMState); ui::InitializeInputMethodForTesting(); } diff --git a/ui/wm/core/compound_event_filter_unittest.cc b/ui/wm/core/compound_event_filter_unittest.cc index aea992c..afd3bcb 100644 --- a/ui/wm/core/compound_event_filter_unittest.cc +++ b/ui/wm/core/compound_event_filter_unittest.cc @@ -14,6 +14,7 @@ #include "ui/aura/window_event_dispatcher.h" #include "ui/events/event.h" #include "ui/events/event_utils.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/public/activation_client.h" namespace { @@ -112,6 +113,7 @@ TEST_F(CompoundEventFilterTest, CursorVisibilityChange) { #if defined(OS_CHROMEOS) || defined(OS_WIN) // Touch visually hides the cursor on ChromeOS and Windows. TEST_F(CompoundEventFilterTest, TouchHidesCursor) { + new wm::DefaultActivationClient(root_window()); scoped_ptr<CompoundEventFilter> compound_filter(new CompoundEventFilter); aura::Env::GetInstance()->AddPreTargetHandler(compound_filter.get()); aura::test::TestWindowDelegate delegate; diff --git a/ui/aura/client/default_activation_client.cc b/ui/wm/core/default_activation_client.cc index d8fdf8b..222c9ac 100644 --- a/ui/aura/client/default_activation_client.cc +++ b/ui/wm/core/default_activation_client.cc @@ -1,45 +1,65 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. +// Copyright 2013 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/client/default_activation_client.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/aura/window.h" #include "ui/wm/public/activation_change_observer.h" #include "ui/wm/public/activation_delegate.h" -namespace aura { -namespace client { +namespace wm { + +// Takes care of observing root window destruction & destroying the client. +class DefaultActivationClient::Deleter : public aura::WindowObserver { + public: + Deleter(DefaultActivationClient* client, aura::Window* root_window) + : client_(client), + root_window_(root_window) { + root_window_->AddObserver(this); + } + + private: + virtual ~Deleter() {} + + // Overridden from WindowObserver: + virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE { + DCHECK_EQ(window, root_window_); + root_window_->RemoveObserver(this); + delete client_; + delete this; + } + + DefaultActivationClient* client_; + aura::Window* root_window_; + + DISALLOW_COPY_AND_ASSIGN(Deleter); +}; //////////////////////////////////////////////////////////////////////////////// // DefaultActivationClient, public: -DefaultActivationClient::DefaultActivationClient(Window* root_window) +DefaultActivationClient::DefaultActivationClient(aura::Window* root_window) : last_active_(NULL) { - client::SetActivationClient(root_window, this); -} - -DefaultActivationClient::~DefaultActivationClient() { - for (unsigned int i = 0; i < active_windows_.size(); ++i) { - active_windows_[i]->RemoveObserver(this); - } + aura::client::SetActivationClient(root_window, this); + new Deleter(this, root_window); } //////////////////////////////////////////////////////////////////////////////// // DefaultActivationClient, client::ActivationClient implementation: void DefaultActivationClient::AddObserver( - client::ActivationChangeObserver* observer) { + aura::client::ActivationChangeObserver* observer) { observers_.AddObserver(observer); } void DefaultActivationClient::RemoveObserver( - client::ActivationChangeObserver* observer) { + aura::client::ActivationChangeObserver* observer) { observers_.RemoveObserver(observer); } -void DefaultActivationClient::ActivateWindow(Window* window) { - Window* last_active = GetActiveWindow(); +void DefaultActivationClient::ActivateWindow(aura::Window* window) { + aura::Window* last_active = GetActiveWindow(); if (last_active == window) return; @@ -49,7 +69,7 @@ void DefaultActivationClient::ActivateWindow(Window* window) { window->parent()->StackChildAtTop(window); window->AddObserver(this); - FOR_EACH_OBSERVER(client::ActivationChangeObserver, + FOR_EACH_OBSERVER(aura::client::ActivationChangeObserver, observers_, OnWindowActivated(window, last_active)); @@ -62,7 +82,7 @@ void DefaultActivationClient::ActivateWindow(Window* window) { observer->OnWindowActivated(window, last_active); } -void DefaultActivationClient::DeactivateWindow(Window* window) { +void DefaultActivationClient::DeactivateWindow(aura::Window* window) { aura::client::ActivationChangeObserver* observer = aura::client::GetActivationChangeObserver(window); if (observer) @@ -71,39 +91,40 @@ void DefaultActivationClient::DeactivateWindow(Window* window) { ActivateWindow(last_active_); } -Window* DefaultActivationClient::GetActiveWindow() { +aura::Window* DefaultActivationClient::GetActiveWindow() { if (active_windows_.empty()) return NULL; return active_windows_.back(); } -Window* DefaultActivationClient::GetActivatableWindow(Window* window) { +aura::Window* DefaultActivationClient::GetActivatableWindow( + aura::Window* window) { return NULL; } -Window* DefaultActivationClient::GetToplevelWindow(Window* window) { +aura::Window* DefaultActivationClient::GetToplevelWindow(aura::Window* window) { return NULL; } -bool DefaultActivationClient::OnWillFocusWindow(Window* window, +bool DefaultActivationClient::OnWillFocusWindow(aura::Window* window, const ui::Event* event) { return true; } -bool DefaultActivationClient::CanActivateWindow(Window* window) const { +bool DefaultActivationClient::CanActivateWindow(aura::Window* window) const { return true; } //////////////////////////////////////////////////////////////////////////////// -// DefaultActivationClient, WindowObserver implementation: +// DefaultActivationClient, aura::WindowObserver implementation: -void DefaultActivationClient::OnWindowDestroyed(Window* window) { +void DefaultActivationClient::OnWindowDestroyed(aura::Window* window) { if (window == last_active_) last_active_ = NULL; if (window == GetActiveWindow()) { active_windows_.pop_back(); - Window* next_active = GetActiveWindow(); + aura::Window* next_active = GetActiveWindow(); if (next_active && aura::client::GetActivationChangeObserver(next_active)) { aura::client::GetActivationChangeObserver(next_active)->OnWindowActivated( next_active, NULL); @@ -114,7 +135,16 @@ void DefaultActivationClient::OnWindowDestroyed(Window* window) { RemoveActiveWindow(window); } -void DefaultActivationClient::RemoveActiveWindow(Window* window) { +//////////////////////////////////////////////////////////////////////////////// +// DefaultActivationClient, private: + +DefaultActivationClient::~DefaultActivationClient() { + for (unsigned int i = 0; i < active_windows_.size(); ++i) { + active_windows_[i]->RemoveObserver(this); + } +} + +void DefaultActivationClient::RemoveActiveWindow(aura::Window* window) { for (unsigned int i = 0; i < active_windows_.size(); ++i) { if (active_windows_[i] == window) { active_windows_.erase(active_windows_.begin() + i); @@ -124,5 +154,4 @@ void DefaultActivationClient::RemoveActiveWindow(Window* window) { } } -} // namespace client -} // namespace aura +} // namespace wm diff --git a/ui/wm/core/default_activation_client.h b/ui/wm/core/default_activation_client.h new file mode 100644 index 0000000..3b6bffc --- /dev/null +++ b/ui/wm/core/default_activation_client.h @@ -0,0 +1,73 @@ +// Copyright 2013 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_WM_CORE_DEFAULT_ACTIVATION_CLIENT_H_ +#define UI_WM_CORE_DEFAULT_ACTIVATION_CLIENT_H_ + +#include <vector> + +#include "base/compiler_specific.h" +#include "base/logging.h" +#include "base/observer_list.h" +#include "ui/aura/window_observer.h" +#include "ui/wm/public/activation_client.h" +#include "ui/wm/wm_export.h" + +namespace aura { +namespace client { +class ActivationChangeObserver; +} +} + +namespace wm { + +// Simple ActivationClient implementation for use by tests and other targets +// that just need basic behavior (e.g. activate windows whenever requested, +// restack windows at the top when they're activated, etc.). This object deletes +// itself when the root window it is associated with is destroyed. +class WM_EXPORT DefaultActivationClient : public aura::client::ActivationClient, + public aura::WindowObserver { + public: + explicit DefaultActivationClient(aura::Window* root_window); + + // Overridden from aura::client::ActivationClient: + virtual void AddObserver( + aura::client::ActivationChangeObserver* observer) OVERRIDE; + virtual void RemoveObserver( + aura::client::ActivationChangeObserver* observer) OVERRIDE; + virtual void ActivateWindow(aura::Window* window) OVERRIDE; + virtual void DeactivateWindow(aura::Window* window) OVERRIDE; + virtual aura::Window* GetActiveWindow() OVERRIDE; + virtual aura::Window* GetActivatableWindow(aura::Window* window) OVERRIDE; + virtual aura::Window* GetToplevelWindow(aura::Window* window) OVERRIDE; + virtual bool OnWillFocusWindow(aura::Window* window, + const ui::Event* event) OVERRIDE; + virtual bool CanActivateWindow(aura::Window* window) const OVERRIDE; + + // Overridden from WindowObserver: + virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; + + private: + class Deleter; + + virtual ~DefaultActivationClient(); + void RemoveActiveWindow(aura::Window* window); + + // This class explicitly does NOT store the active window in a window property + // to make sure that ActivationChangeObserver is not treated as part of the + // aura API. Assumptions to that end will cause tests that use this client to + // fail. + std::vector<aura::Window*> active_windows_; + + // The window which was active before the currently active one. + aura::Window* last_active_; + + ObserverList<aura::client::ActivationChangeObserver> observers_; + + DISALLOW_COPY_AND_ASSIGN(DefaultActivationClient); +}; + +} // namespace wm + +#endif // UI_WM_CORE_DEFAULT_ACTIVATION_CLIENT_H_ diff --git a/ui/wm/core/input_method_event_filter_unittest.cc b/ui/wm/core/input_method_event_filter_unittest.cc index 6fc1b39..c5daa67 100644 --- a/ui/wm/core/input_method_event_filter_unittest.cc +++ b/ui/wm/core/input_method_event_filter_unittest.cc @@ -12,6 +12,7 @@ #include "ui/aura/window_event_dispatcher.h" #include "ui/events/test/test_event_handler.h" #include "ui/wm/core/compound_event_filter.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/public/activation_client.h" #if !defined(OS_WIN) && !defined(USE_X11) @@ -46,6 +47,8 @@ TEST_F(InputMethodEventFilterTest, TestInputMethodProperty) { // Tests if InputMethodEventFilter dispatches a ui::ET_TRANSLATED_KEY_* event to // the root window. TEST_F(InputMethodEventFilterTest, TestInputMethodKeyEventPropagation) { + new wm::DefaultActivationClient(root_window()); + CompoundEventFilter root_filter; root_window()->AddPreTargetHandler(&root_filter); diff --git a/ui/wm/core/shadow_controller_unittest.cc b/ui/wm/core/shadow_controller_unittest.cc index 60d571e..d82d015 100644 --- a/ui/wm/core/shadow_controller_unittest.cc +++ b/ui/wm/core/shadow_controller_unittest.cc @@ -13,6 +13,7 @@ #include "ui/aura/window.h" #include "ui/aura/window_event_dispatcher.h" #include "ui/compositor/layer.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/core/shadow.h" #include "ui/wm/core/shadow_types.h" #include "ui/wm/core/window_util.h" @@ -29,6 +30,7 @@ class ShadowControllerTest : public aura::test::AuraTestBase { virtual void SetUp() OVERRIDE { wm_state_.reset(new wm::WMState); AuraTestBase::SetUp(); + new wm::DefaultActivationClient(root_window()); aura::client::ActivationClient* activation_client = aura::client::GetActivationClient(root_window()); shadow_controller_.reset(new ShadowController(activation_client)); diff --git a/ui/wm/test/wm_test_helper.cc b/ui/wm/test/wm_test_helper.cc index 1982be5..8a3eba1 100644 --- a/ui/wm/test/wm_test_helper.cc +++ b/ui/wm/test/wm_test_helper.cc @@ -4,12 +4,12 @@ #include "ui/wm/test/wm_test_helper.h" -#include "ui/aura/client/default_activation_client.h" #include "ui/aura/client/default_capture_client.h" #include "ui/aura/env.h" #include "ui/aura/test/test_focus_client.h" #include "ui/aura/window.h" #include "ui/wm/core/compound_event_filter.h" +#include "ui/wm/core/default_activation_client.h" #include "ui/wm/core/input_method_event_filter.h" namespace wm { @@ -31,8 +31,7 @@ WMTestHelper::WMTestHelper(const gfx::Size& default_window_size) { input_method_filter_->SetInputMethodPropertyInRootWindow(host_->window()); root_window_event_filter_->AddHandler(input_method_filter_.get()); - activation_client_.reset( - new aura::client::DefaultActivationClient(host_->window())); + new wm::DefaultActivationClient(host_->window()); capture_client_.reset( new aura::client::DefaultCaptureClient(host_->window())); diff --git a/ui/wm/test/wm_test_helper.h b/ui/wm/test/wm_test_helper.h index 1a3dd09..52707a4 100644 --- a/ui/wm/test/wm_test_helper.h +++ b/ui/wm/test/wm_test_helper.h @@ -14,7 +14,6 @@ namespace aura { class Window; class WindowTreeHost; namespace client { -class DefaultActivationClient; class DefaultCaptureClient; class FocusClient; } @@ -51,7 +50,6 @@ class WMTestHelper : public aura::client::WindowTreeClient { scoped_ptr<wm::CompoundEventFilter> root_window_event_filter_; scoped_ptr<aura::client::DefaultCaptureClient> capture_client_; scoped_ptr<wm::InputMethodEventFilter> input_method_filter_; - scoped_ptr<aura::client::DefaultActivationClient> activation_client_; scoped_ptr<aura::client::FocusClient> focus_client_; DISALLOW_COPY_AND_ASSIGN(WMTestHelper); diff --git a/ui/wm/wm.gyp b/ui/wm/wm.gyp index 17ceaa36..537f67a 100644 --- a/ui/wm/wm.gyp +++ b/ui/wm/wm.gyp @@ -34,6 +34,8 @@ 'core/compound_event_filter.h', 'core/cursor_manager.cc', 'core/cursor_manager.h', + 'core/default_activation_client.cc', + 'core/default_activation_client.h', 'core/easy_resize_window_targeter.cc', 'core/easy_resize_window_targeter.h', 'core/focus_controller.cc', |