Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2718)

Unified Diff: chrome/browser/chromeos/accessibility/accessibility_manager.cc

Issue 1274563004: Show ChromeVox caption panel when spoken feedback is enabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@chromevox_panel_html
Patch Set: Add hook to disable/close ChromeVox Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/accessibility/accessibility_manager.cc
diff --git a/chrome/browser/chromeos/accessibility/accessibility_manager.cc b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
index 95ce0f271dcda852654e20af63be0e5cda4d6928..d0aca3d8af4aecf58e1f589de2aebaa95de26105 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_manager.cc
+++ b/chrome/browser/chromeos/accessibility/accessibility_manager.cc
@@ -270,6 +270,27 @@ void UnloadChromeVoxExtension(Profile* profile) {
} // namespace
+class ChromeVoxPanelWidgetObserver : public views::WidgetObserver {
+ public:
+ ChromeVoxPanelWidgetObserver(views::Widget* widget,
+ AccessibilityManager* manager)
+ : widget_(widget), manager_(manager) {
+ widget_->AddObserver(this);
+ }
+
+ void OnWidgetClosing(views::Widget* widget) override {
+ CHECK_EQ(widget_, widget);
+ widget_->RemoveObserver(this);
+ manager_->OnChromeVoxPanelClosing();
+ }
+
+ private:
+ views::Widget* widget_;
+ AccessibilityManager* manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeVoxPanelWidgetObserver);
+};
+
///////////////////////////////////////////////////////////////////////////////
// AccessibilityStatusEventDetails
@@ -377,6 +398,8 @@ AccessibilityManager::AccessibilityManager()
braille_display_connected_(false),
scoped_braille_observer_(this),
braille_ime_current_(false),
+ chromevox_panel_(nullptr),
+ chromevox_panel_widget_observer_(nullptr),
weak_ptr_factory_(this) {
notification_registrar_.Add(this,
chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE,
@@ -636,6 +659,11 @@ void AccessibilityManager::LoadChromeVoxToLockScreen(
}
void AccessibilityManager::UnloadChromeVox() {
+ if (chromevox_panel_) {
+ chromevox_panel_->Close();
+ chromevox_panel_ = nullptr;
+ }
+
if (chrome_vox_loaded_on_lock_screen_)
UnloadChromeVoxFromLockScreen();
@@ -1138,6 +1166,10 @@ void AccessibilityManager::PostLoadChromeVox(Profile* profile) {
should_speak_chrome_vox_announcements_on_user_screen_ =
chrome_vox_loaded_on_lock_screen_;
+
+ chromevox_panel_ = new ChromeVoxPanel(profile_);
+ chromevox_panel_widget_observer_ =
+ new ChromeVoxPanelWidgetObserver(chromevox_panel_->GetWidget(), this);
}
void AccessibilityManager::PostUnloadChromeVox(Profile* profile) {
@@ -1148,4 +1180,20 @@ void AccessibilityManager::PostUnloadChromeVox(Profile* profile) {
std::vector<gfx::Rect>());
}
+gfx::Insets AccessibilityManager::GetWorkAreaInsets(
+ aura::Window* root_window) const {
+ if (chromevox_panel_ && chromevox_panel_->GetRootWindow() == root_window)
+ return gfx::Insets(chromevox_panel_->GetHeight(), 0, 0, 0);
+ else
+ return gfx::Insets();
+}
+
+void AccessibilityManager::OnChromeVoxPanelClosing() {
+ aura::Window* root_window = chromevox_panel_->GetRootWindow();
+ delete chromevox_panel_widget_observer_;
+ chromevox_panel_widget_observer_ = nullptr;
+ chromevox_panel_ = nullptr;
+ ash::Shell::GetInstance()->UpdateDisplayWorkAreaInsets(root_window);
+}
+
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698