158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file.
458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ash/accelerators/accelerator_commands.h"
658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ash/shell.h"
858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ash/shell_delegate.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/wm/mru_window_tracker.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "ash/wm/window_state.h"
1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "ash/wm/window_util.h"
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ash/wm/wm_event.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/metrics/user_metrics.h"
1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace ash {
1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace accelerators {
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool ToggleMinimized() {
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  aura::Window* window = wm::GetActiveWindow();
2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Attempt to restore the window that would be cycled through next from
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // the launcher when there is no active window.
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (!window) {
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    MruWindowTracker::WindowList mru_windows(
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        Shell::GetInstance()->mru_window_tracker()->BuildMruWindowList());
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (!mru_windows.empty())
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      wm::GetWindowState(mru_windows.front())->Activate();
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return true;
2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  }
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  wm::WindowState* window_state = wm::GetWindowState(window);
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  if (!window_state->CanMinimize())
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return false;
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  window_state->Minimize();
3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
368bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)void ToggleMaximized() {
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  wm::WindowState* window_state = wm::GetActiveWindowState();
388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  if (!window_state)
398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    return;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::RecordAction(base::UserMetricsAction("Accel_Toggle_Maximized"));
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  wm::WMEvent event(wm::WM_EVENT_TOGGLE_MAXIMIZE);
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  window_state->OnWMEvent(&event);
438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void ToggleFullscreen() {
461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  wm::WindowState* window_state = wm::GetActiveWindowState();
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (window_state) {
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    window_state->OnWMEvent(&event);
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace accelerators
5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}  // namespace ash
55