| Index: ui/views/focus/focus_manager.cc | 
| =================================================================== | 
| --- ui/views/focus/focus_manager.cc	(revision 123221) | 
| +++ ui/views/focus/focus_manager.cc	(working copy) | 
| @@ -10,7 +10,6 @@ | 
| #include "base/logging.h" | 
| #include "build/build_config.h" | 
| #include "ui/base/accelerators/accelerator.h" | 
| -#include "ui/base/accelerators/accelerator_manager.h" | 
| #include "ui/base/keycodes/keyboard_codes.h" | 
| #include "ui/views/focus/focus_search.h" | 
| #include "ui/views/focus/view_storage.h" | 
| @@ -74,11 +73,17 @@ | 
| return false; | 
| #endif | 
|  | 
| +  ui::Accelerator accelerator(event.key_code(), | 
| +                              event.IsShiftDown(), | 
| +                              event.IsControlDown(), | 
| +                              event.IsAltDown()); | 
| + | 
| #if defined(OS_WIN) | 
| // If the focused view wants to process the key event as is, let it be. | 
| // On Linux we always dispatch key events to the focused view first, so | 
| // we should not do this check here. See also NativeWidgetGtk::OnKeyEvent(). | 
| -  if (focused_view_ && focused_view_->SkipDefaultKeyEventProcessing(event)) | 
| +  if (focused_view_ && focused_view_->SkipDefaultKeyEventProcessing(event) && | 
| +      !accelerator_manager_->HasPriorityHandler(accelerator)) | 
| return true; | 
| #endif | 
|  | 
| @@ -125,10 +130,6 @@ | 
| // Process keyboard accelerators. | 
| // If the key combination matches an accelerator, the accelerator is | 
| // triggered, otherwise the key event is processed as usual. | 
| -  ui::Accelerator accelerator(event.key_code(), | 
| -                              event.IsShiftDown(), | 
| -                              event.IsControlDown(), | 
| -                              event.IsAltDown()); | 
| if (ProcessAccelerator(accelerator)) { | 
| // If a shortcut was activated for this keydown message, do not propagate | 
| // the event further. | 
| @@ -302,7 +303,7 @@ | 
| return; | 
| } | 
|  | 
| -  // TODO (jcampan): when a TabContents containing a popup is closed, the focus | 
| +  // TODO(jcivelli): when a TabContents containing a popup is closed, the focus | 
| // is stored twice causing an assert. We should find a better alternative than | 
| // removing the view from the storage explicitly. | 
| view_storage->RemoveView(stored_focused_view_storage_id_); | 
| @@ -405,8 +406,9 @@ | 
|  | 
| void FocusManager::RegisterAccelerator( | 
| const ui::Accelerator& accelerator, | 
| +    ui::AcceleratorManager::HandlerPriority priority, | 
| ui::AcceleratorTarget* target) { | 
| -  accelerator_manager_->Register(accelerator, target); | 
| +  accelerator_manager_->Register(accelerator, priority, target); | 
| } | 
|  | 
| void FocusManager::UnregisterAccelerator(const ui::Accelerator& accelerator, | 
| @@ -444,6 +446,11 @@ | 
| return accelerator_manager_->GetCurrentTarget(accelerator); | 
| } | 
|  | 
| +bool FocusManager::HasPriorityHandler( | 
| +    const ui::Accelerator& accelerator) const { | 
| +  return accelerator_manager_->HasPriorityHandler(accelerator); | 
| +} | 
| + | 
| // static | 
| bool FocusManager::IsTabTraversalKeyEvent(const KeyEvent& key_event) { | 
| return key_event.key_code() == ui::VKEY_TAB && !key_event.IsControlDown(); | 
|  |