Index: ash/common/shelf/wm_shelf.cc |
diff --git a/ash/common/shelf/wm_shelf.cc b/ash/common/shelf/wm_shelf.cc |
deleted file mode 100644 |
index 456af7719939dd01c8ca0c8bb7ddbee8a0676258..0000000000000000000000000000000000000000 |
--- a/ash/common/shelf/wm_shelf.cc |
+++ /dev/null |
@@ -1,375 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ash/common/shelf/wm_shelf.h" |
- |
-#include "ash/common/shelf/shelf_controller.h" |
-#include "ash/common/shelf/shelf_delegate.h" |
-#include "ash/common/shelf/shelf_item_delegate.h" |
-#include "ash/common/shelf/shelf_layout_manager.h" |
-#include "ash/common/shelf/shelf_locking_manager.h" |
-#include "ash/common/shelf/shelf_model.h" |
-#include "ash/common/shelf/shelf_widget.h" |
-#include "ash/common/shelf/wm_shelf_observer.h" |
-#include "ash/common/wm_shell.h" |
-#include "ash/common/wm_window.h" |
-#include "ash/public/cpp/shell_window_ids.h" |
-#include "ash/root_window_controller.h" |
-#include "ash/shelf/shelf_bezel_event_handler.h" |
-#include "ash/shell.h" |
-#include "ash/system/tray/system_tray_delegate.h" |
-#include "base/logging.h" |
-#include "base/memory/ptr_util.h" |
-#include "ui/aura/env.h" |
-#include "ui/display/types/display_constants.h" |
-#include "ui/gfx/geometry/rect.h" |
- |
-namespace ash { |
- |
-// WmShelf::AutoHideEventHandler ----------------------------------------------- |
- |
-// Forwards mouse and gesture events to ShelfLayoutManager for auto-hide. |
-// TODO(mash): Add similar event handling support for mash. |
-class WmShelf::AutoHideEventHandler : public ui::EventHandler { |
- public: |
- explicit AutoHideEventHandler(ShelfLayoutManager* shelf_layout_manager) |
- : shelf_layout_manager_(shelf_layout_manager) { |
- Shell::GetInstance()->AddPreTargetHandler(this); |
- } |
- ~AutoHideEventHandler() override { |
- Shell::GetInstance()->RemovePreTargetHandler(this); |
- } |
- |
- // Overridden from ui::EventHandler: |
- void OnMouseEvent(ui::MouseEvent* event) override { |
- shelf_layout_manager_->UpdateAutoHideForMouseEvent( |
- event, WmWindow::Get(static_cast<aura::Window*>(event->target()))); |
- } |
- void OnGestureEvent(ui::GestureEvent* event) override { |
- shelf_layout_manager_->UpdateAutoHideForGestureEvent( |
- event, WmWindow::Get(static_cast<aura::Window*>(event->target()))); |
- } |
- |
- private: |
- ShelfLayoutManager* shelf_layout_manager_; |
- DISALLOW_COPY_AND_ASSIGN(AutoHideEventHandler); |
-}; |
- |
-// WmShelf --------------------------------------------------------------------- |
- |
-WmShelf::WmShelf() {} |
- |
-WmShelf::~WmShelf() {} |
- |
-// static |
-WmShelf* WmShelf::ForWindow(WmWindow* window) { |
- return window->GetRootWindowController()->GetShelf(); |
-} |
- |
-// static |
-bool WmShelf::CanChangeShelfAlignment() { |
- if (WmShell::Get()->system_tray_delegate()->IsUserSupervised()) |
- return false; |
- |
- LoginStatus login_status = |
- WmShell::Get()->system_tray_delegate()->GetUserLoginStatus(); |
- |
- switch (login_status) { |
- case LoginStatus::LOCKED: |
- // Shelf alignment changes can be requested while being locked, but will |
- // be applied upon unlock. |
- case LoginStatus::USER: |
- case LoginStatus::OWNER: |
- return true; |
- case LoginStatus::PUBLIC: |
- case LoginStatus::SUPERVISED: |
- case LoginStatus::GUEST: |
- case LoginStatus::KIOSK_APP: |
- case LoginStatus::ARC_KIOSK_APP: |
- case LoginStatus::NOT_LOGGED_IN: |
- return false; |
- } |
- |
- NOTREACHED(); |
- return false; |
-} |
- |
-void WmShelf::CreateShelfWidget(WmWindow* root) { |
- DCHECK(!shelf_widget_); |
- WmWindow* shelf_container = |
- root->GetChildByShellWindowId(kShellWindowId_ShelfContainer); |
- shelf_widget_.reset(new ShelfWidget(shelf_container, this)); |
- |
- DCHECK(!shelf_layout_manager_); |
- shelf_layout_manager_ = shelf_widget_->shelf_layout_manager(); |
- shelf_layout_manager_->AddObserver(this); |
- |
- // Must occur after |shelf_widget_| is constructed because the system tray |
- // constructors call back into WmShelf::shelf_widget(). |
- DCHECK(!shelf_widget_->status_area_widget()); |
- WmWindow* status_container = |
- root->GetChildByShellWindowId(kShellWindowId_StatusContainer); |
- shelf_widget_->CreateStatusAreaWidget(status_container); |
- |
- // TODO: ShelfBezelEventHandler needs to work with mus too. |
- // http://crbug.com/636647 |
- if (aura::Env::GetInstance()->mode() == aura::Env::Mode::LOCAL) |
- bezel_event_handler_ = base::MakeUnique<ShelfBezelEventHandler>(this); |
-} |
- |
-void WmShelf::ShutdownShelfWidget() { |
- if (shelf_widget_) |
- shelf_widget_->Shutdown(); |
-} |
- |
-void WmShelf::DestroyShelfWidget() { |
- shelf_widget_.reset(); |
-} |
- |
-void WmShelf::CreateShelfView() { |
- DCHECK(shelf_layout_manager_); |
- DCHECK(shelf_widget_); |
- DCHECK(!shelf_view_); |
- shelf_view_ = shelf_widget_->CreateShelfView(); |
- shelf_locking_manager_.reset(new ShelfLockingManager(this)); |
- WmShell::Get()->shelf_controller()->NotifyShelfCreated(this); |
-} |
- |
-void WmShelf::ShutdownShelf() { |
- DCHECK(shelf_view_); |
- shelf_locking_manager_.reset(); |
- shelf_view_ = nullptr; |
-} |
- |
-bool WmShelf::IsShelfInitialized() const { |
- return !!shelf_view_; |
-} |
- |
-WmWindow* WmShelf::GetWindow() { |
- return WmWindow::Get(shelf_widget_->GetNativeWindow()); |
-} |
- |
-void WmShelf::SetAlignment(ShelfAlignment alignment) { |
- DCHECK(shelf_layout_manager_); |
- DCHECK(shelf_locking_manager_); |
- |
- if (alignment_ == alignment) |
- return; |
- |
- if (shelf_locking_manager_->is_locked() && |
- alignment != SHELF_ALIGNMENT_BOTTOM_LOCKED) { |
- shelf_locking_manager_->set_stored_alignment(alignment); |
- return; |
- } |
- |
- alignment_ = alignment; |
- // The ShelfWidget notifies the ShelfView of the alignment change. |
- shelf_widget_->OnShelfAlignmentChanged(); |
- shelf_layout_manager_->LayoutShelf(); |
- WmShell::Get()->shelf_controller()->NotifyShelfAlignmentChanged(this); |
- WmShell::Get()->NotifyShelfAlignmentChanged(GetWindow()->GetRootWindow()); |
-} |
- |
-bool WmShelf::IsHorizontalAlignment() const { |
- switch (alignment_) { |
- case SHELF_ALIGNMENT_BOTTOM: |
- case SHELF_ALIGNMENT_BOTTOM_LOCKED: |
- return true; |
- case SHELF_ALIGNMENT_LEFT: |
- case SHELF_ALIGNMENT_RIGHT: |
- return false; |
- } |
- NOTREACHED(); |
- return true; |
-} |
- |
-int WmShelf::SelectValueForShelfAlignment(int bottom, |
- int left, |
- int right) const { |
- switch (alignment_) { |
- case SHELF_ALIGNMENT_BOTTOM: |
- case SHELF_ALIGNMENT_BOTTOM_LOCKED: |
- return bottom; |
- case SHELF_ALIGNMENT_LEFT: |
- return left; |
- case SHELF_ALIGNMENT_RIGHT: |
- return right; |
- } |
- NOTREACHED(); |
- return bottom; |
-} |
- |
-int WmShelf::PrimaryAxisValue(int horizontal, int vertical) const { |
- return IsHorizontalAlignment() ? horizontal : vertical; |
-} |
- |
-void WmShelf::SetAutoHideBehavior(ShelfAutoHideBehavior auto_hide_behavior) { |
- DCHECK(shelf_layout_manager_); |
- |
- if (auto_hide_behavior_ == auto_hide_behavior) |
- return; |
- |
- auto_hide_behavior_ = auto_hide_behavior; |
- WmShell::Get()->shelf_controller()->NotifyShelfAutoHideBehaviorChanged(this); |
- WmShell::Get()->NotifyShelfAutoHideBehaviorChanged( |
- GetWindow()->GetRootWindow()); |
-} |
- |
-ShelfAutoHideState WmShelf::GetAutoHideState() const { |
- return shelf_layout_manager_->auto_hide_state(); |
-} |
- |
-void WmShelf::UpdateAutoHideState() { |
- shelf_layout_manager_->UpdateAutoHideState(); |
-} |
- |
-ShelfBackgroundType WmShelf::GetBackgroundType() const { |
- return shelf_widget_->GetBackgroundType(); |
-} |
- |
-bool WmShelf::IsVisible() const { |
- return shelf_widget_->IsShelfVisible(); |
-} |
- |
-void WmShelf::UpdateVisibilityState() { |
- if (shelf_layout_manager_) |
- shelf_layout_manager_->UpdateVisibilityState(); |
-} |
- |
-ShelfVisibilityState WmShelf::GetVisibilityState() const { |
- return shelf_layout_manager_ ? shelf_layout_manager_->visibility_state() |
- : SHELF_HIDDEN; |
-} |
- |
-gfx::Rect WmShelf::GetIdealBounds() { |
- return shelf_layout_manager_->GetIdealBounds(); |
-} |
- |
-gfx::Rect WmShelf::GetUserWorkAreaBounds() const { |
- return shelf_layout_manager_ ? shelf_layout_manager_->user_work_area_bounds() |
- : gfx::Rect(); |
-} |
- |
-void WmShelf::UpdateIconPositionForPanel(WmWindow* panel) { |
- shelf_widget_->UpdateIconPositionForPanel(panel); |
-} |
- |
-gfx::Rect WmShelf::GetScreenBoundsOfItemIconForWindow(WmWindow* window) { |
- if (!shelf_widget_) |
- return gfx::Rect(); |
- return shelf_widget_->GetScreenBoundsOfItemIconForWindow(window); |
-} |
- |
-// static |
-void WmShelf::LaunchShelfItem(int item_index) { |
- ShelfModel* shelf_model = WmShell::Get()->shelf_model(); |
- const ShelfItems& items = shelf_model->items(); |
- int item_count = shelf_model->item_count(); |
- int indexes_left = item_index >= 0 ? item_index : item_count; |
- int found_index = -1; |
- |
- // Iterating until we have hit the index we are interested in which |
- // is true once indexes_left becomes negative. |
- for (int i = 0; i < item_count && indexes_left >= 0; i++) { |
- if (items[i].type != TYPE_APP_LIST) { |
- found_index = i; |
- indexes_left--; |
- } |
- } |
- |
- // There are two ways how found_index can be valid: a.) the nth item was |
- // found (which is true when indexes_left is -1) or b.) the last item was |
- // requested (which is true when index was passed in as a negative number). |
- if (found_index >= 0 && (indexes_left == -1 || item_index < 0)) { |
- // Then set this one as active (or advance to the next item of its kind). |
- ActivateShelfItem(found_index); |
- } |
-} |
- |
-// static |
-void WmShelf::ActivateShelfItem(int item_index) { |
- ShelfModel* shelf_model = WmShell::Get()->shelf_model(); |
- const ShelfItem& item = shelf_model->items()[item_index]; |
- ShelfItemDelegate* item_delegate = shelf_model->GetShelfItemDelegate(item.id); |
- item_delegate->ItemSelected(ui::ET_KEY_RELEASED, ui::EF_NONE, |
- display::kInvalidDisplayId, LAUNCH_FROM_UNKNOWN); |
-} |
- |
-bool WmShelf::ProcessGestureEvent(const ui::GestureEvent& event) { |
- // Can be called at login screen. |
- if (!shelf_layout_manager_) |
- return false; |
- return shelf_layout_manager_->ProcessGestureEvent(event); |
-} |
- |
-void WmShelf::AddObserver(WmShelfObserver* observer) { |
- observers_.AddObserver(observer); |
-} |
- |
-void WmShelf::RemoveObserver(WmShelfObserver* observer) { |
- observers_.RemoveObserver(observer); |
-} |
- |
-void WmShelf::NotifyShelfIconPositionsChanged() { |
- for (auto& observer : observers_) |
- observer.OnShelfIconPositionsChanged(); |
-} |
- |
-StatusAreaWidget* WmShelf::GetStatusAreaWidget() const { |
- return shelf_widget_->status_area_widget(); |
-} |
- |
-void WmShelf::SetVirtualKeyboardBoundsForTesting(const gfx::Rect& bounds) { |
- shelf_layout_manager_->OnKeyboardBoundsChanging(bounds); |
-} |
- |
-ShelfLockingManager* WmShelf::GetShelfLockingManagerForTesting() { |
- return shelf_locking_manager_.get(); |
-} |
- |
-ShelfView* WmShelf::GetShelfViewForTesting() { |
- return shelf_view_; |
-} |
- |
-void WmShelf::WillDeleteShelfLayoutManager() { |
- if (aura::Env::GetInstance()->mode() == aura::Env::Mode::MUS) { |
- // TODO(sky): this should be removed once Shell is used everywhere. |
- ShutdownShelfWidget(); |
- } |
- |
- // Clear event handlers that might forward events to the destroyed instance. |
- auto_hide_event_handler_.reset(); |
- bezel_event_handler_.reset(); |
- |
- DCHECK(shelf_layout_manager_); |
- shelf_layout_manager_->RemoveObserver(this); |
- shelf_layout_manager_ = nullptr; |
-} |
- |
-void WmShelf::WillChangeVisibilityState(ShelfVisibilityState new_state) { |
- for (auto& observer : observers_) |
- observer.WillChangeVisibilityState(new_state); |
- if (new_state != SHELF_AUTO_HIDE) { |
- auto_hide_event_handler_.reset(); |
- } else if (!auto_hide_event_handler_ && |
- aura::Env::GetInstance()->mode() == aura::Env::Mode::LOCAL) { |
- auto_hide_event_handler_ = |
- base::MakeUnique<AutoHideEventHandler>(shelf_layout_manager()); |
- } |
-} |
- |
-void WmShelf::OnAutoHideStateChanged(ShelfAutoHideState new_state) { |
- for (auto& observer : observers_) |
- observer.OnAutoHideStateChanged(new_state); |
-} |
- |
-void WmShelf::OnBackgroundUpdated(ShelfBackgroundType background_type, |
- AnimationChangeType change_type) { |
- if (background_type == GetBackgroundType()) |
- return; |
- for (auto& observer : observers_) |
- observer.OnBackgroundTypeChanged(background_type, change_type); |
-} |
- |
-} // namespace ash |