diff options
author | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-11 16:51:25 +0000 |
---|---|---|
committer | ben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-02-11 16:51:25 +0000 |
commit | 6545f1cdbbe569d404f916bef157f201028b63a0 (patch) | |
tree | 4d849f4aad386cc4cad08f94f314d78cfb7f55a5 /views/controls | |
parent | 5d451ad21fc1836a024cabecc1172c32fbe92b03 (diff) | |
download | chromium_src-6545f1cdbbe569d404f916bef157f201028b63a0.zip chromium_src-6545f1cdbbe569d404f916bef157f201028b63a0.tar.gz chromium_src-6545f1cdbbe569d404f916bef157f201028b63a0.tar.bz2 |
Adds the ability to construct a KeyEvent from a NativeEvent[2], and converts some code to use it.
Removes some of the Windows-specific stuff from KeyEvent.
BUG=72040
TEST=none
Review URL: http://codereview.chromium.org/6487002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@74614 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'views/controls')
-rw-r--r-- | views/controls/button/custom_button.cc | 2 | ||||
-rw-r--r-- | views/controls/textfield/native_textfield_gtk.cc | 4 | ||||
-rw-r--r-- | views/controls/textfield/native_textfield_views_unittest.cc | 2 | ||||
-rw-r--r-- | views/controls/textfield/native_textfield_win.cc | 42 | ||||
-rw-r--r-- | views/controls/textfield/native_textfield_win.h | 4 | ||||
-rw-r--r-- | views/controls/textfield/textfield.cc | 3 |
6 files changed, 18 insertions, 39 deletions
diff --git a/views/controls/button/custom_button.cc b/views/controls/button/custom_button.cc index cf2f752..08a7e22 100644 --- a/views/controls/button/custom_button.cc +++ b/views/controls/button/custom_button.cc @@ -137,7 +137,7 @@ bool CustomButton::AcceleratorPressed(const Accelerator& accelerator) { SetState(BS_NORMAL); KeyEvent key_event(ui::ET_KEY_RELEASED, accelerator.GetKeyCode(), - accelerator.modifiers(), 0, 0); + accelerator.modifiers()); NotifyClick(key_event); return true; } diff --git a/views/controls/textfield/native_textfield_gtk.cc b/views/controls/textfield/native_textfield_gtk.cc index 0b7cba1..cbe7a2c 100644 --- a/views/controls/textfield/native_textfield_gtk.cc +++ b/views/controls/textfield/native_textfield_gtk.cc @@ -384,7 +384,7 @@ gboolean NativeTextfieldGtk::OnKeyPressEventHandler( gboolean NativeTextfieldGtk::OnKeyPressEvent(GdkEventKey* event) { Textfield::Controller* controller = textfield_->GetController(); if (controller) { - KeyEvent key_event(event); + KeyEvent key_event(reinterpret_cast<GdkEvent*>(event)); return controller->HandleKeyEvent(textfield_, key_event); } return false; @@ -407,7 +407,7 @@ gboolean NativeTextfieldGtk::OnActivate() { Textfield::Controller* controller = textfield_->GetController(); if (controller) { - KeyEvent views_key_event(key_event); + KeyEvent views_key_event(event); handled = controller->HandleKeyEvent(textfield_, views_key_event); } diff --git a/views/controls/textfield/native_textfield_views_unittest.cc b/views/controls/textfield/native_textfield_views_unittest.cc index 3c35e59..d8e8d1f 100644 --- a/views/controls/textfield/native_textfield_views_unittest.cc +++ b/views/controls/textfield/native_textfield_views_unittest.cc @@ -116,7 +116,7 @@ class NativeTextfieldViewsTest : public ViewsTestBase, int flags = (shift ? ui::EF_SHIFT_DOWN : 0) | (control ? ui::EF_CONTROL_DOWN : 0) | (capslock ? ui::EF_CAPS_LOCK_DOWN : 0); - KeyEvent event(ui::ET_KEY_PRESSED, key_code, flags, 1, 0); + KeyEvent event(ui::ET_KEY_PRESSED, key_code, flags); return textfield_->OnKeyPressed(event); } diff --git a/views/controls/textfield/native_textfield_win.cc b/views/controls/textfield/native_textfield_win.cc index c229eb90..5ceb2a4d 100644 --- a/views/controls/textfield/native_textfield_win.cc +++ b/views/controls/textfield/native_textfield_win.cc @@ -488,7 +488,7 @@ void NativeTextfieldWin::UpdateAccessibleValue(const std::wstring& value) { // NativeTextfieldWin, private: void NativeTextfieldWin::OnChar(TCHAR ch, UINT repeat_count, UINT flags) { - HandleKeystroke(GetCurrentMessage()->message, ch, repeat_count, flags); + HandleKeystroke(); } void NativeTextfieldWin::OnContextMenu(HWND window, const POINT& point) { @@ -687,7 +687,7 @@ void NativeTextfieldWin::OnKeyDown(TCHAR key, UINT repeat_count, UINT flags) { // CRichEditCtrl changes its text on WM_KEYDOWN instead of WM_CHAR for many // different keys (backspace, ctrl-v, ...), so we call this in both cases. - HandleKeystroke(GetCurrentMessage()->message, key, repeat_count, flags); + HandleKeystroke(); } void NativeTextfieldWin::OnLButtonDblClk(UINT keys, const CPoint& point) { @@ -931,45 +931,21 @@ void NativeTextfieldWin::OnSysChar(TCHAR ch, UINT repeat_count, UINT flags) { SetMsgHandled(false); } -void NativeTextfieldWin::HandleKeystroke(UINT message, - TCHAR key, - UINT repeat_count, - UINT flags) { +void NativeTextfieldWin::HandleKeystroke() { + const MSG* msg = GetCurrentMessage(); ScopedFreeze freeze(this, GetTextObjectModel()); Textfield::Controller* controller = textfield_->GetController(); bool handled = false; if (controller) { - ui::EventType type; - switch (message) { - case WM_KEYDOWN: - case WM_SYSKEYDOWN: - case WM_CHAR: - case WM_SYSCHAR: - type = ui::ET_KEY_PRESSED; - break; - case WM_KEYUP: - case WM_SYSKEYUP: - type = ui::ET_KEY_RELEASED; - break; - default: - NOTREACHED() << "Unknown message:" << message; - // Passing through to avoid crash on release build. - type = ui::ET_KEY_PRESSED; - } - KeyEvent key_event(type, - ui::KeyboardCodeForWindowsKeyCode(key), - KeyEvent::GetKeyStateFlags(), - repeat_count, - flags, - message); - handled = controller->HandleKeyEvent(textfield_, key_event); + KeyEvent event(*msg); + handled = controller->HandleKeyEvent(textfield_, event); } if (!handled) { OnBeforePossibleChange(); - if (key == ui::VKEY_HOME || key == ui::VKEY_END) { + if (msg->wParam == ui::VKEY_HOME || msg->wParam == ui::VKEY_END) { // DefWindowProc() might reset the keyboard layout when it receives a // keydown event for VKEY_HOME or VKEY_END. When the window was created // with WS_EX_LAYOUTRTL and the current keyboard layout is not a RTL one, @@ -984,10 +960,10 @@ void NativeTextfieldWin::HandleKeystroke(UINT message, // change behavior is surprising and inconsistent with keyboard behavior // elsewhere, so reset the layout in this case. HKL layout = GetKeyboardLayout(0); - DefWindowProc(message, key, MAKELPARAM(repeat_count, flags)); + DefWindowProc(msg->message, msg->wParam, msg->lParam); ActivateKeyboardLayout(layout, KLF_REORDER); } else { - DefWindowProc(message, key, MAKELPARAM(repeat_count, flags)); + DefWindowProc(msg->message, msg->wParam, msg->lParam); } // CRichEditCtrl automatically turns on IMF_AUTOKEYBOARD when the user diff --git a/views/controls/textfield/native_textfield_win.h b/views/controls/textfield/native_textfield_win.h index 3ac0276..d5a354e 100644 --- a/views/controls/textfield/native_textfield_win.h +++ b/views/controls/textfield/native_textfield_win.h @@ -187,7 +187,9 @@ class NativeTextfieldWin // Helper function for OnChar() and OnKeyDown() that handles keystrokes that // could change the text in the edit. - void HandleKeystroke(UINT message, TCHAR key, UINT repeat_count, UINT flags); + // Note: This function assumes GetCurrentMessage() returns a MSG with + // msg > WM_KEYFIRST and < WM_KEYLAST. + void HandleKeystroke(); // Every piece of code that can change the edit should call these functions // before and after the change. These functions determine if anything diff --git a/views/controls/textfield/textfield.cc b/views/controls/textfield/textfield.cc index 9028f88..e46d0f0 100644 --- a/views/controls/textfield/textfield.cc +++ b/views/controls/textfield/textfield.cc @@ -26,6 +26,7 @@ // ViewHierarchyChanged is removed. #include "views/controls/textfield/native_textfield_win.h" #include "views/controls/textfield/native_textfield_views.h" +#include "views/events/event_utils_win.h" #endif namespace views { @@ -317,7 +318,7 @@ bool Textfield::SkipDefaultKeyEventProcessing(const KeyEvent& e) { // We don't translate accelerators for ALT + NumPad digit on Windows, they are // used for entering special characters. We do translate alt-home. if (e.IsAltDown() && (key != ui::VKEY_HOME) && - NativeTextfieldWin::IsNumPadDigit(key, e.IsExtendedKey())) + NativeTextfieldWin::IsNumPadDigit(key, IsExtendedKey(e))) return true; #endif return false; |