summaryrefslogtreecommitdiffstats
path: root/views/controls
diff options
context:
space:
mode:
authorben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-11 16:51:25 +0000
committerben@chromium.org <ben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-11 16:51:25 +0000
commit6545f1cdbbe569d404f916bef157f201028b63a0 (patch)
tree4d849f4aad386cc4cad08f94f314d78cfb7f55a5 /views/controls
parent5d451ad21fc1836a024cabecc1172c32fbe92b03 (diff)
downloadchromium_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.cc2
-rw-r--r--views/controls/textfield/native_textfield_gtk.cc4
-rw-r--r--views/controls/textfield/native_textfield_views_unittest.cc2
-rw-r--r--views/controls/textfield/native_textfield_win.cc42
-rw-r--r--views/controls/textfield/native_textfield_win.h4
-rw-r--r--views/controls/textfield/textfield.cc3
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;