diff options
author | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-18 01:27:33 +0000 |
---|---|---|
committer | tfarina@chromium.org <tfarina@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-18 01:27:33 +0000 |
commit | 07d294fbdd4efb893929386dadbec71b7ca7429a (patch) | |
tree | d1af46a7c8966f116ca292d10f636fe0518f6cb0 | |
parent | d79c13b4be9fe89b1f81bdde8ed0257b2ca6e4e0 (diff) | |
download | chromium_src-07d294fbdd4efb893929386dadbec71b7ca7429a.zip chromium_src-07d294fbdd4efb893929386dadbec71b7ca7429a.tar.gz chromium_src-07d294fbdd4efb893929386dadbec71b7ca7429a.tar.bz2 |
Pass event bitmask (shift, control, alt) to ui::Accelerator instead of booleans.
BUG=128242
R=ben@chromium.org
TBR=jam@chromium.org
Review URL: https://chromiumcodereview.appspot.com/10399044
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@137792 0039d316-1c4b-4281-b951-d872f2087c98
42 files changed, 233 insertions, 172 deletions
diff --git a/ash/focus_cycler.cc b/ash/focus_cycler.cc index aa9cf64..f0854c0 100644 --- a/ash/focus_cycler.cc +++ b/ash/focus_cycler.cc @@ -27,11 +27,11 @@ void FocusCycler::AddWidget(views::Widget* widget) { widgets_.push_back(widget); widget->GetFocusManager()->RegisterAccelerator( - ui::Accelerator(ui::VKEY_F2, false, true, false), + ui::Accelerator(ui::VKEY_F2, ui::EF_CONTROL_DOWN), ui::AcceleratorManager::kNormalPriority, this); widget->GetFocusManager()->RegisterAccelerator( - ui::Accelerator(ui::VKEY_F1, false, true, false), + ui::Accelerator(ui::VKEY_F1, ui::EF_CONTROL_DOWN), ui::AcceleratorManager::kNormalPriority, this); } diff --git a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc index 533c81d..b351619 100644 --- a/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc +++ b/chrome/browser/chromeos/input_method/input_method_manager_impl_unittest.cc @@ -640,24 +640,24 @@ TEST_F(InputMethodManagerImplTest, TestSwitchInputMethodWithUsLayouts) { // Henkan, Muhenkan, ZenkakuHankaku should be ignored when no Japanese IMEs // and keyboards are enabled. EXPECT_FALSE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_CONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_CONVERT, ui::EF_NONE))); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_FALSE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_NONCONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_NONCONVERT, ui::EF_NONE))); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_FALSE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE))); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_FALSE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE))); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); // Do the same tests for Korean. EXPECT_FALSE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_HANGUL, false, false, false))); + ui::Accelerator(ui::VKEY_HANGUL, ui::EF_NONE))); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_FALSE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_SPACE, true, false, false))); + ui::Accelerator(ui::VKEY_SPACE, ui::EF_SHIFT_DOWN))); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); } @@ -667,17 +667,17 @@ TEST_F(InputMethodManagerImplTest, TestSwitchInputMethodWithJpLayout) { EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_NONCONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_NONCONVERT, ui::EF_NONE))); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); manager_->SwitchToPreviousInputMethod(); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE))); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); manager_->SwitchToPreviousInputMethod(); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE))); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); } @@ -687,12 +687,12 @@ TEST_F(InputMethodManagerImplTest, TestSwitchInputMethodWithKoLayout) { EXPECT_EQ(2U, manager_->GetNumActiveInputMethods()); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_HANGUL, false, false, false))); + ui::Accelerator(ui::VKEY_HANGUL, ui::EF_NONE))); EXPECT_EQ("xkb:kr:kr104:kor", manager_->GetCurrentInputMethod().id()); manager_->SwitchToPreviousInputMethod(); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_SPACE, true, false, false))); + ui::Accelerator(ui::VKEY_SPACE, ui::EF_SHIFT_DOWN))); EXPECT_EQ("xkb:kr:kr104:kor", manager_->GetCurrentInputMethod().id()); } @@ -704,22 +704,22 @@ TEST_F(InputMethodManagerImplTest, TestSwitchInputMethodWithJpIme) { EXPECT_TRUE(manager_->EnableInputMethods(ids)); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE))); EXPECT_EQ("mozc-jp", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_DBCSCHAR, ui::EF_NONE))); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_CONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_CONVERT, ui::EF_NONE))); EXPECT_EQ("mozc-jp", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_CONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_CONVERT, ui::EF_NONE))); EXPECT_EQ("mozc-jp", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_NONCONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_NONCONVERT, ui::EF_NONE))); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_NONCONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_NONCONVERT, ui::EF_NONE))); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); // Add Dvorak. @@ -727,10 +727,10 @@ TEST_F(InputMethodManagerImplTest, TestSwitchInputMethodWithJpIme) { EXPECT_TRUE(manager_->EnableInputMethods(ids)); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE))); EXPECT_EQ("mozc-jp", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, false, false, false))); + ui::Accelerator(ui::VKEY_DBE_SBCSCHAR, ui::EF_NONE))); EXPECT_EQ("xkb:jp::jpn", manager_->GetCurrentInputMethod().id()); } @@ -742,10 +742,10 @@ TEST_F(InputMethodManagerImplTest, TestSwitchInputMethodWithKoIme) { EXPECT_TRUE(manager_->EnableInputMethods(ids)); EXPECT_EQ("xkb:kr:kr104:kor", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_HANGUL, false, false, false))); + ui::Accelerator(ui::VKEY_HANGUL, ui::EF_NONE))); EXPECT_EQ("mozc-hangul", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_HANGUL, false, false, false))); + ui::Accelerator(ui::VKEY_HANGUL, ui::EF_NONE))); EXPECT_EQ("xkb:kr:kr104:kor", manager_->GetCurrentInputMethod().id()); // Add Dvorak. @@ -753,10 +753,10 @@ TEST_F(InputMethodManagerImplTest, TestSwitchInputMethodWithKoIme) { EXPECT_TRUE(manager_->EnableInputMethods(ids)); EXPECT_EQ("xkb:kr:kr104:kor", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_SPACE, true, false, false))); + ui::Accelerator(ui::VKEY_SPACE, ui::EF_SHIFT_DOWN))); EXPECT_EQ("mozc-hangul", manager_->GetCurrentInputMethod().id()); EXPECT_TRUE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_SPACE, true, false, false))); + ui::Accelerator(ui::VKEY_SPACE, ui::EF_SHIFT_DOWN))); EXPECT_EQ("xkb:kr:kr104:kor", manager_->GetCurrentInputMethod().id()); } @@ -770,7 +770,7 @@ TEST_F(InputMethodManagerImplTest, TestEnableDisableHotkeys) { EXPECT_FALSE(manager_->SwitchToPreviousInputMethod()); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); EXPECT_FALSE(manager_->SwitchInputMethod( - ui::Accelerator(ui::VKEY_NONCONVERT, false, false, false))); + ui::Accelerator(ui::VKEY_NONCONVERT, ui::EF_NONE))); EXPECT_EQ("xkb:us::eng", manager_->GetCurrentInputMethod().id()); manager_->EnableHotkeys(); EXPECT_TRUE(manager_->SwitchToNextInputMethod()); diff --git a/chrome/browser/chromeos/login/webui_login_view.cc b/chrome/browser/chromeos/login/webui_login_view.cc index 113b72e..68eb562 100644 --- a/chrome/browser/chromeos/login/webui_login_view.cc +++ b/chrome/browser/chromeos/login/webui_login_view.cc @@ -135,16 +135,19 @@ WebUILoginView::WebUILoginView() // Make sure the singleton VirtualKeyboardManager object is created. VirtualKeyboardManager::GetInstance(); #endif - accel_map_[ui::Accelerator(ui::VKEY_Z, false, true, true)] = + accel_map_[ui::Accelerator(ui::VKEY_Z, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] = kAccelNameAccessibility; - accel_map_[ui::Accelerator(ui::VKEY_ESCAPE, false, false, false)] = + accel_map_[ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)] = kAccelNameCancel; - accel_map_[ui::Accelerator(ui::VKEY_E, false, true, true)] = + accel_map_[ui::Accelerator(ui::VKEY_E, + ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN)] = kAccelNameEnrollment; // This should be kept in sync with the IDC_EXIT accelerator. - accel_map_[ui::Accelerator(ui::VKEY_Q, true, true, false)] = + accel_map_[ui::Accelerator(ui::VKEY_Q, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN)] = kAccelNameExit; - accel_map_[ui::Accelerator(ui::VKEY_V, false, false, true)] = + accel_map_[ui::Accelerator(ui::VKEY_V, ui::EF_ALT_DOWN)] = kAccelNameVersion; for (AccelMap::iterator i(accel_map_.begin()); i != accel_map_.end(); ++i) diff --git a/chrome/browser/external_tab/external_tab_container_win.cc b/chrome/browser/external_tab/external_tab_container_win.cc index 7077637..ff4bb90 100644 --- a/chrome/browser/external_tab/external_tab_container_win.cc +++ b/chrome/browser/external_tab/external_tab_container_win.cc @@ -1107,12 +1107,9 @@ void ExternalTabContainer::LoadAccelerators() { // Let's fill our own accelerator table. for (int i = 0; i < count; ++i) { - bool alt_down = (accelerators[i].fVirt & FALT) == FALT; - bool ctrl_down = (accelerators[i].fVirt & FCONTROL) == FCONTROL; - bool shift_down = (accelerators[i].fVirt & FSHIFT) == FSHIFT; ui::Accelerator accelerator( static_cast<ui::KeyboardCode>(accelerators[i].key), - shift_down, ctrl_down, alt_down); + ui::GetModifiersFromACCEL(accelerators[i])); accelerator_table_[accelerator] = accelerators[i].cmd; // Also register with the focus manager. diff --git a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc index feb061c..d79b6a4 100644 --- a/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc +++ b/chrome/browser/ui/find_bar/find_bar_host_browsertest.cc @@ -835,7 +835,7 @@ IN_PROC_BROWSER_TEST_F(FindInPageControllerTest, AcceleratorRestoring) { views::FocusManager* focus_manager = widget->GetFocusManager(); // See where Escape is registered. - ui::Accelerator escape(ui::VKEY_ESCAPE, false, false, false); + ui::Accelerator escape(ui::VKEY_ESCAPE, ui::EF_NONE); ui::AcceleratorTarget* old_target = focus_manager->GetCurrentTargetForAccelerator(escape); EXPECT_TRUE(old_target != NULL); diff --git a/chrome/browser/ui/views/avatar_menu_bubble_view.cc b/chrome/browser/ui/views/avatar_menu_bubble_view.cc index e23d3ee..365cb26 100644 --- a/chrome/browser/ui/views/avatar_menu_bubble_view.cc +++ b/chrome/browser/ui/views/avatar_menu_bubble_view.cc @@ -474,8 +474,8 @@ gfx::Rect AvatarMenuBubbleView::GetAnchorRect() { void AvatarMenuBubbleView::Init() { // Build the menu for the first time. OnAvatarMenuModelChanged(avatar_menu_model_.get()); - AddAccelerator(ui::Accelerator(ui::VKEY_DOWN, 0)); - AddAccelerator(ui::Accelerator(ui::VKEY_UP, 0)); + AddAccelerator(ui::Accelerator(ui::VKEY_DOWN, ui::EF_NONE)); + AddAccelerator(ui::Accelerator(ui::VKEY_UP, ui::EF_NONE)); } void AvatarMenuBubbleView::OnAvatarMenuModelChanged( diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc index e64aab6..5bb2c23 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_view.cc @@ -236,7 +236,7 @@ void BookmarkBubbleView::Init() { layout->AddView(edit_button_); layout->AddView(close_button_); - AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, 0)); + AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); } BookmarkBubbleView::BookmarkBubbleView(views::View* anchor_view, diff --git a/chrome/browser/ui/views/chrome_to_mobile_bubble_view.cc b/chrome/browser/ui/views/chrome_to_mobile_bubble_view.cc index 918f7e6..3a64c89 100644 --- a/chrome/browser/ui/views/chrome_to_mobile_bubble_view.cc +++ b/chrome/browser/ui/views/chrome_to_mobile_bubble_view.cc @@ -305,7 +305,7 @@ void ChromeToMobileBubbleView::Init() { layout->AddView(send_); layout->AddView(cancel_); - AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, 0)); + AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); } ChromeToMobileBubbleView::ChromeToMobileBubbleView(views::View* anchor_view, diff --git a/chrome/browser/ui/views/constrained_window_views_browsertest.cc b/chrome/browser/ui/views/constrained_window_views_browsertest.cc index f2fedab..f5f5a76 100644 --- a/chrome/browser/ui/views/constrained_window_views_browsertest.cc +++ b/chrome/browser/ui/views/constrained_window_views_browsertest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -139,7 +139,7 @@ IN_PROC_BROWSER_TEST_F(ConstrainedWindowViewTest, FocusTest) { // Now send a VKEY_RETURN to the browser. This should result in closing // test_dialog1. EXPECT_TRUE(focus_manager->ProcessAccelerator( - ui::Accelerator(ui::VKEY_RETURN, false, false, false))); + ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE))); ui_test_utils::RunAllPendingInMessageLoop(); EXPECT_TRUE(test_dialog1->done()); @@ -167,7 +167,7 @@ IN_PROC_BROWSER_TEST_F(ConstrainedWindowViewTest, FocusTest) { // Send another VKEY_RETURN, closing test_dialog2 EXPECT_TRUE(focus_manager->ProcessAccelerator( - ui::Accelerator(ui::VKEY_RETURN, false, false, false))); + ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE))); ui_test_utils::RunAllPendingInMessageLoop(); EXPECT_TRUE(test_dialog2->done()); EXPECT_EQ(0u, constrained_window_helper->constrained_window_count()); diff --git a/chrome/browser/ui/views/dropdown_bar_host.cc b/chrome/browser/ui/views/dropdown_bar_host.cc index 1a2cb42..9961f3a3 100644 --- a/chrome/browser/ui/views/dropdown_bar_host.cc +++ b/chrome/browser/ui/views/dropdown_bar_host.cc @@ -334,7 +334,7 @@ void DropdownBarHost::UpdateWindowEdges(const gfx::Rect& new_pos) { void DropdownBarHost::RegisterAccelerators() { DCHECK(!esc_accel_target_registered_); - ui::Accelerator escape(ui::VKEY_ESCAPE, false, false, false); + ui::Accelerator escape(ui::VKEY_ESCAPE, ui::EF_NONE); focus_manager_->RegisterAccelerator( escape, ui::AcceleratorManager::kNormalPriority, this); esc_accel_target_registered_ = true; @@ -342,7 +342,7 @@ void DropdownBarHost::RegisterAccelerators() { void DropdownBarHost::UnregisterAccelerators() { DCHECK(esc_accel_target_registered_); - ui::Accelerator escape(ui::VKEY_ESCAPE, false, false, false); + ui::Accelerator escape(ui::VKEY_ESCAPE, ui::EF_NONE); focus_manager_->UnregisterAccelerator(escape, this); esc_accel_target_registered_ = false; } diff --git a/chrome/browser/ui/views/find_bar_host.cc b/chrome/browser/ui/views/find_bar_host.cc index 7eb4651..2f58c0a 100644 --- a/chrome/browser/ui/views/find_bar_host.cc +++ b/chrome/browser/ui/views/find_bar_host.cc @@ -312,14 +312,14 @@ void FindBarHost::RegisterAccelerators() { DropdownBarHost::RegisterAccelerators(); // Register for Ctrl+Return. - ui::Accelerator escape(ui::VKEY_RETURN, false, true, false); + ui::Accelerator escape(ui::VKEY_RETURN, ui::EF_CONTROL_DOWN); focus_manager()->RegisterAccelerator( escape, ui::AcceleratorManager::kNormalPriority, this); } void FindBarHost::UnregisterAccelerators() { // Unregister Ctrl+Return. - ui::Accelerator escape(ui::VKEY_RETURN, false, true, false); + ui::Accelerator escape(ui::VKEY_RETURN, ui::EF_CONTROL_DOWN); focus_manager()->UnregisterAccelerator(escape, this); DropdownBarHost::UnregisterAccelerators(); diff --git a/chrome/browser/ui/views/frame/browser_view.cc b/chrome/browser/ui/views/frame/browser_view.cc index f5fcbba..aa3a46f 100644 --- a/chrome/browser/ui/views/frame/browser_view.cc +++ b/chrome/browser/ui/views/frame/browser_view.cc @@ -68,6 +68,7 @@ #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "content/public/browser/download_manager.h" +#include "content/public/browser/native_web_keyboard_event.h" #include "content/public/browser/notification_service.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/user_metrics.h" @@ -469,13 +470,13 @@ bool BrowserView::GetAccelerator(int cmd_id, ui::Accelerator* accelerator) { // anywhere so we need to check for them explicitly here. switch (cmd_id) { case IDC_CUT: - *accelerator = ui::Accelerator(ui::VKEY_X, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN); return true; case IDC_COPY: - *accelerator = ui::Accelerator(ui::VKEY_C, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN); return true; case IDC_PASTE: - *accelerator = ui::Accelerator(ui::VKEY_V, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN); return true; } // Else, we retrieve the accelerator information from the accelerator table. @@ -1169,12 +1170,7 @@ bool BrowserView::PreHandleKeyboardEvent(const NativeWebKeyboardEvent& event, ui::Accelerator accelerator( static_cast<ui::KeyboardCode>(event.windowsKeyCode), - (event.modifiers & NativeWebKeyboardEvent::ShiftKey) == - NativeWebKeyboardEvent::ShiftKey, - (event.modifiers & NativeWebKeyboardEvent::ControlKey) == - NativeWebKeyboardEvent::ControlKey, - (event.modifiers & NativeWebKeyboardEvent::AltKey) == - NativeWebKeyboardEvent::AltKey); + content::GetModifiersFromNativeWebKeyboardEvent(event)); if (event.type == WebKit::WebInputEvent::KeyUp) accelerator.set_type(ui::ET_KEY_RELEASED); @@ -2148,12 +2144,9 @@ void BrowserView::LoadAccelerators() { // Let's fill our own accelerator table. for (int i = 0; i < count; ++i) { - bool alt_down = (accelerators[i].fVirt & FALT) == FALT; - bool ctrl_down = (accelerators[i].fVirt & FCONTROL) == FCONTROL; - bool shift_down = (accelerators[i].fVirt & FSHIFT) == FSHIFT; ui::Accelerator accelerator( static_cast<ui::KeyboardCode>(accelerators[i].key), - shift_down, ctrl_down, alt_down); + ui::GetModifiersFromACCEL(accelerators[i])); accelerator_table_[accelerator] = accelerators[i].cmd; // Also register with the focus manager. diff --git a/chrome/browser/ui/views/fullscreen_exit_bubble_views.cc b/chrome/browser/ui/views/fullscreen_exit_bubble_views.cc index 75c2fe0..8d34e70 100644 --- a/chrome/browser/ui/views/fullscreen_exit_bubble_views.cc +++ b/chrome/browser/ui/views/fullscreen_exit_bubble_views.cc @@ -255,7 +255,7 @@ FullscreenExitBubbleViews::FullscreenExitBubbleViews( size_animation_->Reset(1); // Create the contents view. - ui::Accelerator accelerator(ui::VKEY_UNKNOWN, false, false, false); + ui::Accelerator accelerator(ui::VKEY_UNKNOWN, ui::EF_NONE); bool got_accelerator = frame->GetAccelerator(IDC_FULLSCREEN, &accelerator); DCHECK(got_accelerator); view_ = new FullscreenExitView( diff --git a/chrome/browser/ui/views/js_modal_dialog_views.cc b/chrome/browser/ui/views/js_modal_dialog_views.cc index e3e1c5e..d0428c4 100644 --- a/chrome/browser/ui/views/js_modal_dialog_views.cc +++ b/chrome/browser/ui/views/js_modal_dialog_views.cc @@ -29,7 +29,7 @@ JSModalDialogViews::JSModalDialogViews(JavaScriptAppModalDialog* parent) DCHECK(message_box_view_); message_box_view_->AddAccelerator( - ui::Accelerator(ui::VKEY_C, false, true, false)); + ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN)); if (parent->display_suppress_checkbox()) { message_box_view_->SetCheckBoxLabel( l10n_util::GetStringUTF16(IDS_JAVASCRIPT_MESSAGEBOX_SUPPRESS_OPTION)); diff --git a/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc b/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc index 561a374..056178d 100644 --- a/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc +++ b/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc @@ -73,32 +73,34 @@ bool RenderViewContextMenuViews::GetAcceleratorForCommandId( // that Ctrl+C, Ctrl+V, Ctrl+X, Ctrl-A, etc do what they normally do. switch (command_id) { case IDC_CONTENT_CONTEXT_UNDO: - *accel = ui::Accelerator(ui::VKEY_Z, false, true, false); + *accel = ui::Accelerator(ui::VKEY_Z, ui::EF_CONTROL_DOWN); return true; case IDC_CONTENT_CONTEXT_REDO: // TODO(jcampan): should it be Ctrl-Y? - *accel = ui::Accelerator(ui::VKEY_Z, true, true, false); + *accel = ui::Accelerator(ui::VKEY_Z, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); return true; case IDC_CONTENT_CONTEXT_CUT: - *accel = ui::Accelerator(ui::VKEY_X, false, true, false); + *accel = ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN); return true; case IDC_CONTENT_CONTEXT_COPY: - *accel = ui::Accelerator(ui::VKEY_C, false, true, false); + *accel = ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN); return true; case IDC_CONTENT_CONTEXT_PASTE: - *accel = ui::Accelerator(ui::VKEY_V, false, true, false); + *accel = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN); return true; case IDC_CONTENT_CONTEXT_PASTE_AND_MATCH_STYLE: - *accel = ui::Accelerator(ui::VKEY_V, true, true, false); + *accel = ui::Accelerator(ui::VKEY_V, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); return true; case IDC_CONTENT_CONTEXT_SELECTALL: - *accel = ui::Accelerator(ui::VKEY_A, false, true, false); + *accel = ui::Accelerator(ui::VKEY_A, ui::EF_CONTROL_DOWN); return true; default: diff --git a/chrome/browser/ui/views/toolbar_view.cc b/chrome/browser/ui/views/toolbar_view.cc index bdc2fe0..3c62d2a 100644 --- a/chrome/browser/ui/views/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar_view.cc @@ -492,23 +492,24 @@ bool ToolbarView::GetAcceleratorForCommandId(int command_id, // TODO(cpu) Bug 1109102. Query WebKit land for the actual bindings. switch (command_id) { case IDC_CUT: - *accelerator = ui::Accelerator(ui::VKEY_X, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN); return true; case IDC_COPY: - *accelerator = ui::Accelerator(ui::VKEY_C, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN); return true; case IDC_PASTE: - *accelerator = ui::Accelerator(ui::VKEY_V, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN); return true; #if defined(USE_ASH) // When USE_ASH is defined, IDC_NEW_WINDOW and IDC_NEW_INCOGNITO_WINDOW are // handled outside Chrome, in ash/accelerators/accelerator_table.cc. // crbug.com/120196 case IDC_NEW_WINDOW: - *accelerator = ui::Accelerator(ui::VKEY_N, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_N, ui::EF_CONTROL_DOWN); return true; case IDC_NEW_INCOGNITO_WINDOW: - *accelerator = ui::Accelerator(ui::VKEY_N, true, true, false); + *accelerator = ui::Accelerator(ui::VKEY_N, + ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN); return true; #endif } diff --git a/chrome/browser/ui/views/unhandled_keyboard_event_handler_win.cc b/chrome/browser/ui/views/unhandled_keyboard_event_handler_win.cc index 8a6449e..726d68b 100644 --- a/chrome/browser/ui/views/unhandled_keyboard_event_handler_win.cc +++ b/chrome/browser/ui/views/unhandled_keyboard_event_handler_win.cc @@ -5,6 +5,7 @@ #include "chrome/browser/ui/views/unhandled_keyboard_event_handler.h" #include "base/logging.h" +#include "content/public/browser/native_web_keyboard_event.h" #include "ui/views/focus/focus_manager.h" UnhandledKeyboardEventHandler::UnhandledKeyboardEventHandler() { @@ -32,12 +33,7 @@ void UnhandledKeyboardEventHandler::HandleKeyboardEvent( if (event.type == WebKit::WebInputEvent::RawKeyDown) { ui::Accelerator accelerator( static_cast<ui::KeyboardCode>(event.windowsKeyCode), - (event.modifiers & NativeWebKeyboardEvent::ShiftKey) == - NativeWebKeyboardEvent::ShiftKey, - (event.modifiers & NativeWebKeyboardEvent::ControlKey) == - NativeWebKeyboardEvent::ControlKey, - (event.modifiers & NativeWebKeyboardEvent::AltKey) == - NativeWebKeyboardEvent::AltKey); + content::GetModifiersFromNativeWebKeyboardEvent(event)); // This is tricky: we want to set ignore_next_char_event_ if // ProcessAccelerator returns true. But ProcessAccelerator might delete diff --git a/chrome/browser/ui/views/web_dialog_view.cc b/chrome/browser/ui/views/web_dialog_view.cc index 9fcc614..3496471 100644 --- a/chrome/browser/ui/views/web_dialog_view.cc +++ b/chrome/browser/ui/views/web_dialog_view.cc @@ -61,7 +61,7 @@ WebDialogView::WebDialogView(Profile* profile, AddChildView(web_view_); SetLayoutManager(new views::FillLayout); // Pressing the ESC key will close the dialog. - AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, false, false, false)); + AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); } WebDialogView::~WebDialogView() { diff --git a/chrome/common/extensions/extension_commands.cc b/chrome/common/extensions/extension_commands.cc index 0993d46..582bbcc 100644 --- a/chrome/common/extensions/extension_commands.cc +++ b/chrome/common/extensions/extension_commands.cc @@ -50,17 +50,15 @@ ui::Accelerator Command::ParseImpl( } // Now, parse it into an accelerator. - bool ctrl = false; - bool alt = false; - bool shift = false; + int modifiers = ui::EF_NONE; ui::KeyboardCode key = ui::VKEY_UNKNOWN; for (size_t i = 0; i < tokens.size(); i++) { if (tokens[i] == "Ctrl") { - ctrl = true; + modifiers |= ui::EF_CONTROL_DOWN; } else if (tokens[i] == "Alt") { - alt = true; + modifiers |= ui::EF_ALT_DOWN; } else if (tokens[i] == "Shift") { - shift = true; + modifiers |= ui::EF_SHIFT_DOWN; } else if (tokens[i] == "Command" && platform_key == "mac") { // TODO(finnur): Implement for Mac. } else if (tokens[i] == "Option" && platform_key == "mac") { @@ -83,7 +81,8 @@ ui::Accelerator Command::ParseImpl( return ui::Accelerator(); } } - + bool ctrl = (modifiers & ui::EF_CONTROL_DOWN) != 0; + bool alt = (modifiers & ui::EF_ALT_DOWN) != 0; // We support Ctrl+foo, Alt+foo, Ctrl+Shift+foo, Alt+Shift+foo, but not // Ctrl+Alt+foo. For a more detailed reason why we don't support Ctrl+Alt+foo: // http://blogs.msdn.com/b/oldnewthing/archive/2004/03/29/101121.aspx. @@ -96,7 +95,7 @@ ui::Accelerator Command::ParseImpl( return ui::Accelerator(); } - return ui::Accelerator(key, shift, ctrl, alt); + return ui::Accelerator(key, modifiers); } // static diff --git a/chrome/common/extensions/extension_commands_unittest.cc b/chrome/common/extensions/extension_commands_unittest.cc index 10bc67f..61b408a 100644 --- a/chrome/common/extensions/extension_commands_unittest.cc +++ b/chrome/common/extensions/extension_commands_unittest.cc @@ -13,17 +13,16 @@ class ExtensionCommandsTest : public testing::Test { }; TEST(ExtensionCommandsTest, ExtensionCommandParsing) { - const ui::Accelerator None = ui::Accelerator(); - const ui::Accelerator ShiftF = - ui::Accelerator(ui::VKEY_F, true, false, false); - const ui::Accelerator CtrlF = - ui::Accelerator(ui::VKEY_F, false, true, false); - const ui::Accelerator AltF = - ui::Accelerator(ui::VKEY_F, false, false, true); - const ui::Accelerator CtrlShiftF = - ui::Accelerator(ui::VKEY_F, true, true, false); - const ui::Accelerator AltShiftF = - ui::Accelerator(ui::VKEY_F, true, false, true); + const ui::Accelerator none = ui::Accelerator(); + const ui::Accelerator shift_f = ui::Accelerator(ui::VKEY_F, + ui::EF_SHIFT_DOWN); + const ui::Accelerator ctrl_f = ui::Accelerator(ui::VKEY_F, + ui::EF_CONTROL_DOWN); + const ui::Accelerator alt_f = ui::Accelerator(ui::VKEY_F, ui::EF_ALT_DOWN); + const ui::Accelerator ctrl_shift_f = + ui::Accelerator(ui::VKEY_F, ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN); + const ui::Accelerator alt_shift_f = + ui::Accelerator(ui::VKEY_F, ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN); const struct { bool expected_result; @@ -35,37 +34,37 @@ TEST(ExtensionCommandsTest, ExtensionCommandParsing) { // Negative test (one or more missing required fields). We don't need to // test |command_name| being blank as it is used as a key in the manifest, // so it can't be blank (and we CHECK() when it is). - { false, None, "command", "", "" }, - { false, None, "command", "Ctrl+f", "" }, - { false, None, "command", "", "description" }, + { false, none, "command", "", "" }, + { false, none, "command", "Ctrl+f", "" }, + { false, none, "command", "", "description" }, // Ctrl+Alt is not permitted, see MSDN link in comments in Parse function. - { false, None, "command", "Ctrl+Alt+F", "description" }, + { false, none, "command", "Ctrl+Alt+F", "description" }, // Unsupported shortcuts/too many, or missing modifier. - { false, None, "command", "A", "description" }, - { false, None, "command", "F10", "description" }, - { false, None, "command", "Ctrl+1", "description" }, - { false, None, "command", "Ctrl+F+G", "description" }, - { false, None, "command", "Ctrl+Alt+Shift+G", "description" }, + { false, none, "command", "A", "description" }, + { false, none, "command", "F10", "description" }, + { false, none, "command", "Ctrl+1", "description" }, + { false, none, "command", "Ctrl+F+G", "description" }, + { false, none, "command", "Ctrl+Alt+Shift+G", "description" }, // Basic tests. - { true, CtrlF, "command", "Ctrl+F", "description" }, - { true, ShiftF, "command", "Shift+F", "description" }, - { true, AltF, "command", "Alt+F", "description" }, - { true, CtrlShiftF, "command", "Ctrl+Shift+F", "description" }, - { true, AltShiftF, "command", "Alt+Shift+F", "description" }, + { true, ctrl_f, "command", "Ctrl+F", "description" }, + { true, shift_f, "command", "Shift+F", "description" }, + { true, alt_f, "command", "Alt+F", "description" }, + { true, ctrl_shift_f, "command", "Ctrl+Shift+F", "description" }, + { true, alt_shift_f, "command", "Alt+Shift+F", "description" }, // Order tests. - { true, CtrlF, "command", "F+Ctrl", "description" }, - { true, ShiftF, "command", "F+Shift", "description" }, - { true, AltF, "command", "F+Alt", "description" }, - { true, CtrlShiftF, "command", "F+Ctrl+Shift", "description" }, - { true, CtrlShiftF, "command", "F+Shift+Ctrl", "description" }, - { true, AltShiftF, "command", "F+Alt+Shift", "description" }, - { true, AltShiftF, "command", "F+Shift+Alt", "description" }, + { true, ctrl_f, "command", "F+Ctrl", "description" }, + { true, shift_f, "command", "F+Shift", "description" }, + { true, alt_f, "command", "F+Alt", "description" }, + { true, ctrl_shift_f, "command", "F+Ctrl+Shift", "description" }, + { true, ctrl_shift_f, "command", "F+Shift+Ctrl", "description" }, + { true, alt_shift_f, "command", "F+Alt+Shift", "description" }, + { true, alt_shift_f, "command", "F+Shift+Alt", "description" }, // Case insensitivity is not OK. - { false, CtrlF, "command", "Ctrl+f", "description" }, - { false, CtrlF, "command", "cTrL+F", "description" }, + { false, ctrl_f, "command", "Ctrl+f", "description" }, + { false, ctrl_f, "command", "cTrL+F", "description" }, // Skipping description is OK for browser- and pageActions. - { true, CtrlF, "_execute_browser_action", "Ctrl+F", "" }, - { true, CtrlF, "_execute_page_action", "Ctrl+F", "" }, + { true, ctrl_f, "_execute_browser_action", "Ctrl+F", "" }, + { true, ctrl_f, "_execute_page_action", "Ctrl+F", "" }, }; // TODO(finnur): test Command/Options on Mac when implemented. diff --git a/content/browser/renderer_host/native_web_keyboard_event.cc b/content/browser/renderer_host/native_web_keyboard_event.cc new file mode 100644 index 0000000..4257415 --- /dev/null +++ b/content/browser/renderer_host/native_web_keyboard_event.cc @@ -0,0 +1,23 @@ +// Copyright (c) 2012 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 "ui/base/events.h" + +namespace content { + +int GetModifiersFromNativeWebKeyboardEvent( + const NativeWebKeyboardEvent& event) { + int modifiers = ui::EF_NONE; + if (event.modifiers & NativeWebKeyboardEvent::ShiftKey) + modifiers |= ui::EF_SHIFT_DOWN; + if (event.modifiers & NativeWebKeyboardEvent::ControlKey) + modifiers |= ui::EF_CONTROL_DOWN; + if (event.modifiers & NativeWebKeyboardEvent::AltKey) + modifiers |= ui::EF_ALT_DOWN; + return modifiers; +} + +} // namespace content diff --git a/content/content_browser.gypi b/content/content_browser.gypi index 3ef8fff..3b96e9d 100644 --- a/content/content_browser.gypi +++ b/content/content_browser.gypi @@ -537,6 +537,7 @@ 'browser/renderer_host/media/video_capture_host.h', 'browser/renderer_host/media/video_capture_manager.cc', 'browser/renderer_host/media/video_capture_manager.h', + 'browser/renderer_host/native_web_keyboard_event.cc', 'browser/renderer_host/native_web_keyboard_event_android.cc', 'browser/renderer_host/native_web_keyboard_event_aura.cc', 'browser/renderer_host/native_web_keyboard_event_gtk.cc', diff --git a/content/public/browser/native_web_keyboard_event.h b/content/public/browser/native_web_keyboard_event.h index 0d8c72d..6414c66 100644 --- a/content/public/browser/native_web_keyboard_event.h +++ b/content/public/browser/native_web_keyboard_event.h @@ -74,4 +74,12 @@ struct CONTENT_EXPORT NativeWebKeyboardEvent : #endif }; +namespace content { + +// Returns a bitmak of values from ui/base/events.h. +CONTENT_EXPORT int GetModifiersFromNativeWebKeyboardEvent( + const NativeWebKeyboardEvent& event); + +} // namespace content + #endif // CONTENT_PUBLIC_BROWSER_NATIVE_WEB_KEYBOARD_EVENT_H_ diff --git a/ui/base/events.h b/ui/base/events.h index 74cfd63..3408f4b 100644 --- a/ui/base/events.h +++ b/ui/base/events.h @@ -10,6 +10,10 @@ #include "ui/base/keycodes/keyboard_codes.h" #include "ui/gfx/native_widget_types.h" +#if defined(OS_WIN) +#include <windows.h> +#endif + namespace gfx { class Point; } @@ -201,6 +205,10 @@ UI_EXPORT bool IsNoopEvent(const base::NativeEvent& event); // Creates and returns no-op event. UI_EXPORT base::NativeEvent CreateNoopEvent(); +#if defined(OS_WIN) +int GetModifiersFromACCEL(const ACCEL& accel); +#endif + } // namespace ui #endif // UI_BASE_EVENTS_H_ diff --git a/ui/base/win/events_win.cc b/ui/base/win/events_win.cc index 9f75b6f..a014ce0 100644 --- a/ui/base/win/events_win.cc +++ b/ui/base/win/events_win.cc @@ -300,4 +300,15 @@ base::NativeEvent CreateNoopEvent() { return event; } +int GetModifiersFromACCEL(const ACCEL& accel) { + int modifiers = ui::EF_NONE; + if (accel.fVirt & FSHIFT) + modifiers |= ui::EF_SHIFT_DOWN; + if (accel.fVirt & FCONTROL) + modifiers |= ui::EF_CONTROL_DOWN; + if (accel.fVirt & FALT) + modifiers |= ui::EF_ALT_DOWN; + return modifiers; +} + } // namespace ui diff --git a/ui/views/accessible_pane_view.cc b/ui/views/accessible_pane_view.cc index 0849c36..ab12435 100644 --- a/ui/views/accessible_pane_view.cc +++ b/ui/views/accessible_pane_view.cc @@ -16,11 +16,11 @@ AccessiblePaneView::AccessiblePaneView() : pane_has_focus_(false), ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), focus_manager_(NULL), - home_key_(ui::VKEY_HOME, false, false, false), - end_key_(ui::VKEY_END, false, false, false), - escape_key_(ui::VKEY_ESCAPE, false, false, false), - left_key_(ui::VKEY_LEFT, false, false, false), - right_key_(ui::VKEY_RIGHT, false, false, false) { + home_key_(ui::VKEY_HOME, ui::EF_NONE), + end_key_(ui::VKEY_END, ui::EF_NONE), + escape_key_(ui::VKEY_ESCAPE, ui::EF_NONE), + left_key_(ui::VKEY_LEFT, ui::EF_NONE), + right_key_(ui::VKEY_RIGHT, ui::EF_NONE) { focus_search_.reset(new views::FocusSearch(this, true, true)); } diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc index 92645a8..5dc3fcb 100644 --- a/ui/views/bubble/bubble_delegate.cc +++ b/ui/views/bubble/bubble_delegate.cc @@ -116,7 +116,7 @@ BubbleDelegateView::BubbleDelegateView() use_focusless_(false), parent_window_(NULL) { set_background(views::Background::CreateSolidBackground(color_)); - AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, 0)); + AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); } BubbleDelegateView::BubbleDelegateView( @@ -135,7 +135,7 @@ BubbleDelegateView::BubbleDelegateView( use_focusless_(false), parent_window_(NULL) { set_background(views::Background::CreateSolidBackground(color_)); - AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, 0)); + AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); } BubbleDelegateView::~BubbleDelegateView() {} diff --git a/ui/views/controls/button/text_button.cc b/ui/views/controls/button/text_button.cc index 1e616da..c44b65e 100644 --- a/ui/views/controls/button/text_button.cc +++ b/ui/views/controls/button/text_button.cc @@ -285,9 +285,9 @@ void TextButtonBase::SetIsDefault(bool is_default) { return; is_default_ = is_default; if (is_default_) - AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, false, false, false)); + AddAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); else - RemoveAccelerator(ui::Accelerator(ui::VKEY_RETURN, false, false, false)); + RemoveAccelerator(ui::Accelerator(ui::VKEY_RETURN, ui::EF_NONE)); SchedulePaint(); } diff --git a/ui/views/controls/menu/menu_controller.cc b/ui/views/controls/menu/menu_controller.cc index 05713b8..2fd1bb9 100644 --- a/ui/views/controls/menu/menu_controller.cc +++ b/ui/views/controls/menu/menu_controller.cc @@ -1061,7 +1061,7 @@ MenuController::SendAcceleratorResultType if (!hot_view) return ACCELERATOR_NOT_PROCESSED; - ui::Accelerator accelerator(ui::VKEY_RETURN, false, false, false); + ui::Accelerator accelerator(ui::VKEY_RETURN, ui::EF_NONE); hot_view->AcceleratorPressed(accelerator); if (hot_view->GetClassName() == CustomButton::kViewClassName) { CustomButton* button = static_cast<CustomButton*>(hot_view); diff --git a/ui/views/controls/menu/menu_win.cc b/ui/views/controls/menu/menu_win.cc index 6536ef1..564fd5c 100644 --- a/ui/views/controls/menu/menu_win.cc +++ b/ui/views/controls/menu/menu_win.cc @@ -440,7 +440,7 @@ void MenuWin::AddMenuItemInternal(int index, string16 actual_label(label.empty() ? delegate()->GetLabel(item_id) : label); // Find out if there is a shortcut we need to append to the label. - ui::Accelerator accelerator(ui::VKEY_UNKNOWN, false, false, false); + ui::Accelerator accelerator(ui::VKEY_UNKNOWN, ui::EF_NONE); if (delegate() && delegate()->GetAcceleratorInfo(item_id, &accelerator)) { actual_label += L'\t'; actual_label += accelerator.GetShortcutText(); diff --git a/ui/views/controls/menu/native_menu_win.cc b/ui/views/controls/menu/native_menu_win.cc index 8a9ab0c..2b4af01 100644 --- a/ui/views/controls/menu/native_menu_win.cc +++ b/ui/views/controls/menu/native_menu_win.cc @@ -691,7 +691,7 @@ void NativeMenuWin::UpdateMenuItemInfoForString(MENUITEMINFO* mii, ReplaceSubstringsAfterOffset(&formatted, 0, L"\t", L" "); if (type != ui::MenuModel::TYPE_SUBMENU) { // Add accelerator details to the label if provided. - ui::Accelerator accelerator(ui::VKEY_UNKNOWN, false, false, false); + ui::Accelerator accelerator(ui::VKEY_UNKNOWN, ui::EF_NONE); if (model_->GetAcceleratorAt(model_index, &accelerator)) { formatted += L"\t"; formatted += accelerator.GetShortcutText(); diff --git a/ui/views/controls/tabbed_pane/tabbed_pane.cc b/ui/views/controls/tabbed_pane/tabbed_pane.cc index 5e874f1..b5dc08d 100644 --- a/ui/views/controls/tabbed_pane/tabbed_pane.cc +++ b/ui/views/controls/tabbed_pane/tabbed_pane.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -71,9 +71,10 @@ gfx::Size TabbedPane::GetPreferredSize() { void TabbedPane::LoadAccelerators() { // Ctrl+Shift+Tab - AddAccelerator(ui::Accelerator(ui::VKEY_TAB, true, true, false)); + AddAccelerator(ui::Accelerator(ui::VKEY_TAB, + ui::EF_CONTROL_DOWN | ui::EF_SHIFT_DOWN)); // Ctrl+Tab - AddAccelerator(ui::Accelerator(ui::VKEY_TAB, false, true, false)); + AddAccelerator(ui::Accelerator(ui::VKEY_TAB, ui::EF_CONTROL_DOWN)); } void TabbedPane::Layout() { diff --git a/ui/views/controls/textfield/native_textfield_win.cc b/ui/views/controls/textfield/native_textfield_win.cc index f6119de7..3744d977 100644 --- a/ui/views/controls/textfield/native_textfield_win.cc +++ b/ui/views/controls/textfield/native_textfield_win.cc @@ -427,13 +427,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 = ui::Accelerator(ui::VKEY_X, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_X, ui::EF_CONTROL_DOWN); return true; case IDS_APP_COPY: - *accelerator = ui::Accelerator(ui::VKEY_C, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_C, ui::EF_CONTROL_DOWN); return true; case IDS_APP_PASTE: - *accelerator = ui::Accelerator(ui::VKEY_V, false, true, false); + *accelerator = ui::Accelerator(ui::VKEY_V, ui::EF_CONTROL_DOWN); return true; } return container_view_->GetWidget()->GetAccelerator(command_id, accelerator); diff --git a/ui/views/controls/tree/tree_view_win.cc b/ui/views/controls/tree/tree_view_win.cc index 0547f6a..a878432 100644 --- a/ui/views/controls/tree/tree_view_win.cc +++ b/ui/views/controls/tree/tree_view_win.cc @@ -472,10 +472,7 @@ bool TreeView::OnKeyDown(ui::KeyboardCode virtual_key_code) { } else if (virtual_key_code == ui::VKEY_RETURN && !process_enter_) { Widget* widget = GetWidget(); DCHECK(widget); - ui::Accelerator accelerator(ui::Accelerator(virtual_key_code, - base::win::IsShiftPressed(), - base::win::IsCtrlPressed(), - base::win::IsAltPressed())); + ui::Accelerator accelerator(virtual_key_code, GetModifiersFromKeyState()); GetFocusManager()->ProcessAccelerator(accelerator); return true; } diff --git a/ui/views/events/event.h b/ui/views/events/event.h index 425bb1c..af4a06a 100644 --- a/ui/views/events/event.h +++ b/ui/views/events/event.h @@ -447,6 +447,10 @@ class VIEWS_EXPORT GestureEventForTest : public GestureEvent { DISALLOW_COPY_AND_ASSIGN(GestureEventForTest); }; +#if defined(OS_WIN) +int GetModifiersFromKeyState(); +#endif + } // namespace views #endif // UI_VIEWS_EVENTS_EVENT_H_ diff --git a/ui/views/events/event_win.cc b/ui/views/events/event_win.cc index 82a83ed..4143f54 100644 --- a/ui/views/events/event_win.cc +++ b/ui/views/events/event_win.cc @@ -1,10 +1,11 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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 "ui/views/events/event.h" #include "base/logging.h" +#include "base/win/win_util.h" #include "ui/base/keycodes/keyboard_code_conversion.h" namespace views { @@ -27,4 +28,15 @@ uint16 KeyEvent::GetUnmodifiedCharacter() const { ui::GetCharacterFromKeyCode(key_code_, flags() & ui::EF_SHIFT_DOWN); } +int GetModifiersFromKeyState() { + int modifiers = ui::EF_NONE; + if (base::win::IsShiftPressed()) + modifiers |= ui::EF_SHIFT_DOWN; + if (base::win::IsCtrlPressed()) + modifiers |= ui::EF_CONTROL_DOWN; + if (base::win::IsAltPressed()) + modifiers |= ui::EF_ALT_DOWN; + return modifiers; +} + } // namespace views diff --git a/ui/views/focus/focus_manager.cc b/ui/views/focus/focus_manager.cc index 1799831..3c2c8d7 100644 --- a/ui/views/focus/focus_manager.cc +++ b/ui/views/focus/focus_manager.cc @@ -66,7 +66,7 @@ bool FocusManager::OnKeyEvent(const KeyEvent& event) { (event.flags() & ~ui::EF_ALT_DOWN) == 0) { // Trigger VKEY_MENU when only this key is pressed and released, and both // press and release events are not handled by others. - ui::Accelerator accelerator(ui::VKEY_MENU, false, false, false); + ui::Accelerator accelerator(ui::VKEY_MENU, ui::EF_NONE); return ProcessAccelerator(accelerator); } else if (event.type() != ui::ET_KEY_RELEASED) { return false; @@ -76,10 +76,14 @@ bool FocusManager::OnKeyEvent(const KeyEvent& event) { return false; #endif - ui::Accelerator accelerator(event.key_code(), - event.IsShiftDown(), - event.IsControlDown(), - event.IsAltDown()); + int modifiers = ui::EF_NONE; + if (event.IsShiftDown()) + modifiers |= ui::EF_SHIFT_DOWN; + if (event.IsControlDown()) + modifiers |= ui::EF_CONTROL_DOWN; + if (event.IsAltDown()) + modifiers |= ui::EF_ALT_DOWN; + ui::Accelerator accelerator(event.key_code(), modifiers); accelerator.set_type(event.type()); if (event.type() == ui::ET_KEY_PRESSED) { diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc index 06b8448..b121e44 100644 --- a/ui/views/focus/focus_manager_unittest.cc +++ b/ui/views/focus/focus_manager_unittest.cc @@ -214,8 +214,8 @@ class TestAcceleratorTarget : public ui::AcceleratorTarget { TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { FocusManager* focus_manager = GetFocusManager(); - ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); - ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, false, false, false); + ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); + ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); TestAcceleratorTarget return_target(true); TestAcceleratorTarget escape_target(true); @@ -314,7 +314,7 @@ TEST_F(FocusManagerTest, CallsNormalAcceleratorTarget) { TEST_F(FocusManagerTest, HighPriorityHandlers) { FocusManager* focus_manager = GetFocusManager(); - ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, false, false, false); + ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); TestAcceleratorTarget escape_target_high(true); TestAcceleratorTarget escape_target_normal(true); @@ -403,7 +403,7 @@ TEST_F(FocusManagerTest, HighPriorityHandlers) { TEST_F(FocusManagerTest, CallsEnabledAcceleratorTargetsOnly) { FocusManager* focus_manager = GetFocusManager(); - ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); + ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); TestAcceleratorTarget return_target1(true); TestAcceleratorTarget return_target2(true); @@ -471,7 +471,7 @@ class SelfUnregisteringAcceleratorTarget : public ui::AcceleratorTarget { TEST_F(FocusManagerTest, CallsSelfDeletingAcceleratorTarget) { FocusManager* focus_manager = GetFocusManager(); - ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); + ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); SelfUnregisteringAcceleratorTarget target(return_accelerator, focus_manager); EXPECT_EQ(target.accelerator_count(), 0); EXPECT_EQ(NULL, diff --git a/ui/views/focus/focus_manager_unittest_win.cc b/ui/views/focus/focus_manager_unittest_win.cc index d6a9882..2a18e54 100644 --- a/ui/views/focus/focus_manager_unittest_win.cc +++ b/ui/views/focus/focus_manager_unittest_win.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -206,8 +206,8 @@ TEST_F(FocusManagerTest, CreationForNativeRoot) { TEST_F(FocusManagerTest, IgnoreKeyupForAccelerators) { FocusManager* focus_manager = GetFocusManager(); MessageTrackingView* mtv = new MessageTrackingView(); - mtv->AddAccelerator(ui::Accelerator(ui::VKEY_0, false, false, false)); - mtv->AddAccelerator(ui::Accelerator(ui::VKEY_1, false, false, false)); + mtv->AddAccelerator(ui::Accelerator(ui::VKEY_0, ui::EF_NONE)); + mtv->AddAccelerator(ui::Accelerator(ui::VKEY_1, ui::EF_NONE)); GetContentsView()->AddChildView(mtv); focus_manager->SetFocusedView(mtv); diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc index 71b606f..3ebd39e 100644 --- a/ui/views/view_unittest.cc +++ b/ui/views/view_unittest.cc @@ -1129,7 +1129,7 @@ bool TestView::AcceleratorPressed(const ui::Accelerator& accelerator) { #if defined(OS_WIN) && !defined(USE_AURA) TEST_F(ViewTest, ActivateAccelerator) { // Register a keyboard accelerator before the view is added to a window. - ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); + ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); TestView* view = new TestView(); view->Reset(); view->AddAccelerator(return_accelerator); @@ -1154,7 +1154,7 @@ TEST_F(ViewTest, ActivateAccelerator) { EXPECT_EQ(view->accelerator_count_map_[return_accelerator], 1); // Hit the escape key. Nothing should happen. - ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, false, false, false); + ui::Accelerator escape_accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); 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); @@ -1195,7 +1195,7 @@ TEST_F(ViewTest, ActivateAccelerator) { #if defined(OS_WIN) && !defined(USE_AURA) TEST_F(ViewTest, HiddenViewWithAccelerator) { - ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); + ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); TestView* view = new TestView(); view->Reset(); view->AddAccelerator(return_accelerator); @@ -1225,7 +1225,7 @@ TEST_F(ViewTest, HiddenViewWithAccelerator) { #if defined(OS_WIN) && !defined(USE_AURA) TEST_F(ViewTest, ViewInHiddenWidgetWithAccelerator) { - ui::Accelerator return_accelerator(ui::VKEY_RETURN, false, false, false); + ui::Accelerator return_accelerator(ui::VKEY_RETURN, ui::EF_NONE); TestView* view = new TestView(); view->Reset(); view->AddAccelerator(return_accelerator); diff --git a/ui/views/widget/native_widget_win.cc b/ui/views/widget/native_widget_win.cc index 7e53c8e..a5f9b9c 100644 --- a/ui/views/widget/native_widget_win.cc +++ b/ui/views/widget/native_widget_win.cc @@ -2025,12 +2025,15 @@ void NativeWidgetWin::OnSysCommand(UINT notification_code, CPoint click) { // Handle SC_KEYMENU, which means that the user has pressed the ALT // key and released it, so we should focus the menu bar. if ((notification_code & sc_mask) == SC_KEYMENU && click.x == 0) { + int modifiers = ui::EF_NONE; + if (!!(GetKeyState(VK_SHIFT) & 0x8000)) + modifiers |= ui::EF_SHIFT_DOWN; + if (!!(GetKeyState(VK_CONTROL) & 0x8000)) + modifiers |= ui::EF_CONTROL_DOWN; // Retrieve the status of shift and control keys to prevent consuming // shift+alt keys, which are used by Windows to change input languages. ui::Accelerator accelerator(ui::KeyboardCodeForWindowsKeyCode(VK_MENU), - !!(GetKeyState(VK_SHIFT) & 0x8000), - !!(GetKeyState(VK_CONTROL) & 0x8000), - false); + modifiers); GetWidget()->GetFocusManager()->ProcessAccelerator(accelerator); return; } diff --git a/ui/views/window/dialog_client_view.cc b/ui/views/window/dialog_client_view.cc index 1cf1d670..c5c50cd 100644 --- a/ui/views/window/dialog_client_view.cc +++ b/ui/views/window/dialog_client_view.cc @@ -132,8 +132,7 @@ void DialogClientView::ShowDialogButtons() { if (is_default_button) default_button_ = ok_button_; if (!(buttons & ui::DIALOG_BUTTON_CANCEL)) - ok_button_->AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, - false, false, false)); + ok_button_->AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); AddChildView(ok_button_); } if (buttons & ui::DIALOG_BUTTON_CANCEL && !cancel_button_) { @@ -156,7 +155,7 @@ void DialogClientView::ShowDialogButtons() { is_default_button); cancel_button_->SetGroup(kButtonGroup); cancel_button_->AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, - false, false, false)); + ui::EF_NONE)); if (is_default_button) default_button_ = ok_button_; AddChildView(cancel_button_); @@ -164,7 +163,7 @@ void DialogClientView::ShowDialogButtons() { if (!buttons) { // Register the escape key as an accelerator which will close the window // if there are no dialog buttons. - AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, false, false, false)); + AddAccelerator(ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE)); } } |