summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-05 17:16:06 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-05 17:16:06 +0000
commit9d701d83d90582e42ee8a1a0036affc0026ed7e2 (patch)
treede949e8d7c0298c026c9b24acd8fbacb3c042565
parentfa8c4721f8c208098f1fa7abddbbafab1ac157e4 (diff)
downloadchromium_src-9d701d83d90582e42ee8a1a0036affc0026ed7e2.zip
chromium_src-9d701d83d90582e42ee8a1a0036affc0026ed7e2.tar.gz
chromium_src-9d701d83d90582e42ee8a1a0036affc0026ed7e2.tar.bz2
Add a new views delegate method for menu item accessibility notifications,
since GTK-based menus can't send a notification directly on a View*. The GTK implementation that sends these notifications is in: http://codereview.chromium.org/6538090/ BUG=none TEST=Manual testing on Chrome OS. Review URL: http://codereview.chromium.org/6623028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77046 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/ui/views/accessibility_event_router_views.cc25
-rw-r--r--chrome/browser/ui/views/accessibility_event_router_views.h9
-rw-r--r--chrome/browser/ui/views/accessibility_event_router_views_unittest.cc6
-rw-r--r--chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc6
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.cc10
-rw-r--r--chrome/browser/ui/views/chrome_views_delegate.h7
-rw-r--r--views/test/test_views_delegate.h6
-rw-r--r--views/views_delegate.h9
8 files changed, 77 insertions, 1 deletions
diff --git a/chrome/browser/ui/views/accessibility_event_router_views.cc b/chrome/browser/ui/views/accessibility_event_router_views.cc
index b296cac..9fb2e6a 100644
--- a/chrome/browser/ui/views/accessibility_event_router_views.cc
+++ b/chrome/browser/ui/views/accessibility_event_router_views.cc
@@ -83,6 +83,30 @@ void AccessibilityEventRouterViews::HandleAccessibilityEvent(
}
}
+void AccessibilityEventRouterViews::HandleMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu) {
+ if (!ExtensionAccessibilityEventRouter::GetInstance()->
+ IsAccessibilityEnabled()) {
+ return;
+ }
+
+ if (!most_recent_profile_)
+ return;
+
+ AccessibilityMenuItemInfo info(
+ most_recent_profile_,
+ WideToUTF8(menu_item_name),
+ has_submenu,
+ item_index,
+ item_count);
+ SendAccessibilityNotification(
+ NotificationType::ACCESSIBILITY_CONTROL_FOCUSED, &info);
+}
+
//
// Private methods
//
@@ -114,7 +138,6 @@ void AccessibilityEventRouterViews::DispatchAccessibilityNotification(
}
most_recent_profile_ = profile;
-
std::string class_name = view->GetClassName();
if (class_name == views::MenuButton::kViewClassName ||
type == NotificationType::ACCESSIBILITY_MENU_OPENED ||
diff --git a/chrome/browser/ui/views/accessibility_event_router_views.h b/chrome/browser/ui/views/accessibility_event_router_views.h
index 77b256d..3d193cc 100644
--- a/chrome/browser/ui/views/accessibility_event_router_views.h
+++ b/chrome/browser/ui/views/accessibility_event_router_views.h
@@ -56,6 +56,15 @@ class AccessibilityEventRouterViews {
void HandleAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type);
+ // Handle a menu item being focused (separate because a menu item is
+ // not necessarily its own view).
+ void HandleMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu);
+
private:
AccessibilityEventRouterViews();
virtual ~AccessibilityEventRouterViews();
diff --git a/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc
index caecfbb..ee8b31f 100644
--- a/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc
+++ b/chrome/browser/ui/views/accessibility_event_router_views_unittest.cc
@@ -50,6 +50,12 @@ class AccessibilityViewsDelegate : public views::ViewsDelegate {
AccessibilityEventRouterViews::GetInstance()->HandleAccessibilityEvent(
view, event_type);
}
+ virtual void NotifyMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu) {}
#if defined(OS_WIN)
virtual HICON GetDefaultWindowIcon() const {
return NULL;
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
index 49ea7e2..48c614f 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view_test.cc
@@ -85,6 +85,12 @@ class ViewsDelegateImpl : public views::ViewsDelegate {
virtual void NotifyAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type) {}
+ virtual void NotifyMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu) {}
#if defined(OS_WIN)
virtual HICON GetDefaultWindowIcon() const { return 0; }
diff --git a/chrome/browser/ui/views/chrome_views_delegate.cc b/chrome/browser/ui/views/chrome_views_delegate.cc
index 3771682..959e4e2 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.cc
+++ b/chrome/browser/ui/views/chrome_views_delegate.cc
@@ -119,6 +119,16 @@ void ChromeViewsDelegate::NotifyAccessibilityEvent(
view, event_type);
}
+void ChromeViewsDelegate::NotifyMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu) {
+ AccessibilityEventRouterViews::GetInstance()->HandleMenuItemFocused(
+ menu_name, menu_item_name, item_index, item_count, has_submenu);
+}
+
#if defined(OS_WIN)
HICON ChromeViewsDelegate::GetDefaultWindowIcon() const {
return GetAppIcon();
diff --git a/chrome/browser/ui/views/chrome_views_delegate.h b/chrome/browser/ui/views/chrome_views_delegate.h
index c48f07b..8c5112e 100644
--- a/chrome/browser/ui/views/chrome_views_delegate.h
+++ b/chrome/browser/ui/views/chrome_views_delegate.h
@@ -33,6 +33,13 @@ class ChromeViewsDelegate : public views::ViewsDelegate {
bool* maximized) const;
virtual void NotifyAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type);
+ virtual void NotifyMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu);
+
#if defined(OS_WIN)
virtual HICON GetDefaultWindowIcon() const;
#endif
diff --git a/views/test/test_views_delegate.h b/views/test/test_views_delegate.h
index cae1a64f..2ac03ae 100644
--- a/views/test/test_views_delegate.h
+++ b/views/test/test_views_delegate.h
@@ -40,6 +40,12 @@ class TestViewsDelegate : public views::ViewsDelegate {
}
virtual void NotifyAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type) {}
+ virtual void NotifyMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu) {}
#if defined(OS_WIN)
virtual HICON GetDefaultWindowIcon() const {
return NULL;
diff --git a/views/views_delegate.h b/views/views_delegate.h
index 98b734e..5c775c8 100644
--- a/views/views_delegate.h
+++ b/views/views_delegate.h
@@ -63,6 +63,15 @@ class ViewsDelegate {
virtual void NotifyAccessibilityEvent(
views::View* view, AccessibilityTypes::Event event_type) = 0;
+ // For accessibility, notify the delegate that a menu item was focused
+ // so that alternate feedback (speech / magnified text) can be provided.
+ virtual void NotifyMenuItemFocused(
+ const std::wstring& menu_name,
+ const std::wstring& menu_item_name,
+ int item_index,
+ int item_count,
+ bool has_submenu) = 0;
+
#if defined(OS_WIN)
// Retrieves the default window icon to use for windows if none is specified.
virtual HICON GetDefaultWindowIcon() const = 0;