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 #include "ui/views/widget/widget.h" | 5 #include "ui/views/widget/widget.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "ui/base/hit_test.h" | 10 #include "ui/base/hit_test.h" |
11 #include "ui/base/l10n/l10n_font_util.h" | 11 #include "ui/base/l10n/l10n_font_util.h" |
12 #include "ui/base/resource/resource_bundle.h" | 12 #include "ui/base/resource/resource_bundle.h" |
13 #include "ui/compositor/compositor.h" | 13 #include "ui/compositor/compositor.h" |
14 #include "ui/compositor/layer.h" | 14 #include "ui/compositor/layer.h" |
15 #include "ui/gfx/screen.h" | 15 #include "ui/gfx/screen.h" |
16 #include "ui/views/focus/focus_manager.h" | 16 #include "ui/views/focus/focus_manager.h" |
17 #include "ui/views/focus/focus_manager_factory.h" | 17 #include "ui/views/focus/focus_manager_factory.h" |
18 #include "ui/views/focus/view_storage.h" | 18 #include "ui/views/focus/view_storage.h" |
19 #include "ui/views/focus/widget_focus_manager.h" | 19 #include "ui/views/focus/widget_focus_manager.h" |
20 #include "ui/views/ime/input_method.h" | 20 #include "ui/views/ime/input_method.h" |
21 #include "ui/views/views_delegate.h" | 21 #include "ui/views/views_delegate.h" |
22 #include "ui/views/widget/default_theme_provider.h" | 22 #include "ui/views/widget/default_theme_provider.h" |
23 #include "ui/views/widget/native_widget_private.h" | 23 #include "ui/views/widget/native_widget_private.h" |
24 #include "ui/views/widget/root_view.h" | 24 #include "ui/views/widget/root_view.h" |
25 #include "ui/views/widget/tooltip_manager.h" | 25 #include "ui/views/widget/tooltip_manager.h" |
26 #include "ui/views/widget/widget_delegate.h" | 26 #include "ui/views/widget/widget_delegate.h" |
| 27 #include "ui/views/widget/widget_observer.h" |
27 #include "ui/views/window/custom_frame_view.h" | 28 #include "ui/views/window/custom_frame_view.h" |
28 | 29 |
29 #if !defined(OS_MACOSX) | 30 #if !defined(OS_MACOSX) |
30 #include "ui/views/controls/menu/menu_controller.h" | 31 #include "ui/views/controls/menu/menu_controller.h" |
31 #endif | 32 #endif |
32 | 33 |
33 namespace views { | 34 namespace views { |
34 | 35 |
35 namespace { | 36 namespace { |
36 | 37 |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
340 // Unconverted methods (see header) -------------------------------------------- | 341 // Unconverted methods (see header) -------------------------------------------- |
341 | 342 |
342 gfx::NativeView Widget::GetNativeView() const { | 343 gfx::NativeView Widget::GetNativeView() const { |
343 return native_widget_->GetNativeView(); | 344 return native_widget_->GetNativeView(); |
344 } | 345 } |
345 | 346 |
346 gfx::NativeWindow Widget::GetNativeWindow() const { | 347 gfx::NativeWindow Widget::GetNativeWindow() const { |
347 return native_widget_->GetNativeWindow(); | 348 return native_widget_->GetNativeWindow(); |
348 } | 349 } |
349 | 350 |
350 void Widget::AddObserver(Widget::Observer* observer) { | 351 void Widget::AddObserver(WidgetObserver* observer) { |
351 observers_.AddObserver(observer); | 352 observers_.AddObserver(observer); |
352 } | 353 } |
353 | 354 |
354 void Widget::RemoveObserver(Widget::Observer* observer) { | 355 void Widget::RemoveObserver(WidgetObserver* observer) { |
355 observers_.RemoveObserver(observer); | 356 observers_.RemoveObserver(observer); |
356 } | 357 } |
357 | 358 |
358 bool Widget::HasObserver(Widget::Observer* observer) { | 359 bool Widget::HasObserver(WidgetObserver* observer) { |
359 return observers_.HasObserver(observer); | 360 return observers_.HasObserver(observer); |
360 } | 361 } |
361 | 362 |
362 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { | 363 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { |
363 return false; | 364 return false; |
364 } | 365 } |
365 | 366 |
366 void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) { | 367 void Widget::ViewHierarchyChanged(bool is_add, View* parent, View* child) { |
367 if (!is_add) { | 368 if (!is_add) { |
368 if (child == dragged_view_) | 369 if (child == dragged_view_) |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 | 627 |
627 bool Widget::IsAccessibleWidget() const { | 628 bool Widget::IsAccessibleWidget() const { |
628 return native_widget_->IsAccessibleWidget(); | 629 return native_widget_->IsAccessibleWidget(); |
629 } | 630 } |
630 | 631 |
631 ui::ThemeProvider* Widget::GetThemeProvider() const { | 632 ui::ThemeProvider* Widget::GetThemeProvider() const { |
632 const Widget* root_widget = GetTopLevelWidget(); | 633 const Widget* root_widget = GetTopLevelWidget(); |
633 if (root_widget && root_widget != this) { | 634 if (root_widget && root_widget != this) { |
634 // Attempt to get the theme provider, and fall back to the default theme | 635 // Attempt to get the theme provider, and fall back to the default theme |
635 // provider if not found. | 636 // provider if not found. |
636 ThemeProvider* provider = root_widget->GetThemeProvider(); | 637 ui::ThemeProvider* provider = root_widget->GetThemeProvider(); |
637 if (provider) | 638 if (provider) |
638 return provider; | 639 return provider; |
639 | 640 |
640 provider = root_widget->default_theme_provider_.get(); | 641 provider = root_widget->default_theme_provider_.get(); |
641 if (provider) | 642 if (provider) |
642 return provider; | 643 return provider; |
643 } | 644 } |
644 return default_theme_provider_.get(); | 645 return default_theme_provider_.get(); |
645 } | 646 } |
646 | 647 |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 } | 843 } |
843 | 844 |
844 const NativeWidget* Widget::native_widget() const { | 845 const NativeWidget* Widget::native_widget() const { |
845 return native_widget_; | 846 return native_widget_; |
846 } | 847 } |
847 | 848 |
848 NativeWidget* Widget::native_widget() { | 849 NativeWidget* Widget::native_widget() { |
849 return native_widget_; | 850 return native_widget_; |
850 } | 851 } |
851 | 852 |
852 void Widget::SetCapture(views::View* view) { | 853 void Widget::SetCapture(View* view) { |
853 if (internal::NativeWidgetPrivate::IsMouseButtonDown()) | 854 if (internal::NativeWidgetPrivate::IsMouseButtonDown()) |
854 is_mouse_button_pressed_ = true; | 855 is_mouse_button_pressed_ = true; |
855 if (internal::NativeWidgetPrivate::IsTouchDown()) | 856 if (internal::NativeWidgetPrivate::IsTouchDown()) |
856 is_touch_down_ = true; | 857 is_touch_down_ = true; |
857 root_view_->SetMouseHandler(view); | 858 root_view_->SetMouseHandler(view); |
858 if (!native_widget_->HasCapture()) | 859 if (!native_widget_->HasCapture()) |
859 native_widget_->SetCapture(); | 860 native_widget_->SetCapture(); |
860 } | 861 } |
861 | 862 |
862 void Widget::ReleaseCapture() { | 863 void Widget::ReleaseCapture() { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
918 } | 919 } |
919 | 920 |
920 void Widget::EnableInactiveRendering() { | 921 void Widget::EnableInactiveRendering() { |
921 SetInactiveRenderingDisabled(false); | 922 SetInactiveRenderingDisabled(false); |
922 } | 923 } |
923 | 924 |
924 void Widget::OnNativeWidgetActivationChanged(bool active) { | 925 void Widget::OnNativeWidgetActivationChanged(bool active) { |
925 if (!active) | 926 if (!active) |
926 SaveWindowPlacement(); | 927 SaveWindowPlacement(); |
927 | 928 |
928 FOR_EACH_OBSERVER(Observer, observers_, | 929 FOR_EACH_OBSERVER(WidgetObserver, observers_, |
929 OnWidgetActivationChanged(this, active)); | 930 OnWidgetActivationChanged(this, active)); |
930 } | 931 } |
931 | 932 |
932 void Widget::OnNativeFocus(gfx::NativeView old_focused_view) { | 933 void Widget::OnNativeFocus(gfx::NativeView old_focused_view) { |
933 WidgetFocusManager::GetInstance()->OnWidgetFocusEvent(old_focused_view, | 934 WidgetFocusManager::GetInstance()->OnWidgetFocusEvent(old_focused_view, |
934 GetNativeView()); | 935 GetNativeView()); |
935 } | 936 } |
936 | 937 |
937 void Widget::OnNativeBlur(gfx::NativeView new_focused_view) { | 938 void Widget::OnNativeBlur(gfx::NativeView new_focused_view) { |
938 WidgetFocusManager::GetInstance()->OnWidgetFocusEvent(GetNativeView(), | 939 WidgetFocusManager::GetInstance()->OnWidgetFocusEvent(GetNativeView(), |
939 new_focused_view); | 940 new_focused_view); |
940 } | 941 } |
941 | 942 |
942 void Widget::OnNativeWidgetVisibilityChanged(bool visible) { | 943 void Widget::OnNativeWidgetVisibilityChanged(bool visible) { |
943 View* root = GetRootView(); | 944 View* root = GetRootView(); |
944 root->PropagateVisibilityNotifications(root, visible); | 945 root->PropagateVisibilityNotifications(root, visible); |
945 FOR_EACH_OBSERVER(Observer, observers_, | 946 FOR_EACH_OBSERVER(WidgetObserver, observers_, |
946 OnWidgetVisibilityChanged(this, visible)); | 947 OnWidgetVisibilityChanged(this, visible)); |
947 if (GetCompositor() && root->layer()) | 948 if (GetCompositor() && root->layer()) |
948 root->layer()->SetVisible(visible); | 949 root->layer()->SetVisible(visible); |
949 } | 950 } |
950 | 951 |
951 void Widget::OnNativeWidgetCreated() { | 952 void Widget::OnNativeWidgetCreated() { |
952 if (is_top_level()) | 953 if (is_top_level()) |
953 focus_manager_.reset(FocusManagerFactory::Create(this)); | 954 focus_manager_.reset(FocusManagerFactory::Create(this)); |
954 | 955 |
955 native_widget_->SetAccessibleRole( | 956 native_widget_->SetAccessibleRole( |
956 widget_delegate_->GetAccessibleWindowRole()); | 957 widget_delegate_->GetAccessibleWindowRole()); |
957 native_widget_->SetAccessibleState( | 958 native_widget_->SetAccessibleState( |
958 widget_delegate_->GetAccessibleWindowState()); | 959 widget_delegate_->GetAccessibleWindowState()); |
959 | 960 |
960 native_widget_->InitModalType(widget_delegate_->GetModalType()); | 961 native_widget_->InitModalType(widget_delegate_->GetModalType()); |
961 } | 962 } |
962 | 963 |
963 void Widget::OnNativeWidgetDestroying() { | 964 void Widget::OnNativeWidgetDestroying() { |
964 // Tell the focus manager (if any) that root_view is being removed | 965 // Tell the focus manager (if any) that root_view is being removed |
965 // in case that the focused view is under this root view. | 966 // in case that the focused view is under this root view. |
966 if (GetFocusManager()) | 967 if (GetFocusManager()) |
967 GetFocusManager()->ViewRemoved(root_view_.get()); | 968 GetFocusManager()->ViewRemoved(root_view_.get()); |
968 FOR_EACH_OBSERVER(Observer, observers_, OnWidgetClosing(this)); | 969 FOR_EACH_OBSERVER(WidgetObserver, observers_, OnWidgetClosing(this)); |
969 if (non_client_view_) | 970 if (non_client_view_) |
970 non_client_view_->WindowClosing(); | 971 non_client_view_->WindowClosing(); |
971 widget_delegate_->WindowClosing(); | 972 widget_delegate_->WindowClosing(); |
972 } | 973 } |
973 | 974 |
974 void Widget::OnNativeWidgetDestroyed() { | 975 void Widget::OnNativeWidgetDestroyed() { |
975 widget_delegate_->DeleteDelegate(); | 976 widget_delegate_->DeleteDelegate(); |
976 widget_delegate_ = NULL; | 977 widget_delegate_ = NULL; |
977 native_widget_destroyed_ = true; | 978 native_widget_destroyed_ = true; |
978 } | 979 } |
979 | 980 |
980 gfx::Size Widget::GetMinimumSize() { | 981 gfx::Size Widget::GetMinimumSize() { |
981 return non_client_view_ ? non_client_view_->GetMinimumSize() : gfx::Size(); | 982 return non_client_view_ ? non_client_view_->GetMinimumSize() : gfx::Size(); |
982 } | 983 } |
983 | 984 |
984 gfx::Size Widget::GetMaximumSize() { | 985 gfx::Size Widget::GetMaximumSize() { |
985 return non_client_view_ ? non_client_view_->GetMaximumSize() : gfx::Size(); | 986 return non_client_view_ ? non_client_view_->GetMaximumSize() : gfx::Size(); |
986 } | 987 } |
987 | 988 |
988 void Widget::OnNativeWidgetMove() { | 989 void Widget::OnNativeWidgetMove() { |
989 widget_delegate_->OnWidgetMove(); | 990 widget_delegate_->OnWidgetMove(); |
990 FOR_EACH_OBSERVER(Observer, observers_, OnWidgetMoved(this)); | 991 FOR_EACH_OBSERVER(WidgetObserver, observers_, OnWidgetMoved(this)); |
991 } | 992 } |
992 | 993 |
993 void Widget::OnNativeWidgetSizeChanged(const gfx::Size& new_size) { | 994 void Widget::OnNativeWidgetSizeChanged(const gfx::Size& new_size) { |
994 root_view_->SetSize(new_size); | 995 root_view_->SetSize(new_size); |
995 | 996 |
996 // Size changed notifications can fire prior to full initialization | 997 // Size changed notifications can fire prior to full initialization |
997 // i.e. during session restore. Avoid saving session state during these | 998 // i.e. during session restore. Avoid saving session state during these |
998 // startup procedures. | 999 // startup procedures. |
999 if (native_widget_initialized_) | 1000 if (native_widget_initialized_) |
1000 SaveWindowPlacement(); | 1001 SaveWindowPlacement(); |
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1326 | 1327 |
1327 //////////////////////////////////////////////////////////////////////////////// | 1328 //////////////////////////////////////////////////////////////////////////////// |
1328 // internal::NativeWidgetPrivate, NativeWidget implementation: | 1329 // internal::NativeWidgetPrivate, NativeWidget implementation: |
1329 | 1330 |
1330 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() { | 1331 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() { |
1331 return this; | 1332 return this; |
1332 } | 1333 } |
1333 | 1334 |
1334 } // namespace internal | 1335 } // namespace internal |
1335 } // namespace views | 1336 } // namespace views |
OLD | NEW |