diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/renderer_host/render_widget_host.cc | 11 | ||||
-rw-r--r-- | chrome/browser/renderer_host/render_widget_host_view_gtk.cc | 20 | ||||
-rw-r--r-- | chrome/browser/tab_contents/web_contents_view_gtk.cc | 4 |
3 files changed, 28 insertions, 7 deletions
diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc index 7a1f599..a3c3018 100644 --- a/chrome/browser/renderer_host/render_widget_host.cc +++ b/chrome/browser/renderer_host/render_widget_host.cc @@ -6,6 +6,7 @@ #include "base/gfx/native_widget_types.h" #include "base/message_loop.h" +#include "base/keyboard_codes.h" #include "chrome/browser/renderer_host/backing_store.h" #include "chrome/browser/renderer_host/render_process_host.h" #include "chrome/browser/renderer_host/render_widget_helper.h" @@ -283,15 +284,11 @@ void RenderWidgetHost::ForwardWheelEvent( } void RenderWidgetHost::ForwardKeyboardEvent(const WebKeyboardEvent& key_event) { -#if defined(OS_WIN) if (key_event.type == WebKeyboardEvent::CHAR && - (key_event.key_code == VK_RETURN || key_event.key_code == VK_SPACE)) + (key_event.key_code == base::VKEY_RETURN || + key_event.key_code == base::VKEY_SPACE)) { OnEnterOrSpace(); -#else - // TODO(port): we don't have portable keyboard codes yet - // Maybe use keyboard_codes.h if we stick with it - NOTIMPLEMENTED(); -#endif + } ForwardInputEvent(key_event, sizeof(WebKeyboardEvent)); } diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc index b24014c..634ac06 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc +++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc @@ -41,6 +41,8 @@ class RenderWidgetHostViewGtkWidget { G_CALLBACK(KeyPressReleaseEvent), host_view); g_signal_connect(widget, "key-release-event", G_CALLBACK(KeyPressReleaseEvent), host_view); + g_signal_connect(widget, "focus", + G_CALLBACK(Focus), host_view); g_signal_connect(widget, "focus-in-event", G_CALLBACK(FocusIn), host_view); g_signal_connect(widget, "focus-out-event", @@ -85,6 +87,16 @@ class RenderWidgetHostViewGtkWidget { return FALSE; } + static gboolean Focus(GtkWidget* widget, GtkDirectionType focus, + RenderWidgetHostViewGtk* host_view) { + // We override this so that pressing tab navigates within the web contents + // rather than tabbing out of it. However, we do want to be able to tab + // out of it at the appropriate points. TODO(port): study how this works + // on Windows and implement it. + NOTIMPLEMENTED(); + return TRUE; + } + static gboolean FocusIn(GtkWidget* widget, GdkEventFocus* focus, RenderWidgetHostViewGtk* host_view) { host_view->GetRenderWidgetHost()->Focus(); @@ -102,6 +114,12 @@ class RenderWidgetHostViewGtkWidget { RenderWidgetHostViewGtk* host_view) { WebMouseEvent wme(event); host_view->GetRenderWidgetHost()->ForwardMouseEvent(wme); + + // TODO(evanm): why is this necessary here but not in test shell? + // This logic is the same as GtkButton. + if (event->type == GDK_BUTTON_PRESS && !GTK_WIDGET_HAS_FOCUS(widget)) + gtk_widget_grab_focus(widget); + return FALSE; } @@ -118,6 +136,8 @@ class RenderWidgetHostViewGtkWidget { host_view->GetRenderWidgetHost()->ForwardWheelEvent(wmwe); return FALSE; } + + DISALLOW_IMPLICIT_CONSTRUCTORS(RenderWidgetHostViewGtkWidget); }; } // namespace diff --git a/chrome/browser/tab_contents/web_contents_view_gtk.cc b/chrome/browser/tab_contents/web_contents_view_gtk.cc index cd0d09a..4add84a 100644 --- a/chrome/browser/tab_contents/web_contents_view_gtk.cc +++ b/chrome/browser/tab_contents/web_contents_view_gtk.cc @@ -102,6 +102,10 @@ void WebContentsViewGtk::TakeFocus(bool reverse) { } void WebContentsViewGtk::HandleKeyboardEvent(const WebKeyboardEvent& event) { + // The renderer returned a keyboard event it did not process. This may be + // a keyboard shortcut that we have to process. + // The windows code forwards this event onwards to accelerator handling, + // and then to DefWindowProc. TODO(port): should do something similar. NOTIMPLEMENTED(); } |