blob: 53b55fff92165c6917c548d0b98a887081c7120f [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SHELF_LOGIN_SHELF_WIDGET_H_
#define ASH_SHELF_LOGIN_SHELF_WIDGET_H_
#include "ash/ash_export.h"
#include "ash/public/cpp/session/session_observer.h"
#include "ash/shelf/shelf_component.h"
#include "ui/views/widget/widget.h"
namespace ash {
class Shelf;
class LoginShelfView;
// The widget showing the login shelf. Exists separately from `ShelfWidget` so
// that the login shelf can be focused without stacking the shelf widget above
// other shelf components.
class ASH_EXPORT LoginShelfWidget : public ShelfComponent,
public views::Widget,
public SessionObserver {
public:
LoginShelfWidget(Shelf* shelf, aura::Window* container);
LoginShelfWidget(const LoginShelfWidget&) = delete;
LoginShelfWidget& operator=(const LoginShelfWidget&) = delete;
~LoginShelfWidget() override;
// Specifies whether the default focused view is the login shelf's last
// focusable child.
void SetDefaultLastFocusableChild(bool reverse);
void SetLoginShelfButtonOpacity(float target_opacity);
// Called when shelf layout manager detects a locale change.
void HandleLocaleChange();
// ShelfComponent:
void CalculateTargetBounds() override;
gfx::Rect GetTargetBounds() const override;
void UpdateLayout(bool animate) override;
void UpdateTargetBoundsForGesture(int shelf_position) override {}
LoginShelfView* login_shelf_view() { return login_shelf_view_; }
private:
// views::Widget:
bool OnNativeWidgetActivationChanged(bool active) override;
// SessionObserver:
void OnSessionStateChanged(session_manager::SessionState state) override;
void OnUserSessionAdded(const AccountId& account_id) override;
const base::raw_ptr<Shelf> shelf_;
class LoginShelfWidgetDelegate;
base::raw_ptr<LoginShelfWidgetDelegate> delegate_;
ScopedSessionObserver scoped_session_observer_;
base::raw_ptr<LoginShelfView> login_shelf_view_ = nullptr;
// The target widget bounds in screen coordinates.
gfx::Rect target_bounds_;
};
} // namespace ash
#endif // ASH_SHELF_LOGIN_SHELF_WIDGET_H_