summaryrefslogtreecommitdiffstats
path: root/chrome/views/view.cc
diff options
context:
space:
mode:
authorjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-08 01:13:25 +0000
committerjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-11-08 01:13:25 +0000
commite8e0f3691a410d6de40bfff021b0da33425f36cb (patch)
treeeba7275ce7aac42fb014896f2b65a09026c0499c /chrome/views/view.cc
parent4adc70599db32d760184ec908f11c7d000b6b79c (diff)
downloadchromium_src-e8e0f3691a410d6de40bfff021b0da33425f36cb.zip
chromium_src-e8e0f3691a410d6de40bfff021b0da33425f36cb.tar.gz
chromium_src-e8e0f3691a410d6de40bfff021b0da33425f36cb.tar.bz2
In dialogs, when the focus moves to a button, that button should become the default button.
When the focus is not a button, then the default button should be the one the delegate specifies. BUG=4132 TEST=Open the option dialog. OK should be the default and focused button. Move the focus around by pressing tab. When a button is selected, it should be the default button. Review URL: http://codereview.chromium.org/10230 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5056 0039d316-1c4b-4281-b951-d872f2087c98
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();