| 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/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| 11 #include "base/trace_event/trace_event.h" | 11 #include "base/trace_event/trace_event.h" |
| 12 #include "ui/base/cursor/cursor.h" | 12 #include "ui/base/cursor/cursor.h" |
| 13 #include "ui/base/default_style.h" | 13 #include "ui/base/default_style.h" |
| 14 #include "ui/base/default_theme_provider.h" | 14 #include "ui/base/default_theme_provider.h" |
| 15 #include "ui/base/hit_test.h" | 15 #include "ui/base/hit_test.h" |
| 16 #include "ui/base/ime/input_method.h" | 16 #include "ui/base/ime/input_method.h" |
| 17 #include "ui/base/l10n/l10n_font_util.h" | 17 #include "ui/base/l10n/l10n_font_util.h" |
| 18 #include "ui/base/resource/resource_bundle.h" | 18 #include "ui/base/resource/resource_bundle.h" |
| 19 #include "ui/compositor/compositor.h" | 19 #include "ui/compositor/compositor.h" |
| 20 #include "ui/compositor/layer.h" | 20 #include "ui/compositor/layer.h" |
| 21 #include "ui/display/screen.h" | 21 #include "ui/display/screen.h" |
| 22 #include "ui/events/event.h" | 22 #include "ui/events/event.h" |
| 23 #include "ui/events/event_utils.h" | 23 #include "ui/events/event_utils.h" |
| 24 #include "ui/gfx/image/image_skia.h" | 24 #include "ui/gfx/image/image_skia.h" |
| 25 #include "ui/views/controls/menu/menu_controller.h" | 25 #include "ui/views/controls/menu/menu_controller.h" |
| 26 #include "ui/views/event_monitor.h" | 26 #include "ui/views/event_monitor.h" |
| 27 #include "ui/views/focus/focus_manager.h" | 27 #include "ui/views/focus/focus_manager.h" |
| 28 #include "ui/views/focus/focus_manager_delegate.h" |
| 28 #include "ui/views/focus/focus_manager_factory.h" | 29 #include "ui/views/focus/focus_manager_factory.h" |
| 29 #include "ui/views/focus/view_storage.h" | 30 #include "ui/views/focus/view_storage.h" |
| 30 #include "ui/views/focus/widget_focus_manager.h" | 31 #include "ui/views/focus/widget_focus_manager.h" |
| 31 #include "ui/views/views_delegate.h" | 32 #include "ui/views/views_delegate.h" |
| 32 #include "ui/views/widget/native_widget_private.h" | 33 #include "ui/views/widget/native_widget_private.h" |
| 33 #include "ui/views/widget/root_view.h" | 34 #include "ui/views/widget/root_view.h" |
| 34 #include "ui/views/widget/tooltip_manager.h" | 35 #include "ui/views/widget/tooltip_manager.h" |
| 36 #include "ui/views/widget/widget_accelerator_handling_delegate.h" |
| 35 #include "ui/views/widget/widget_delegate.h" | 37 #include "ui/views/widget/widget_delegate.h" |
| 36 #include "ui/views/widget/widget_deletion_observer.h" | 38 #include "ui/views/widget/widget_deletion_observer.h" |
| 37 #include "ui/views/widget/widget_observer.h" | 39 #include "ui/views/widget/widget_observer.h" |
| 38 #include "ui/views/widget/widget_removals_observer.h" | 40 #include "ui/views/widget/widget_removals_observer.h" |
| 39 #include "ui/views/window/custom_frame_view.h" | 41 #include "ui/views/window/custom_frame_view.h" |
| 40 #include "ui/views/window/dialog_delegate.h" | 42 #include "ui/views/window/dialog_delegate.h" |
| 41 | 43 |
| 42 namespace views { | 44 namespace views { |
| 43 | 45 |
| 44 namespace { | 46 namespace { |
| (...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 widget_delegate_->set_can_activate(can_activate); | 331 widget_delegate_->set_can_activate(can_activate); |
| 330 | 332 |
| 331 ownership_ = params.ownership; | 333 ownership_ = params.ownership; |
| 332 native_widget_ = CreateNativeWidget(params, this)->AsNativeWidgetPrivate(); | 334 native_widget_ = CreateNativeWidget(params, this)->AsNativeWidgetPrivate(); |
| 333 root_view_.reset(CreateRootView()); | 335 root_view_.reset(CreateRootView()); |
| 334 default_theme_provider_.reset(new ui::DefaultThemeProvider); | 336 default_theme_provider_.reset(new ui::DefaultThemeProvider); |
| 335 if (params.type == InitParams::TYPE_MENU) { | 337 if (params.type == InitParams::TYPE_MENU) { |
| 336 is_mouse_button_pressed_ = | 338 is_mouse_button_pressed_ = |
| 337 internal::NativeWidgetPrivate::IsMouseButtonDown(); | 339 internal::NativeWidgetPrivate::IsMouseButtonDown(); |
| 338 } | 340 } |
| 341 if (params.parent && params.pass_accelerator_to_parent) { |
| 342 if (Widget* parent_widget = Widget::GetWidgetForNativeView(params.parent)) { |
| 343 accelerator_handling_delegate_.reset( |
| 344 new WidgetAcceleratorHandlingDelegate(parent_widget)); |
| 345 } |
| 346 } |
| 339 native_widget_->InitNativeWidget(params); | 347 native_widget_->InitNativeWidget(params); |
| 340 if (RequiresNonClientView(params.type)) { | 348 if (RequiresNonClientView(params.type)) { |
| 341 non_client_view_ = new NonClientView; | 349 non_client_view_ = new NonClientView; |
| 342 non_client_view_->SetFrameView(CreateNonClientFrameView()); | 350 non_client_view_->SetFrameView(CreateNonClientFrameView()); |
| 343 // Create the ClientView, add it to the NonClientView and add the | 351 // Create the ClientView, add it to the NonClientView and add the |
| 344 // NonClientView to the RootView. This will cause everything to be parented. | 352 // NonClientView to the RootView. This will cause everything to be parented. |
| 345 non_client_view_->set_client_view(widget_delegate_->CreateClientView(this)); | 353 non_client_view_->set_client_view(widget_delegate_->CreateClientView(this)); |
| 346 non_client_view_->SetOverlayView(widget_delegate_->CreateOverlayView()); | 354 non_client_view_->SetOverlayView(widget_delegate_->CreateOverlayView()); |
| 347 SetContentsView(non_client_view_); | 355 SetContentsView(non_client_view_); |
| 348 // Initialize the window's icon and title before setting the window's | 356 // Initialize the window's icon and title before setting the window's |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 } | 410 } |
| 403 | 411 |
| 404 bool Widget::HasRemovalsObserver(const WidgetRemovalsObserver* observer) const { | 412 bool Widget::HasRemovalsObserver(const WidgetRemovalsObserver* observer) const { |
| 405 return removals_observers_.HasObserver(observer); | 413 return removals_observers_.HasObserver(observer); |
| 406 } | 414 } |
| 407 | 415 |
| 408 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) const { | 416 bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) const { |
| 409 return false; | 417 return false; |
| 410 } | 418 } |
| 411 | 419 |
| 420 bool Widget::CanHandleAccelerators() const { |
| 421 return (handle_accelerators_override_count_ != 0) || IsActive(); |
| 422 } |
| 423 |
| 424 void Widget::AddHandleAcceleratorsOverride() { |
| 425 ++handle_accelerators_override_count_; |
| 426 } |
| 427 |
| 428 void Widget::RemoveHandleAcceleratorsOverride() { |
| 429 --handle_accelerators_override_count_; |
| 430 } |
| 431 |
| 412 void Widget::ViewHierarchyChanged( | 432 void Widget::ViewHierarchyChanged( |
| 413 const View::ViewHierarchyChangedDetails& details) { | 433 const View::ViewHierarchyChangedDetails& details) { |
| 414 if (!details.is_add) { | 434 if (!details.is_add) { |
| 415 if (details.child == dragged_view_) | 435 if (details.child == dragged_view_) |
| 416 dragged_view_ = NULL; | 436 dragged_view_ = NULL; |
| 417 FocusManager* focus_manager = GetFocusManager(); | 437 FocusManager* focus_manager = GetFocusManager(); |
| 418 if (focus_manager) | 438 if (focus_manager) |
| 419 focus_manager->ViewRemoved(details.child); | 439 focus_manager->ViewRemoved(details.child); |
| 420 ViewStorage::GetInstance()->ViewRemoved(details.child); | 440 ViewStorage::GetInstance()->ViewRemoved(details.child); |
| 421 native_widget_->ViewRemoved(details.child); | 441 native_widget_->ViewRemoved(details.child); |
| (...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 View* root = GetRootView(); | 1064 View* root = GetRootView(); |
| 1045 if (root) | 1065 if (root) |
| 1046 root->PropagateVisibilityNotifications(root, visible); | 1066 root->PropagateVisibilityNotifications(root, visible); |
| 1047 for (WidgetObserver& observer : observers_) | 1067 for (WidgetObserver& observer : observers_) |
| 1048 observer.OnWidgetVisibilityChanged(this, visible); | 1068 observer.OnWidgetVisibilityChanged(this, visible); |
| 1049 if (GetCompositor() && root && root->layer()) | 1069 if (GetCompositor() && root && root->layer()) |
| 1050 root->layer()->SetVisible(visible); | 1070 root->layer()->SetVisible(visible); |
| 1051 } | 1071 } |
| 1052 | 1072 |
| 1053 void Widget::OnNativeWidgetCreated(bool desktop_widget) { | 1073 void Widget::OnNativeWidgetCreated(bool desktop_widget) { |
| 1054 if (is_top_level()) | 1074 if (is_top_level()) { |
| 1055 focus_manager_.reset(FocusManagerFactory::Create(this, desktop_widget)); | 1075 if (accelerator_handling_delegate_) { |
| 1076 focus_manager_.reset(new FocusManager( |
| 1077 this, accelerator_handling_delegate_->CreateFocusManagerDelegate() |
| 1078 .release())); |
| 1079 } else { |
| 1080 focus_manager_.reset(FocusManagerFactory::Create(this, desktop_widget)); |
| 1081 } |
| 1082 } |
| 1056 | 1083 |
| 1057 native_widget_->InitModalType(widget_delegate_->GetModalType()); | 1084 native_widget_->InitModalType(widget_delegate_->GetModalType()); |
| 1058 | 1085 |
| 1059 for (WidgetObserver& observer : observers_) | 1086 for (WidgetObserver& observer : observers_) |
| 1060 observer.OnWidgetCreated(this); | 1087 observer.OnWidgetCreated(this); |
| 1061 } | 1088 } |
| 1062 | 1089 |
| 1063 void Widget::OnNativeWidgetDestroying() { | 1090 void Widget::OnNativeWidgetDestroying() { |
| 1064 // Tell the focus manager (if any) that root_view is being removed | 1091 // Tell the focus manager (if any) that root_view is being removed |
| 1065 // in case that the focused view is under this root view. | 1092 // in case that the focused view is under this root view. |
| (...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1490 | 1517 |
| 1491 //////////////////////////////////////////////////////////////////////////////// | 1518 //////////////////////////////////////////////////////////////////////////////// |
| 1492 // internal::NativeWidgetPrivate, NativeWidget implementation: | 1519 // internal::NativeWidgetPrivate, NativeWidget implementation: |
| 1493 | 1520 |
| 1494 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() { | 1521 internal::NativeWidgetPrivate* NativeWidgetPrivate::AsNativeWidgetPrivate() { |
| 1495 return this; | 1522 return this; |
| 1496 } | 1523 } |
| 1497 | 1524 |
| 1498 } // namespace internal | 1525 } // namespace internal |
| 1499 } // namespace views | 1526 } // namespace views |
| OLD | NEW |