OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "views/controls/menu/submenu_view.h" | 5 #include "views/controls/menu/submenu_view.h" |
6 | 6 |
7 #include "gfx/canvas.h" | 7 #include "gfx/canvas.h" |
| 8 #include "views/accessibility/view_accessibility.h" |
8 #include "views/controls/menu/menu_config.h" | 9 #include "views/controls/menu/menu_config.h" |
9 #include "views/controls/menu/menu_controller.h" | 10 #include "views/controls/menu/menu_controller.h" |
10 #include "views/controls/menu/menu_host.h" | 11 #include "views/controls/menu/menu_host.h" |
11 #include "views/controls/menu/menu_scroll_view_container.h" | 12 #include "views/controls/menu/menu_scroll_view_container.h" |
12 #include "views/widget/root_view.h" | 13 #include "views/widget/root_view.h" |
13 | 14 |
14 // Height of the drop indicator. This should be an even number. | 15 // Height of the drop indicator. This should be an even number. |
15 static const int kDropIndicatorHeight = 2; | 16 static const int kDropIndicatorHeight = 2; |
16 | 17 |
17 // Color of the drop indicator. | 18 // Color of the drop indicator. |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 host_->ShowMenuHost(do_capture); | 227 host_->ShowMenuHost(do_capture); |
227 return; | 228 return; |
228 } | 229 } |
229 | 230 |
230 host_ = MenuHost::Create(this); | 231 host_ = MenuHost::Create(this); |
231 // Force construction of the scroll view container. | 232 // Force construction of the scroll view container. |
232 GetScrollViewContainer(); | 233 GetScrollViewContainer(); |
233 // Make sure the first row is visible. | 234 // Make sure the first row is visible. |
234 ScrollRectToVisible(gfx::Rect(gfx::Point(), gfx::Size(1, 1))); | 235 ScrollRectToVisible(gfx::Rect(gfx::Point(), gfx::Size(1, 1))); |
235 host_->Init(parent, bounds, scroll_view_container_, do_capture); | 236 host_->Init(parent, bounds, scroll_view_container_, do_capture); |
| 237 |
| 238 GetScrollViewContainer()->NotifyAccessibilityEvent( |
| 239 AccessibilityTypes::EVENT_MENUPOPUPSTART); |
236 } | 240 } |
237 | 241 |
238 void SubmenuView::Reposition(const gfx::Rect& bounds) { | 242 void SubmenuView::Reposition(const gfx::Rect& bounds) { |
239 if (host_) | 243 if (host_) |
240 host_->SetMenuHostBounds(bounds); | 244 host_->SetMenuHostBounds(bounds); |
241 } | 245 } |
242 | 246 |
243 void SubmenuView::Close() { | 247 void SubmenuView::Close() { |
244 if (host_) { | 248 if (host_) { |
| 249 GetScrollViewContainer()->NotifyAccessibilityEvent( |
| 250 AccessibilityTypes::EVENT_MENUPOPUPEND); |
| 251 |
245 host_->DestroyMenuHost(); | 252 host_->DestroyMenuHost(); |
246 host_ = NULL; | 253 host_ = NULL; |
247 } | 254 } |
248 } | 255 } |
249 | 256 |
250 void SubmenuView::Hide() { | 257 void SubmenuView::Hide() { |
251 if (host_) | 258 if (host_) |
252 host_->HideMenuHost(); | 259 host_->HideMenuHost(); |
253 } | 260 } |
254 | 261 |
(...skipping 23 matching lines...) Expand all Loading... |
278 // selection if the drop is on the passed in item and the drop position is | 285 // selection if the drop is on the passed in item and the drop position is |
279 // ON. | 286 // ON. |
280 return (drop_item_ == item && drop_position_ == MenuDelegate::DROP_ON); | 287 return (drop_item_ == item && drop_position_ == MenuDelegate::DROP_ON); |
281 } | 288 } |
282 | 289 |
283 MenuScrollViewContainer* SubmenuView::GetScrollViewContainer() { | 290 MenuScrollViewContainer* SubmenuView::GetScrollViewContainer() { |
284 if (!scroll_view_container_) { | 291 if (!scroll_view_container_) { |
285 scroll_view_container_ = new MenuScrollViewContainer(this); | 292 scroll_view_container_ = new MenuScrollViewContainer(this); |
286 // Otherwise MenuHost would delete us. | 293 // Otherwise MenuHost would delete us. |
287 scroll_view_container_->set_parent_owned(false); | 294 scroll_view_container_->set_parent_owned(false); |
| 295 |
| 296 // Use the parent menu item accessible name for the menu view. |
| 297 std::wstring accessible_name; |
| 298 GetMenuItem()->GetAccessibleName(&accessible_name); |
| 299 scroll_view_container_->SetAccessibleName(accessible_name); |
288 } | 300 } |
289 return scroll_view_container_; | 301 return scroll_view_container_; |
290 } | 302 } |
291 | 303 |
292 gfx::NativeWindow SubmenuView::native_window() const { | 304 gfx::NativeWindow SubmenuView::native_window() const { |
293 return host_ ? host_->GetMenuHostWindow() : NULL; | 305 return host_ ? host_->GetMenuHostWindow() : NULL; |
294 } | 306 } |
295 | 307 |
296 void SubmenuView::MenuHostDestroyed() { | 308 void SubmenuView::MenuHostDestroyed() { |
297 host_ = NULL; | 309 host_ = NULL; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 item_bounds.set_height(kDropIndicatorHeight); | 350 item_bounds.set_height(kDropIndicatorHeight); |
339 return item_bounds; | 351 return item_bounds; |
340 | 352 |
341 default: | 353 default: |
342 // Don't render anything for on. | 354 // Don't render anything for on. |
343 return gfx::Rect(); | 355 return gfx::Rect(); |
344 } | 356 } |
345 } | 357 } |
346 | 358 |
347 } // namespace views | 359 } // namespace views |
OLD | NEW |