summaryrefslogtreecommitdiffstats
path: root/views/focus/focus_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'views/focus/focus_manager.h')
-rw-r--r--views/focus/focus_manager.h25
1 files changed, 15 insertions, 10 deletions
diff --git a/views/focus/focus_manager.h b/views/focus/focus_manager.h
index 133c027..28abcde 100644
--- a/views/focus/focus_manager.h
+++ b/views/focus/focus_manager.h
@@ -10,6 +10,7 @@
#endif
#include <vector>
#include <map>
+#include <list>
#include "base/basictypes.h"
#include "base/gfx/native_widget_types.h"
@@ -242,17 +243,17 @@ class FocusManager {
// their own FocusManager and need to return focus to the browser when closed.
FocusManager* GetParentFocusManager() const;
- // Register a keyboard accelerator for the specified target. If an
- // AcceleratorTarget is already registered for that accelerator, it is
- // returned.
+ // Register a keyboard accelerator for the specified target. If multiple
+ // targets are registered for an accelerator, a target registered later has
+ // higher priority.
// Note that we are currently limited to accelerators that are either:
// - a key combination including Ctrl or Alt
// - the escape key
// - the enter key
// - any F key (F1, F2, F3 ...)
// - any browser specific keys (as available on special keyboards)
- AcceleratorTarget* RegisterAccelerator(const Accelerator& accelerator,
- AcceleratorTarget* target);
+ void RegisterAccelerator(const Accelerator& accelerator,
+ AcceleratorTarget* target);
// Unregister the specified keyboard accelerator for the specified target.
void UnregisterAccelerator(const Accelerator& accelerator,
@@ -261,7 +262,11 @@ class FocusManager {
// Unregister all keyboard accelerator for the specified target.
void UnregisterAccelerators(AcceleratorTarget* target);
- // Activate the target associated with the specified accelerator if any.
+ // Activate the target associated with the specified accelerator.
+ // First, AcceleratorPressed handler of the most recently registered target
+ // is called, and if that handler processes the event (i.e. returns true),
+ // this method immediately returns. If not, we do the same thing on the next
+ // target, and so on.
// Returns true if an accelerator was activated.
bool ProcessAccelerator(const Accelerator& accelerator);
@@ -281,9 +286,8 @@ class FocusManager {
// Returns the AcceleratorTarget that should be activated for the specified
// keyboard accelerator, or NULL if no view is registered for that keyboard
// accelerator.
- // TODO(finnur): http://b/1307173 Make this private once the bug is fixed.
- AcceleratorTarget* GetTargetForAccelerator(
- const Accelerator& accelerator) const;
+ AcceleratorTarget* GetCurrentTargetForAccelerator(
+ const Accelerator& accelertor) const;
// Convenience method that returns true if the passed |key_event| should
// trigger tab traversal (if it is a TAB key press with or without SHIFT
@@ -329,7 +333,8 @@ class FocusManager {
bool ignore_set_focus_msg_;
// The accelerators and associated targets.
- typedef std::map<Accelerator, AcceleratorTarget*> AcceleratorMap;
+ typedef std::list<AcceleratorTarget*> AcceleratorTargetList;
+ typedef std::map<Accelerator, AcceleratorTargetList> AcceleratorMap;
AcceleratorMap accelerators_;
// The list of registered keystroke listeners