From bc1407f95bae3d7472ee0c85ef83ee10610b3f1f Mon Sep 17 00:00:00 2001 From: "jcampan@chromium.org" Date: Tue, 29 Sep 2009 00:33:35 +0000 Subject: Relanding keyboard code refactoring: http://codereview.chromium.org/248010/show Changing the KeyboardEvent to use a KeyboardCode instead of a w_char. Led to several places where I had to switch from VK_ to VKEY_. Also cleaned-up the table view OnKeyDown method. Since TableView is a NativeControl it can use the NativeControl::OnKeyDown directly. BUG=None TEST=Make sure short-cuts works as expected, especially in the omnibox. Review URL: http://codereview.chromium.org/251020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27444 0039d316-1c4b-4281-b951-d872f2087c98 --- views/accelerator.h | 7 ++++--- views/controls/button/custom_button.cc | 6 +++--- views/controls/button/menu_button.cc | 3 ++- views/controls/button/native_button.cc | 10 +++------ views/controls/combobox/combobox.cc | 4 ++-- views/controls/link.cc | 8 +++++--- views/controls/menu/menu_win.cc | 3 ++- views/controls/menu/native_menu_gtk.cc | 3 ++- views/controls/menu/native_menu_win.cc | 3 ++- views/controls/native_control.cc | 5 +++-- views/controls/native_control.h | 3 ++- views/controls/scrollbar/bitmap_scroll_bar.cc | 19 +++++++++-------- views/controls/scrollbar/native_scroll_bar_win.cc | 19 +++++++++-------- views/controls/table/group_table_view.cc | 25 ++++++++++++----------- views/controls/table/group_table_view.h | 2 +- views/controls/table/table_view.cc | 12 ++--------- views/controls/table/table_view.h | 6 +++--- views/controls/table/table_view_observer.h | 2 +- views/controls/textfield/native_textfield_win.cc | 7 ++++--- views/controls/textfield/textfield.cc | 9 ++++---- views/controls/tree/tree_view.cc | 7 ++++--- views/controls/tree/tree_view.h | 3 ++- views/event.h | 12 +++++++---- views/event_gtk.cc | 2 +- views/event_win.cc | 7 ++++--- views/focus/accelerator_handler_win.cc | 4 +++- views/focus/focus_manager.cc | 6 +++--- views/view_unittest.cc | 6 +++--- views/widget/root_view.cc | 4 ++-- views/widget/widget_win.cc | 6 ++++-- 30 files changed, 113 insertions(+), 100 deletions(-) (limited to 'views') diff --git a/views/accelerator.h b/views/accelerator.h index bb8f91f..1848c98 100644 --- a/views/accelerator.h +++ b/views/accelerator.h @@ -13,13 +13,14 @@ #include +#include "base/keyboard_codes.h" #include "views/event.h" namespace views { class Accelerator { public: - Accelerator(int keycode, + Accelerator(base::KeyboardCode keycode, bool shift_pressed, bool ctrl_pressed, bool alt_pressed) : key_code_(keycode) { modifiers_ = 0; @@ -74,7 +75,7 @@ class Accelerator { return (modifiers_ & Event::EF_ALT_DOWN) == Event::EF_ALT_DOWN; } - int GetKeyCode() const { + base::KeyboardCode GetKeyCode() const { return key_code_; } @@ -83,7 +84,7 @@ class Accelerator { private: // The window keycode (VK_...). - int key_code_; + base::KeyboardCode key_code_; // The state of the Shift/Ctrl/Alt keys (see event.h). int modifiers_; diff --git a/views/controls/button/custom_button.cc b/views/controls/button/custom_button.cc index e507d93..348e527 100644 --- a/views/controls/button/custom_button.cc +++ b/views/controls/button/custom_button.cc @@ -175,10 +175,10 @@ bool CustomButton::OnKeyPressed(const KeyEvent& e) { // Space sets button state to pushed. Enter clicks the button. This matches // the Windows native behavior of buttons, where Space clicks the button // on KeyRelease and Enter clicks the button on KeyPressed. - if (e.GetCharacter() == base::VKEY_SPACE) { + if (e.GetKeyCode() == base::VKEY_SPACE) { SetState(BS_PUSHED); return true; - } else if (e.GetCharacter() == base::VKEY_RETURN) { + } else if (e.GetKeyCode() == base::VKEY_RETURN) { SetState(BS_NORMAL); NotifyClick(e); return true; @@ -189,7 +189,7 @@ bool CustomButton::OnKeyPressed(const KeyEvent& e) { bool CustomButton::OnKeyReleased(const KeyEvent& e) { if (state_ != BS_DISABLED) { - if (e.GetCharacter() == base::VKEY_SPACE) { + if (e.GetKeyCode() == base::VKEY_SPACE) { SetState(BS_NORMAL); NotifyClick(e); return true; diff --git a/views/controls/button/menu_button.cc b/views/controls/button/menu_button.cc index 25a415d..5b353f3 100644 --- a/views/controls/button/menu_button.cc +++ b/views/controls/button/menu_button.cc @@ -214,7 +214,8 @@ void MenuButton::OnMouseReleased(const MouseEvent& e, // When the space bar or the enter key is pressed we need to show the menu. bool MenuButton::OnKeyReleased(const KeyEvent& e) { #if defined(OS_WIN) - if ((e.GetCharacter() == VK_SPACE) || (e.GetCharacter() == VK_RETURN)) { + if ((e.GetKeyCode() == base::VKEY_SPACE) || + (e.GetKeyCode() == base::VKEY_RETURN)) { return Activate(); } #else diff --git a/views/controls/button/native_button.cc b/views/controls/button/native_button.cc index e36719c..811fb56 100644 --- a/views/controls/button/native_button.cc +++ b/views/controls/button/native_button.cc @@ -10,6 +10,7 @@ #endif #include "app/l10n_util.h" +#include "base/keyboard_codes.h" #include "base/logging.h" namespace views { @@ -73,17 +74,12 @@ void NativeButton::SetLabel(const std::wstring& label) { } void NativeButton::SetIsDefault(bool is_default) { -#if defined(OS_WIN) - int return_code = VK_RETURN; -#else - int return_code = GDK_Return; -#endif if (is_default == is_default_) return; if (is_default) - AddAccelerator(Accelerator(return_code, false, false, false)); + AddAccelerator(Accelerator(base::VKEY_RETURN, false, false, false)); else - RemoveAccelerator(Accelerator(return_code, false, false, false)); + RemoveAccelerator(Accelerator(base::VKEY_RETURN, false, false, false)); SetAppearsAsDefault(is_default); } diff --git a/views/controls/combobox/combobox.cc b/views/controls/combobox/combobox.cc index 5c5596f..e184dcb 100644 --- a/views/controls/combobox/combobox.cc +++ b/views/controls/combobox/combobox.cc @@ -69,10 +69,10 @@ void Combobox::SetEnabled(bool flag) { native_wrapper_->UpdateEnabled(); } -// VK_ESCAPE should be handled by this view when the drop down list is active. +// VKEY_ESCAPE should be handled by this view when the drop down list is active. // In other words, the list should be closed instead of the dialog. bool Combobox::SkipDefaultKeyEventProcessing(const KeyEvent& e) { - if (e.GetCharacter() != base::VKEY_ESCAPE || + if (e.GetKeyCode() != base::VKEY_ESCAPE || e.IsShiftDown() || e.IsControlDown() || e.IsAltDown()) { return false; } diff --git a/views/controls/link.cc b/views/controls/link.cc index f2887e0..6619568 100644 --- a/views/controls/link.cc +++ b/views/controls/link.cc @@ -10,6 +10,7 @@ #include "app/gfx/color_utils.h" #include "app/gfx/font.h" +#include "base/keyboard_codes.h" #include "base/logging.h" #include "views/event.h" @@ -123,8 +124,8 @@ void Link::OnMouseReleased(const MouseEvent& e, bool canceled) { bool Link::OnKeyPressed(const KeyEvent& e) { #if defined(OS_WIN) - bool activate = ((e.GetCharacter() == VK_SPACE) || - (e.GetCharacter() == VK_RETURN)); + bool activate = ((e.GetKeyCode() == base::VKEY_SPACE) || + (e.GetKeyCode() == base::VKEY_RETURN)); #else bool activate = false; NOTIMPLEMENTED(); @@ -146,7 +147,8 @@ bool Link::OnKeyPressed(const KeyEvent& e) { bool Link::SkipDefaultKeyEventProcessing(const KeyEvent& e) { #if defined(OS_WIN) // Make sure we don't process space or enter as accelerators. - return (e.GetCharacter() == VK_SPACE) || (e.GetCharacter() == VK_RETURN); + return (e.GetKeyCode() == base::VKEY_SPACE) || + (e.GetKeyCode() == base::VKEY_RETURN); #else NOTIMPLEMENTED(); return false; diff --git a/views/controls/menu/menu_win.cc b/views/controls/menu/menu_win.cc index 68cc8ff..852304f 100644 --- a/views/controls/menu/menu_win.cc +++ b/views/controls/menu/menu_win.cc @@ -11,6 +11,7 @@ #include "app/l10n_util.h" #include "app/l10n_util_win.h" #include "base/gfx/rect.h" +#include "base/keyboard_codes.h" #include "base/logging.h" #include "base/stl_util-inl.h" #include "base/string_util.h" @@ -441,7 +442,7 @@ void MenuWin::AddMenuItemInternal(int index, delegate()->GetLabel(item_id) : label); // Find out if there is a shortcut we need to append to the label. - views::Accelerator accelerator(0, false, false, false); + views::Accelerator accelerator(base::VKEY_UNKNOWN, false, false, false); if (delegate() && delegate()->GetAcceleratorInfo(item_id, &accelerator)) { actual_label += L'\t'; actual_label += accelerator.GetShortcutText(); diff --git a/views/controls/menu/native_menu_gtk.cc b/views/controls/menu/native_menu_gtk.cc index 55e10ae..7bcb7b9 100644 --- a/views/controls/menu/native_menu_gtk.cc +++ b/views/controls/menu/native_menu_gtk.cc @@ -7,6 +7,7 @@ #include #include "base/gfx/gtk_util.h" +#include "base/keyboard_codes.h" #include "base/string_util.h" #include "base/time.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -162,7 +163,7 @@ void NativeMenuGtk::AddMenuItemAt(int index, submenu->GetNativeMenu()); } - views::Accelerator accelerator(0, false, false, false); + views::Accelerator accelerator(base::VKEY_UNKNOWN, false, false, false); if (model_->GetAcceleratorAt(index, &accelerator)) { // TODO(beng): accelerators w/gtk_widget_add_accelerator. } diff --git a/views/controls/menu/native_menu_win.cc b/views/controls/menu/native_menu_win.cc index f078d71..0af8a9af 100644 --- a/views/controls/menu/native_menu_win.cc +++ b/views/controls/menu/native_menu_win.cc @@ -8,6 +8,7 @@ #include "app/gfx/font.h" #include "app/l10n_util.h" #include "app/l10n_util_win.h" +#include "base/keyboard_codes.h" #include "base/logging.h" #include "base/stl_util-inl.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -458,7 +459,7 @@ void NativeMenuWin::UpdateMenuItemInfoForString( Menu2Model::ItemType type = model_->GetTypeAt(model_index); if (type != Menu2Model::TYPE_SUBMENU) { // Add accelerator details to the label if provided. - views::Accelerator accelerator(0, false, false, false); + views::Accelerator accelerator(base::VKEY_UNKNOWN, false, false, false); if (model_->GetAcceleratorAt(model_index, &accelerator)) { formatted += L"\t"; formatted += accelerator.GetShortcutText(); diff --git a/views/controls/native_control.cc b/views/controls/native_control.cc index 0c89664..700da66 100644 --- a/views/controls/native_control.cc +++ b/views/controls/native_control.cc @@ -11,6 +11,7 @@ #include #include "app/l10n_util_win.h" +#include "base/keyboard_codes.h" #include "base/logging.h" #include "base/win_util.h" #include "views/background.h" @@ -363,8 +364,8 @@ LRESULT CALLBACK NativeControl::NativeControlWndProc(HWND window, UINT message, DCHECK(native_control); if (message == WM_KEYDOWN && - native_control->OnKeyDown(static_cast(w_param))) { - return 0; + native_control->OnKeyDown(win_util::WinToKeyboardCode(w_param))) { + return 0; } else if (message == WM_SETFOCUS) { // Let the focus manager know that the focus changed. FocusManager* focus_manager = native_control->GetFocusManager(); diff --git a/views/controls/native_control.h b/views/controls/native_control.h index 972ef36..ed565e6 100644 --- a/views/controls/native_control.h +++ b/views/controls/native_control.h @@ -7,6 +7,7 @@ #include +#include "base/keyboard_codes.h" #include "views/view.h" namespace views { @@ -79,7 +80,7 @@ class NativeControl : public View { // Invoked when a key is pressed on the control. // Should return true if the key message was processed, false otherwise. - virtual bool OnKeyDown(int virtual_key_code) { return false; } + virtual bool OnKeyDown(base::KeyboardCode virtual_key_code) { return false; } // Returns additional extended style flags. When subclasses call // CreateWindowEx in order to create the underlying control, they must OR the diff --git a/views/controls/scrollbar/bitmap_scroll_bar.cc b/views/controls/scrollbar/bitmap_scroll_bar.cc index b04e0b0..98a95ff 100644 --- a/views/controls/scrollbar/bitmap_scroll_bar.cc +++ b/views/controls/scrollbar/bitmap_scroll_bar.cc @@ -11,6 +11,7 @@ #include "app/gfx/canvas.h" #include "app/l10n_util.h" #include "base/compiler_specific.h" +#include "base/keyboard_codes.h" #include "base/message_loop.h" #include "grit/app_strings.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -494,33 +495,33 @@ bool BitmapScrollBar::OnMouseWheel(const MouseWheelEvent& event) { bool BitmapScrollBar::OnKeyPressed(const KeyEvent& event) { ScrollAmount amount = SCROLL_NONE; - switch (event.GetCharacter()) { - case VK_UP: + switch (event.GetKeyCode()) { + case base::VKEY_UP: if (!IsHorizontal()) amount = SCROLL_PREV_LINE; break; - case VK_DOWN: + case base::VKEY_DOWN: if (!IsHorizontal()) amount = SCROLL_NEXT_LINE; break; - case VK_LEFT: + case base::VKEY_LEFT: if (IsHorizontal()) amount = SCROLL_PREV_LINE; break; - case VK_RIGHT: + case base::VKEY_RIGHT: if (IsHorizontal()) amount = SCROLL_NEXT_LINE; break; - case VK_PRIOR: + case base::VKEY_PRIOR: amount = SCROLL_PREV_PAGE; break; - case VK_NEXT: + case base::VKEY_NEXT: amount = SCROLL_NEXT_PAGE; break; - case VK_HOME: + case base::VKEY_HOME: amount = SCROLL_START; break; - case VK_END: + case base::VKEY_END: amount = SCROLL_END; break; } diff --git a/views/controls/scrollbar/native_scroll_bar_win.cc b/views/controls/scrollbar/native_scroll_bar_win.cc index b15be33..00b3b8c 100644 --- a/views/controls/scrollbar/native_scroll_bar_win.cc +++ b/views/controls/scrollbar/native_scroll_bar_win.cc @@ -7,6 +7,7 @@ #include #include +#include "base/keyboard_codes.h" #include "base/message_loop.h" #include "base/window_impl.h" #include "views/controls/scrollbar/native_scroll_bar.h" @@ -229,32 +230,32 @@ bool NativeScrollBarWin::OnKeyPressed(const KeyEvent& event) { if (!sb_container_) return false; int code = -1; - switch (event.GetCharacter()) { - case VK_UP: + switch (event.GetKeyCode()) { + case base::VKEY_UP: if (!native_scroll_bar_->IsHorizontal()) code = SB_LINEUP; break; - case VK_PRIOR: + case base::VKEY_PRIOR: code = SB_PAGEUP; break; - case VK_NEXT: + case base::VKEY_NEXT: code = SB_PAGEDOWN; break; - case VK_DOWN: + case base::VKEY_DOWN: if (!native_scroll_bar_->IsHorizontal()) code = SB_LINEDOWN; break; - case VK_HOME: + case base::VKEY_HOME: code = SB_TOP; break; - case VK_END: + case base::VKEY_END: code = SB_BOTTOM; break; - case VK_LEFT: + case base::VKEY_LEFT: if (native_scroll_bar_->IsHorizontal()) code = SB_LINELEFT; break; - case VK_RIGHT: + case base::VKEY_RIGHT: if (native_scroll_bar_->IsHorizontal()) code = SB_LINERIGHT; break; diff --git a/views/controls/table/group_table_view.cc b/views/controls/table/group_table_view.cc index 5f26756..a70515d 100644 --- a/views/controls/table/group_table_view.cc +++ b/views/controls/table/group_table_view.cc @@ -61,7 +61,7 @@ void GroupTableView::SyncSelection() { } } -void GroupTableView::OnKeyDown(unsigned short virtual_keycode) { +bool GroupTableView::OnKeyDown(base::KeyboardCode virtual_keycode) { // In a list view, multiple items can be selected but only one item has the // focus. This creates a problem when the arrow keys are used for navigating // between items in the list view. An example will make this more clear: @@ -87,9 +87,9 @@ void GroupTableView::OnKeyDown(unsigned short virtual_keycode) { // detect that one of the arrow keys is pressed. Thus, when it comes time // for the list view control to actually switch the focus, the right item // will be selected. - if ((virtual_keycode != VK_UP) && (virtual_keycode != VK_DOWN)) { - TableView::OnKeyDown(virtual_keycode); - return; + if ((virtual_keycode != base::VKEY_UP) && + (virtual_keycode != base::VKEY_DOWN)) { + return TableView::OnKeyDown(virtual_keycode); } // We start by finding the index of the item with the focus. If no item @@ -102,27 +102,28 @@ void GroupTableView::OnKeyDown(unsigned short virtual_keycode) { } } - if (focused_index == row_count) { - return; - } + if (focused_index == row_count) + return false; + DCHECK_LT(focused_index, row_count); // Nothing to do if the item which has the focus is not part of a group. GroupRange group_range; model_->GetGroupRangeForItem(focused_index, &group_range); - if (group_range.length == 1) { - return; - } + if (group_range.length == 1) + return false; // If the user pressed the UP key, then the focus should be set to the // topmost element in the group. If the user pressed the DOWN key, the focus // should be set to the bottommost element. - if (virtual_keycode == VK_UP) { + if (virtual_keycode == base::VKEY_UP) { SetFocusOnItem(group_range.start); } else { - DCHECK_EQ(virtual_keycode, VK_DOWN); + DCHECK_EQ(virtual_keycode, base::VKEY_DOWN); SetFocusOnItem(group_range.start + group_range.length - 1); } + + return false; } void GroupTableView::PrepareForSort() { diff --git a/views/controls/table/group_table_view.h b/views/controls/table/group_table_view.h index 640776e..b137083 100644 --- a/views/controls/table/group_table_view.h +++ b/views/controls/table/group_table_view.h @@ -55,7 +55,7 @@ class GroupTableView : public TableView { // keys), we must take action when an arrow key is pressed. The reason we // need to process this message has to do with the manner in which the focus // needs to be set on a group item when a group is selected. - virtual void OnKeyDown(unsigned short virtual_keycode); + virtual bool OnKeyDown(base::KeyboardCode virtual_keycode); // Overriden to make sure rows in the same group stay grouped together. virtual int CompareRows(int model_row1, int model_row2); diff --git a/views/controls/table/table_view.cc b/views/controls/table/table_view.cc index 303d458..114019f 100644 --- a/views/controls/table/table_view.cc +++ b/views/controls/table/table_view.cc @@ -1057,15 +1057,6 @@ LRESULT TableView::OnNotify(int w_param, LPNMHDR hdr) { OnDoubleClick(); break; - // If we see a key down message, we need to invoke the OnKeyDown handler - // in order to give our class (or any subclass) and opportunity to perform - // a key down triggered action, if such action is necessary. - case LVN_KEYDOWN: { - NMLVKEYDOWN* key_down_message = reinterpret_cast(hdr); - OnKeyDown(key_down_message->wVKey); - break; - } - case LVN_COLUMNCLICK: { const TableColumn& column = GetColumnAtPosition( reinterpret_cast(hdr)->iSubItem); @@ -1459,10 +1450,11 @@ void TableView::OnSelectedStateChanged() { } } -void TableView::OnKeyDown(unsigned short virtual_keycode) { +bool TableView::OnKeyDown(base::KeyboardCode virtual_keycode) { if (!ignore_listview_change_ && table_view_observer_) { table_view_observer_->OnKeyDown(virtual_keycode); } + return false; // Let the key event be processed as ususal. } void TableView::OnCheckedStateChanged(int model_row, bool is_checked) { diff --git a/views/controls/table/table_view.h b/views/controls/table/table_view.h index b8bda67..a1cce45d 100644 --- a/views/controls/table/table_view.h +++ b/views/controls/table/table_view.h @@ -16,6 +16,7 @@ typedef struct tagNMLVCUSTOMDRAW NMLVCUSTOMDRAW; #include #include "app/table_model_observer.h" +#include "base/keyboard_codes.h" #include "third_party/skia/include/core/SkColor.h" #if defined(OS_WIN) // TODO(port): remove the ifdef when native_control.h is ported. @@ -250,9 +251,8 @@ class TableView : public NativeControl, // Notification from the ListView that the user middle clicked the table. virtual void OnMiddleClick(); - // Subclasses can implement this method if they need to be notified of a key - // press event. Other wise, it appeals to table_view_observer_ - virtual void OnKeyDown(unsigned short virtual_keycode); + // Overridden from NativeControl. Notifies the observer. + virtual bool OnKeyDown(base::KeyboardCode virtual_keycode); // Invoked to customize the colors or font at a particular cell. If you // change the colors or font, return true. This is only invoked if diff --git a/views/controls/table/table_view_observer.h b/views/controls/table/table_view_observer.h index c88cb21..6b8bef2 100644 --- a/views/controls/table/table_view_observer.h +++ b/views/controls/table/table_view_observer.h @@ -24,7 +24,7 @@ class TableViewObserver { virtual void OnMiddleClick() {} // Optional method invoked when the user hits a key with the table in focus. - virtual void OnKeyDown(unsigned short virtual_keycode) {} + virtual void OnKeyDown(base::KeyboardCode virtual_keycode) {} // Invoked when the user presses the delete key. virtual void OnTableViewDelete(TableView* table_view) {} diff --git a/views/controls/textfield/native_textfield_win.cc b/views/controls/textfield/native_textfield_win.cc index 1872492..d027156 100644 --- a/views/controls/textfield/native_textfield_win.cc +++ b/views/controls/textfield/native_textfield_win.cc @@ -9,6 +9,7 @@ #include "app/win_util.h" #include "base/clipboard.h" #include "base/gfx/native_theme.h" +#include "base/keyboard_codes.h" #include "base/scoped_clipboard_writer.h" #include "base/string_util.h" #include "base/win_util.h" @@ -252,13 +253,13 @@ bool NativeTextfieldWin::GetAcceleratorForCommandId(int command_id, // anywhere so we need to check for them explicitly here. switch (command_id) { case IDS_APP_CUT: - *accelerator = views::Accelerator(L'X', false, true, false); + *accelerator = views::Accelerator(base::VKEY_X, false, true, false); return true; case IDS_APP_COPY: - *accelerator = views::Accelerator(L'C', false, true, false); + *accelerator = views::Accelerator(base::VKEY_C, false, true, false); return true; case IDS_APP_PASTE: - *accelerator = views::Accelerator(L'V', false, true, false); + *accelerator = views::Accelerator(base::VKEY_V, false, true, false); return true; } return container_view_->GetWidget()->GetAccelerator(command_id, accelerator); diff --git a/views/controls/textfield/textfield.cc b/views/controls/textfield/textfield.cc index 368e7fd..bf12e42 100644 --- a/views/controls/textfield/textfield.cc +++ b/views/controls/textfield/textfield.cc @@ -14,6 +14,7 @@ #include "base/win_util.h" #endif +#include "base/keyboard_codes.h" #include "base/string_util.h" #include "views/controls/textfield/native_textfield_wrapper.h" #include "views/widget/widget.h" @@ -221,14 +222,14 @@ bool Textfield::SkipDefaultKeyEventProcessing(const KeyEvent& e) { #if defined(OS_WIN) // TODO(hamaji): Figure out which keyboard combinations we need to add here, // similar to LocationBarView::SkipDefaultKeyEventProcessing. - const int c = e.GetCharacter(); - if (c == VK_BACK) + base::KeyboardCode key = e.GetKeyCode(); + if (key == base::VKEY_BACK) return true; // We'll handle BackSpace ourselves. // We don't translate accelerators for ALT + NumPad digit, they are used for // entering special characters. We do translate alt-home. - if (e.IsAltDown() && (c != VK_HOME) && - win_util::IsNumPadDigit(c, e.IsExtendedKey())) + if (e.IsAltDown() && (key != base::VKEY_HOME) && + win_util::IsNumPadDigit(key, e.IsExtendedKey())) return true; #endif return false; diff --git a/views/controls/tree/tree_view.cc b/views/controls/tree/tree_view.cc index 196e773..c84ef8b 100644 --- a/views/controls/tree/tree_view.cc +++ b/views/controls/tree/tree_view.cc @@ -12,6 +12,7 @@ #include "app/l10n_util_win.h" #include "app/resource_bundle.h" #include "base/gfx/point.h" +#include "base/keyboard_codes.h" #include "base/stl_util-inl.h" #include "base/win_util.h" #include "grit/app_resources.h" @@ -459,7 +460,7 @@ LRESULT TreeView::OnNotify(int w_param, LPNMHDR l_param) { return 0; } -bool TreeView::OnKeyDown(int virtual_key_code) { +bool TreeView::OnKeyDown(base::KeyboardCode virtual_key_code) { if (virtual_key_code == VK_F2) { if (!GetEditingNode()) { TreeModelNode* selected_node = GetSelectedNode(); @@ -467,10 +468,10 @@ bool TreeView::OnKeyDown(int virtual_key_code) { StartEditing(selected_node); } return true; - } else if (virtual_key_code == VK_RETURN && !process_enter_) { + } else if (virtual_key_code == base::VKEY_RETURN && !process_enter_) { Widget* widget = GetWidget(); DCHECK(widget); - Accelerator accelerator(Accelerator(static_cast(virtual_key_code), + Accelerator accelerator(Accelerator(virtual_key_code, win_util::IsShiftPressed(), win_util::IsCtrlPressed(), win_util::IsAltPressed())); diff --git a/views/controls/tree/tree_view.h b/views/controls/tree/tree_view.h index 72667bf..0011835 100644 --- a/views/controls/tree/tree_view.h +++ b/views/controls/tree/tree_view.h @@ -12,6 +12,7 @@ #include "app/tree_model.h" #include "base/basictypes.h" +#include "base/keyboard_codes.h" #include "base/logging.h" #include "views/controls/native_control.h" @@ -159,7 +160,7 @@ class TreeView : public NativeControl, TreeModelObserver { // We pay attention to key down for two reasons: to circumvent VK_ENTER from // toggling the expaned state when processes_enter_ is false, and to have F2 // start editting. - virtual bool OnKeyDown(int virtual_key_code); + virtual bool OnKeyDown(base::KeyboardCode virtual_key_code); virtual void OnContextMenu(const POINT& location); diff --git a/views/event.h b/views/event.h index 5a6efd9..138327d 100644 --- a/views/event.h +++ b/views/event.h @@ -7,6 +7,7 @@ #include "base/basictypes.h" #include "base/gfx/point.h" +#include "base/keyboard_codes.h" #if defined(OS_LINUX) typedef struct _GdkEventKey GdkEventKey; @@ -242,7 +243,10 @@ class KeyEvent : public Event { public: #if defined(OS_WIN) // Create a new key event - KeyEvent(EventType type, int ch, int repeat_count, int message_flags); + KeyEvent(EventType type, + base::KeyboardCode key_code, + int repeat_count, + int message_flags); #elif defined(OS_LINUX) explicit KeyEvent(GdkEventKey* event); #endif @@ -251,8 +255,8 @@ class KeyEvent : public Event { // the Windows value. // On GTK, you can use the methods in keyboard_code_conversion_gtk.cc to // convert this value back to a GDK value if needed. - int GetCharacter() const { - return character_; + base::KeyboardCode GetKeyCode() const { + return key_code_; } #if defined(OS_WIN) @@ -268,7 +272,7 @@ class KeyEvent : public Event { int GetKeyStateFlags() const; #endif - int character_; + base::KeyboardCode key_code_; int repeat_count_; int message_flags_; diff --git a/views/event_gtk.cc b/views/event_gtk.cc index 71fd056..c5970b7 100644 --- a/views/event_gtk.cc +++ b/views/event_gtk.cc @@ -18,7 +18,7 @@ KeyEvent::KeyEvent(GdkEventKey* event) Event::ET_KEY_PRESSED : Event::ET_KEY_RELEASED, GetFlagsFromGdkState(event->state)), // TODO(erg): All these values are iffy. - character_(base::WindowsKeyCodeForGdkKeyCode(event->keyval)), + key_code_(base::WindowsKeyCodeForGdkKeyCode(event->keyval)), repeat_count_(0), message_flags_(0) { } diff --git a/views/event_win.cc b/views/event_win.cc index 28d1330..da6457e 100644 --- a/views/event_win.cc +++ b/views/event_win.cc @@ -37,12 +37,13 @@ int Event::ConvertWindowsFlags(UINT win_flags) { return r; } -KeyEvent::KeyEvent(EventType type, int ch, int repeat_count, int message_flags) +KeyEvent::KeyEvent(EventType type, base::KeyboardCode key_code, + int repeat_count, int message_flags) : Event(type, GetKeyStateFlags()), - character_(ch), + key_code_(key_code), repeat_count_(repeat_count), message_flags_(message_flags) { - } +} int KeyEvent::GetKeyStateFlags() const { // Windows Keyboard messages don't come with control key state as parameters diff --git a/views/focus/accelerator_handler_win.cc b/views/focus/accelerator_handler_win.cc index eb8bfb9..8363928 100644 --- a/views/focus/accelerator_handler_win.cc +++ b/views/focus/accelerator_handler_win.cc @@ -4,6 +4,8 @@ #include "views/focus/accelerator_handler.h" +#include "base/keyboard_codes.h" +#include "base/win_util.h" #include "views/event.h" #include "views/focus/focus_manager.h" @@ -23,7 +25,7 @@ bool AcceleratorHandler::Dispatch(const MSG& msg) { case WM_KEYDOWN: case WM_SYSKEYDOWN: { KeyEvent event(Event::ET_KEY_PRESSED, - msg.wParam, + win_util::WinToKeyboardCode(msg.wParam), msg.lParam & 0xFFFF, (msg.lParam & 0xFFFF0000) >> 16); process_message = focus_manager->OnKeyEvent(event); diff --git a/views/focus/focus_manager.cc b/views/focus/focus_manager.cc index dffb392..aca418b 100644 --- a/views/focus/focus_manager.cc +++ b/views/focus/focus_manager.cc @@ -63,7 +63,7 @@ bool FocusManager::OnKeyEvent(const KeyEvent& event) { #endif // Intercept arrow key messages to switch between grouped views. - int key_code = event.GetCharacter(); + base::KeyboardCode key_code = event.GetKeyCode(); if (focused_view_ && focused_view_->GetGroup() != -1 && (key_code == base::VKEY_UP || key_code == base::VKEY_DOWN || key_code == base::VKEY_LEFT || key_code == base::VKEY_RIGHT)) { @@ -89,7 +89,7 @@ bool FocusManager::OnKeyEvent(const KeyEvent& event) { // Process keyboard accelerators. // If the key combination matches an accelerator, the accelerator is // triggered, otherwise the key event is proceed as usual. - Accelerator accelerator(event.GetCharacter(), + Accelerator accelerator(event.GetKeyCode(), event.IsShiftDown(), event.IsControlDown(), event.IsAltDown()); @@ -405,7 +405,7 @@ AcceleratorTarget* FocusManager::GetCurrentTargetForAccelerator( // static bool FocusManager::IsTabTraversalKeyEvent(const KeyEvent& key_event) { - return key_event.GetCharacter() == base::VKEY_TAB && + return key_event.GetKeyCode() == base::VKEY_TAB && !key_event.IsControlDown(); } diff --git a/views/view_unittest.cc b/views/view_unittest.cc index bad592b..b15b101 100644 --- a/views/view_unittest.cc +++ b/views/view_unittest.cc @@ -817,7 +817,7 @@ bool TestView::AcceleratorPressed(const Accelerator& accelerator) { #if defined(OS_WIN) TEST_F(ViewTest, ActivateAccelerator) { // Register a keyboard accelerator before the view is added to a window. - views::Accelerator return_accelerator(VK_RETURN, false, false, false); + views::Accelerator return_accelerator(base::VKEY_RETURN, false, false, false); TestView* view = new TestView(); view->Reset(); view->AddAccelerator(return_accelerator); @@ -841,7 +841,7 @@ TEST_F(ViewTest, ActivateAccelerator) { EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 1); // Hit the escape key. Nothing should happen. - views::Accelerator escape_accelerator(VK_ESCAPE, false, false, false); + views::Accelerator escape_accelerator(base::VKEY_ESCAPE, false, false, false); EXPECT_FALSE(focus_manager->ProcessAccelerator(escape_accelerator)); EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 1); EXPECT_EQ(view->accelerator_count_map_[escape_accelerator], 0); @@ -1097,7 +1097,7 @@ class DefaultButtonTest : public ViewTest { void SimularePressingEnterAndCheckDefaultButton(ButtonID button_id) { #if defined(OS_WIN) - KeyEvent event(Event::ET_KEY_PRESSED, VK_RETURN, 0, 0); + KeyEvent event(Event::ET_KEY_PRESSED, base::VKEY_RETURN, 0, 0); focus_manager_->OnKeyEvent(event); #else // TODO(platform) diff --git a/views/widget/root_view.cc b/views/widget/root_view.cc index 8baca07..09c1909 100644 --- a/views/widget/root_view.cc +++ b/views/widget/root_view.cc @@ -782,8 +782,8 @@ bool RootView::ProcessKeyEvent(const KeyEvent& event) { View* v = GetFocusedView(); // Special case to handle right-click context menus triggered by the // keyboard. - if (v && v->IsEnabled() && ((event.GetCharacter() == base::VKEY_APPS) || - (event.GetCharacter() == base::VKEY_F10 && event.IsShiftDown()))) { + if (v && v->IsEnabled() && ((event.GetKeyCode() == base::VKEY_APPS) || + (event.GetKeyCode() == base::VKEY_F10 && event.IsShiftDown()))) { gfx::Point screen_loc = v->GetKeyboardContextMenuLocation(); v->ShowContextMenu(screen_loc.x(), screen_loc.y(), false); return true; diff --git a/views/widget/widget_win.cc b/views/widget/widget_win.cc index d975ef9..3017e05 100644 --- a/views/widget/widget_win.cc +++ b/views/widget/widget_win.cc @@ -571,12 +571,14 @@ void WidgetWin::OnInitMenuPopup(HMENU menu, } void WidgetWin::OnKeyDown(TCHAR c, UINT rep_cnt, UINT flags) { - KeyEvent event(Event::ET_KEY_PRESSED, c, rep_cnt, flags); + KeyEvent event(Event::ET_KEY_PRESSED, + win_util::WinToKeyboardCode(c), rep_cnt, flags); SetMsgHandled(root_view_->ProcessKeyEvent(event)); } void WidgetWin::OnKeyUp(TCHAR c, UINT rep_cnt, UINT flags) { - KeyEvent event(Event::ET_KEY_RELEASED, c, rep_cnt, flags); + KeyEvent event(Event::ET_KEY_RELEASED, + win_util::WinToKeyboardCode(c), rep_cnt, flags); SetMsgHandled(root_view_->ProcessKeyEvent(event)); } -- cgit v1.1