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 @@
#include "ash/system/unified/unified_system_tray.h"
#include "ash/system/unified/unified_system_tray_controller.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/widget_finder.h"
#include "base/metrics/histogram_macros.h"
#include "ui/aura/window.h"
#include "ui/wm/core/window_util.h"
#include "ui/wm/public/activation_client.h"
namespace ash {
......@@ -107,9 +111,11 @@ UnifiedSystemTrayBubble::UnifiedSystemTrayBubble(UnifiedSystemTray* tray,
tray->tray_event_filter()->AddBubble(this);
Shell::Get()->tablet_mode_controller()->AddObserver(this);
Shell::Get()->activation_client()->AddObserver(this);
}
UnifiedSystemTrayBubble::~UnifiedSystemTrayBubble() {
Shell::Get()->activation_client()->RemoveObserver(this);
if (Shell::Get()->tablet_mode_controller())
Shell::Get()->tablet_mode_controller()->RemoveObserver(this);
tray_->tray_event_filter()->RemoveBubble(this);
......@@ -229,6 +235,25 @@ void UnifiedSystemTrayBubble::OnWidgetDestroying(views::Widget* widget) {
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() {
// Ignore if the tray bubble is not opened by click.
if (!time_shown_by_click_)
......
......@@ -15,6 +15,7 @@
#include "base/optional.h"
#include "base/time/time.h"
#include "ui/views/widget/widget_observer.h"
#include "ui/wm/public/activation_change_observer.h"
namespace ui {
class LayerOwner;
......@@ -35,8 +36,9 @@ class UnifiedSystemTrayView;
// It is possible that the bubble widget is closed on deactivation. In such
// case, this class calls UnifiedSystemTray::CloseBubble() to delete itself.
class UnifiedSystemTrayBubble : public TrayBubbleBase,
public views::WidgetObserver,
public ash::ScreenLayoutObserver,
public views::WidgetObserver,
public ::wm::ActivationChangeObserver,
public TimeToClickRecorder::Delegate,
public TabletModeObserver {
public:
......@@ -75,6 +77,11 @@ class UnifiedSystemTrayBubble : public TrayBubbleBase,
// views::WidgetObserver:
void OnWidgetDestroying(views::Widget* widget) override;
// ::wm::ActivationChangeObserver:
void OnWindowActivated(ActivationReason reason,
aura::Window* gained_active,
aura::Window* lost_active) override;
// TimeToClickRecorder::Delegate:
void RecordTimeToClick() override;
......
......@@ -128,13 +128,13 @@ void UnifiedSystemTrayController::HandleLockAction() {
void UnifiedSystemTrayController::HandleSettingsAction() {
Shell::Get()->metrics()->RecordUserMetricsAction(UMA_TRAY_SETTINGS);
Shell::Get()->system_tray_model()->client_ptr()->ShowSettings();
CloseBubble();
}
void UnifiedSystemTrayController::HandlePowerAction() {
Shell::Get()->metrics()->RecordUserMetricsAction(UMA_TRAY_SHUT_DOWN);
Shell::Get()->lock_state_controller()->RequestShutdown(
ShutdownReason::TRAY_SHUT_DOWN_BUTTON);
CloseBubble();
}
void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() {
......@@ -142,7 +142,6 @@ void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() {
if (Shell::Get()->session_controller()->ShouldEnableSettings()) {
model->ShowDateSettings();
CloseBubble();
} else if (model->can_set_time()) {
model->ShowSetTimeDialog();
}
......@@ -150,7 +149,6 @@ void UnifiedSystemTrayController::HandleOpenDateTimeSettingsAction() {
void UnifiedSystemTrayController::HandleEnterpriseInfoAction() {
Shell::Get()->system_tray_model()->client_ptr()->ShowEnterpriseInfo();
CloseBubble();
}
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