Chromium Code Reviews| Index: views/controls/textfield/native_textfield_gtk.cc |
| diff --git a/views/controls/textfield/native_textfield_gtk.cc b/views/controls/textfield/native_textfield_gtk.cc |
| index b52a50bbd22aac612229dbff80dc1316b25ed276..acd64ce37bfb92c13a3f7902037b4dc290ba7f0b 100644 |
| --- a/views/controls/textfield/native_textfield_gtk.cc |
| +++ b/views/controls/textfield/native_textfield_gtk.cc |
| @@ -2,6 +2,7 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include <gdk/gdkkeysyms.h> |
| #include <gtk/gtk.h> |
| #include "views/controls/textfield/native_textfield_gtk.h" |
| @@ -14,6 +15,7 @@ |
| #include "views/controls/textfield/gtk_views_entry.h" |
| #include "views/controls/textfield/gtk_views_textview.h" |
| #include "views/controls/textfield/textfield.h" |
| +#include "views/widget/widget_gtk.h" |
| namespace views { |
| @@ -361,6 +363,35 @@ gboolean NativeTextfieldGtk::OnKeyPressEvent(GdkEventKey* event) { |
| } |
| // static |
| +gboolean NativeTextfieldGtk::OnActivateHandler( |
| + GtkWidget* widget, |
| + NativeTextfieldGtk* textfield) { |
| + return textfield->OnActivate(); |
| +} |
| + |
| +gboolean NativeTextfieldGtk::OnActivate() { |
| + GdkEvent* event = gtk_get_current_event(); |
| + if (!event || event->type != GDK_KEY_PRESS) { |
| + return false; |
| + } |
|
James Su
2010/12/15 06:06:43
No braces.
Zachary Kuznia
2010/12/15 08:23:25
Done.
|
| + |
| + GdkEventKey* key_event = reinterpret_cast<GdkEventKey*>(event); |
| + gboolean handled = false; |
| + |
| + Textfield::Controller* controller = textfield_->GetController(); |
| + if (controller) { |
| + Textfield::Keystroke ks(key_event); |
| + handled = controller->HandleKeystroke(textfield_, ks); |
| + } |
| + |
| + WidgetGtk* widget = static_cast<WidgetGtk*>(GetWidget()); |
| + if (!handled && widget) { |
| + handled = widget->HandleKeyboardEvent(key_event); |
| + } |
|
James Su
2010/12/15 06:06:43
No braces.
Zachary Kuznia
2010/12/15 08:23:25
Done.
|
| + return handled; |
| +} |
| + |
| +// static |
| gboolean NativeTextfieldGtk::OnChangedHandler( |
| GtkWidget* widget, |
| NativeTextfieldGtk* textfield) { |
| @@ -407,8 +438,11 @@ void NativeTextfieldGtk::NativeControlCreated(GtkWidget* widget) { |
| g_signal_connect(widget, "changed", |
| G_CALLBACK(OnChangedHandler), this); |
| } |
| - g_signal_connect(widget, "key-press-event", |
| + g_signal_connect_after(widget, "key-press-event", |
| G_CALLBACK(OnKeyPressEventHandler), this); |
|
James Su
2010/12/15 06:06:43
Alignment.
Zachary Kuznia
2010/12/15 08:23:25
Done.
|
| + // In order to properly trigger Accelerators bound to VKEY_RETURN, we need to |
| + // send an event when the widget gets the activate signal. |
| + g_signal_connect(widget, "activate", G_CALLBACK(&OnActivateHandler), this); |
|
James Su
2010/12/15 06:06:43
& is not necessary.
Zachary Kuznia
2010/12/15 08:23:25
Done.
|
| } |
| //////////////////////////////////////////////////////////////////////////////// |