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.
|
} |
//////////////////////////////////////////////////////////////////////////////// |