diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-05 17:16:06 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-05 17:16:06 +0000 |
commit | 9d701d83d90582e42ee8a1a0036affc0026ed7e2 (patch) | |
tree | de949e8d7c0298c026c9b24acd8fbacb3c042565 | |
parent | fa8c4721f8c208098f1fa7abddbbafab1ac157e4 (diff) | |
download | chromium_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
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; |