0

Make ToplevelWindowEventFilter and WorkspaceEventFilter into event handlers.

http://crbug.com/147653
R=sky@chromium.org,sadrul@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10916221

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155940 0039d316-1c4b-4281-b951-d872f2087c98
This commit is contained in:
ben@chromium.org
2012-09-11 03:39:01 +00:00
parent 6f6ccb054f
commit 5dc51db8c4
24 changed files with 259 additions and 250 deletions

@@ -320,8 +320,8 @@
'wm/system_modal_container_event_filter_delegate.h', 'wm/system_modal_container_event_filter_delegate.h',
'wm/system_modal_container_layout_manager.cc', 'wm/system_modal_container_layout_manager.cc',
'wm/system_modal_container_layout_manager.h', 'wm/system_modal_container_layout_manager.h',
'wm/toplevel_window_event_filter.cc', 'wm/toplevel_window_event_handler.cc',
'wm/toplevel_window_event_filter.h', 'wm/toplevel_window_event_handler.h',
'wm/user_activity_detector.cc', 'wm/user_activity_detector.cc',
'wm/user_activity_detector.h', 'wm/user_activity_detector.h',
'wm/user_activity_observer.h', 'wm/user_activity_observer.h',
@@ -368,8 +368,8 @@
'wm/workspace/workspace.h', 'wm/workspace/workspace.h',
'wm/workspace/workspace2.cc', 'wm/workspace/workspace2.cc',
'wm/workspace/workspace2.h', 'wm/workspace/workspace2.h',
'wm/workspace/workspace_event_filter.cc', 'wm/workspace/workspace_event_handler.cc',
'wm/workspace/workspace_event_filter.h', 'wm/workspace/workspace_event_handler.h',
'wm/workspace/workspace_layout_manager.cc', 'wm/workspace/workspace_layout_manager.cc',
'wm/workspace/workspace_layout_manager.h', 'wm/workspace/workspace_layout_manager.h',
'wm/workspace/workspace_layout_manager2.cc', 'wm/workspace/workspace_layout_manager2.cc',
@@ -502,7 +502,7 @@
'wm/shelf_layout_manager_unittest.cc', 'wm/shelf_layout_manager_unittest.cc',
'wm/system_gesture_event_filter_unittest.cc', 'wm/system_gesture_event_filter_unittest.cc',
'wm/system_modal_container_layout_manager_unittest.cc', 'wm/system_modal_container_layout_manager_unittest.cc',
'wm/toplevel_window_event_filter_unittest.cc', 'wm/toplevel_window_event_handler_unittest.cc',
'wm/user_activity_detector_unittest.cc', 'wm/user_activity_detector_unittest.cc',
'wm/video_detector_unittest.cc', 'wm/video_detector_unittest.cc',
'wm/visibility_controller_unittest.cc', 'wm/visibility_controller_unittest.cc',
@@ -513,9 +513,9 @@
'wm/workspace_controller_test_helper.cc', 'wm/workspace_controller_test_helper.cc',
'wm/workspace_controller_test_helper.h', 'wm/workspace_controller_test_helper.h',
'wm/workspace/multi_window_resize_controller_unittest.cc', 'wm/workspace/multi_window_resize_controller_unittest.cc',
'wm/workspace/workspace_event_filter_test_helper.cc', 'wm/workspace/workspace_event_handler_test_helper.cc',
'wm/workspace/workspace_event_filter_test_helper.h', 'wm/workspace/workspace_event_handler_test_helper.h',
'wm/workspace/workspace_event_filter_unittest.cc', 'wm/workspace/workspace_event_handler_unittest.cc',
'wm/workspace/workspace_manager_unittest.cc', 'wm/workspace/workspace_manager_unittest.cc',
'wm/workspace/workspace_manager2_unittest.cc', 'wm/workspace/workspace_manager2_unittest.cc',
'wm/workspace/workspace_window_resizer_unittest.cc', 'wm/workspace/workspace_window_resizer_unittest.cc',

@@ -17,7 +17,7 @@
#include "ash/wm/root_window_layout_manager.h" #include "ash/wm/root_window_layout_manager.h"
#include "ash/wm/screen_dimmer.h" #include "ash/wm/screen_dimmer.h"
#include "ash/wm/system_modal_container_layout_manager.h" #include "ash/wm/system_modal_container_layout_manager.h"
#include "ash/wm/toplevel_window_event_filter.h" #include "ash/wm/toplevel_window_event_handler.h"
#include "ash/wm/visibility_controller.h" #include "ash/wm/visibility_controller.h"
#include "ash/wm/window_properties.h" #include "ash/wm/window_properties.h"
#include "ash/wm/workspace_controller.h" #include "ash/wm/workspace_controller.h"
@@ -177,8 +177,10 @@ void CreateContainersInRootWindow(aura::RootWindow* root_window) {
internal::kShellWindowId_DefaultContainer, internal::kShellWindowId_DefaultContainer,
"DefaultContainer", "DefaultContainer",
non_lock_screen_containers); non_lock_screen_containers);
default_container->SetEventFilter( if (!internal::WorkspaceController::IsWorkspace2Enabled()) {
new ToplevelWindowEventFilter(default_container)); default_container->AddPreTargetHandler(
new ToplevelWindowEventHandler(default_container));
}
SetChildWindowVisibilityChangesAnimated(default_container); SetChildWindowVisibilityChangesAnimated(default_container);
SetUsesScreenCoordinates(default_container); SetUsesScreenCoordinates(default_container);
@@ -186,8 +188,8 @@ void CreateContainersInRootWindow(aura::RootWindow* root_window) {
internal::kShellWindowId_AlwaysOnTopContainer, internal::kShellWindowId_AlwaysOnTopContainer,
"AlwaysOnTopContainer", "AlwaysOnTopContainer",
non_lock_screen_containers); non_lock_screen_containers);
always_on_top_container->SetEventFilter( always_on_top_container->AddPreTargetHandler(
new ToplevelWindowEventFilter(always_on_top_container)); new ToplevelWindowEventHandler(always_on_top_container));
SetChildWindowVisibilityChangesAnimated(always_on_top_container); SetChildWindowVisibilityChangesAnimated(always_on_top_container);
SetUsesScreenCoordinates(always_on_top_container); SetUsesScreenCoordinates(always_on_top_container);
@@ -211,8 +213,8 @@ void CreateContainersInRootWindow(aura::RootWindow* root_window) {
internal::kShellWindowId_SystemModalContainer, internal::kShellWindowId_SystemModalContainer,
"SystemModalContainer", "SystemModalContainer",
non_lock_screen_containers); non_lock_screen_containers);
modal_container->SetEventFilter( modal_container->AddPreTargetHandler(
new ToplevelWindowEventFilter(modal_container)); new ToplevelWindowEventHandler(modal_container));
modal_container->SetLayoutManager( modal_container->SetLayoutManager(
new internal::SystemModalContainerLayoutManager(modal_container)); new internal::SystemModalContainerLayoutManager(modal_container));
SetChildWindowVisibilityChangesAnimated(modal_container); SetChildWindowVisibilityChangesAnimated(modal_container);
@@ -239,8 +241,8 @@ void CreateContainersInRootWindow(aura::RootWindow* root_window) {
internal::kShellWindowId_LockSystemModalContainer, internal::kShellWindowId_LockSystemModalContainer,
"LockSystemModalContainer", "LockSystemModalContainer",
lock_screen_containers); lock_screen_containers);
lock_modal_container->SetEventFilter( lock_modal_container->AddPreTargetHandler(
new ToplevelWindowEventFilter(lock_modal_container)); new ToplevelWindowEventHandler(lock_modal_container));
lock_modal_container->SetLayoutManager( lock_modal_container->SetLayoutManager(
new internal::SystemModalContainerLayoutManager(lock_modal_container)); new internal::SystemModalContainerLayoutManager(lock_modal_container));
SetChildWindowVisibilityChangesAnimated(lock_modal_container); SetChildWindowVisibilityChangesAnimated(lock_modal_container);

@@ -56,7 +56,6 @@
#include "ash/wm/status_area_layout_manager.h" #include "ash/wm/status_area_layout_manager.h"
#include "ash/wm/system_gesture_event_filter.h" #include "ash/wm/system_gesture_event_filter.h"
#include "ash/wm/system_modal_container_layout_manager.h" #include "ash/wm/system_modal_container_layout_manager.h"
#include "ash/wm/toplevel_window_event_filter.h"
#include "ash/wm/user_activity_detector.h" #include "ash/wm/user_activity_detector.h"
#include "ash/wm/video_detector.h" #include "ash/wm/video_detector.h"
#include "ash/wm/visibility_controller.h" #include "ash/wm/visibility_controller.h"
@@ -64,7 +63,6 @@
#include "ash/wm/window_modality_controller.h" #include "ash/wm/window_modality_controller.h"
#include "ash/wm/window_properties.h" #include "ash/wm/window_properties.h"
#include "ash/wm/window_util.h" #include "ash/wm/window_util.h"
#include "ash/wm/workspace/workspace_event_filter.h"
#include "ash/wm/workspace/workspace_layout_manager.h" #include "ash/wm/workspace/workspace_layout_manager.h"
#include "ash/wm/workspace_controller.h" #include "ash/wm/workspace_controller.h"
#include "base/bind.h" #include "base/bind.h"

