| Index: ui/views/cocoa/bridged_native_widget.mm
|
| diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
|
| index 7695a66d51b7aad8919ba9f8f7252adbb69d147a..2a959daf9e139a6b5ccccc869ba79aa40d727c1c 100644
|
| --- a/ui/views/cocoa/bridged_native_widget.mm
|
| +++ b/ui/views/cocoa/bridged_native_widget.mm
|
| @@ -14,11 +14,12 @@
|
| #include "ui/views/ime/input_method_bridge.h"
|
| #include "ui/views/ime/null_input_method.h"
|
| #include "ui/views/view.h"
|
| +#include "ui/views/widget/widget.h"
|
|
|
| namespace views {
|
|
|
| BridgedNativeWidget::BridgedNativeWidget(NativeWidgetMac* parent)
|
| - : native_widget_mac_(parent) {
|
| + : native_widget_mac_(parent), focus_manager_(NULL) {
|
| DCHECK(parent);
|
| window_delegate_.reset(
|
| [[ViewsNSWindowDelegate alloc] initWithBridgedNativeWidget:this]);
|
| @@ -26,6 +27,7 @@ BridgedNativeWidget::BridgedNativeWidget(NativeWidgetMac* parent)
|
|
|
| BridgedNativeWidget::~BridgedNativeWidget() {
|
| RemoveOrDestroyChildren();
|
| + SetFocusManager(NULL);
|
| SetRootView(NULL);
|
| if ([window_ delegate]) {
|
| // If the delegate is still set, it means OnWindowWillClose has not been
|
| @@ -49,6 +51,19 @@ void BridgedNativeWidget::Init(base::scoped_nsobject<NSWindow> window,
|
| }
|
| }
|
|
|
| +void BridgedNativeWidget::SetFocusManager(FocusManager* focus_manager) {
|
| + if (focus_manager_ == focus_manager)
|
| + return;
|
| +
|
| + if (focus_manager_)
|
| + focus_manager_->RemoveFocusChangeListener(this);
|
| +
|
| + if (focus_manager)
|
| + focus_manager->AddFocusChangeListener(this);
|
| +
|
| + focus_manager_ = focus_manager;
|
| +}
|
| +
|
| void BridgedNativeWidget::SetRootView(views::View* view) {
|
| if (view == [bridged_view_ hostedView])
|
| return;
|
| @@ -96,10 +111,21 @@ ui::InputMethod* BridgedNativeWidget::GetHostInputMethod() {
|
| void BridgedNativeWidget::DispatchKeyEventPostIME(const ui::KeyEvent& key) {
|
| // Mac key events don't go through this, but some unit tests that use
|
| // MockInputMethod do.
|
| - Widget* widget = [bridged_view_ hostedView]->GetWidget();
|
| - widget->OnKeyEvent(const_cast<ui::KeyEvent*>(&key));
|
| - if (!key.handled() && widget->GetFocusManager())
|
| - widget->GetFocusManager()->OnKeyEvent(key);
|
| + DCHECK(focus_manager_);
|
| + native_widget_mac_->GetWidget()->OnKeyEvent(const_cast<ui::KeyEvent*>(&key));
|
| + if (!key.handled())
|
| + focus_manager_->OnKeyEvent(key);
|
| +}
|
| +
|
| +void BridgedNativeWidget::OnWillChangeFocus(View* focused_before,
|
| + View* focused_now) {
|
| +}
|
| +
|
| +void BridgedNativeWidget::OnDidChangeFocus(View* focused_before,
|
| + View* focused_now) {
|
| + ui::TextInputClient* input_client =
|
| + focused_now ? focused_now->GetTextInputClient() : NULL;
|
| + [bridged_view_ setTextInputClient:input_client];
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
|
|