Chromium Code Reviews| Index: ui/aura/desktop/desktop_root_window_event_filter.cc |
| diff --git a/ui/aura/desktop/desktop_root_window_event_filter.cc b/ui/aura/desktop/desktop_root_window_event_filter.cc |
| index a1d4bf641e614755d1b2446bd0d3d2bf34dacc78..ee70c09bf6033a5d6bf8459c8e3be7cf957f917b 100644 |
| --- a/ui/aura/desktop/desktop_root_window_event_filter.cc |
| +++ b/ui/aura/desktop/desktop_root_window_event_filter.cc |
| @@ -10,6 +10,8 @@ |
| #include "ui/aura/focus_manager.h" |
| #include "ui/aura/root_window.h" |
| #include "ui/aura/window.h" |
| +#include "ui/aura/window_delegate.h" |
| +#include "ui/base/hit_test.h" |
| #include "ui/base/ime/input_method.h" |
| #include "ui/base/ime/input_method_factory.h" |
| @@ -23,6 +25,30 @@ aura::Window* FindFocusableWindowFor(aura::Window* window) { |
| return window; |
| } |
| +// static |
| +gfx::NativeCursor CursorForWindowComponent(int window_component) { |
| + switch (window_component) { |
| + case HTBOTTOM: |
| + return ui::kCursorSouthResize; |
| + case HTBOTTOMLEFT: |
| + return ui::kCursorSouthWestResize; |
| + case HTBOTTOMRIGHT: |
| + return ui::kCursorSouthEastResize; |
| + case HTLEFT: |
| + return ui::kCursorWestResize; |
| + case HTRIGHT: |
| + return ui::kCursorEastResize; |
| + case HTTOP: |
| + return ui::kCursorNorthResize; |
| + case HTTOPLEFT: |
| + return ui::kCursorNorthWestResize; |
| + case HTTOPRIGHT: |
| + return ui::kCursorNorthEastResize; |
| + default: |
| + return ui::kCursorNull; |
| + } |
| +} |
| + |
| } // namespace |
| DesktopRootWindowEventFilter::DesktopRootWindowEventFilter( |
| @@ -59,11 +85,34 @@ bool DesktopRootWindowEventFilter::PreHandleKeyEvent(Window* target, |
| bool DesktopRootWindowEventFilter::PreHandleMouseEvent( |
| Window* target, |
| MouseEvent* event) { |
| + // TODO(erg): It would be nice to merge as much as possible with |
| + // ash::RootWindowEventFilter. I'm starting to get at the point where I feel |
| + // like I'm copypasting the entire file. |
|
Elliot Glaysher
2012/05/09 19:39:18
I think this is the next thing I'm going to do. Se
|
| + if (event->type() == ui::ET_MOUSE_MOVED || |
| + event->type() == ui::ET_MOUSE_PRESSED || |
| + event->type() == ui::ET_MOUSEWHEEL) { |
| + gfx::NativeCursor cursor = target->GetCursor(event->location()); |
| + if (event->flags() & ui::EF_IS_NON_CLIENT) { |
| + int window_component = |
| + target->delegate()->GetNonClientComponent(event->location()); |
| + cursor = CursorForWindowComponent(window_component); |
| + } |
| + |
| + root_window_->SetCursor(cursor); |
| + } |
| + |
| if (event->type() == ui::ET_MOUSE_PRESSED) { |
| // Get the active window? |
| Window* active = aura::client::GetActivationClient( |
| root_window_)->GetActiveWindow(); |
| + int component = |
| + target->delegate()->GetNonClientComponent(event->location()); |
| + if (component != HTCLIENT && |
| + root_window_->DispatchWindowDragMovement(component, event)) { |
| + return true; |
| + } |
| + |
| if (active != target) { |
| target->GetFocusManager()->SetFocusedWindow( |
| FindFocusableWindowFor(target), event); |