Chromium Code Reviews| Index: chrome/browser/ui/panels/panel_view.cc |
| diff --git a/chrome/browser/ui/panels/panel_view.cc b/chrome/browser/ui/panels/panel_view.cc |
| index e0dd484c6f500e2bb9f8c737e21c163ae2580ed2..165b28d239be0ea24bdf93eb00ed2287bf7ed13d 100644 |
| --- a/chrome/browser/ui/panels/panel_view.cc |
| +++ b/chrome/browser/ui/panels/panel_view.cc |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/ui/panels/panel_view.h" |
| #include "base/logging.h" |
| +#include "chrome/app/chrome_command_ids.h" |
| #include "chrome/browser/ui/panels/panel.h" |
| #include "chrome/browser/ui/panels/panel_bounds_animation.h" |
| #include "chrome/browser/ui/panels/panel_frame_view.h" |
| @@ -24,6 +25,33 @@ |
| namespace { |
| +// Supported accelerators. |
| +// Note: We can't use the acclerator table defined in chrome/browser/ui/views |
| +// due to checkdeps violation. |
| +struct AcceleratorMapping { |
|
jennb
2012/08/07 00:38:07
Could also do this as:
const struct AcceleratorMa
|
| + ui::KeyboardCode keycode; |
| + int modifiers; |
| + int command_id; |
| +}; |
| +const AcceleratorMapping kPanelAcceleratorMap[] = { |
| + { ui::VKEY_W, ui::EF_CONTROL_DOWN, IDC_CLOSE_WINDOW }, |
| + { ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, IDC_CLOSE_WINDOW }, |
| + { ui::VKEY_F4, ui::EF_ALT_DOWN, IDC_CLOSE_WINDOW }, |
| + { ui::VKEY_R, ui::EF_CONTROL_DOWN, IDC_RELOAD }, |
| + { ui::VKEY_F5, ui::EF_NONE, IDC_RELOAD }, |
| + { ui::VKEY_R, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
| + IDC_RELOAD_IGNORING_CACHE }, |
| + { ui::VKEY_F5, ui::EF_CONTROL_DOWN, IDC_RELOAD_IGNORING_CACHE }, |
| + { ui::VKEY_F5, ui::EF_SHIFT_DOWN, IDC_RELOAD_IGNORING_CACHE }, |
| + { ui::VKEY_ESCAPE, ui::EF_NONE, IDC_STOP }, |
| + { ui::VKEY_OEM_MINUS, ui::EF_CONTROL_DOWN, IDC_ZOOM_MINUS }, |
| + { ui::VKEY_SUBTRACT, ui::EF_CONTROL_DOWN, IDC_ZOOM_MINUS }, |
| + { ui::VKEY_0, ui::EF_CONTROL_DOWN, IDC_ZOOM_NORMAL }, |
| + { ui::VKEY_NUMPAD0, ui::EF_CONTROL_DOWN, IDC_ZOOM_NORMAL }, |
| + { ui::VKEY_OEM_PLUS, ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, |
| + { ui::VKEY_ADD, ui::EF_CONTROL_DOWN, IDC_ZOOM_PLUS }, |
| +}; |
| + |
| // NativePanelTesting implementation. |
| class NativePanelTestingWin : public NativePanelTesting { |
| public: |
| @@ -142,10 +170,15 @@ PanelView::PanelView(Panel* panel, const gfx::Rect& bounds) |
| OnViewWasResized(); |
| + // Register accelarators supported by panels. |
| views::FocusManager* focus_manager = GetFocusManager(); |
| - ui::Accelerator accelerator(ui::VKEY_ESCAPE, ui::EF_NONE); |
| - focus_manager->RegisterAccelerator( |
| + for (size_t i = 0; i < arraysize(kPanelAcceleratorMap); ++i) { |
| + ui::Accelerator accelerator(kPanelAcceleratorMap[i].keycode, |
| + kPanelAcceleratorMap[i].modifiers); |
| + accelerator_table_[accelerator] = kPanelAcceleratorMap[i].command_id; |
| + focus_manager->RegisterAccelerator( |
| accelerator, ui::AcceleratorManager::kNormalPriority, this); |
| + } |
| } |
| PanelView::~PanelView() { |
| @@ -306,6 +339,16 @@ bool PanelView::PreHandlePanelKeyboardEvent( |
| void PanelView::HandlePanelKeyboardEvent( |
| const content::NativeWebKeyboardEvent& event) { |
| + views::FocusManager* focus_manager = GetFocusManager(); |
| + if (focus_manager->shortcut_handling_suspended()) |
| + return; |
| + |
| + ui::Accelerator accelerator( |
| + static_cast<ui::KeyboardCode>(event.windowsKeyCode), |
| + content::GetModifiersFromNativeWebKeyboardEvent(event)); |
| + if (event.type == WebKit::WebInputEvent::KeyUp) |
| + accelerator.set_type(ui::ET_KEY_RELEASED); |
| + focus_manager->ProcessAccelerator(accelerator); |
| } |
| void PanelView::FullScreenModeChanged(bool is_full_screen) { |
| @@ -519,7 +562,10 @@ bool PanelView::AcceleratorPressed(const ui::Accelerator& accelerator) { |
| if (mouse_dragging_state_ == DRAGGING_STARTED) |
| return true; |
| - return views::View::AcceleratorPressed(accelerator); |
| + std::map<ui::Accelerator, int>::const_iterator iter = |
| + accelerator_table_.find(accelerator); |
| + DCHECK(iter != accelerator_table_.end()); |
| + return panel_->ExecuteCommandIfEnabled(iter->second); |
| } |
| void PanelView::OnWidgetActivationChanged(views::Widget* widget, bool active) { |