OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/ui/views/accessible_view_helper.h" | |
6 | |
7 #include "chrome/browser/accessibility_events.h" | |
8 #include "chrome/browser/profiles/profile.h" | |
9 #include "chrome/browser/ui/views/accessibility_event_router_views.h" | |
10 #include "chrome/common/notification_service.h" | |
11 #include "ui/base/l10n/l10n_util.h" | |
12 #include "views/controls/native/native_view_host.h" | |
13 #include "views/widget/widget.h" | |
14 #include "views/view.h" | |
15 | |
16 AccessibleViewHelper::AccessibleViewHelper( | |
17 views::View* view_tree, Profile* profile) | |
18 : accessibility_event_router_(AccessibilityEventRouterViews::GetInstance()), | |
19 profile_(profile), | |
20 view_tree_(view_tree) { | |
21 if (!accessibility_event_router_->AddViewTree(view_tree_, profile)) | |
22 view_tree_ = NULL; | |
23 | |
24 #if defined(OS_LINUX) | |
25 GtkWidget* widget = view_tree->GetWidget()->GetNativeView(); | |
26 widget_helper_.reset(new AccessibleWidgetHelper(widget, profile)); | |
27 #endif | |
28 } | |
29 | |
30 AccessibleViewHelper::~AccessibleViewHelper() { | |
31 if (!window_title_.empty()) { | |
32 AccessibilityWindowInfo info(profile_, window_title_); | |
33 NotificationService::current()->Notify( | |
34 NotificationType::ACCESSIBILITY_WINDOW_CLOSED, | |
35 Source<Profile>(profile_), | |
36 Details<AccessibilityWindowInfo>(&info)); | |
37 } | |
38 | |
39 if (view_tree_) { | |
40 accessibility_event_router_->RemoveViewTree(view_tree_); | |
41 for (std::vector<views::View*>::iterator iter = managed_views_.begin(); | |
42 iter != managed_views_.end(); | |
43 ++iter) { | |
44 accessibility_event_router_->RemoveView(*iter); | |
45 } | |
46 } | |
47 } | |
48 | |
49 void AccessibleViewHelper::SendOpenWindowNotification( | |
50 const std::string& window_title) { | |
51 window_title_ = window_title; | |
52 AccessibilityWindowInfo info(profile_, window_title); | |
53 NotificationService::current()->Notify( | |
54 NotificationType::ACCESSIBILITY_WINDOW_OPENED, | |
55 Source<Profile>(profile_), | |
56 Details<AccessibilityWindowInfo>(&info)); | |
57 } | |
58 | |
59 void AccessibleViewHelper::SetViewName(views::View* view, std::string name) { | |
60 if (!view_tree_) | |
61 return; | |
62 | |
63 accessibility_event_router_->SetViewName(view, name); | |
64 managed_views_.push_back(view); | |
65 | |
66 #if defined(OS_LINUX) | |
67 gfx::NativeView native_view = GetNativeView(view); | |
68 if (native_view) | |
69 widget_helper_->SetWidgetName(native_view, name); | |
70 #endif | |
71 } | |
72 | |
73 void AccessibleViewHelper::SetViewName(views::View* view, int string_id) { | |
74 const std::string name = l10n_util::GetStringUTF8(string_id); | |
75 SetViewName(view, name); | |
76 } | |
77 | |
78 gfx::NativeView AccessibleViewHelper::GetNativeView(views::View* view) const { | |
79 if (view->GetClassName() == views::NativeViewHost::kViewClassName) | |
80 return static_cast<views::NativeViewHost*>(view)->native_view(); | |
81 | |
82 for (int i = 0; i < view->GetChildViewCount(); i++) { | |
83 gfx::NativeView native_view = GetNativeView(view->GetChildViewAt(i)); | |
84 if (native_view) | |
85 return native_view; | |
86 } | |
87 | |
88 return NULL; | |
89 } | |
OLD | NEW |