| Index: ui/views/widget/widget.cc
|
| diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
|
| index 08578add8f534fe637481183fd005dbc34a58a1c..d088b8c706a50d81c0148edc721918f372775089 100644
|
| --- a/ui/views/widget/widget.cc
|
| +++ b/ui/views/widget/widget.cc
|
| @@ -25,6 +25,7 @@
|
| #include "ui/views/controls/menu/menu_controller.h"
|
| #include "ui/views/event_monitor.h"
|
| #include "ui/views/focus/focus_manager.h"
|
| +#include "ui/views/focus/focus_manager_delegate.h"
|
| #include "ui/views/focus/focus_manager_factory.h"
|
| #include "ui/views/focus/view_storage.h"
|
| #include "ui/views/focus/widget_focus_manager.h"
|
| @@ -32,6 +33,7 @@
|
| #include "ui/views/widget/native_widget_private.h"
|
| #include "ui/views/widget/root_view.h"
|
| #include "ui/views/widget/tooltip_manager.h"
|
| +#include "ui/views/widget/widget_accelerator_handling_delegate.h"
|
| #include "ui/views/widget/widget_delegate.h"
|
| #include "ui/views/widget/widget_deletion_observer.h"
|
| #include "ui/views/widget/widget_observer.h"
|
| @@ -336,6 +338,12 @@ void Widget::Init(const InitParams& in_params) {
|
| is_mouse_button_pressed_ =
|
| internal::NativeWidgetPrivate::IsMouseButtonDown();
|
| }
|
| + if (params.parent && params.pass_accelerator_to_parent) {
|
| + if (Widget* parent_widget = Widget::GetWidgetForNativeView(params.parent)) {
|
| + accelerator_handling_delegate_.reset(
|
| + new WidgetAcceleratorHandlingDelegate(parent_widget));
|
| + }
|
| + }
|
| native_widget_->InitNativeWidget(params);
|
| if (RequiresNonClientView(params.type)) {
|
| non_client_view_ = new NonClientView;
|
| @@ -409,6 +417,18 @@ bool Widget::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) const {
|
| return false;
|
| }
|
|
|
| +bool Widget::CanHandleAccelerators() const {
|
| + return (handle_accelerators_override_count_ != 0) || IsActive();
|
| +}
|
| +
|
| +void Widget::AddHandleAcceleratorsOverride() {
|
| + ++handle_accelerators_override_count_;
|
| +}
|
| +
|
| +void Widget::RemoveHandleAcceleratorsOverride() {
|
| + --handle_accelerators_override_count_;
|
| +}
|
| +
|
| void Widget::ViewHierarchyChanged(
|
| const View::ViewHierarchyChangedDetails& details) {
|
| if (!details.is_add) {
|
| @@ -1051,8 +1071,15 @@ void Widget::OnNativeWidgetVisibilityChanged(bool visible) {
|
| }
|
|
|
| void Widget::OnNativeWidgetCreated(bool desktop_widget) {
|
| - if (is_top_level())
|
| - focus_manager_.reset(FocusManagerFactory::Create(this, desktop_widget));
|
| + if (is_top_level()) {
|
| + if (accelerator_handling_delegate_) {
|
| + focus_manager_.reset(new FocusManager(
|
| + this, accelerator_handling_delegate_->CreateFocusManagerDelegate()
|
| + .release()));
|
| + } else {
|
| + focus_manager_.reset(FocusManagerFactory::Create(this, desktop_widget));
|
| + }
|
| + }
|
|
|
| native_widget_->InitModalType(widget_delegate_->GetModalType());
|
|
|
|
|