Commit 7af6353e authored by Tetsui Ohkubo's avatar Tetsui Ohkubo Committed by Commit Bot

Unified: Close on other widget activation.

This CL closes UnifiedSystemTray when other widgets are activated.
With this CL, we can also remove some CloseBubble() that manually
closes UnifiedSystemTray.

TEST=manual
BUG=864247

Change-Id: I7ef09aec5bb79213ee87407d2fe04179847968f7
Reviewed-on: https://chromium-review.googlesource.com/1140096
Commit-Queue: Tetsui Ohkubo <tetsui@chromium.org>
Reviewed-by: default avatarYoshiki Iguchi <yoshiki@chromium.org>
Cr-Commit-Position: refs/heads/master@{#576405}
parent d6417bc1
...@@ -12,9 +12,13 @@ ...@@ -12,9 +12,13 @@
#include "ash/system/unified/unified_system_tray.h" #include "ash/system/unified/unified_system_tray.h"
#include "ash/system/unified/unified_system_tray_controller.h" #include "ash/system/unified/unified_system_tray_controller.h"
#include "ash/system/unified/unified_system_tray_view.h" #include "ash/system/unified/unified_system_tray_view.h"
#include "ash/wm/container_finder.h"
#include "ash/wm/tablet_mode/tablet_mode_controller.h" #include "ash/wm/tablet_mode/tablet_mode_controller.h"
#include "ash/wm/widget_finder.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
#include "ui/wm/core/window_util.h"
#include "ui/wm/public/activation_client.h"
namespace ash { namespace ash {
...@@ -107,9 +111,11 @@ UnifiedSystemTrayBubble::UnifiedSystemTrayBubble(UnifiedSystemTray* tray, ...@@ -107,9 +111,11 @@ UnifiedSystemTrayBubble::UnifiedSystemTrayBubble(UnifiedSystemTray* tray,
tray->tray_event_filter()->AddBubble(this); tray->tray_event_filter()->AddBubble(this);
Shell::Get()->tablet_mode_controller()->AddObserver(this); Shell::Get()->tablet_mode_controller()->AddObserver(this);
Shell::Get()->activation_client()->AddObserver(this);
} }
UnifiedSystemTrayBubble::~UnifiedSystemTrayBubble() { UnifiedSystemTrayBubble::~UnifiedSystemTrayBubble() {
Shell::Get()->activation_client()->RemoveObserver(this);
if (Shell::Get()->tablet_mode_controller()) if (Shell::Get()->tablet_mode_controller())
Shell::Get()->tablet_mode_controller()->RemoveObserver(this); Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
tray_->tray_event_filter()->RemoveBubble(this); tray_->tray_event_filter()->RemoveBubble(this);
...@@ -229,6 +235,25 @@ void UnifiedSystemTrayBubble::OnWidgetDestroying(views::Widget* widget) { ...@@ -229,6 +235,25 @@ void UnifiedSystemTrayBubble::OnWidgetDestroying(views::Widget* widget) {
tray_->CloseBubble(); tray_->CloseBubble();
} }
void UnifiedSystemTrayBubble::OnWindowActivated(ActivationReason reason,
aura::Window* gained_active,
aura::Window* lost_active) {
if (!gained_active)
return;
// Don't close the bubble if a transient child is gaining or losing
// activation.
if (bubble_widget_ == GetInternalWidgetForWindow(gained_active) ||
::wm::HasTransientAncestor(gained_active,
bubble_widget_->GetNativeWindow()) ||
(lost_active && ::wm::HasTransientAncestor(
lost_active, bubble_widget_->GetNativeWindow()))) {
return;
}
tray_->CloseBubble();
}
void UnifiedSystemTrayBubble::RecordTimeToClick() { void UnifiedSystemTrayBubble::RecordTimeToClick() {
// Ignore if the tray bubble is not opened by click. // Ignore if the tray bubble is not opened by click.
if (!time_shown_by_click_) if (!time_shown_by_click_)
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "base/optional.h" #include "base/optional.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "ui/views/widget/widget_observer.h" #include "ui/views/widget/widget_observer.h"
#include "ui/wm/public/activation_change_observer.h"
namespace ui { namespace ui {
class LayerOwner; class LayerOwner;
...@@ -35,8 +36,9 @@ class UnifiedSystemTrayView; ...@@ -35,8 +36,9 @@ class UnifiedSystemTrayView;
// It is possible that the bubble widget is closed on deactivation. In such // It is possible that the bubble widget is closed on deactivation. In such
// case, this class calls UnifiedSystemTray::CloseBubble() to delete itself. // case, this class calls UnifiedSystemTray::CloseBubble() to delete itself.
class UnifiedSystemTrayBubble : public TrayBubbleBase, class UnifiedSystemTrayBubble : public TrayBubbleBase,
public views::WidgetObserver,
public ash::ScreenLayoutObserver, public ash::ScreenLayoutObserver,
public views::WidgetObserver,
public ::wm::ActivationChangeObserver,
public TimeToClickRecorder::Delegate, public TimeToClickRecorder::Delegate,
public TabletModeObserver { public TabletModeObserver {
public: public:
...@@ -75,6 +77,11 @@ class UnifiedSystemTrayBubble : public TrayBubbleBase, ...@@ -75,6 +77,11 @@ class UnifiedSystemTrayBubble : public TrayBubbleBase,
// views::WidgetObserver: // views::WidgetObserver:
void OnWidgetDestroying(views::Widget* widget) override; void OnWidgetDestroying(views::Widget* widget) override;
// ::wm::ActivationChangeObserver:
void OnWindowActivated(ActivationReason reason,
aura::Window* gained_active,
aura::Window* lost_active) override;
// TimeToClickRecorder::Delegate: // TimeToClickRecorder::Delegate:
void RecordTimeToClick() override; void RecordTimeToClick() override;
......
...@@ -128,13 +128,13 @@ void UnifiedSystemTrayController::HandleLockAction() { ...@@ -128,13 +128,13 @@ void UnifiedSystemTrayController::HandleLockAction() {
void UnifiedSystemTrayController::HandleSettingsAction() { void UnifiedSystemTrayController::HandleSettingsAction() {
Shell::Get()->metrics()->RecordUserMetricsAction(UMA_TRAY_SETTINGS); Shell::Get()->metrics()->RecordUserMetricsAction(UMA_TRAY_SETTINGS);
Shell::Get()->system_tray_model()->client_ptr()->ShowSettings(); Shell::Get()->system_tray_model()->client_ptr()->ShowSettings();
CloseBubble();
} }
void UnifiedSystemTrayController::HandlePowerAction() { void UnifiedSystemTrayController::HandlePowerAction() {
Shell::Get()->metrics()->RecordUserMetricsAction(UMA_TRAY_SHUT_DOWN); Shell::Get()->metrics()->RecordUserMetricsAction(UMA_TRAY_SHUT_DOWN);
Shell::Get()->lock_state_controller()->RequestShutdown( Shell::Get()->lock_state_controller()->RequestShutdown(
ShutdownReason::TRAY_SHUT_DOWN_BUTTON); ShutdownReason::TRAY_SHUT_DOWN_BUTTON);
CloseBubble();
} }
void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() { void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() {
...@@ -142,7 +142,6 @@ void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() { ...@@ -142,7 +142,6 @@ void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() {
if (Shell::Get()->session_controller()->ShouldEnableSettings()) { if (Shell::Get()->session_controller()->ShouldEnableSettings()) {
model->ShowDateSettings(); model->ShowDateSettings();
CloseBubble();
} else if (model->can_set_time()) { } else if (model->can_set_time()) {
model->ShowSetTimeDialog(); model->ShowSetTimeDialog();
} }
...@@ -150,7 +149,6 @@ void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() { ...@@ -150,7 +149,6 @@ void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() {
void UnifiedSystemTrayController::HandleEnterpriseInfoAction() { void UnifiedSystemTrayController::HandleEnterpriseInfoAction() {
Shell::Get()->system_tray_model()->client_ptr()->ShowEnterpriseInfo(); Shell::Get()->system_tray_model()->client_ptr()->ShowEnterpriseInfo();
CloseBubble();
} }
void UnifiedSystemTrayController::ToggleExpanded() { void UnifiedSystemTrayController::ToggleExpanded() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment