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

Unified Diff: ui/views/cocoa/bridged_native_widget.mm

Issue 329463002: MacViews: Implement text input. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to master Created 6 years, 6 months 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
« no previous file with comments | « ui/views/cocoa/bridged_native_widget.h ('k') | ui/views/cocoa/bridged_native_widget_unittest.mm » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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];
}
////////////////////////////////////////////////////////////////////////////////
« no previous file with comments | « ui/views/cocoa/bridged_native_widget.h ('k') | ui/views/cocoa/bridged_native_widget_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698