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

Unified Diff: ui/views/widget/widget.cc

Issue 2604793002: Allow Widget to pass accelerator handling to its parent.
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
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());

Powered by Google App Engine
This is Rietveld 408576698