summaryrefslogtreecommitdiffstats
path: root/chrome/views/view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/views/view.cc')
-rw-r--r--chrome/views/view.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/chrome/views/view.cc b/chrome/views/view.cc
index 9fccd77..1dbe9f8 100644
--- a/chrome/views/view.cc
+++ b/chrome/views/view.cc
@@ -988,6 +988,33 @@ void View::AddAccelerator(const Accelerator& accelerator) {
RegisterAccelerators();
}
+void View::RemoveAccelerator(const Accelerator& accelerator) {
+ std::vector<Accelerator>::iterator iter;
+ if (!accelerators_.get() ||
+ ((iter = std::find(accelerators_->begin(), accelerators_->end(),
+ accelerator)) == accelerators_->end())) {
+ NOTREACHED() << "Removing non-existing accelerator";
+ return;
+ }
+
+ accelerators_->erase(iter);
+ RootView* root_view = GetRootView();
+ if (!root_view) {
+ // We are not part of a view hierarchy, so there is nothing to do as we
+ // removed ourselves from accelerators_, we won't be registered when added
+ // to one.
+ return;
+ }
+
+ FocusManager* focus_manager = GetFocusManager();
+ if (focus_manager) {
+ // We may not have a FocusManager if the window containing us is being
+ // closed, in which case the FocusManager is being deleted so there is
+ // nothing to unregister.
+ focus_manager->UnregisterAccelerator(accelerator, this);
+ }
+}
+
void View::ResetAccelerators() {
if (accelerators_.get()) {
UnregisterAccelerators();