OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #define _USE_MATH_DEFINES // For VC++ to get M_PI. This has to be first. | 5 #define _USE_MATH_DEFINES // For VC++ to get M_PI. This has to be first. |
6 | 6 |
7 #include "ui/views/view.h" | 7 #include "ui/views/view.h" |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <cmath> | 10 #include <cmath> |
(...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
446 } | 446 } |
447 | 447 |
448 void View::SetVisible(bool visible) { | 448 void View::SetVisible(bool visible) { |
449 if (visible != visible_) { | 449 if (visible != visible_) { |
450 // If the View is currently visible, schedule paint to refresh parent. | 450 // If the View is currently visible, schedule paint to refresh parent. |
451 // TODO(beng): not sure we should be doing this if we have a layer. | 451 // TODO(beng): not sure we should be doing this if we have a layer. |
452 if (visible_) | 452 if (visible_) |
453 SchedulePaint(); | 453 SchedulePaint(); |
454 | 454 |
455 visible_ = visible; | 455 visible_ = visible; |
456 ClearFocusIfUnfocusable(); | |
456 | 457 |
457 // Notify the parent. | 458 // Notify the parent. |
458 if (parent_) | 459 if (parent_) |
459 parent_->ChildVisibilityChanged(this); | 460 parent_->ChildVisibilityChanged(this); |
460 | 461 |
461 // This notifies all sub-views recursively. | 462 // This notifies all sub-views recursively. |
462 PropagateVisibilityNotifications(this, visible_); | 463 PropagateVisibilityNotifications(this, visible_); |
463 UpdateLayerVisibility(); | 464 UpdateLayerVisibility(); |
464 | 465 |
465 // If we are newly visible, schedule paint. | 466 // If we are newly visible, schedule paint. |
466 if (visible_) | 467 if (visible_) |
467 SchedulePaint(); | 468 SchedulePaint(); |
468 } | 469 } |
469 } | 470 } |
470 | 471 |
471 bool View::IsDrawn() const { | 472 bool View::IsDrawn() const { |
472 return visible_ && parent_ ? parent_->IsDrawn() : false; | 473 return visible_ && parent_ ? parent_->IsDrawn() : false; |
473 } | 474 } |
474 | 475 |
475 void View::SetEnabled(bool enabled) { | 476 void View::SetEnabled(bool enabled) { |
476 if (enabled != enabled_) { | 477 if (enabled != enabled_) { |
477 enabled_ = enabled; | 478 enabled_ = enabled; |
479 ClearFocusIfUnfocusable(); | |
478 OnEnabledChanged(); | 480 OnEnabledChanged(); |
479 } | 481 } |
480 } | 482 } |
481 | 483 |
482 void View::OnEnabledChanged() { | 484 void View::OnEnabledChanged() { |
483 SchedulePaint(); | 485 SchedulePaint(); |
484 } | 486 } |
485 | 487 |
486 // Transformations ------------------------------------------------------------- | 488 // Transformations ------------------------------------------------------------- |
487 | 489 |
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1198 View* View::GetPreviousFocusableView() { | 1200 View* View::GetPreviousFocusableView() { |
1199 return previous_focusable_view_; | 1201 return previous_focusable_view_; |
1200 } | 1202 } |
1201 | 1203 |
1202 void View::SetNextFocusableView(View* view) { | 1204 void View::SetNextFocusableView(View* view) { |
1203 if (view) | 1205 if (view) |
1204 view->previous_focusable_view_ = this; | 1206 view->previous_focusable_view_ = this; |
1205 next_focusable_view_ = view; | 1207 next_focusable_view_ = view; |
1206 } | 1208 } |
1207 | 1209 |
1210 void View::SetFocusable(bool focusable) { | |
1211 focusable_ = focusable; | |
sky
2013/12/11 21:29:29
early out if didn't change.
mohsen
2013/12/12 18:26:54
Done.
| |
1212 ClearFocusIfUnfocusable(); | |
1213 } | |
1214 | |
1208 bool View::IsFocusable() const { | 1215 bool View::IsFocusable() const { |
1209 return focusable_ && enabled_ && IsDrawn(); | 1216 return focusable_ && enabled_ && IsDrawn(); |
1210 } | 1217 } |
1211 | 1218 |
1212 bool View::IsAccessibilityFocusable() const { | 1219 bool View::IsAccessibilityFocusable() const { |
1213 return (focusable_ || accessibility_focusable_) && enabled_ && IsDrawn(); | 1220 return (focusable_ || accessibility_focusable_) && enabled_ && IsDrawn(); |
1214 } | 1221 } |
1215 | 1222 |
1223 void View::SetAccessibilityFocusable(bool accessibility_focusable) { | |
1224 accessibility_focusable_ = accessibility_focusable; | |
sky
2013/12/11 21:29:29
early out if didn't change.
mohsen
2013/12/12 18:26:54
Done.
| |
1225 ClearFocusIfUnfocusable(); | |
1226 } | |
1227 | |
1216 FocusManager* View::GetFocusManager() { | 1228 FocusManager* View::GetFocusManager() { |
1217 Widget* widget = GetWidget(); | 1229 Widget* widget = GetWidget(); |
1218 return widget ? widget->GetFocusManager() : NULL; | 1230 return widget ? widget->GetFocusManager() : NULL; |
1219 } | 1231 } |
1220 | 1232 |
1221 const FocusManager* View::GetFocusManager() const { | 1233 const FocusManager* View::GetFocusManager() const { |
1222 const Widget* widget = GetWidget(); | 1234 const Widget* widget = GetWidget(); |
1223 return widget ? widget->GetFocusManager() : NULL; | 1235 return widget ? widget->GetFocusManager() : NULL; |
1224 } | 1236 } |
1225 | 1237 |
(...skipping 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2329 View* prev = children_[index]->GetPreviousFocusableView(); | 2341 View* prev = children_[index]->GetPreviousFocusableView(); |
2330 v->previous_focusable_view_ = prev; | 2342 v->previous_focusable_view_ = prev; |
2331 v->next_focusable_view_ = children_[index]; | 2343 v->next_focusable_view_ = children_[index]; |
2332 if (prev) | 2344 if (prev) |
2333 prev->next_focusable_view_ = v; | 2345 prev->next_focusable_view_ = v; |
2334 children_[index]->previous_focusable_view_ = v; | 2346 children_[index]->previous_focusable_view_ = v; |
2335 } | 2347 } |
2336 } | 2348 } |
2337 } | 2349 } |
2338 | 2350 |
2351 void View::ClearFocusIfUnfocusable() { | |
2352 FocusManager* focus_manager = GetFocusManager(); | |
2353 if (focus_manager) | |
2354 focus_manager->ClearFocusIfUnfocusable(); | |
2355 } | |
2356 | |
2339 // System events --------------------------------------------------------------- | 2357 // System events --------------------------------------------------------------- |
2340 | 2358 |
2341 void View::PropagateThemeChanged() { | 2359 void View::PropagateThemeChanged() { |
2342 for (int i = child_count() - 1; i >= 0; --i) | 2360 for (int i = child_count() - 1; i >= 0; --i) |
2343 child_at(i)->PropagateThemeChanged(); | 2361 child_at(i)->PropagateThemeChanged(); |
2344 OnThemeChanged(); | 2362 OnThemeChanged(); |
2345 } | 2363 } |
2346 | 2364 |
2347 void View::PropagateLocaleChanged() { | 2365 void View::PropagateLocaleChanged() { |
2348 for (int i = child_count() - 1; i >= 0; --i) | 2366 for (int i = child_count() - 1; i >= 0; --i) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2386 // Message the RootView to do the drag and drop. That way if we're removed | 2404 // Message the RootView to do the drag and drop. That way if we're removed |
2387 // the RootView can detect it and avoid calling us back. | 2405 // the RootView can detect it and avoid calling us back. |
2388 gfx::Point widget_location(event.location()); | 2406 gfx::Point widget_location(event.location()); |
2389 ConvertPointToWidget(this, &widget_location); | 2407 ConvertPointToWidget(this, &widget_location); |
2390 widget->RunShellDrag(this, data, widget_location, drag_operations, source); | 2408 widget->RunShellDrag(this, data, widget_location, drag_operations, source); |
2391 // WARNING: we may have been deleted. | 2409 // WARNING: we may have been deleted. |
2392 return true; | 2410 return true; |
2393 } | 2411 } |
2394 | 2412 |
2395 } // namespace views | 2413 } // namespace views |
OLD | NEW |