diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-18 21:29:00 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-10-18 21:29:00 +0000 |
commit | 0b5781a63246fb4abf31f871b445a6d85970b19f (patch) | |
tree | 9a60d5eaa75093e26b73ac162dd14b6399c0e473 /content | |
parent | 836c4164547c4c2fcb863f74126c47befbeac767 (diff) | |
download | chromium_src-0b5781a63246fb4abf31f871b445a6d85970b19f.zip chromium_src-0b5781a63246fb4abf31f871b445a6d85970b19f.tar.gz chromium_src-0b5781a63246fb4abf31f871b445a6d85970b19f.tar.bz2 |
Refactors NativeWebKeyboardEvent to be less ugly.
Replaces #ifdefs in the source file with use of a new gfx::NativeEvent typedef.
Adds NativeWebKeyboardEventAura.
http://crbug.com/99757
TEST=none
Review URL: http://codereview.chromium.org/8302013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@106135 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
12 files changed, 84 insertions, 114 deletions
diff --git a/content/browser/renderer_host/gtk_im_context_wrapper.cc b/content/browser/renderer_host/gtk_im_context_wrapper.cc index d2c4332..45ab812 100644 --- a/content/browser/renderer_host/gtk_im_context_wrapper.cc +++ b/content/browser/renderer_host/gtk_im_context_wrapper.cc @@ -154,7 +154,7 @@ void GtkIMContextWrapper::ProcessKeyEvent(GdkEventKey* event) { // Reset this flag here, as it's only used in input method callbacks. is_in_key_event_handler_ = false; - NativeWebKeyboardEvent wke(event); + NativeWebKeyboardEvent wke(reinterpret_cast<GdkEvent*>(event)); // If the key event was handled by the input method, then we need to prevent // RenderView::UnhandledKeyboardEvent() from processing it. diff --git a/content/browser/renderer_host/gtk_key_bindings_handler.cc b/content/browser/renderer_host/gtk_key_bindings_handler.cc index 351ad630..8a18376 100644 --- a/content/browser/renderer_host/gtk_key_bindings_handler.cc +++ b/content/browser/renderer_host/gtk_key_bindings_handler.cc @@ -33,7 +33,7 @@ bool GtkKeyBindingsHandler::Match(const NativeWebKeyboardEvent& wke, edit_commands_.clear(); // If this key event matches a predefined key binding, corresponding signal // will be emitted. - gtk_bindings_activate_event(GTK_OBJECT(handler_.get()), wke.os_event); + gtk_bindings_activate_event(GTK_OBJECT(handler_.get()), &wke.os_event->key); bool matched = !edit_commands_.empty(); if (edit_commands) diff --git a/content/browser/renderer_host/gtk_key_bindings_handler_unittest.cc b/content/browser/renderer_host/gtk_key_bindings_handler_unittest.cc index 5c77e5b..bc0b1fa 100644 --- a/content/browser/renderer_host/gtk_key_bindings_handler_unittest.cc +++ b/content/browser/renderer_host/gtk_key_bindings_handler_unittest.cc @@ -67,7 +67,7 @@ class GtkKeyBindingsHandlerTest : public testing::Test { event.group = keys[0].group; event.is_modifier = 0; g_free(keys); - return NativeWebKeyboardEvent(&event); + return NativeWebKeyboardEvent(reinterpret_cast<GdkEvent*>(&event)); } LOG(ERROR) << "Failed to create key event for keyval:" << keyval; return NativeWebKeyboardEvent(); diff --git a/content/browser/renderer_host/native_web_keyboard_event_aura.cc b/content/browser/renderer_host/native_web_keyboard_event_aura.cc new file mode 100644 index 0000000..fa3d0d6 --- /dev/null +++ b/content/browser/renderer_host/native_web_keyboard_event_aura.cc @@ -0,0 +1,41 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "content/public/browser/native_web_keyboard_event.h" + +#include "content/browser/renderer_host/web_input_event_aura.h" + +using WebKit::WebKeyboardEvent; + +NativeWebKeyboardEvent::NativeWebKeyboardEvent() + : os_event(NULL), + skip_in_browser(false) { +} + +NativeWebKeyboardEvent::NativeWebKeyboardEvent(gfx::NativeEvent native_event) + : WebKeyboardEvent(content::MakeWebKeyboardEvent( + reinterpret_cast<aura::KeyEvent*>(native_event))), + os_event(native_event), + skip_in_browser(false) { +} + +NativeWebKeyboardEvent::NativeWebKeyboardEvent( + const NativeWebKeyboardEvent& other) + : WebKeyboardEvent(other), + os_event(other.os_event), + skip_in_browser(other.skip_in_browser) { +} + +NativeWebKeyboardEvent& NativeWebKeyboardEvent::operator=( + const NativeWebKeyboardEvent& other) { + WebKeyboardEvent::operator=(other); + + os_event = other.os_event; + skip_in_browser = other.skip_in_browser; + + return *this; +} + +NativeWebKeyboardEvent::~NativeWebKeyboardEvent() { +} diff --git a/content/browser/renderer_host/native_web_keyboard_event_gtk.cc b/content/browser/renderer_host/native_web_keyboard_event_gtk.cc index 2c8570f..198d92c 100644 --- a/content/browser/renderer_host/native_web_keyboard_event_gtk.cc +++ b/content/browser/renderer_host/native_web_keyboard_event_gtk.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -12,20 +12,13 @@ using WebKit::WebInputEventFactory; namespace { -void CopyEventTo(const GdkEventKey* in, GdkEventKey** out) { - if (in) { - *out = reinterpret_cast<GdkEventKey*>( - gdk_event_copy( - reinterpret_cast<GdkEvent*>(const_cast<GdkEventKey*>(in)))); - } else { - *out = NULL; - } +void CopyEventTo(gfx::NativeEvent in, gfx::NativeEvent* out) { + *out = in ? gdk_event_copy(in) : NULL; } -void FreeEvent(GdkEventKey* event) { - if (event) { - gdk_event_free(reinterpret_cast<GdkEvent*>(event)); - } +void FreeEvent(gfx::NativeEvent event) { + if (event) + gdk_event_free(event); } } // namespace @@ -37,8 +30,8 @@ NativeWebKeyboardEvent::NativeWebKeyboardEvent() match_edit_command(false) { } -NativeWebKeyboardEvent::NativeWebKeyboardEvent(const GdkEventKey* native_event) - : WebKeyboardEvent(WebInputEventFactory::keyboardEvent(native_event)), +NativeWebKeyboardEvent::NativeWebKeyboardEvent(gfx::NativeEvent native_event) + : WebKeyboardEvent(WebInputEventFactory::keyboardEvent(&native_event->key)), skip_in_browser(false), match_edit_command(false) { CopyEventTo(native_event, &os_event); diff --git a/content/browser/renderer_host/native_web_keyboard_event_mac.mm b/content/browser/renderer_host/native_web_keyboard_event_mac.mm index 8db1353..17d7de8 100644 --- a/content/browser/renderer_host/native_web_keyboard_event_mac.mm +++ b/content/browser/renderer_host/native_web_keyboard_event_mac.mm @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -15,9 +15,9 @@ NativeWebKeyboardEvent::NativeWebKeyboardEvent() skip_in_browser(false) { } -NativeWebKeyboardEvent::NativeWebKeyboardEvent(NSEvent* event) - : WebKeyboardEvent(WebInputEventFactory::keyboardEvent(event)), - os_event([event retain]), +NativeWebKeyboardEvent::NativeWebKeyboardEvent(gfx::NativeEvent native_event) + : WebKeyboardEvent(WebInputEventFactory::keyboardEvent(native_event)), + os_event([native_event retain]), skip_in_browser(false) { } diff --git a/content/browser/renderer_host/native_web_keyboard_event_win.cc b/content/browser/renderer_host/native_web_keyboard_event_win.cc index c913d26..d72bb52 100644 --- a/content/browser/renderer_host/native_web_keyboard_event_win.cc +++ b/content/browser/renderer_host/native_web_keyboard_event_win.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -14,36 +14,28 @@ NativeWebKeyboardEvent::NativeWebKeyboardEvent() memset(&os_event, 0, sizeof(os_event)); } -NativeWebKeyboardEvent::NativeWebKeyboardEvent( - HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) +NativeWebKeyboardEvent::NativeWebKeyboardEvent(gfx::NativeEvent native_event) : WebKeyboardEvent( - WebInputEventFactory::keyboardEvent(hwnd, message, wparam, lparam)), + WebInputEventFactory::keyboardEvent(native_event.hwnd, + native_event.message, + native_event.wParam, + native_event.lParam)), + os_event(native_event), skip_in_browser(false) { - os_event.hwnd = hwnd; - os_event.message = message; - os_event.wParam = wparam; - os_event.lParam = lparam; } NativeWebKeyboardEvent::NativeWebKeyboardEvent( const NativeWebKeyboardEvent& other) : WebKeyboardEvent(other), + os_event(other.os_event), skip_in_browser(other.skip_in_browser) { - os_event.hwnd = other.os_event.hwnd; - os_event.message = other.os_event.message; - os_event.wParam = other.os_event.wParam; - os_event.lParam = other.os_event.lParam; } NativeWebKeyboardEvent& NativeWebKeyboardEvent::operator=( const NativeWebKeyboardEvent& other) { WebKeyboardEvent::operator=(other); - os_event.hwnd = other.os_event.hwnd; - os_event.message = other.os_event.message; - os_event.wParam = other.os_event.wParam; - os_event.lParam = other.os_event.lParam; - + os_event = other.os_event; skip_in_browser = other.skip_in_browser; return *this; diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc index 8149ba2..7f1014b 100644 --- a/content/browser/renderer_host/render_widget_host_view_aura.cc +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc @@ -6,6 +6,7 @@ #include "base/logging.h" #include "content/browser/renderer_host/backing_store_skia.h" +#include "content/browser/renderer_host/web_input_event_aura.h" #include "content/browser/renderer_host/render_widget_host.h" #include "content/public/browser/native_web_keyboard_event.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" @@ -301,15 +302,8 @@ void RenderWidgetHostViewAura::OnBlur() { } bool RenderWidgetHostViewAura::OnKeyEvent(aura::KeyEvent* event) { - host_->ForwardKeyboardEvent( - NativeWebKeyboardEvent( -#if defined(OS_WIN) - event->native_event().hwnd, - event->native_event().message, - event->native_event().wParam, - event->native_event().lParam -#endif - )); + NativeWebKeyboardEvent webkit_event(event); + host_->ForwardKeyboardEvent(webkit_event); return true; } @@ -325,38 +319,7 @@ int RenderWidgetHostViewAura::GetNonClientComponent( } bool RenderWidgetHostViewAura::OnMouseEvent(aura::MouseEvent* event) { - // TODO(beng): replace with construction using WebInputEventFactories for - // Windows/X using |event|'s native_event() field. - - WebKit::WebMouseEvent webkit_event; - webkit_event.timeStampSeconds = base::Time::Now().ToDoubleT(); - webkit_event.modifiers = WebInputEventFlagsFromAuraEvent(*event); - webkit_event.windowX = webkit_event.x = event->x(); - webkit_event.windowY = webkit_event.y = event->y(); - - webkit_event.globalX = webkit_event.x; - webkit_event.globalY = webkit_event.y; - - if (event->type() == ui::ET_MOUSE_PRESSED || - event->type() == ui::ET_MOUSE_RELEASED) { - webkit_event.clickCount = 1; - } - - if (event->flags() & ui::EF_MIDDLE_BUTTON_DOWN) { - webkit_event.modifiers |= WebKit::WebInputEvent::MiddleButtonDown; - webkit_event.button = WebKit::WebMouseEvent::ButtonMiddle; - } - if (event->flags() & ui::EF_LEFT_BUTTON_DOWN) { - webkit_event.modifiers |= WebKit::WebInputEvent::LeftButtonDown; - webkit_event.button = WebKit::WebMouseEvent::ButtonLeft; - } - if (event->flags() & ui::EF_RIGHT_BUTTON_DOWN) { - webkit_event.modifiers |= WebKit::WebInputEvent::RightButtonDown; - webkit_event.button = WebKit::WebMouseEvent::ButtonRight; - } - - webkit_event.type = WebInputEventTypeFromAuraEvent(*event); - host_->ForwardMouseEvent(webkit_event); + host_->ForwardMouseEvent(content::MakeWebMouseEvent(event)); // Return true so that we receive released/drag events. return true; diff --git a/content/browser/renderer_host/render_widget_host_view_win.cc b/content/browser/renderer_host/render_widget_host_view_win.cc index 056354d..b33bcde 100644 --- a/content/browser/renderer_host/render_widget_host_view_win.cc +++ b/content/browser/renderer_host/render_widget_host_view_win.cc @@ -1378,8 +1378,8 @@ LRESULT RenderWidgetHostViewWin::OnKeyEvent(UINT message, WPARAM wparam, } if (render_widget_host_ && !ignore_keyboard_event) { - render_widget_host_->ForwardKeyboardEvent( - NativeWebKeyboardEvent(m_hWnd, message, wparam, lparam)); + MSG msg = { m_hWnd, message, wparam, lparam }; + render_widget_host_->ForwardKeyboardEvent(NativeWebKeyboardEvent(msg)); } return 0; } diff --git a/content/content_browser.gypi b/content/content_browser.gypi index 5977a39..e6975eb 100644 --- a/content/content_browser.gypi +++ b/content/content_browser.gypi @@ -375,6 +375,7 @@ 'browser/renderer_host/pepper_message_filter.h', 'browser/renderer_host/quota_dispatcher_host.cc', 'browser/renderer_host/quota_dispatcher_host.h', + 'browser/renderer_host/native_web_keyboard_event_aura.cc', 'browser/renderer_host/native_web_keyboard_event_gtk.cc', 'browser/renderer_host/native_web_keyboard_event_mac.mm', 'browser/renderer_host/native_web_keyboard_event_win.cc', @@ -673,6 +674,7 @@ ['exclude', '^browser/accessibility/browser_accessibility_win.h'], ['exclude', '^browser/renderer_host/gtk_im_context_wrapper.cc'], ['exclude', '^browser/renderer_host/gtk_im_context_wrapper.h'], + ['exclude', '^browser/renderer_host/native_web_keyboard_event_win.cc'], ['exclude', '^browser/renderer_host/render_widget_host.h'], ['exclude', '^browser/renderer_host/render_widget_host_view_win.cc'], ['exclude', '^browser/renderer_host/render_widget_host_view_win.h'], diff --git a/content/public/browser/native_web_keyboard_event.h b/content/public/browser/native_web_keyboard_event.h index 6f5e5ac..35cc052 100644 --- a/content/public/browser/native_web_keyboard_event.h +++ b/content/public/browser/native_web_keyboard_event.h @@ -11,18 +11,7 @@ #include "build/build_config.h" #include "content/common/content_export.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" - -#if defined(OS_WIN) -#include <windows.h> -#elif defined(OS_MACOSX) -#ifdef __OBJC__ -@class NSEvent; -#else -class NSEvent; -#endif // __OBJC__ -#elif defined(OS_POSIX) -typedef struct _GdkEventKey GdkEventKey; -#endif +#include "ui/gfx/native_widget_types.h" // Owns a platform specific event; used to pass own and pass event through // platform independent code. @@ -30,19 +19,12 @@ struct CONTENT_EXPORT NativeWebKeyboardEvent : NON_EXPORTED_BASE(public WebKit::WebKeyboardEvent) { NativeWebKeyboardEvent(); -#if defined(OS_WIN) - NativeWebKeyboardEvent(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); -#elif defined(OS_MACOSX) - explicit NativeWebKeyboardEvent(NSEvent *event); - NativeWebKeyboardEvent(wchar_t character, - int state, - double time_stamp_seconds); -#elif defined(TOOLKIT_USES_GTK) + explicit NativeWebKeyboardEvent(gfx::NativeEvent native_event); +#if defined(OS_MACOSX) || defined(TOOLKIT_USES_GTK) // TODO(suzhe): Limit these constructors to Linux native Gtk port. // For Linux Views port, after using RenderWidgetHostViewViews to replace // RenderWidgetHostViewGtk, we can use constructors for TOOLKIT_VIEWS defined // below. - explicit NativeWebKeyboardEvent(const GdkEventKey* event); NativeWebKeyboardEvent(wchar_t character, int state, double time_stamp_seconds); @@ -53,13 +35,7 @@ struct CONTENT_EXPORT NativeWebKeyboardEvent : NativeWebKeyboardEvent& operator=(const NativeWebKeyboardEvent& event); -#if defined(OS_WIN) - MSG os_event; -#elif defined(OS_MACOSX) - NSEvent* os_event; -#elif defined(TOOLKIT_USES_GTK) - GdkEventKey* os_event; -#endif + gfx::NativeEvent os_event; // True if the browser should ignore this event if it's not handled by the // renderer. This happens for RawKeyDown events that are created while IME is diff --git a/content/test/render_view_test.cc b/content/test/render_view_test.cc index e47dcaf..5ac9ff1 100644 --- a/content/test/render_view_test.cc +++ b/content/test/render_view_test.cc @@ -179,13 +179,16 @@ int RenderViewTest::SendKeyEvent(MockKeyboard::Layout layout, // WM_KEYDOWN, WM_CHAR, and WM_KEYUP. // WM_KEYDOWN and WM_KEYUP sends virtual-key codes. On the other hand, // WM_CHAR sends a composed Unicode character. - NativeWebKeyboardEvent keydown_event(NULL, WM_KEYDOWN, key_code, 0); + MSG msg1 = { NULL, WM_KEYDOWN, key_code, 0 }; + NativeWebKeyboardEvent keydown_event(msg1); SendNativeKeyEvent(keydown_event); - NativeWebKeyboardEvent char_event(NULL, WM_CHAR, (*output)[0], 0); + MSG msg2 = { NULL, WM_CHAR, (*output)[0], 0 }; + NativeWebKeyboardEvent char_event(msg2); SendNativeKeyEvent(char_event); - NativeWebKeyboardEvent keyup_event(NULL, WM_KEYUP, key_code, 0); + MSG msg3 = { NULL, WM_KEYUP, key_code, 0 }; + NativeWebKeyboardEvent keyup_event(msg3); SendNativeKeyEvent(keyup_event); return length; @@ -206,7 +209,7 @@ int RenderViewTest::SendKeyEvent(MockKeyboard::Layout layout, // events for the modifier keys). if ((i + 1) == (events.size() / 2) || i == (events.size() / 2)) { unicode_key = gdk_keyval_to_unicode(events[i]->key.keyval); - NativeWebKeyboardEvent webkit_event(&events[i]->key); + NativeWebKeyboardEvent webkit_event(events[i]); SendNativeKeyEvent(webkit_event); // Need to add a char event after the key down. |