Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Side by Side Diff: views/widget/root_view.cc

Issue 6507028: Remove usages of RootView from View by moving relevant RootView API methods t... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « views/widget/root_view.h ('k') | views/widget/root_view_gtk.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "views/widget/root_view.h" 5 #include "views/widget/root_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #if defined(TOUCH_UI) && defined(HAVE_XINPUT2) 9 #if defined(TOUCH_UI) && defined(HAVE_XINPUT2)
10 #include <gdk/gdkx.h> 10 #include <gdk/gdkx.h>
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 last_mouse_event_x_(-1), 112 last_mouse_event_x_(-1),
113 last_mouse_event_y_(-1), 113 last_mouse_event_y_(-1),
114 #if defined(TOUCH_UI) 114 #if defined(TOUCH_UI)
115 gesture_manager_(GestureManager::GetInstance()), 115 gesture_manager_(GestureManager::GetInstance()),
116 touch_pressed_handler_(NULL), 116 touch_pressed_handler_(NULL),
117 #endif 117 #endif
118 ALLOW_THIS_IN_INITIALIZER_LIST(focus_search_(this, false, false)), 118 ALLOW_THIS_IN_INITIALIZER_LIST(focus_search_(this, false, false)),
119 focus_on_mouse_pressed_(false), 119 focus_on_mouse_pressed_(false),
120 ignore_set_focus_calls_(false), 120 ignore_set_focus_calls_(false),
121 focus_traversable_parent_(NULL), 121 focus_traversable_parent_(NULL),
122 focus_traversable_parent_view_(NULL), 122 focus_traversable_parent_view_(NULL) {
123 drag_view_(NULL) {
124 } 123 }
125 124
126 RootView::~RootView() { 125 RootView::~RootView() {
127 // If we have children remove them explicitly so to make sure a remove 126 // If we have children remove them explicitly so to make sure a remove
128 // notification is sent for each one of them. 127 // notification is sent for each one of them.
129 if (has_children()) 128 if (has_children())
130 RemoveAllChildViews(true); 129 RemoveAllChildViews(true);
131 130
132 if (pending_paint_task_) 131 if (pending_paint_task_)
133 pending_paint_task_->Cancel(); // Ensure we're not called any more. 132 pending_paint_task_->Cancel(); // Ensure we're not called any more.
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 if (mouse_move_handler_ != NULL) { 206 if (mouse_move_handler_ != NULL) {
208 MouseEvent exited_event(ui::ET_MOUSE_EXITED, 0, 0, 0); 207 MouseEvent exited_event(ui::ET_MOUSE_EXITED, 0, 0, 0);
209 mouse_move_handler_->OnMouseExited(exited_event); 208 mouse_move_handler_->OnMouseExited(exited_event);
210 mouse_move_handler_ = NULL; 209 mouse_move_handler_ = NULL;
211 } 210 }
212 } 211 }
213 212
214 bool RootView::ProcessKeyEvent(const KeyEvent& event) { 213 bool RootView::ProcessKeyEvent(const KeyEvent& event) {
215 bool consumed = false; 214 bool consumed = false;
216 215
217 View* v = GetFocusedView(); 216 View* v = GetFocusManager()->GetFocusedView();
218 // Special case to handle right-click context menus triggered by the 217 // Special case to handle right-click context menus triggered by the
219 // keyboard. 218 // keyboard.
220 if (v && v->IsEnabled() && ((event.key_code() == ui::VKEY_APPS) || 219 if (v && v->IsEnabled() && ((event.key_code() == ui::VKEY_APPS) ||
221 (event.key_code() == ui::VKEY_F10 && event.IsShiftDown()))) { 220 (event.key_code() == ui::VKEY_F10 && event.IsShiftDown()))) {
222 v->ShowContextMenu(v->GetKeyboardContextMenuLocation(), false); 221 v->ShowContextMenu(v->GetKeyboardContextMenuLocation(), false);
223 return true; 222 return true;
224 } 223 }
225 for (; v && v != this && !consumed; v = v->parent()) { 224 for (; v && v != this && !consumed; v = v->parent()) {
226 consumed = (event.type() == ui::ET_KEY_PRESSED) ? 225 consumed = (event.type() == ui::ET_KEY_PRESSED) ?
227 v->OnKeyPressed(event) : v->OnKeyReleased(event); 226 v->OnKeyPressed(event) : v->OnKeyReleased(event);
228 } 227 }
229 228
230 if (!consumed && default_keyboard_handler_) { 229 if (!consumed && default_keyboard_handler_) {
231 consumed = (event.type() == ui::ET_KEY_PRESSED) ? 230 consumed = (event.type() == ui::ET_KEY_PRESSED) ?
232 default_keyboard_handler_->OnKeyPressed(event) : 231 default_keyboard_handler_->OnKeyPressed(event) :
233 default_keyboard_handler_->OnKeyReleased(event); 232 default_keyboard_handler_->OnKeyReleased(event);
234 } 233 }
235 234
236 return consumed; 235 return consumed;
237 } 236 }
238 237
239 void RootView::SetDefaultKeyboardHandler(View* v) { 238 void RootView::SetDefaultKeyboardHandler(View* v) {
240 default_keyboard_handler_ = v; 239 default_keyboard_handler_ = v;
241 } 240 }
242 241
243 bool RootView::ProcessMouseWheelEvent(const MouseWheelEvent& e) { 242 bool RootView::ProcessMouseWheelEvent(const MouseWheelEvent& e) {
244 View* v; 243 View* v;
245 bool consumed = false; 244 bool consumed = false;
246 if (GetFocusedView()) { 245 View* focused_view = GetFocusManager()->GetFocusedView();
247 for (v = GetFocusedView(); v && v != this && !consumed; v = v->parent()) 246 if (focused_view) {
247 for (v = focused_view; v && v != this && !consumed; v = v->parent())
248 consumed = v->OnMouseWheel(e); 248 consumed = v->OnMouseWheel(e);
249 } 249 }
250 250
251 if (!consumed && default_keyboard_handler_) { 251 if (!consumed && default_keyboard_handler_) {
252 consumed = default_keyboard_handler_->OnMouseWheel(e); 252 consumed = default_keyboard_handler_->OnMouseWheel(e);
253 } 253 }
254 return consumed; 254 return consumed;
255 } 255 }
256 256
257 // Focus ----------------------------------------------------------------------- 257 // Focus -----------------------------------------------------------------------
258 258
259 void RootView::FocusView(View* view) {
260 if (view != GetFocusedView()) {
261 FocusManager* focus_manager = GetFocusManager();
262 // TODO(jcampan): This fails under WidgetGtk with TYPE_CHILD.
263 // (see http://crbug.com/21335) Reenable DCHECK and
264 // verify GetFocusManager works as expecte.
265 #if defined(OS_WIN)
266 DCHECK(focus_manager) << "No Focus Manager for Window " <<
267 (GetWidget() ? GetWidget()->GetNativeView() : 0);
268 #endif
269 if (!focus_manager)
270 return;
271 focus_manager->SetFocusedView(view);
272 }
273 }
274
275 View* RootView::GetFocusedView() {
276 FocusManager* focus_manager = GetFocusManager();
277 if (!focus_manager) {
278 // We may not have a FocusManager when the window that contains us is being
279 // deleted. Sadly we cannot wait for the window to be destroyed before we
280 // remove the FocusManager (see xp_frame.cc for more info).
281 return NULL;
282 }
283
284 // Make sure the focused view belongs to this RootView's view hierarchy.
285 View* view = focus_manager->GetFocusedView();
286 if (view && (view->GetRootView() == this))
287 return view;
288
289 #if defined(OS_LINUX)
290 if (view && NativeTextfieldViews::IsTextfieldViewsEnabled()) {
291 // hack to deal with two root views.
292 // should be fixed by eliminating one of them
293 return view;
294 }
295 #endif
296 return NULL;
297 }
298
299 void RootView::SetFocusOnMousePressed(bool f) { 259 void RootView::SetFocusOnMousePressed(bool f) {
300 focus_on_mouse_pressed_ = f; 260 focus_on_mouse_pressed_ = f;
301 } 261 }
302 262
303 void RootView::SetFocusTraversableParent(FocusTraversable* focus_traversable) { 263 void RootView::SetFocusTraversableParent(FocusTraversable* focus_traversable) {
304 DCHECK(focus_traversable != this); 264 DCHECK(focus_traversable != this);
305 focus_traversable_parent_ = focus_traversable; 265 focus_traversable_parent_ = focus_traversable;
306 } 266 }
307 267
308 void RootView::SetFocusTraversableParentView(View* view) { 268 void RootView::SetFocusTraversableParentView(View* view) {
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
654 614
655 std::string RootView::GetClassName() const { 615 std::string RootView::GetClassName() const {
656 return kViewClassName; 616 return kViewClassName;
657 } 617 }
658 618
659 AccessibilityTypes::Role RootView::GetAccessibleRole() { 619 AccessibilityTypes::Role RootView::GetAccessibleRole() {
660 return AccessibilityTypes::ROLE_APPLICATION; 620 return AccessibilityTypes::ROLE_APPLICATION;
661 } 621 }
662 622
663 void RootView::ViewHierarchyChanged(bool is_add, View* parent, View* child) { 623 void RootView::ViewHierarchyChanged(bool is_add, View* parent, View* child) {
624 widget_->ViewHierarchyChanged(is_add, parent, child);
625
664 if (!is_add) { 626 if (!is_add) {
665 if (!explicit_mouse_handler_ && mouse_pressed_handler_ == child) { 627 if (!explicit_mouse_handler_ && mouse_pressed_handler_ == child)
666 mouse_pressed_handler_ = NULL; 628 mouse_pressed_handler_ = NULL;
667 } 629 if (mouse_move_handler_ == child)
668
669 if (widget_)
670 widget_->ViewHierarchyChanged(is_add, parent, child);
671
672 if (mouse_move_handler_ == child) {
673 mouse_move_handler_ = NULL; 630 mouse_move_handler_ = NULL;
674 } 631 if (default_keyboard_handler_ == child)
675
676 if (GetFocusedView() == child) {
677 FocusView(NULL);
678 }
679
680 if (child == drag_view_)
681 drag_view_ = NULL;
682
683 if (default_keyboard_handler_ == child) {
684 default_keyboard_handler_ = NULL; 632 default_keyboard_handler_ = NULL;
685 }
686
687 #if defined(TOUCH_UI) 633 #if defined(TOUCH_UI)
688 if (touch_pressed_handler_) { 634 if (touch_pressed_handler_)
689 touch_pressed_handler_ = NULL; 635 touch_pressed_handler_ = NULL;
690 }
691 #endif 636 #endif
692
693 FocusManager* focus_manager = widget_->GetFocusManager();
694 // An unparanted RootView does not have a FocusManager.
695 if (focus_manager)
696 focus_manager->ViewRemoved(parent, child);
697
698 ViewStorage::GetInstance()->ViewRemoved(parent, child);
699 } 637 }
700 } 638 }
701 639
702 //////////////////////////////////////////////////////////////////////////////// 640 ////////////////////////////////////////////////////////////////////////////////
703 // RootView, protected: 641 // RootView, protected:
704 642
705 // Coordinate conversion ------------------------------------------------------- 643 // Coordinate conversion -------------------------------------------------------
706 644
707 bool RootView::ConvertPointToMouseHandler(const gfx::Point& l, 645 bool RootView::ConvertPointToMouseHandler(const gfx::Point& l,
708 gfx::Point* p) { 646 gfx::Point* p) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 gdk_window_set_cursor(native_view->window, cursor); 704 gdk_window_set_cursor(native_view->window, cursor);
767 #endif 705 #endif
768 } 706 }
769 707
770 void RootView::SetMouseLocationAndFlags(const MouseEvent& e) { 708 void RootView::SetMouseLocationAndFlags(const MouseEvent& e) {
771 last_mouse_event_flags_ = e.flags(); 709 last_mouse_event_flags_ = e.flags();
772 last_mouse_event_x_ = e.x(); 710 last_mouse_event_x_ = e.x();
773 last_mouse_event_y_ = e.y(); 711 last_mouse_event_y_ = e.y();
774 } 712 }
775 713
776 // Drag and drop ---------------------------------------------------------------
777
778 View* RootView::GetDragView() {
779 return drag_view_;
780 }
781
782 } // namespace views 714 } // namespace views
OLDNEW
« no previous file with comments | « views/widget/root_view.h ('k') | views/widget/root_view_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698