OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ui/aura/root_window.h" | 5 #include "ui/aura/root_window.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "ui/aura/event.h" | 9 #include "ui/aura/event.h" |
10 #include "ui/aura/focus_manager.h" | 10 #include "ui/aura/focus_manager.h" |
11 #include "ui/aura/window_delegate.h" | 11 #include "ui/aura/window_delegate.h" |
12 #include "ui/base/events.h" | 12 #include "ui/base/events.h" |
13 | 13 |
14 namespace aura { | 14 namespace aura { |
15 namespace internal { | 15 namespace internal { |
16 | 16 |
17 RootWindow::RootWindow() | 17 RootWindow::RootWindow() |
18 : Window(NULL), | 18 : Window(NULL), |
19 mouse_pressed_handler_(NULL), | 19 mouse_pressed_handler_(NULL), |
| 20 mouse_moved_handler_(NULL), |
20 ALLOW_THIS_IN_INITIALIZER_LIST(focus_manager_(new FocusManager(this))), | 21 ALLOW_THIS_IN_INITIALIZER_LIST(focus_manager_(new FocusManager(this))), |
21 capture_window_(NULL) { | 22 capture_window_(NULL) { |
22 set_name(ASCIIToUTF16("RootWindow")); | 23 set_name(ASCIIToUTF16("RootWindow")); |
23 } | 24 } |
24 | 25 |
25 RootWindow::~RootWindow() { | 26 RootWindow::~RootWindow() { |
26 } | 27 } |
27 | 28 |
28 bool RootWindow::HandleMouseEvent(const MouseEvent& event) { | 29 bool RootWindow::HandleMouseEvent(const MouseEvent& event) { |
29 Window* target = | 30 Window* target = |
30 mouse_pressed_handler_ ? mouse_pressed_handler_ : capture_window_; | 31 mouse_pressed_handler_ ? mouse_pressed_handler_ : capture_window_; |
31 if (!target) | 32 if (!target) |
32 target = GetEventHandlerForPoint(event.location()); | 33 target = GetEventHandlerForPoint(event.location()); |
33 if (event.type() == ui::ET_MOUSE_PRESSED && !mouse_pressed_handler_) | 34 switch (event.type()) { |
34 mouse_pressed_handler_ = target; | 35 case ui::ET_MOUSE_MOVED: |
35 if (event.type() == ui::ET_MOUSE_RELEASED) | 36 HandleMouseMoved(event, target); |
36 mouse_pressed_handler_ = NULL; | 37 break; |
| 38 case ui::ET_MOUSE_PRESSED: |
| 39 if (!mouse_pressed_handler_) |
| 40 mouse_pressed_handler_ = target; |
| 41 break; |
| 42 case ui::ET_MOUSE_RELEASED: |
| 43 mouse_pressed_handler_ = NULL; |
| 44 break; |
| 45 default: |
| 46 break; |
| 47 } |
37 if (target && target->delegate()) { | 48 if (target && target->delegate()) { |
38 MouseEvent translated_event(event, this, target); | 49 MouseEvent translated_event(event, this, target); |
39 return target->OnMouseEvent(&translated_event); | 50 return target->OnMouseEvent(&translated_event); |
40 } | 51 } |
41 return false; | 52 return false; |
42 } | 53 } |
43 | 54 |
44 bool RootWindow::HandleKeyEvent(const KeyEvent& event) { | 55 bool RootWindow::HandleKeyEvent(const KeyEvent& event) { |
45 Window* focused_window = GetFocusManager()->focused_window(); | 56 Window* focused_window = GetFocusManager()->focused_window(); |
46 if (focused_window) { | 57 if (focused_window) { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 // Update the FocusManager if the window was focused. | 89 // Update the FocusManager if the window was focused. |
79 internal::FocusManager* focus_manager = GetFocusManager(); | 90 internal::FocusManager* focus_manager = GetFocusManager(); |
80 if (focus_manager && focus_manager->focused_window() == window) | 91 if (focus_manager && focus_manager->focused_window() == window) |
81 focus_manager->SetFocusedWindow(NULL); | 92 focus_manager->SetFocusedWindow(NULL); |
82 | 93 |
83 // When a window is being destroyed it's likely that the WindowDelegate won't | 94 // When a window is being destroyed it's likely that the WindowDelegate won't |
84 // want events, so we reset the mouse_pressed_handler_ and capture_window_ and | 95 // want events, so we reset the mouse_pressed_handler_ and capture_window_ and |
85 // don't sent it release/capture lost events. | 96 // don't sent it release/capture lost events. |
86 if (mouse_pressed_handler_ == window) | 97 if (mouse_pressed_handler_ == window) |
87 mouse_pressed_handler_ = NULL; | 98 mouse_pressed_handler_ = NULL; |
| 99 if (mouse_moved_handler_ == window) |
| 100 mouse_moved_handler_ = NULL; |
88 if (capture_window_ == window) | 101 if (capture_window_ == window) |
89 capture_window_ = NULL; | 102 capture_window_ = NULL; |
90 } | 103 } |
91 | 104 |
92 FocusManager* RootWindow::GetFocusManager() { | 105 FocusManager* RootWindow::GetFocusManager() { |
93 return focus_manager_.get(); | 106 return focus_manager_.get(); |
94 } | 107 } |
95 | 108 |
96 internal::RootWindow* RootWindow::GetRoot() { | 109 internal::RootWindow* RootWindow::GetRoot() { |
97 return this; | 110 return this; |
98 } | 111 } |
99 | 112 |
| 113 void RootWindow::HandleMouseMoved(const MouseEvent& event, Window* target) { |
| 114 if (target == mouse_moved_handler_) |
| 115 return; |
| 116 |
| 117 // Send an exited event. |
| 118 if (mouse_moved_handler_ && mouse_moved_handler_->delegate()) { |
| 119 MouseEvent translated_event(event, this, mouse_moved_handler_, |
| 120 ui::ET_MOUSE_EXITED); |
| 121 mouse_moved_handler_->OnMouseEvent(&translated_event); |
| 122 } |
| 123 mouse_moved_handler_ = target; |
| 124 // Send an entered event. |
| 125 if (mouse_moved_handler_ && mouse_moved_handler_->delegate()) { |
| 126 MouseEvent translated_event(event, this, mouse_moved_handler_, |
| 127 ui::ET_MOUSE_ENTERED); |
| 128 mouse_moved_handler_->OnMouseEvent(&translated_event); |
| 129 } |
| 130 } |
| 131 |
100 } // namespace internal | 132 } // namespace internal |
101 } // namespace aura | 133 } // namespace aura |
OLD | NEW |