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

Unified Diff: ash/system/tray/system_tray.cc

Issue 2948223002: Revert of Do not activate TrayBubbleView by default (Closed)
Patch Set: Created 3 years, 6 months 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
« no previous file with comments | « ash/system/tray/system_tray.h ('k') | ash/system/tray/system_tray_bubble.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/system/tray/system_tray.cc
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc
index d129fba629f271ca16bda49ec0d24a31ae84667f..66ca2527aa0a3fcbdf222f0f1912912471c14af7 100644
--- a/ash/system/tray/system_tray.cc
+++ b/ash/system/tray/system_tray.cc
@@ -8,7 +8,6 @@
#include <map>
#include <vector>
-#include "ash/accelerators/accelerator_controller.h"
#include "ash/key_event_watcher.h"
#include "ash/login_status.h"
#include "ash/public/cpp/config.h"
@@ -119,14 +118,19 @@
TrayBubbleView::InitParams* init_params,
bool is_persistent) {
DCHECK(anchor);
-
- is_persistent_ = is_persistent;
-
const LoginStatus login_status =
Shell::Get()->session_controller()->login_status();
bubble_->InitView(anchor, login_status, init_params);
bubble_->bubble_view()->set_anchor_view_insets(anchor_insets);
bubble_wrapper_.reset(new TrayBubbleWrapper(tray, bubble_->bubble_view()));
+ is_persistent_ = is_persistent;
+
+ // If ChromeVox is enabled, focus the default item if no item is focused and
+ // there isn't a delayed close.
+ if (Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled() &&
+ !is_persistent) {
+ bubble_->FocusDefaultIfNeeded();
+ }
}
// Convenience accessors:
@@ -206,6 +210,7 @@
SystemTray::~SystemTray() {
// Destroy any child views that might have back pointers before ~View().
activation_observer_.reset();
+ key_event_watcher_.reset();
system_bubble_.reset();
for (const auto& item : items_)
item->OnTrayViewDestroyed();
@@ -432,6 +437,9 @@
if (system_bubble_.get() && creation_type == BUBBLE_USE_EXISTING) {
system_bubble_->bubble()->UpdateView(items, bubble_type);
+ // If ChromeVox is enabled, focus the default item if no item is focused.
+ if (Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled())
+ system_bubble_->bubble()->FocusDefaultIfNeeded();
} else {
// Cleanup the existing bubble before showing a new one. Otherwise, it's
// possible to confuse the new system bubble with the old one during
@@ -449,6 +457,8 @@
init_params.anchor_alignment = GetAnchorAlignment();
init_params.min_width = kTrayMenuMinimumWidth;
init_params.max_width = kTrayPopupMaxWidth;
+ // TODO(oshima): Change TrayBubbleView itself.
+ init_params.can_activate = false;
// The bubble is not initially activatable, but will become activatable if
// the user presses Tab. For behavioral consistency with the non-activatable
// scenario, don't close on deactivation after Tab either.
@@ -477,6 +487,10 @@
if (!detailed)
default_bubble_height_ = system_bubble_->bubble_view()->height();
+ key_event_watcher_.reset();
+ if (can_activate)
+ CreateKeyEventWatcher();
+
if (detailed && items.size() > 0)
detailed_item_ = items[0];
else
@@ -567,28 +581,8 @@
system_bubble_->bubble()->RestartAutoCloseTimer();
}
-void SystemTray::RegisterAccelerators(
- const std::vector<ui::Accelerator>& accelerators,
- views::TrayBubbleView* tray_bubble_view) {
- Shell::Get()->accelerator_controller()->Register(accelerators,
- tray_bubble_view);
-}
-
-void SystemTray::UnregisterAllAccelerators(
- views::TrayBubbleView* tray_bubble_view) {
- Shell::Get()->accelerator_controller()->UnregisterAll(tray_bubble_view);
-}
-
base::string16 SystemTray::GetAccessibleNameForBubble() {
return GetAccessibleNameForTray();
-}
-
-bool SystemTray::ShouldEnableExtraKeyboardAccessibility() {
- // Do not enable extra keyboard accessibility for persistent system bubble.
- // e.g. volume slider. Persistent system bubble is a bubble which is not
- // closed even if user clicks outside of the bubble.
- return system_bubble_ && !system_bubble_->is_persistent() &&
- Shell::Get()->accessibility_delegate()->IsSpokenFeedbackEnabled();
}
void SystemTray::HideBubble(const TrayBubbleView* bubble_view) {
@@ -606,6 +600,24 @@
views::Widget* widget = GetSystemBubble()->bubble_view()->GetWidget();
widget->GetFocusManager()->OnKeyEvent(key_event);
+}
+
+void SystemTray::CreateKeyEventWatcher() {
+ key_event_watcher_ = ShellPort::Get()->CreateKeyEventWatcher();
+ // mustash does not yet support KeyEventWatcher. http://crbug.com/649600.
+ if (!key_event_watcher_)
+ return;
+ key_event_watcher_->AddKeyEventCallback(
+ ui::Accelerator(ui::VKEY_ESCAPE, ui::EF_NONE),
+ base::Bind(&SystemTray::CloseBubble, base::Unretained(this)));
+ key_event_watcher_->AddKeyEventCallback(
+ ui::Accelerator(ui::VKEY_TAB, ui::EF_NONE),
+ base::Bind(&SystemTray::ActivateAndStartNavigation,
+ base::Unretained(this)));
+ key_event_watcher_->AddKeyEventCallback(
+ ui::Accelerator(ui::VKEY_TAB, ui::EF_SHIFT_DOWN),
+ base::Bind(&SystemTray::ActivateAndStartNavigation,
+ base::Unretained(this)));
}
void SystemTray::ActivateBubble() {
@@ -635,6 +647,7 @@
void SystemTray::CloseSystemBubbleAndDeactivateSystemTray() {
activation_observer_.reset();
+ key_event_watcher_.reset();
system_bubble_.reset();
// When closing a system bubble with the alternate shelf layout, we need to
// turn off the active tinting of the shelf.
« no previous file with comments | « ash/system/tray/system_tray.h ('k') | ash/system/tray/system_tray_bubble.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698