@@ -300,9 +300,6 @@ TEST_F(ShellTest, MAYBE_ManagedWindowModeBasics) {
widget->Show(); widget->Show();
EXPECT_FALSE(widget->IsMaximized()); EXPECT_FALSE(widget->IsMaximized());
// We have a default container event filter (for window drags).
EXPECT_TRUE(widget->GetNativeWindow()->parent()->event_filter());
// Clean up. // Clean up.
widget->Close(); widget->Close();
} }

@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/wm/toplevel_window_event_filter.h" #include "ash/wm/toplevel_window_event_handler.h"
#include "ash/shell.h" #include "ash/shell.h"
#include "ash/wm/default_window_resizer.h" #include "ash/wm/default_window_resizer.h"
@@ -50,11 +50,11 @@ gfx::Point ConvertPointToParent(aura::Window* window,
// Wraps a WindowResizer and installs an observer on its target window. When // Wraps a WindowResizer and installs an observer on its target window. When
// the window is destroyed ResizerWindowDestroyed() is invoked back on the // the window is destroyed ResizerWindowDestroyed() is invoked back on the
// ToplevelWindowEventFilter to clean up. // ToplevelWindowEventHandler to clean up.
class ToplevelWindowEventFilter::ScopedWindowResizer class ToplevelWindowEventHandler::ScopedWindowResizer
: public aura::WindowObserver { : public aura::WindowObserver {
public: public:
ScopedWindowResizer(ToplevelWindowEventFilter* filter, ScopedWindowResizer(ToplevelWindowEventHandler* handler,
WindowResizer* resizer); WindowResizer* resizer);
virtual ~ScopedWindowResizer(); virtual ~ScopedWindowResizer();
@@ -64,60 +64,60 @@ class ToplevelWindowEventFilter::ScopedWindowResizer
virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
private: private:
ToplevelWindowEventFilter* filter_; ToplevelWindowEventHandler* handler_;
scoped_ptr<WindowResizer> resizer_; scoped_ptr<WindowResizer> resizer_;
DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer); DISALLOW_COPY_AND_ASSIGN(ScopedWindowResizer);
}; };
ToplevelWindowEventFilter::ScopedWindowResizer::ScopedWindowResizer( ToplevelWindowEventHandler::ScopedWindowResizer::ScopedWindowResizer(
ToplevelWindowEventFilter* filter, ToplevelWindowEventHandler* handler,
WindowResizer* resizer) WindowResizer* resizer)
: filter_(filter), : handler_(handler),
resizer_(resizer) { resizer_(resizer) {
if (resizer_.get()) if (resizer_.get())
resizer_->GetTarget()->AddObserver(this); resizer_->GetTarget()->AddObserver(this);
} }
ToplevelWindowEventFilter::ScopedWindowResizer::~ScopedWindowResizer() { ToplevelWindowEventHandler::ScopedWindowResizer::~ScopedWindowResizer() {
if (resizer_.get()) if (resizer_.get())
resizer_->GetTarget()->RemoveObserver(this); resizer_->GetTarget()->RemoveObserver(this);
} }
void ToplevelWindowEventFilter::ScopedWindowResizer::OnWindowDestroying( void ToplevelWindowEventHandler::ScopedWindowResizer::OnWindowDestroying(
aura::Window* window) { aura::Window* window) {
DCHECK(resizer_.get()); DCHECK(resizer_.get());
DCHECK_EQ(resizer_->GetTarget(), window); DCHECK_EQ(resizer_->GetTarget(), window);
filter_->ResizerWindowDestroyed(); handler_->ResizerWindowDestroyed();
} }
// ToplevelWindowEventFilter --------------------------------------------------- // ToplevelWindowEventHandler --------------------------------------------------
ToplevelWindowEventFilter::ToplevelWindowEventFilter(aura::Window* owner) ToplevelWindowEventHandler::ToplevelWindowEventHandler(aura::Window* owner)
: in_move_loop_(false), : in_move_loop_(false),
in_gesture_resize_(false) { in_gesture_resize_(false) {
aura::client::SetWindowMoveClient(owner, this); aura::client::SetWindowMoveClient(owner, this);
} }
ToplevelWindowEventFilter::~ToplevelWindowEventFilter() { ToplevelWindowEventHandler::~ToplevelWindowEventHandler() {
} }
bool ToplevelWindowEventFilter::PreHandleKeyEvent(aura::Window* target, ui::EventResult ToplevelWindowEventHandler::OnKeyEvent(ui::KeyEvent* event) {
ui::KeyEvent* event) {
if (window_resizer_.get() && event->type() == ui::ET_KEY_PRESSED && if (window_resizer_.get() && event->type() == ui::ET_KEY_PRESSED &&
event->key_code() == ui::VKEY_ESCAPE) { event->key_code() == ui::VKEY_ESCAPE) {
CompleteDrag(DRAG_REVERT, event->flags()); CompleteDrag(DRAG_REVERT, event->flags());
} }
return false; return ui::ER_UNHANDLED;
} }
bool ToplevelWindowEventFilter::PreHandleMouseEvent(aura::Window* target, ui::EventResult ToplevelWindowEventHandler::OnMouseEvent(
ui::MouseEvent* event) { ui::MouseEvent* event) {
if ((event->flags() & if ((event->flags() &
(ui::EF_MIDDLE_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON)) != 0) (ui::EF_MIDDLE_MOUSE_BUTTON | ui::EF_RIGHT_MOUSE_BUTTON)) != 0)
return false; return ui::ER_UNHANDLED;
aura::Window* target = static_cast<aura::Window*>(event->target());
switch (event->type()) { switch (event->type()) {
case ui::ET_MOUSE_PRESSED: { case ui::ET_MOUSE_PRESSED: {
// We also update the current window component here because for the // We also update the current window component here because for the
@@ -134,10 +134,11 @@ bool ToplevelWindowEventFilter::PreHandleMouseEvent(aura::Window* target,
} else { } else {
window_resizer_.reset(); window_resizer_.reset();
} }
return WindowResizer::GetBoundsChangeForWindowComponent(component) != 0; return WindowResizer::GetBoundsChangeForWindowComponent(component) != 0 ?
ui::ER_CONSUMED : ui::ER_UNHANDLED;
} }
case ui::ET_MOUSE_DRAGGED: case ui::ET_MOUSE_DRAGGED:
return HandleDrag(target, event); return HandleDrag(target, event) ? ui::ER_CONSUMED : ui::ER_UNHANDLED;
case ui::ET_MOUSE_CAPTURE_CHANGED: case ui::ET_MOUSE_CAPTURE_CHANGED:
case ui::ET_MOUSE_RELEASED: case ui::ET_MOUSE_RELEASED:
CompleteDrag(event->type() == ui::ET_MOUSE_RELEASED ? CompleteDrag(event->type() == ui::ET_MOUSE_RELEASED ?
@@ -148,32 +149,38 @@ bool ToplevelWindowEventFilter::PreHandleMouseEvent(aura::Window* target,
in_move_loop_ = false; in_move_loop_ = false;
} }
// Completing the drag may result in hiding the window. If this happens // Completing the drag may result in hiding the window. If this happens
// return true so no other filters/observers see the event. Otherwise they // return true so no other handlers/observers see the event. Otherwise
// see the event on a hidden window. // they see the event on a hidden window.
if (event->type() == ui::ET_MOUSE_CAPTURE_CHANGED && if (event->type() == ui::ET_MOUSE_CAPTURE_CHANGED &&
!target->IsVisible()) { !target->IsVisible()) {
return true; return ui::ER_CONSUMED;
} }
break; break;
case ui::ET_MOUSE_MOVED: case ui::ET_MOUSE_MOVED:
return HandleMouseMoved(target, event); return HandleMouseMoved(target, event) ?
ui::ER_CONSUMED : ui::ER_UNHANDLED;
case ui::ET_MOUSE_EXITED: case ui::ET_MOUSE_EXITED:
return HandleMouseExited(target, event); return HandleMouseExited(target, event) ?
ui::ER_CONSUMED : ui::ER_UNHANDLED;
default: default:
break; break;
} }
return false; return ui::ER_UNHANDLED;
} }
ui::TouchStatus ToplevelWindowEventFilter::PreHandleTouchEvent( ui::EventResult ToplevelWindowEventHandler::OnScrollEvent(
aura::Window* target, ui::ScrollEvent* event) {
return ui::ER_UNHANDLED;
}
ui::TouchStatus ToplevelWindowEventHandler::OnTouchEvent(
ui::TouchEvent* event) { ui::TouchEvent* event) {
return ui::TOUCH_STATUS_UNKNOWN; return ui::TOUCH_STATUS_UNKNOWN;
} }
ui::EventResult ToplevelWindowEventFilter::PreHandleGestureEvent( ui::EventResult ToplevelWindowEventHandler::OnGestureEvent(
aura::Window* target,
ui::GestureEvent* event) { ui::GestureEvent* event) {
aura::Window* target = static_cast<aura::Window*>(event->target());
switch (event->type()) { switch (event->type()) {
case ui::ET_GESTURE_SCROLL_BEGIN: { case ui::ET_GESTURE_SCROLL_BEGIN: {
int component = int component =
@@ -247,8 +254,8 @@ ui::EventResult ToplevelWindowEventFilter::PreHandleGestureEvent(
return ui::ER_CONSUMED; return ui::ER_CONSUMED;
} }
void ToplevelWindowEventFilter::RunMoveLoop(aura::Window* source, void ToplevelWindowEventHandler::RunMoveLoop(aura::Window* source,
const gfx::Point& drag_offset) { const gfx::Point& drag_offset) {
DCHECK(!in_move_loop_); // Can only handle one nested loop at a time. DCHECK(!in_move_loop_); // Can only handle one nested loop at a time.
in_move_loop_ = true; in_move_loop_ = true;
aura::RootWindow* root_window = source->GetRootWindow(); aura::RootWindow* root_window = source->GetRootWindow();
@@ -276,7 +283,7 @@ void ToplevelWindowEventFilter::RunMoveLoop(aura::Window* source,
in_gesture_resize_ = in_move_loop_ = false; in_gesture_resize_ = in_move_loop_ = false;
} }
void ToplevelWindowEventFilter::EndMoveLoop() { void ToplevelWindowEventHandler::EndMoveLoop() {
if (!in_move_loop_) if (!in_move_loop_)
return; return;
@@ -289,7 +296,7 @@ void ToplevelWindowEventFilter::EndMoveLoop() {
} }
// static // static
WindowResizer* ToplevelWindowEventFilter::CreateWindowResizer( WindowResizer* ToplevelWindowEventHandler::CreateWindowResizer(
aura::Window* window, aura::Window* window,
const gfx::Point& point_in_parent, const gfx::Point& point_in_parent,
int window_component) { int window_component) {
@@ -300,7 +307,7 @@ WindowResizer* ToplevelWindowEventFilter::CreateWindowResizer(
} }
void ToplevelWindowEventFilter::CreateScopedWindowResizer( void ToplevelWindowEventHandler::CreateScopedWindowResizer(
aura::Window* window, aura::Window* window,
const gfx::Point& point_in_parent, const gfx::Point& point_in_parent,
int window_component) { int window_component) {
@@ -311,8 +318,8 @@ void ToplevelWindowEventFilter::CreateScopedWindowResizer(
window_resizer_.reset(new ScopedWindowResizer(this, resizer)); window_resizer_.reset(new ScopedWindowResizer(this, resizer));
} }
void ToplevelWindowEventFilter::CompleteDrag(DragCompletionStatus status, void ToplevelWindowEventHandler::CompleteDrag(DragCompletionStatus status,
int event_flags) { int event_flags) {
scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release()); scoped_ptr<ScopedWindowResizer> resizer(window_resizer_.release());
if (resizer.get()) { if (resizer.get()) {
if (status == DRAG_COMPLETE) if (status == DRAG_COMPLETE)
@@ -322,8 +329,8 @@ void ToplevelWindowEventFilter::CompleteDrag(DragCompletionStatus status,
} }
} }
bool ToplevelWindowEventFilter::HandleDrag(aura::Window* target, bool ToplevelWindowEventHandler::HandleDrag(aura::Window* target,
ui::LocatedEvent* event) { ui::LocatedEvent* event) {
// This function only be triggered to move window // This function only be triggered to move window
// by mouse drag or touch move event. // by mouse drag or touch move event.
DCHECK(event->type() == ui::ET_MOUSE_DRAGGED || DCHECK(event->type() == ui::ET_MOUSE_DRAGGED ||
@@ -337,8 +344,8 @@ bool ToplevelWindowEventFilter::HandleDrag(aura::Window* target,
return true; return true;
} }
bool ToplevelWindowEventFilter::HandleMouseMoved(aura::Window* target, bool ToplevelWindowEventHandler::HandleMouseMoved(aura::Window* target,
ui::LocatedEvent* event) { ui::LocatedEvent* event) {
// TODO(jamescook): Move the resize cursor update code into here from // TODO(jamescook): Move the resize cursor update code into here from
// CompoundEventFilter? // CompoundEventFilter?
internal::ResizeShadowController* controller = internal::ResizeShadowController* controller =
@@ -355,8 +362,8 @@ bool ToplevelWindowEventFilter::HandleMouseMoved(aura::Window* target,
return false; return false;
} }
bool ToplevelWindowEventFilter::HandleMouseExited(aura::Window* target, bool ToplevelWindowEventHandler::HandleMouseExited(aura::Window* target,
ui::LocatedEvent* event) { ui::LocatedEvent* event) {
internal::ResizeShadowController* controller = internal::ResizeShadowController* controller =
Shell::GetInstance()->resize_shadow_controller(); Shell::GetInstance()->resize_shadow_controller();
if (controller) if (controller)
@@ -364,7 +371,7 @@ bool ToplevelWindowEventFilter::HandleMouseExited(aura::Window* target,
return false; return false;
} }
void ToplevelWindowEventFilter::ResizerWindowDestroyed() { void ToplevelWindowEventHandler::ResizerWindowDestroyed() {
// We explicitly don't invoke RevertDrag() since that may do things to window. // We explicitly don't invoke RevertDrag() since that may do things to window.
// Instead we destroy the resizer. // Instead we destroy the resizer.
window_resizer_.reset(); window_resizer_.reset();

@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef ASH_WM_TOPLEVEL_WINDOW_EVENT_FILTER_H_ #ifndef ASH_WM_TOPLEVEL_WINDOW_EVENT_HANDLER_H_
#define ASH_WM_TOPLEVEL_WINDOW_EVENT_FILTER_H_ #define ASH_WM_TOPLEVEL_WINDOW_EVENT_HANDLER_H_
#include <set> #include <set>
@@ -12,7 +12,7 @@
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "ui/aura/client/window_move_client.h" #include "ui/aura/client/window_move_client.h"
#include "ui/aura/event_filter.h" #include "ui/base/events/event_handler.h"
#include "ui/gfx/point.h" #include "ui/gfx/point.h"
#include "ui/gfx/rect.h" #include "ui/gfx/rect.h"
@@ -28,24 +28,19 @@ namespace ash {
class WindowResizer; class WindowResizer;
class ASH_EXPORT ToplevelWindowEventFilter class ASH_EXPORT ToplevelWindowEventHandler
: public aura::EventFilter, : public ui::EventHandler,
public aura::client::WindowMoveClient { public aura::client::WindowMoveClient {
public: public:
explicit ToplevelWindowEventFilter(aura::Window* owner); explicit ToplevelWindowEventHandler(aura::Window* owner);
virtual ~ToplevelWindowEventFilter(); virtual ~ToplevelWindowEventHandler();
// Overridden from aura::EventFilter: // Overridden from ui::EventHandler:
virtual bool PreHandleKeyEvent(aura::Window* target, virtual ui::EventResult OnKeyEvent(ui::KeyEvent* event) OVERRIDE;
ui::KeyEvent* event) OVERRIDE; virtual ui::EventResult OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
virtual bool PreHandleMouseEvent(aura::Window* target, virtual ui::EventResult OnScrollEvent(ui::ScrollEvent* event) OVERRIDE;
ui::MouseEvent* event) OVERRIDE; virtual ui::TouchStatus OnTouchEvent(ui::TouchEvent* event) OVERRIDE;
virtual ui::TouchStatus PreHandleTouchEvent( virtual ui::EventResult OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
aura::Window* target,
ui::TouchEvent* event) OVERRIDE;
virtual ui::EventResult PreHandleGestureEvent(
aura::Window* target,
ui::GestureEvent* event) OVERRIDE;
// Overridden form aura::client::WindowMoveClient: // Overridden form aura::client::WindowMoveClient:
virtual void RunMoveLoop(aura::Window* source, virtual void RunMoveLoop(aura::Window* source,
@@ -98,9 +93,9 @@ class ASH_EXPORT ToplevelWindowEventFilter
base::Closure quit_closure_; base::Closure quit_closure_;
DISALLOW_COPY_AND_ASSIGN(ToplevelWindowEventFilter); DISALLOW_COPY_AND_ASSIGN(ToplevelWindowEventHandler);
}; };
} // namespace aura } // namespace aura
#endif // ASH_WM_TOPLEVEL_WINDOW_EVENT_FILTER_H_ #endif // ASH_WM_TOPLEVEL_WINDOW_EVENT_HANDLER_H_

@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/wm/toplevel_window_event_filter.h" #include "ash/wm/toplevel_window_event_handler.h"
#include "ash/shell.h" #include "ash/shell.h"
#include "ash/test/ash_test_base.h" #include "ash/test/ash_test_base.h"
@@ -64,10 +64,10 @@ class TestWindowDelegate : public aura::test::TestWindowDelegate {
DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate); DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate);
}; };
class ToplevelWindowEventFilterTest : public AshTestBase { class ToplevelWindowEventHandlerTest : public AshTestBase {
public: public:
ToplevelWindowEventFilterTest() : filter_(NULL), parent_(NULL) {} ToplevelWindowEventHandlerTest() : handler_(NULL), parent_(NULL) {}
virtual ~ToplevelWindowEventFilterTest() {} virtual ~ToplevelWindowEventHandlerTest() {}
virtual void SetUp() OVERRIDE { virtual void SetUp() OVERRIDE {
AshTestBase::SetUp(); AshTestBase::SetUp();
@@ -76,12 +76,12 @@ class ToplevelWindowEventFilterTest : public AshTestBase {
parent_->Show(); parent_->Show();
Shell::GetPrimaryRootWindow()->AddChild(parent_); Shell::GetPrimaryRootWindow()->AddChild(parent_);
parent_->SetBounds(Shell::GetPrimaryRootWindow()->bounds()); parent_->SetBounds(Shell::GetPrimaryRootWindow()->bounds());
filter_ = new ToplevelWindowEventFilter(parent_); handler_ = new ToplevelWindowEventHandler(parent_);
parent_->SetEventFilter(filter_); parent_->AddPreTargetHandler(handler_);
} }
virtual void TearDown() OVERRIDE { virtual void TearDown() OVERRIDE {
filter_ = NULL; handler_ = NULL;
parent_ = NULL; parent_ = NULL;
AshTestBase::TearDown(); AshTestBase::TearDown();
} }
@@ -108,18 +108,18 @@ class ToplevelWindowEventFilterTest : public AshTestBase {
generator.PressMoveAndReleaseTouchBy(dx, dy); generator.PressMoveAndReleaseTouchBy(dx, dy);
} }
ToplevelWindowEventFilter* filter_; ToplevelWindowEventHandler* handler_;
private: private:
// Window |filter_| is installed on. Owned by RootWindow. // Window |handler_| is installed on. Owned by RootWindow.
aura::Window* parent_; aura::Window* parent_;
DISALLOW_COPY_AND_ASSIGN(ToplevelWindowEventFilterTest); DISALLOW_COPY_AND_ASSIGN(ToplevelWindowEventHandlerTest);
}; };
} }
TEST_F(ToplevelWindowEventFilterTest, Caption) { TEST_F(ToplevelWindowEventHandlerTest, Caption) {
scoped_ptr<aura::Window> w1(CreateWindow(HTCAPTION)); scoped_ptr<aura::Window> w1(CreateWindow(HTCAPTION));
gfx::Size size = w1->bounds().size(); gfx::Size size = w1->bounds().size();
DragFromCenterBy(w1.get(), 100, 100); DragFromCenterBy(w1.get(), 100, 100);
@@ -135,7 +135,7 @@ TEST_F(ToplevelWindowEventFilterTest, Caption) {
EXPECT_EQ(size.ToString(), w1->bounds().size().ToString()); EXPECT_EQ(size.ToString(), w1->bounds().size().ToString());
} }
TEST_F(ToplevelWindowEventFilterTest, BottomRight) { TEST_F(ToplevelWindowEventHandlerTest, BottomRight) {
scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT)); scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT));
gfx::Point position = w1->bounds().origin(); gfx::Point position = w1->bounds().origin();
DragFromCenterBy(w1.get(), 100, 100); DragFromCenterBy(w1.get(), 100, 100);
@@ -145,7 +145,7 @@ TEST_F(ToplevelWindowEventFilterTest, BottomRight) {
EXPECT_EQ(gfx::Size(200, 200), w1->bounds().size()); EXPECT_EQ(gfx::Size(200, 200), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, GrowBox) { TEST_F(ToplevelWindowEventHandlerTest, GrowBox) {
scoped_ptr<aura::Window> w1(CreateWindow(HTGROWBOX)); scoped_ptr<aura::Window> w1(CreateWindow(HTGROWBOX));
TestWindowDelegate* window_delegate = TestWindowDelegate* window_delegate =
static_cast<TestWindowDelegate*>(w1->delegate()); static_cast<TestWindowDelegate*>(w1->delegate());
@@ -173,7 +173,7 @@ TEST_F(ToplevelWindowEventFilterTest, GrowBox) {
EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size()); EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, Right) { TEST_F(ToplevelWindowEventHandlerTest, Right) {
scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT)); scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT));
gfx::Point position = w1->bounds().origin(); gfx::Point position = w1->bounds().origin();
DragFromCenterBy(w1.get(), 100, 100); DragFromCenterBy(w1.get(), 100, 100);
@@ -183,7 +183,7 @@ TEST_F(ToplevelWindowEventFilterTest, Right) {
EXPECT_EQ(gfx::Size(200, 100), w1->bounds().size()); EXPECT_EQ(gfx::Size(200, 100), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, Bottom) { TEST_F(ToplevelWindowEventHandlerTest, Bottom) {
scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOM)); scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOM));
gfx::Point position = w1->bounds().origin(); gfx::Point position = w1->bounds().origin();
DragFromCenterBy(w1.get(), 100, 100); DragFromCenterBy(w1.get(), 100, 100);
@@ -193,7 +193,7 @@ TEST_F(ToplevelWindowEventFilterTest, Bottom) {
EXPECT_EQ(gfx::Size(100, 200), w1->bounds().size()); EXPECT_EQ(gfx::Size(100, 200), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, TopRight) { TEST_F(ToplevelWindowEventHandlerTest, TopRight) {
scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT)); scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT));
DragFromCenterBy(w1.get(), -50, 50); DragFromCenterBy(w1.get(), -50, 50);
// Position should have been offset by 0,50. // Position should have been offset by 0,50.
@@ -202,7 +202,7 @@ TEST_F(ToplevelWindowEventFilterTest, TopRight) {
EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size()); EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, Top) { TEST_F(ToplevelWindowEventHandlerTest, Top) {
scoped_ptr<aura::Window> w1(CreateWindow(HTTOP)); scoped_ptr<aura::Window> w1(CreateWindow(HTTOP));
DragFromCenterBy(w1.get(), 50, 50); DragFromCenterBy(w1.get(), 50, 50);
// Position should have been offset by 0,50. // Position should have been offset by 0,50.
@@ -211,7 +211,7 @@ TEST_F(ToplevelWindowEventFilterTest, Top) {
EXPECT_EQ(gfx::Size(100, 50), w1->bounds().size()); EXPECT_EQ(gfx::Size(100, 50), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, Left) { TEST_F(ToplevelWindowEventHandlerTest, Left) {
scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT)); scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT));
DragFromCenterBy(w1.get(), 50, 50); DragFromCenterBy(w1.get(), 50, 50);
// Position should have been offset by 50,0. // Position should have been offset by 50,0.
@@ -220,7 +220,7 @@ TEST_F(ToplevelWindowEventFilterTest, Left) {
EXPECT_EQ(gfx::Size(50, 100), w1->bounds().size()); EXPECT_EQ(gfx::Size(50, 100), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, BottomLeft) { TEST_F(ToplevelWindowEventHandlerTest, BottomLeft) {
scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT)); scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT));
DragFromCenterBy(w1.get(), 50, -50); DragFromCenterBy(w1.get(), 50, -50);
// Position should have been offset by 50,0. // Position should have been offset by 50,0.
@@ -229,7 +229,7 @@ TEST_F(ToplevelWindowEventFilterTest, BottomLeft) {
EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size()); EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, TopLeft) { TEST_F(ToplevelWindowEventHandlerTest, TopLeft) {
scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT)); scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT));
DragFromCenterBy(w1.get(), 50, 50); DragFromCenterBy(w1.get(), 50, 50);
// Position should have been offset by 50,50. // Position should have been offset by 50,50.
@@ -238,7 +238,7 @@ TEST_F(ToplevelWindowEventFilterTest, TopLeft) {
EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size()); EXPECT_EQ(gfx::Size(50, 50), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, Client) { TEST_F(ToplevelWindowEventHandlerTest, Client) {
scoped_ptr<aura::Window> w1(CreateWindow(HTCLIENT)); scoped_ptr<aura::Window> w1(CreateWindow(HTCLIENT));
gfx::Rect bounds = w1->bounds(); gfx::Rect bounds = w1->bounds();
DragFromCenterBy(w1.get(), 100, 100); DragFromCenterBy(w1.get(), 100, 100);
@@ -246,7 +246,7 @@ TEST_F(ToplevelWindowEventFilterTest, Client) {
EXPECT_EQ(bounds, w1->bounds()); EXPECT_EQ(bounds, w1->bounds());
} }
TEST_F(ToplevelWindowEventFilterTest, LeftPastMinimum) { TEST_F(ToplevelWindowEventHandlerTest, LeftPastMinimum) {
scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT)); scoped_ptr<aura::Window> w1(CreateWindow(HTLEFT));
TestWindowDelegate* window_delegate = TestWindowDelegate* window_delegate =
static_cast<TestWindowDelegate*>(w1->delegate()); static_cast<TestWindowDelegate*>(w1->delegate());
@@ -259,7 +259,7 @@ TEST_F(ToplevelWindowEventFilterTest, LeftPastMinimum) {
EXPECT_EQ(gfx::Size(40, 100), w1->bounds().size()); EXPECT_EQ(gfx::Size(40, 100), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, RightPastMinimum) { TEST_F(ToplevelWindowEventHandlerTest, RightPastMinimum) {
scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT)); scoped_ptr<aura::Window> w1(CreateWindow(HTRIGHT));
TestWindowDelegate* window_delegate = TestWindowDelegate* window_delegate =
static_cast<TestWindowDelegate*>(w1->delegate()); static_cast<TestWindowDelegate*>(w1->delegate());
@@ -273,7 +273,7 @@ TEST_F(ToplevelWindowEventFilterTest, RightPastMinimum) {
EXPECT_EQ(gfx::Size(40, 100), w1->bounds().size()); EXPECT_EQ(gfx::Size(40, 100), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, TopLeftPastMinimum) { TEST_F(ToplevelWindowEventHandlerTest, TopLeftPastMinimum) {
scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT)); scoped_ptr<aura::Window> w1(CreateWindow(HTTOPLEFT));
TestWindowDelegate* window_delegate = TestWindowDelegate* window_delegate =
static_cast<TestWindowDelegate*>(w1->delegate()); static_cast<TestWindowDelegate*>(w1->delegate());
@@ -286,7 +286,7 @@ TEST_F(ToplevelWindowEventFilterTest, TopLeftPastMinimum) {
EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size()); EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, TopRightPastMinimum) { TEST_F(ToplevelWindowEventHandlerTest, TopRightPastMinimum) {
scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT)); scoped_ptr<aura::Window> w1(CreateWindow(HTTOPRIGHT));
TestWindowDelegate* window_delegate = TestWindowDelegate* window_delegate =
static_cast<TestWindowDelegate*>(w1->delegate()); static_cast<TestWindowDelegate*>(w1->delegate());
@@ -300,7 +300,7 @@ TEST_F(ToplevelWindowEventFilterTest, TopRightPastMinimum) {
EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size()); EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, BottomLeftPastMinimum) { TEST_F(ToplevelWindowEventHandlerTest, BottomLeftPastMinimum) {
scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT)); scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMLEFT));
TestWindowDelegate* window_delegate = TestWindowDelegate* window_delegate =
static_cast<TestWindowDelegate*>(w1->delegate()); static_cast<TestWindowDelegate*>(w1->delegate());
@@ -314,7 +314,7 @@ TEST_F(ToplevelWindowEventFilterTest, BottomLeftPastMinimum) {
EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size()); EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, BottomRightPastMinimum) { TEST_F(ToplevelWindowEventHandlerTest, BottomRightPastMinimum) {
scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT)); scoped_ptr<aura::Window> w1(CreateWindow(HTBOTTOMRIGHT));
TestWindowDelegate* window_delegate = TestWindowDelegate* window_delegate =
static_cast<TestWindowDelegate*>(w1->delegate()); static_cast<TestWindowDelegate*>(w1->delegate());
@@ -328,7 +328,7 @@ TEST_F(ToplevelWindowEventFilterTest, BottomRightPastMinimum) {
EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size()); EXPECT_EQ(gfx::Size(40, 40), w1->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, BottomRightWorkArea) { TEST_F(ToplevelWindowEventHandlerTest, BottomRightWorkArea) {
scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMRIGHT)); scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMRIGHT));
gfx::Rect work_area = gfx::Rect work_area =
gfx::Screen::GetDisplayNearestWindow(target.get()).work_area(); gfx::Screen::GetDisplayNearestWindow(target.get()).work_area();
@@ -342,7 +342,7 @@ TEST_F(ToplevelWindowEventFilterTest, BottomRightWorkArea) {
target->bounds().size()); target->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, BottomLeftWorkArea) { TEST_F(ToplevelWindowEventHandlerTest, BottomLeftWorkArea) {
scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMLEFT)); scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOMLEFT));
gfx::Rect work_area = gfx::Rect work_area =
gfx::Screen::GetDisplayNearestWindow(target.get()).work_area(); gfx::Screen::GetDisplayNearestWindow(target.get()).work_area();
@@ -357,7 +357,7 @@ TEST_F(ToplevelWindowEventFilterTest, BottomLeftWorkArea) {
target->bounds().size()); target->bounds().size());
} }
TEST_F(ToplevelWindowEventFilterTest, BottomWorkArea) { TEST_F(ToplevelWindowEventHandlerTest, BottomWorkArea) {
scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOM)); scoped_ptr<aura::Window> target(CreateWindow(HTBOTTOM));
gfx::Rect work_area = gfx::Rect work_area =
gfx::Screen::GetDisplayNearestWindow(target.get()).work_area(); gfx::Screen::GetDisplayNearestWindow(target.get()).work_area();
@@ -372,7 +372,7 @@ TEST_F(ToplevelWindowEventFilterTest, BottomWorkArea) {
} }
// Verifies we don't let windows drag to a -y location. // Verifies we don't let windows drag to a -y location.
TEST_F(ToplevelWindowEventFilterTest, DontDragToNegativeY) { TEST_F(ToplevelWindowEventHandlerTest, DontDragToNegativeY) {
scoped_ptr<aura::Window> target(CreateWindow(HTTOP)); scoped_ptr<aura::Window> target(CreateWindow(HTTOP));
aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
target.get()); target.get());
@@ -384,7 +384,7 @@ TEST_F(ToplevelWindowEventFilterTest, DontDragToNegativeY) {
} }
// Verifies we don't let windows go bigger than the display width. // Verifies we don't let windows go bigger than the display width.
TEST_F(ToplevelWindowEventFilterTest, DontGotWiderThanScreen) { TEST_F(ToplevelWindowEventHandlerTest, DontGotWiderThanScreen) {
scoped_ptr<aura::Window> target(CreateWindow(HTRIGHT)); scoped_ptr<aura::Window> target(CreateWindow(HTRIGHT));
gfx::Rect work_area = gfx::Rect work_area =
gfx::Screen::GetDisplayNearestWindow(target.get()).bounds(); gfx::Screen::GetDisplayNearestWindow(target.get()).bounds();
@@ -394,7 +394,7 @@ TEST_F(ToplevelWindowEventFilterTest, DontGotWiderThanScreen) {
} }
// Verifies that touch-gestures drag the window correctly. // Verifies that touch-gestures drag the window correctly.
TEST_F(ToplevelWindowEventFilterTest, GestureDrag) { TEST_F(ToplevelWindowEventHandlerTest, GestureDrag) {
scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION)); scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION));
aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
target.get()); target.get());
@@ -465,7 +465,7 @@ TEST_F(ToplevelWindowEventFilterTest, GestureDrag) {
#else #else
#define MAYBE_EscapeReverts EscapeReverts #define MAYBE_EscapeReverts EscapeReverts
#endif #endif
TEST_F(ToplevelWindowEventFilterTest, MAYBE_EscapeReverts) { TEST_F(ToplevelWindowEventHandlerTest, MAYBE_EscapeReverts) {
aura::RootWindow* root = Shell::GetPrimaryRootWindow(); aura::RootWindow* root = Shell::GetPrimaryRootWindow();
aura::client::ActivationClient* original_client = aura::client::ActivationClient* original_client =
aura::client::GetActivationClient(root); aura::client::GetActivationClient(root);

@@ -8,7 +8,7 @@
#include "ash/shell.h" #include "ash/shell.h"
#include "ash/shell_window_ids.h" #include "ash/shell_window_ids.h"
#include "ash/wm/window_animations.h" #include "ash/wm/window_animations.h"
#include "ash/wm/workspace/workspace_event_filter.h" #include "ash/wm/workspace/workspace_event_handler.h"
#include "ash/wm/workspace/workspace_window_resizer.h" #include "ash/wm/workspace/workspace_window_resizer.h"
#include "grit/ui_resources.h" #include "grit/ui_resources.h"
#include "ui/aura/client/screen_position_client.h" #include "ui/aura/client/screen_position_client.h"
@@ -160,7 +160,7 @@ void MultiWindowResizeController::Show(Window* window,
const gfx::Point& point_in_window) { const gfx::Point& point_in_window) {
// When the resize widget is showing we ignore Show() requests. Instead we // When the resize widget is showing we ignore Show() requests. Instead we
// only care about mouse movements from MouseWatcher. This is necessary as // only care about mouse movements from MouseWatcher. This is necessary as
// WorkspaceEventFilter only sees mouse movements over the windows, not all // WorkspaceEventHandler only sees mouse movements over the windows, not all
// windows or over the desktop. // windows or over the desktop.
if (resize_widget_.get()) if (resize_widget_.get())
return; return;

@@ -9,7 +9,7 @@
#include "ash/wm/window_util.h" #include "ash/wm/window_util.h"
#include "ash/wm/workspace_controller.h" #include "ash/wm/workspace_controller.h"
#include "ash/wm/workspace_controller_test_helper.h" #include "ash/wm/workspace_controller_test_helper.h"
#include "ash/wm/workspace/workspace_event_filter_test_helper.h" #include "ash/wm/workspace/workspace_event_handler_test_helper.h"
#include "ash/wm/workspace/workspace_manager.h" #include "ash/wm/workspace/workspace_manager.h"
#include "ui/aura/test/event_generator.h" #include "ui/aura/test/event_generator.h"
#include "ui/aura/test/test_window_delegate.h" #include "ui/aura/test/test_window_delegate.h"
@@ -30,9 +30,9 @@ class MultiWindowResizeControllerTest : public test::AshTestBase {
test::AshTestBase::SetUp(); test::AshTestBase::SetUp();
WorkspaceController* wc = WorkspaceController* wc =
ash::Shell::TestApi(Shell::GetInstance()).workspace_controller(); ash::Shell::TestApi(Shell::GetInstance()).workspace_controller();
WorkspaceEventFilter* event_filter = WorkspaceEventHandler* event_handler =
WorkspaceControllerTestHelper(wc).GetFilter(); WorkspaceControllerTestHelper(wc).GetEventHandler();
resize_controller_ = WorkspaceEventFilterTestHelper(event_filter). resize_controller_ = WorkspaceEventHandlerTestHelper(event_handler).
resize_controller(); resize_controller();
} }

@@ -8,7 +8,7 @@
#include "ash/wm/property_util.h" #include "ash/wm/property_util.h"
#include "ash/wm/window_properties.h" #include "ash/wm/window_properties.h"
#include "ash/wm/window_util.h" #include "ash/wm/window_util.h"
#include "ash/wm/workspace/workspace_event_filter.h" #include "ash/wm/workspace/workspace_event_handler.h"
#include "ash/wm/workspace/workspace_manager2.h" #include "ash/wm/workspace/workspace_manager2.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
@@ -21,7 +21,7 @@ Workspace2::Workspace2(WorkspaceManager2* manager,
: is_maximized_(is_maximized), : is_maximized_(is_maximized),
workspace_manager_(manager), workspace_manager_(manager),
window_(new aura::Window(NULL)), window_(new aura::Window(NULL)),
event_filter_(new WorkspaceEventFilter(window_)) { event_handler_(new WorkspaceEventHandler(window_)) {
window_->SetProperty(internal::kChildWindowVisibilityChangesAnimatedKey, window_->SetProperty(internal::kChildWindowVisibilityChangesAnimatedKey,
true); true);
window_->set_id(kShellWindowId_WorkspaceContainer); window_->set_id(kShellWindowId_WorkspaceContainer);
@@ -31,7 +31,7 @@ Workspace2::Workspace2(WorkspaceManager2* manager,
window_->layer()->SetMasksToBounds(true); window_->layer()->SetMasksToBounds(true);
window_->Hide(); window_->Hide();
window_->SetParent(parent); window_->SetParent(parent);
window_->SetEventFilter(event_filter_); window_->AddPreTargetHandler(event_handler_);
window_->SetProperty(internal::kUsesScreenCoordinatesKey, true); window_->SetProperty(internal::kUsesScreenCoordinatesKey, true);
} }
@@ -47,7 +47,7 @@ aura::Window* Workspace2::ReleaseWindow() {
window_->SetEventFilter(NULL); window_->SetEventFilter(NULL);
aura::Window* window = window_; aura::Window* window = window_;
window_ = NULL; window_ = NULL;
event_filter_ = NULL; event_handler_ = NULL;
return window; return window;
} }

@@ -21,7 +21,7 @@ class Rect;
namespace ash { namespace ash {
namespace internal { namespace internal {
class WorkspaceEventFilter; class WorkspaceEventHandler;
class WorkspaceManager2; class WorkspaceManager2;
// Workspace is used to maintain either a single maximized windows (including // Workspace is used to maintain either a single maximized windows (including
@@ -61,7 +61,7 @@ class ASH_EXPORT Workspace2 {
aura::Window* window_; aura::Window* window_;
// Owned by |window_|. // Owned by |window_|.
WorkspaceEventFilter* event_filter_; WorkspaceEventHandler* event_handler_;
DISALLOW_COPY_AND_ASSIGN(Workspace2); DISALLOW_COPY_AND_ASSIGN(Workspace2);
}; };

@@ -1,19 +0,0 @@
// 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 "ash/wm/workspace/workspace_event_filter_test_helper.h"
namespace ash {
namespace internal {
WorkspaceEventFilterTestHelper::WorkspaceEventFilterTestHelper(
WorkspaceEventFilter* filter)
: filter_(filter) {
}
WorkspaceEventFilterTestHelper::~WorkspaceEventFilterTestHelper() {
}
} // namespace internal
} // namespace ash

@@ -1,31 +0,0 @@
// 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 ASH_WM_WORKSPACE_WORKSPACE_EVENT_FILTER_TEST_HELPER_H_
#define ASH_WM_WORKSPACE_WORKSPACE_EVENT_FILTER_TEST_HELPER_H_
#include "ash/wm/workspace/workspace_event_filter.h"
namespace ash {
namespace internal {
class WorkspaceEventFilterTestHelper {
public:
explicit WorkspaceEventFilterTestHelper(WorkspaceEventFilter* filter);
~WorkspaceEventFilterTestHelper();
MultiWindowResizeController* resize_controller() {
return &(filter_->multi_window_resize_controller_);
}
private:
WorkspaceEventFilter* filter_;
DISALLOW_COPY_AND_ASSIGN(WorkspaceEventFilterTestHelper);
};
} // namespace internal
} // namespace ash
#endif // ASH_WM_WORKSPACE_WORKSPACE_EVENT_FILTER_TEST_HELPER_H_

@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/wm/workspace/workspace_event_filter.h" #include "ash/wm/workspace/workspace_event_handler.h"
#include "ash/screen_ash.h" #include "ash/screen_ash.h"
#include "ash/wm/property_util.h" #include "ash/wm/property_util.h"
@@ -54,18 +54,18 @@ void ToggleMaximizedState(aura::Window* window) {
namespace internal { namespace internal {
WorkspaceEventFilter::WorkspaceEventFilter(aura::Window* owner) WorkspaceEventHandler::WorkspaceEventHandler(aura::Window* owner)
: ToplevelWindowEventFilter(owner), : ToplevelWindowEventHandler(owner),
destroyed_(NULL) { destroyed_(NULL) {
} }
WorkspaceEventFilter::~WorkspaceEventFilter() { WorkspaceEventHandler::~WorkspaceEventHandler() {
if (destroyed_) if (destroyed_)
*destroyed_ = true; *destroyed_ = true;
} }
bool WorkspaceEventFilter::PreHandleMouseEvent(aura::Window* target, ui::EventResult WorkspaceEventHandler::OnMouseEvent(ui::MouseEvent* event) {
ui::MouseEvent* event) { aura::Window* target = static_cast<aura::Window*>(event->target());
switch (event->type()) { switch (event->type()) {
case ui::ET_MOUSE_MOVED: { case ui::ET_MOUSE_MOVED: {
int component = int component =
@@ -87,7 +87,7 @@ bool WorkspaceEventFilter::PreHandleMouseEvent(aura::Window* target,
destroyed_ = &destroyed; destroyed_ = &destroyed;
ToggleMaximizedState(target); ToggleMaximizedState(target);
if (destroyed) if (destroyed)
return false; return ui::ER_UNHANDLED;
destroyed_ = NULL; destroyed_ = NULL;
} }
multi_window_resize_controller_.Hide(); multi_window_resize_controller_.Hide();
@@ -97,22 +97,21 @@ bool WorkspaceEventFilter::PreHandleMouseEvent(aura::Window* target,
default: default:
break; break;
} }
return ToplevelWindowEventFilter::PreHandleMouseEvent(target, event); return ToplevelWindowEventHandler::OnMouseEvent(event);
} }
ui::EventResult WorkspaceEventFilter::PreHandleGestureEvent( ui::EventResult WorkspaceEventHandler::OnGestureEvent(ui::GestureEvent* event) {
aura::Window* target, aura::Window* target = static_cast<aura::Window*>(event->target());
ui::GestureEvent* event) {
if (event->type() == ui::ET_GESTURE_DOUBLE_TAP && if (event->type() == ui::ET_GESTURE_DOUBLE_TAP &&
target->delegate()->GetNonClientComponent(event->location()) == target->delegate()->GetNonClientComponent(event->location()) ==
HTCAPTION) { HTCAPTION) {
ToggleMaximizedState(target); // |this| may be destroyed from here. ToggleMaximizedState(target); // |this| may be destroyed from here.
return ui::ER_CONSUMED; return ui::ER_CONSUMED;
} }
return ToplevelWindowEventFilter::PreHandleGestureEvent(target, event); return ToplevelWindowEventHandler::OnGestureEvent(event);
} }
WindowResizer* WorkspaceEventFilter::CreateWindowResizer( WindowResizer* WorkspaceEventHandler::CreateWindowResizer(
aura::Window* window, aura::Window* window,
const gfx::Point& point_in_parent, const gfx::Point& point_in_parent,
int window_component) { int window_component) {
@@ -127,7 +126,7 @@ WindowResizer* WorkspaceEventFilter::CreateWindowResizer(
std::vector<aura::Window*>()); std::vector<aura::Window*>());
} }
void WorkspaceEventFilter::HandleVerticalResizeDoubleClick( void WorkspaceEventHandler::HandleVerticalResizeDoubleClick(
aura::Window* target, aura::Window* target,
ui::MouseEvent* event) { ui::MouseEvent* event) {
if (event->flags() & ui::EF_IS_DOUBLE_CLICK && if (event->flags() & ui::EF_IS_DOUBLE_CLICK &&

@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef ASH_WM_WORKSPACE_WORKSPACE_EVENT_FILTER_H_ #ifndef ASH_WM_WORKSPACE_WORKSPACE_EVENT_HANDLER_H_
#define ASH_WM_WORKSPACE_WORKSPACE_EVENT_FILTER_H_ #define ASH_WM_WORKSPACE_WORKSPACE_EVENT_HANDLER_H_
#include "ash/wm/toplevel_window_event_filter.h" #include "ash/wm/toplevel_window_event_handler.h"
#include "ash/wm/workspace/multi_window_resize_controller.h" #include "ash/wm/workspace/multi_window_resize_controller.h"
namespace aura { namespace aura {
@@ -15,29 +15,26 @@ class Window;
namespace ash { namespace ash {
namespace internal { namespace internal {
class WorkspaceEventFilterTestHelper; class WorkspaceEventHandlerTestHelper;
class WorkspaceEventFilter : public ToplevelWindowEventFilter { class WorkspaceEventHandler : public ToplevelWindowEventHandler {
public: public:
explicit WorkspaceEventFilter(aura::Window* owner); explicit WorkspaceEventHandler(aura::Window* owner);
virtual ~WorkspaceEventFilter(); virtual ~WorkspaceEventHandler();
// Overridden from ToplevelWindowEventFilter: // Overridden from ToplevelWindowEventHandler:
virtual bool PreHandleMouseEvent(aura::Window* target, virtual ui::EventResult OnMouseEvent(ui::MouseEvent* event) OVERRIDE;
ui::MouseEvent* event) OVERRIDE; virtual ui::EventResult OnGestureEvent(ui::GestureEvent* event) OVERRIDE;
virtual ui::EventResult PreHandleGestureEvent(
aura::Window* target,
ui::GestureEvent* event) OVERRIDE;
protected: protected:
// Overridden from ToplevelWindowEventFilter: // Overridden from ToplevelWindowEventHandler:
virtual WindowResizer* CreateWindowResizer( virtual WindowResizer* CreateWindowResizer(
aura::Window* window, aura::Window* window,
const gfx::Point& point_in_parent, const gfx::Point& point_in_parent,
int window_component) OVERRIDE; int window_component) OVERRIDE;
private: private:
friend class WorkspaceEventFilterTestHelper; friend class WorkspaceEventHandlerTestHelper;
// Determines if |event| corresponds to a double click on either the top or // Determines if |event| corresponds to a double click on either the top or
// bottom vertical resize edge, and if so toggles the vertical height of the // bottom vertical resize edge, and if so toggles the vertical height of the
@@ -51,10 +48,10 @@ class WorkspaceEventFilter : public ToplevelWindowEventFilter {
// If non-NULL, set to true in the destructor. // If non-NULL, set to true in the destructor.
bool* destroyed_; bool* destroyed_;
DISALLOW_COPY_AND_ASSIGN(WorkspaceEventFilter); DISALLOW_COPY_AND_ASSIGN(WorkspaceEventHandler);
}; };
} // namespace internal } // namespace internal
} // namespace ash } // namespace ash
#endif // ASH_WM_WORKSPACE_WORKSPACE_EVENT_FILTER_H_ #endif // ASH_WM_WORKSPACE_WORKSPACE_EVENT_HANDLER_H_

@@ -0,0 +1,19 @@
// 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 "ash/wm/workspace/workspace_event_handler_test_helper.h"
namespace ash {
namespace internal {
WorkspaceEventHandlerTestHelper::WorkspaceEventHandlerTestHelper(
WorkspaceEventHandler* handler)
: handler_(handler) {
}
WorkspaceEventHandlerTestHelper::~WorkspaceEventHandlerTestHelper() {
}
} // namespace internal
} // namespace ash

@@ -0,0 +1,31 @@
// 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 ASH_WM_WORKSPACE_WORKSPACE_EVENT_HANDLER_TEST_HELPER_H_
#define ASH_WM_WORKSPACE_WORKSPACE_EVENT_HANDLER_TEST_HELPER_H_
#include "ash/wm/workspace/workspace_event_handler.h"
namespace ash {
namespace internal {
class WorkspaceEventHandlerTestHelper {
public:
explicit WorkspaceEventHandlerTestHelper(WorkspaceEventHandler* handler);
~WorkspaceEventHandlerTestHelper();
MultiWindowResizeController* resize_controller() {
return &(handler_->multi_window_resize_controller_);
}
private:
WorkspaceEventHandler* handler_;
DISALLOW_COPY_AND_ASSIGN(WorkspaceEventHandlerTestHelper);
};
} // namespace internal
} // namespace ash
#endif // ASH_WM_WORKSPACE_WORKSPACE_EVENT_HANDLER_TEST_HELPER_H_

@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "ash/wm/workspace/workspace_event_filter.h" #include "ash/wm/workspace/workspace_event_handler.h"
#include "ash/shell.h" #include "ash/shell.h"
#include "ash/test/ash_test_base.h" #include "ash/test/ash_test_base.h"
@@ -19,10 +19,10 @@
namespace ash { namespace ash {
namespace internal { namespace internal {
class WorkspaceEventFilterTest : public test::AshTestBase { class WorkspaceEventHandlerTest : public test::AshTestBase {
public: public:
WorkspaceEventFilterTest() {} WorkspaceEventHandlerTest() {}
virtual ~WorkspaceEventFilterTest() {} virtual ~WorkspaceEventHandlerTest() {}
protected: protected:
aura::Window* CreateTestWindow(aura::WindowDelegate* delegate, aura::Window* CreateTestWindow(aura::WindowDelegate* delegate,
@@ -37,10 +37,10 @@ class WorkspaceEventFilterTest : public test::AshTestBase {
} }
private: private:
DISALLOW_COPY_AND_ASSIGN(WorkspaceEventFilterTest); DISALLOW_COPY_AND_ASSIGN(WorkspaceEventHandlerTest);
}; };
TEST_F(WorkspaceEventFilterTest, DoubleClickSingleAxisResizeEdge) { TEST_F(WorkspaceEventHandlerTest, DoubleClickSingleAxisResizeEdge) {
// Double clicking the vertical resize edge of a window should maximize it // Double clicking the vertical resize edge of a window should maximize it
// vertically. // vertically.
gfx::Rect restored_bounds(10, 10, 50, 50); gfx::Rect restored_bounds(10, 10, 50, 50);
@@ -95,7 +95,7 @@ TEST_F(WorkspaceEventFilterTest, DoubleClickSingleAxisResizeEdge) {
EXPECT_FALSE(wm::IsWindowMaximized(window.get())); EXPECT_FALSE(wm::IsWindowMaximized(window.get()));
} }
TEST_F(WorkspaceEventFilterTest, DoubleClickCaptionTogglesMaximize) { TEST_F(WorkspaceEventHandlerTest, DoubleClickCaptionTogglesMaximize) {
aura::test::TestWindowDelegate wd; aura::test::TestWindowDelegate wd;
scoped_ptr<aura::Window> window(CreateTestWindow(&wd, gfx::Rect(1, 2, 3, 4))); scoped_ptr<aura::Window> window(CreateTestWindow(&wd, gfx::Rect(1, 2, 3, 4)));
wd.set_window_component(HTCAPTION); wd.set_window_component(HTCAPTION);
@@ -112,7 +112,7 @@ TEST_F(WorkspaceEventFilterTest, DoubleClickCaptionTogglesMaximize) {
EXPECT_EQ("1,2 3x4", window->bounds().ToString()); EXPECT_EQ("1,2 3x4", window->bounds().ToString());
} }
TEST_F(WorkspaceEventFilterTest, DoubleTapCaptionTogglesMaximize) { TEST_F(WorkspaceEventHandlerTest, DoubleTapCaptionTogglesMaximize) {
aura::test::TestWindowDelegate wd; aura::test::TestWindowDelegate wd;
gfx::Rect bounds(10, 20, 30, 40); gfx::Rect bounds(10, 20, 30, 40);
scoped_ptr<aura::Window> window(CreateTestWindow(&wd, bounds)); scoped_ptr<aura::Window> window(CreateTestWindow(&wd, bounds));
@@ -134,9 +134,9 @@ TEST_F(WorkspaceEventFilterTest, DoubleTapCaptionTogglesMaximize) {
} }
// Verifies deleting the window while dragging doesn't crash. // Verifies deleting the window while dragging doesn't crash.
TEST_F(WorkspaceEventFilterTest, DeleteWhenDragging) { TEST_F(WorkspaceEventHandlerTest, DeleteWhenDragging) {
// Create a large window in the background. This is necessary so that when we // Create a large window in the background. This is necessary so that when we
// delete |window| WorkspaceEventFilter is still the active EventFilter. // delete |window| WorkspaceEventHandler is still the active event handler.
aura::test::TestWindowDelegate wd2; aura::test::TestWindowDelegate wd2;
scoped_ptr<aura::Window> window2( scoped_ptr<aura::Window> window2(
CreateTestWindow(&wd2, gfx::Rect(0, 0, 500, 500))); CreateTestWindow(&wd2, gfx::Rect(0, 0, 500, 500)));
@@ -155,7 +155,7 @@ TEST_F(WorkspaceEventFilterTest, DeleteWhenDragging) {
} }
// Verifies deleting the window while in a run loop doesn't crash. // Verifies deleting the window while in a run loop doesn't crash.
TEST_F(WorkspaceEventFilterTest, DeleteWhileInRunLoop) { TEST_F(WorkspaceEventHandlerTest, DeleteWhileInRunLoop) {
aura::test::TestWindowDelegate wd; aura::test::TestWindowDelegate wd;
const gfx::Rect bounds(10, 20, 30, 40); const gfx::Rect bounds(10, 20, 30, 40);
scoped_ptr<aura::Window> window(CreateTestWindow(&wd, bounds)); scoped_ptr<aura::Window> window(CreateTestWindow(&wd, bounds));

@@ -6,7 +6,7 @@
#include "ash/ash_switches.h" #include "ash/ash_switches.h"
#include "ash/wm/window_util.h" #include "ash/wm/window_util.h"
#include "ash/wm/workspace/workspace_event_filter.h" #include "ash/wm/workspace/workspace_event_handler.h"
#include "ash/wm/workspace/workspace_layout_manager.h" #include "ash/wm/workspace/workspace_layout_manager.h"
#include "ash/wm/workspace/workspace_manager.h" #include "ash/wm/workspace/workspace_manager.h"
#include "ash/wm/workspace/workspace_manager2.h" #include "ash/wm/workspace/workspace_manager2.h"
@@ -22,7 +22,7 @@ namespace internal {
WorkspaceController::WorkspaceController(aura::Window* viewport) WorkspaceController::WorkspaceController(aura::Window* viewport)
: viewport_(viewport), : viewport_(viewport),
layout_manager_(NULL), layout_manager_(NULL),
event_filter_(NULL) { event_handler_(NULL) {
aura::RootWindow* root_window = viewport->GetRootWindow(); aura::RootWindow* root_window = viewport->GetRootWindow();
if (IsWorkspace2Enabled()) { if (IsWorkspace2Enabled()) {
WorkspaceManager2* workspace_manager = new WorkspaceManager2(viewport); WorkspaceManager2* workspace_manager = new WorkspaceManager2(viewport);
@@ -33,8 +33,8 @@ WorkspaceController::WorkspaceController(aura::Window* viewport)
layout_manager_ = new WorkspaceLayoutManager( layout_manager_ = new WorkspaceLayoutManager(
root_window, workspace_manager); root_window, workspace_manager);
viewport->SetLayoutManager(layout_manager_); viewport->SetLayoutManager(layout_manager_);
event_filter_ = new WorkspaceEventFilter(viewport); event_handler_ = new WorkspaceEventHandler(viewport);
viewport->SetEventFilter(event_filter_); viewport->AddPreTargetHandler(event_handler_);
} }
aura::client::GetActivationClient(root_window)->AddObserver(this); aura::client::GetActivationClient(root_window)->AddObserver(this);
} }

@@ -21,7 +21,7 @@ namespace internal {
class BaseWorkspaceManager; class BaseWorkspaceManager;
class ShelfLayoutManager; class ShelfLayoutManager;
class WorkspaceControllerTestHelper; class WorkspaceControllerTestHelper;
class WorkspaceEventFilter; class WorkspaceEventHandler;
class WorkspaceLayoutManager; class WorkspaceLayoutManager;
// WorkspaceController acts as a central place that ties together all the // WorkspaceController acts as a central place that ties together all the
@@ -60,14 +60,14 @@ class ASH_EXPORT WorkspaceController
scoped_ptr<BaseWorkspaceManager> workspace_manager_; scoped_ptr<BaseWorkspaceManager> workspace_manager_;
// TODO(sky): remove |layout_manager_| and |event_filter_| when Workspace2 // TODO(sky): remove |layout_manager_| and |event_handler_| when Workspace2
// is the default. // is the default.
// Owned by the window its attached to. // Owned by the window its attached to.
WorkspaceLayoutManager* layout_manager_; WorkspaceLayoutManager* layout_manager_;
// Owned by |viewport_|. // Owned by |viewport_|.
WorkspaceEventFilter* event_filter_; WorkspaceEventHandler* event_handler_;
DISALLOW_COPY_AND_ASSIGN(WorkspaceController); DISALLOW_COPY_AND_ASSIGN(WorkspaceController);
}; };

@@ -5,7 +5,7 @@
#include "ash/wm/workspace_controller_test_helper.h" #include "ash/wm/workspace_controller_test_helper.h"
#include "ash/wm/workspace_controller.h" #include "ash/wm/workspace_controller.h"
#include "ash/wm/workspace/workspace_event_filter_test_helper.h" #include "ash/wm/workspace/workspace_event_handler_test_helper.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
namespace ash { namespace ash {
@@ -19,16 +19,18 @@ WorkspaceControllerTestHelper::WorkspaceControllerTestHelper(
WorkspaceControllerTestHelper::~WorkspaceControllerTestHelper() { WorkspaceControllerTestHelper::~WorkspaceControllerTestHelper() {
} }
WorkspaceEventFilter* WorkspaceControllerTestHelper::GetFilter() { WorkspaceEventHandler* WorkspaceControllerTestHelper::GetEventHandler() {
if (WorkspaceController::IsWorkspace2Enabled()) if (WorkspaceController::IsWorkspace2Enabled()) {
return static_cast<WorkspaceEventFilter*>( ui::EventTarget::TestApi test_api(controller_->viewport_->children()[0]);
controller_->viewport_->children()[0]->event_filter()); return static_cast<WorkspaceEventHandler*>(
return controller_->event_filter_; test_api.pre_target_handlers().front());
}
return controller_->event_handler_;
} }
MultiWindowResizeController* MultiWindowResizeController*
WorkspaceControllerTestHelper::GetMultiWindowResizeController() { WorkspaceControllerTestHelper::GetMultiWindowResizeController() {
return WorkspaceEventFilterTestHelper(GetFilter()).resize_controller(); return WorkspaceEventHandlerTestHelper(GetEventHandler()).resize_controller();
} }
} // namespace internal } // namespace internal

@@ -13,14 +13,14 @@ namespace ash {
namespace internal { namespace internal {
class MultiWindowResizeController; class MultiWindowResizeController;
class WorkspaceEventFilter; class WorkspaceEventHandler;
class WorkspaceControllerTestHelper { class WorkspaceControllerTestHelper {
public: public:
explicit WorkspaceControllerTestHelper(WorkspaceController* controller); explicit WorkspaceControllerTestHelper(WorkspaceController* controller);
~WorkspaceControllerTestHelper(); ~WorkspaceControllerTestHelper();
WorkspaceEventFilter* GetFilter(); WorkspaceEventHandler* GetEventHandler();
MultiWindowResizeController* GetMultiWindowResizeController(); MultiWindowResizeController* GetMultiWindowResizeController();
WorkspaceManager* workspace_manager() { WorkspaceManager* workspace_manager() {
return static_cast<WorkspaceManager*>( return static_cast<WorkspaceManager*>(

@@ -40,8 +40,8 @@ void EventTarget::GetPreTargetHandlers(EventHandlerList* list) {
EventTarget* target = this; EventTarget* target = this;
while (target) { while (target) {
EventHandlerList::reverse_iterator it, rend; EventHandlerList::reverse_iterator it, rend;
for (it = target->pre_target_list().rbegin(), for (it = target->pre_target_list_.rbegin(),
rend = target->pre_target_list().rend(); rend = target->pre_target_list_.rend();
it != rend; it != rend;
++it) { ++it) {
list->insert(list->begin(), *it); list->insert(list->begin(), *it);
@@ -53,8 +53,8 @@ void EventTarget::GetPreTargetHandlers(EventHandlerList* list) {
void EventTarget::GetPostTargetHandlers(EventHandlerList* list) { void EventTarget::GetPostTargetHandlers(EventHandlerList* list) {
EventTarget* target = this; EventTarget* target = this;
while (target) { while (target) {
for (EventHandlerList::iterator it = target->post_target_list().begin(), for (EventHandlerList::iterator it = target->post_target_list_.begin(),
end = target->post_target_list().end(); it != end; ++it) { end = target->post_target_list_.end(); it != end; ++it) {
list->push_back(*it); list->push_back(*it);
} }
target = target->GetParentTarget(); target = target->GetParentTarget();

@@ -17,6 +17,21 @@ class UI_EXPORT EventTarget : public EventHandler {
public: public:
typedef std::vector<EventTarget*> EventTargets; typedef std::vector<EventTarget*> EventTargets;
class TestApi {
public:
explicit TestApi(EventTarget* target) : target_(target) {}
const EventHandlerList& pre_target_handlers() {
return target_->pre_target_list_;
}
private:
TestApi();
EventTarget* target_;
DISALLOW_COPY_AND_ASSIGN(TestApi);
};
EventTarget(); EventTarget();
virtual ~EventTarget(); virtual ~EventTarget();
@@ -29,7 +44,7 @@ class UI_EXPORT EventTarget : public EventHandler {
void AddPreTargetHandler(EventHandler* handler); void AddPreTargetHandler(EventHandler* handler);
void RemovePreTargetHandler(EventHandler* handler); void RemovePreTargetHandler(EventHandler* handler);
// Adds a handler to receive events after the target. The hanler must be // Adds a handler to receive events after the target. The handler must be
// explicitly removed from the target before the handler is destroyed. The // explicitly removed from the target before the handler is destroyed. The
// EventTarget does not take ownership of the handler. // EventTarget does not take ownership of the handler.
void AddPostTargetHandler(EventHandler* handler); void AddPostTargetHandler(EventHandler* handler);
@@ -40,9 +55,6 @@ class UI_EXPORT EventTarget : public EventHandler {
target_handler_ = handler; target_handler_ = handler;
} }
EventHandlerList& pre_target_list() { return pre_target_list_; }
EventHandlerList& post_target_list() { return post_target_list_; }
private: private:
friend class EventDispatcher; friend class EventDispatcher;