| Index: chrome/browser/views/accessible_toolbar_view.cc
|
| diff --git a/chrome/browser/views/accessible_toolbar_view.cc b/chrome/browser/views/accessible_toolbar_view.cc
|
| deleted file mode 100644
|
| index 425d6995d8aad9213310f86a2c66c49e35751cda..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/views/accessible_toolbar_view.cc
|
| +++ /dev/null
|
| @@ -1,273 +0,0 @@
|
| -// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/logging.h"
|
| -#include "chrome/browser/view_ids.h"
|
| -#include "chrome/browser/views/frame/browser_view.h"
|
| -#include "chrome/browser/views/accessible_toolbar_view.h"
|
| -#include "views/controls/button/menu_button.h"
|
| -#include "views/focus/view_storage.h"
|
| -#include "views/widget/root_view.h"
|
| -#include "views/widget/tooltip_manager.h"
|
| -#include "views/widget/widget.h"
|
| -
|
| -AccessibleToolbarView::AccessibleToolbarView()
|
| - : selected_focused_view_(NULL),
|
| - last_focused_view_storage_id_(
|
| - views::ViewStorage::GetSharedInstance()->CreateStorageID()) {
|
| -}
|
| -
|
| -AccessibleToolbarView::~AccessibleToolbarView() {
|
| -}
|
| -
|
| -void AccessibleToolbarView::InitiateTraversal() {
|
| - // We only traverse if accessibility is active.
|
| - if (selected_focused_view_ != NULL)
|
| - return;
|
| -
|
| - // Save the last focused view so that when the user presses ESC, it will
|
| - // return back to the last focus.
|
| - views::ViewStorage* view_storage = views::ViewStorage::GetSharedInstance();
|
| - view_storage->StoreView(last_focused_view_storage_id_,
|
| - GetRootView()->GetFocusedView());
|
| -
|
| - // Request focus to the toolbar.
|
| - RequestFocus();
|
| -}
|
| -
|
| -int AccessibleToolbarView::GetNextAccessibleViewIndex(int view_index,
|
| - bool forward) {
|
| - int modifier = forward ? 1 : -1;
|
| - int current_view_index = view_index + modifier;
|
| -
|
| - while ((current_view_index >= 0) &&
|
| - (current_view_index < GetChildViewCount())) {
|
| - // Try to find the next available view that can be interacted with. That
|
| - // view must be enabled, visible, and traversable.
|
| - views::View* current_view = GetChildViewAt(current_view_index);
|
| - if (current_view->IsEnabled() && current_view->IsVisible() &&
|
| - IsAccessibleViewTraversable(current_view)) {
|
| - return current_view_index;
|
| - }
|
| - current_view_index += modifier;
|
| - }
|
| -
|
| - // No button is available in the specified direction.
|
| - return -1;
|
| -}
|
| -
|
| -bool AccessibleToolbarView::IsAccessibleViewTraversable(views::View* view) {
|
| - return true;
|
| -}
|
| -
|
| -void AccessibleToolbarView::DidGainFocus() {
|
| - // Check to see if the accessible focus should be restored to previously
|
| - // focused button. The must be enabled and visible in the toolbar.
|
| - if (!selected_focused_view_ ||
|
| - !selected_focused_view_->IsEnabled() ||
|
| - !selected_focused_view_->IsVisible()) {
|
| - // Find first accessible child (-1 to start search at parent).
|
| - int first_acc_child = GetNextAccessibleViewIndex(-1, true);
|
| -
|
| - // No buttons enabled or visible.
|
| - if (first_acc_child == -1)
|
| - return;
|
| -
|
| - selected_focused_view_ = GetChildViewAt(first_acc_child);
|
| - }
|
| -
|
| - // Set the focus to the current accessible view.
|
| - SetFocusToAccessibleView();
|
| -}
|
| -
|
| -void AccessibleToolbarView::WillLoseFocus() {
|
| - // Any tooltips that are active should be hidden when toolbar loses focus.
|
| - if (GetWidget() && GetWidget()->GetTooltipManager())
|
| - GetWidget()->GetTooltipManager()->HideKeyboardTooltip();
|
| -
|
| - // Removes the child accessibility view's focus and the view from the
|
| - // ViewStorage, when toolbar loses focus.
|
| - if (selected_focused_view_) {
|
| - selected_focused_view_->SetHotTracked(false);
|
| - selected_focused_view_ = NULL;
|
| - views::ViewStorage* view_storage = views::ViewStorage::GetSharedInstance();
|
| - view_storage->RemoveView(last_focused_view_storage_id_);
|
| - }
|
| -}
|
| -
|
| -void AccessibleToolbarView::ShowContextMenu(int x, int y,
|
| - bool is_mouse_gesture) {
|
| - if (selected_focused_view_)
|
| - selected_focused_view_->ShowContextMenu(x, y, is_mouse_gesture);
|
| -}
|
| -
|
| -void AccessibleToolbarView::RequestFocus() {
|
| - // When the toolbar needs to request focus, the default implementation of
|
| - // View::RequestFocus requires the View to be focusable. Since ToolbarView is
|
| - // not technically focused, we need to temporarily set and remove focus so
|
| - // that it can focus back to its focused state. |selected_focused_view_| is
|
| - // not necessarily set since it can be null if this view has already lost
|
| - // focus, such as traversing through the context menu.
|
| - SetFocusable(true);
|
| - View::RequestFocus();
|
| - SetFocusable(false);
|
| -}
|
| -
|
| -bool AccessibleToolbarView::OnKeyPressed(const views::KeyEvent& e) {
|
| - // Paranoia check, button should be initialized upon toolbar gaining focus.
|
| - if (!selected_focused_view_)
|
| - return View::OnKeyPressed(e);
|
| -
|
| - int focused_view = GetChildIndex(selected_focused_view_);
|
| - int next_view = focused_view;
|
| -
|
| - switch (e.GetKeyCode()) {
|
| - case base::VKEY_LEFT:
|
| - next_view = GetNextAccessibleViewIndex(focused_view, false);
|
| - break;
|
| - case base::VKEY_RIGHT:
|
| - next_view = GetNextAccessibleViewIndex(focused_view, true);
|
| - break;
|
| - case base::VKEY_DOWN:
|
| - case base::VKEY_RETURN:
|
| - if (selected_focused_view_->GetClassName() ==
|
| - views::MenuButton::kViewClassName) {
|
| - // If a menu button is activated and its menu is displayed, then the
|
| - // active tooltip should be hidden.
|
| - if (GetWidget()->GetTooltipManager())
|
| - GetWidget()->GetTooltipManager()->HideKeyboardTooltip();
|
| -
|
| - // Safe to cast, given to above check.
|
| - static_cast<views::MenuButton*>(selected_focused_view_)->Activate();
|
| -
|
| - // If activate did not trigger a focus change, the menu button should
|
| - // remain hot tracked since the view is still focused.
|
| - if (selected_focused_view_) {
|
| - // Re-enable hot-tracking, as Activate() will disable it.
|
| - selected_focused_view_->SetHotTracked(true);
|
| - }
|
| - return true;
|
| - }
|
| - default:
|
| - // If key is not handled explicitly, pass it on to view.
|
| - return selected_focused_view_->OnKeyPressed(e);
|
| - }
|
| -
|
| - // No buttons enabled, visible, or focus hasn't moved.
|
| - if (next_view == -1)
|
| - return false;
|
| -
|
| - // Remove hot-tracking from old focused button.
|
| - selected_focused_view_->SetHotTracked(false);
|
| -
|
| - // All is well, update the focused child member variable.
|
| - selected_focused_view_ = GetChildViewAt(next_view);
|
| -
|
| - // Set the focus to the current accessible view.
|
| - SetFocusToAccessibleView();
|
| - return true;
|
| -}
|
| -
|
| -bool AccessibleToolbarView::OnKeyReleased(const views::KeyEvent& e) {
|
| - // Paranoia check, button should be initialized upon toolbar gaining focus.
|
| - if (!selected_focused_view_)
|
| - return false;
|
| -
|
| - // Have keys be handled by the views themselves.
|
| - return selected_focused_view_->OnKeyReleased(e);
|
| -}
|
| -
|
| -bool AccessibleToolbarView::SkipDefaultKeyEventProcessing(
|
| - const views::KeyEvent& e) {
|
| - // Accessibility focus must be present in order to handle ESC and TAB related
|
| - // key events.
|
| - if (!selected_focused_view_)
|
| - return false;
|
| -
|
| - // The ancestor *must* be a BrowserView.
|
| - views::View* view = GetAncestorWithClassName(BrowserView::kViewClassName);
|
| - if (!view)
|
| - return false;
|
| -
|
| - // Given the check above, we can ensure its a BrowserView.
|
| - BrowserView* browser_view = static_cast<BrowserView*>(view);
|
| -
|
| - // Handle ESC and TAB events.
|
| - switch (e.GetKeyCode()) {
|
| - case base::VKEY_ESCAPE: {
|
| - // Retrieve the focused view from the storage so we can request focus back
|
| - // to it. If |focus_view| is null, we place focus on the default view.
|
| - // |selected_focused_view_| doesn't need to be reset here since it will be
|
| - // dealt within the WillLoseFocus method.
|
| - views::ViewStorage* view_storage =
|
| - views::ViewStorage::GetSharedInstance();
|
| - views::View* focused_view =
|
| - view_storage->RetrieveView(last_focused_view_storage_id_);
|
| - if (focused_view) {
|
| - view_storage->RemoveView(last_focused_view_storage_id_);
|
| - focused_view->RequestFocus();
|
| - } else {
|
| - browser_view->SetFocusToLocationBar();
|
| - }
|
| - return true;
|
| - }
|
| - case base::VKEY_TAB: {
|
| - if (e.IsShiftDown()) {
|
| - browser_view->TraverseNextAccessibleToolbar(false);
|
| - } else {
|
| - browser_view->TraverseNextAccessibleToolbar(true);
|
| - }
|
| - return true;
|
| - }
|
| - default: return false;
|
| - }
|
| -}
|
| -
|
| -bool AccessibleToolbarView::GetAccessibleName(std::wstring* name) {
|
| - *name = accessible_name_;
|
| - return !accessible_name_.empty();
|
| -}
|
| -
|
| -bool AccessibleToolbarView::GetAccessibleRole(AccessibilityTypes::Role* role) {
|
| - DCHECK(role);
|
| -
|
| - *role = AccessibilityTypes::ROLE_TOOLBAR;
|
| - return true;
|
| -}
|
| -
|
| -void AccessibleToolbarView::SetAccessibleName(const std::wstring& name) {
|
| - accessible_name_ = name;
|
| -}
|
| -
|
| -void AccessibleToolbarView::ViewHierarchyChanged(bool is_add, View* parent,
|
| - View* child) {
|
| - // When the toolbar is removed, traverse to the next accessible toolbar.
|
| - if (!is_add && parent->GetClassName() == BrowserView::kViewClassName) {
|
| - // Given the check above, we can ensure its a BrowserView.
|
| - BrowserView* browser_view = static_cast<BrowserView*>(parent);
|
| - browser_view->TraverseNextAccessibleToolbar(true);
|
| - }
|
| -}
|
| -
|
| -void AccessibleToolbarView::SetFocusToAccessibleView() {
|
| - // Hot-track new focused button.
|
| - selected_focused_view_->SetHotTracked(true);
|
| -
|
| - // Show the tooltip for the view that got the focus.
|
| - if (GetWidget()->GetTooltipManager()) {
|
| - GetWidget()->GetTooltipManager()->ShowKeyboardTooltip(
|
| - selected_focused_view_);
|
| - }
|
| -
|
| -#if defined(OS_WIN)
|
| - // Retrieve information to generate an accessible focus event.
|
| - gfx::NativeView wnd = GetWidget()->GetNativeView();
|
| - int view_id = selected_focused_view_->GetID();
|
| - // Notify Access Technology that there was a change in keyboard focus.
|
| - ::NotifyWinEvent(EVENT_OBJECT_FOCUS, wnd, OBJID_CLIENT,
|
| - static_cast<LONG>(view_id));
|
| -#else
|
| - NOTIMPLEMENTED();
|
| -#endif
|
| -}
|
|
|