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