#ifndef ASH_WM_TABLET_MODE_TABLET_MODE_MULTITASK_MENU_CONTROLLER_H_
#define ASH_WM_TABLET_MODE_TABLET_MODE_MULTITASK_MENU_CONTROLLER_H_
#include <optional>
#include "ui/aura/window_observer.h"
#include "ui/events/event_handler.h"
namespace ash {
class TabletModeMultitaskCueController;
class TabletModeMultitaskMenu;
class TabletModeMultitaskMenuController : public ui::EventHandler {
public:
TabletModeMultitaskMenuController();
TabletModeMultitaskMenuController(const TabletModeMultitaskMenuController&) =
delete;
TabletModeMultitaskMenuController& operator=(
const TabletModeMultitaskMenuController&) = delete;
~TabletModeMultitaskMenuController() override;
static bool CanShowMenu(aura::Window* window);
TabletModeMultitaskMenu* multitask_menu() { return multitask_menu_.get(); }
TabletModeMultitaskCueController* multitask_cue_controller() {
return multitask_cue_controller_.get();
}
void ShowMultitaskMenu(aura::Window* window);
void ResetMultitaskMenu();
void OnTouchEvent(ui::TouchEvent* event) override;
void OnGestureEvent(ui::GestureEvent* event) override;
bool is_drag_active_for_test() const { return is_drag_active_; }
bool reserved_for_gesture_sent_for_test() const {
return reserved_for_gesture_sent_;
}
aura::Window* target_window_for_test() { return target_window_for_test_; }
private:
void MaybeCreateMultitaskMenu(aura::Window* active_window);
bool is_drag_active_ = false;
bool reserved_for_gesture_sent_ = false;
raw_ptr<aura::Window, DanglingUntriaged> target_window_for_test_ = nullptr;
std::unique_ptr<TabletModeMultitaskCueController> multitask_cue_controller_;
std::unique_ptr<TabletModeMultitaskMenu> multitask_menu_;
};
}
#endif