diff options
author | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-23 17:56:59 +0000 |
---|---|---|
committer | pkotwicz@chromium.org <pkotwicz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-23 17:56:59 +0000 |
commit | 4c143eb76a23a31c118fc665045b613feb21e220 (patch) | |
tree | d11ab561d216335641f65b74d788e42554dcb31f | |
parent | e2c079cf420f4007ffde041b11684d52a2be306f (diff) | |
download | chromium_src-4c143eb76a23a31c118fc665045b613feb21e220.zip chromium_src-4c143eb76a23a31c118fc665045b613feb21e220.tar.gz chromium_src-4c143eb76a23a31c118fc665045b613feb21e220.tar.bz2 |
Bug=105964
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=118540
Review URL: https://chromiumcodereview.appspot.com/9124021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118698 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | ash/accelerators/accelerator_controller.cc | 13 | ||||
-rw-r--r-- | ash/accelerators/accelerator_controller_unittest.cc | 4 | ||||
-rw-r--r-- | ash/shell/shell_main.cc | 4 | ||||
-rw-r--r-- | ash/shell_delegate.h | 3 | ||||
-rw-r--r-- | ash/test/test_shell_delegate.cc | 3 | ||||
-rw-r--r-- | ash/test/test_shell_delegate.h | 1 | ||||
-rw-r--r-- | chrome/browser/ui/views/accelerator_table.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/views/aura/chrome_shell_delegate.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/views/aura/chrome_shell_delegate.h | 1 |
9 files changed, 36 insertions, 1 deletions
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc index 8a736d3..943d296 100644 --- a/ash/accelerators/accelerator_controller.cc +++ b/ash/accelerators/accelerator_controller.cc @@ -9,6 +9,7 @@ #include "ash/launcher/launcher_model.h" #include "ash/screenshot_delegate.h" #include "ash/shell.h" +#include "ash/shell_delegate.h" #include "ash/shell_window_ids.h" #include "ash/wm/window_cycle_controller.h" #include "ui/aura/event.h" @@ -25,6 +26,7 @@ namespace { enum AcceleratorAction { CYCLE_BACKWARD, CYCLE_FORWARD, + EXIT, TAKE_SCREENSHOT, TOGGLE_CAPS_LOCK, #if !defined(NDEBUG) @@ -45,6 +47,7 @@ struct AcceleratorData { { ui::VKEY_TAB, false, false, true, CYCLE_FORWARD }, { ui::VKEY_TAB, true, false, true, CYCLE_BACKWARD }, { ui::VKEY_F5, false, false, false, CYCLE_FORWARD }, + { ui::VKEY_Q, true, true, false, EXIT }, { ui::VKEY_F5, true, false, false, CYCLE_BACKWARD }, { ui::VKEY_F5, false, true, false, TAKE_SCREENSHOT }, { ui::VKEY_PRINT, false, false, false, TAKE_SCREENSHOT }, @@ -68,6 +71,14 @@ bool HandleCycleWindow(ash::WindowCycleController::Direction direction, return true; } +bool HandleExit() { + ash::ShellDelegate* delegate = ash::Shell::GetInstance()->delegate(); + if (!delegate) + return false; + delegate->Exit(); + return true; +} + #if !defined(NDEBUG) // Rotates the screen. bool HandleRotateScreen() { @@ -186,6 +197,8 @@ bool AcceleratorController::AcceleratorPressed( case CYCLE_FORWARD: return HandleCycleWindow(WindowCycleController::FORWARD, accelerator.IsAltDown()); + case EXIT: + return HandleExit(); case TAKE_SCREENSHOT: if (screenshot_delegate_.get()) screenshot_delegate_->HandleTakeScreenshot(); diff --git a/ash/accelerators/accelerator_controller_unittest.cc b/ash/accelerators/accelerator_controller_unittest.cc index 1de432f..a9cce71 100644 --- a/ash/accelerators/accelerator_controller_unittest.cc +++ b/ash/accelerators/accelerator_controller_unittest.cc @@ -319,6 +319,10 @@ TEST_F(AcceleratorControllerTest, GlobalAccelerators) { EXPECT_TRUE(GetController()->Process( ui::Accelerator(ui::VKEY_F11, false, true, false))); #endif + + // Exit + EXPECT_TRUE(GetController()->Process( + ui::Accelerator(ui::VKEY_Q, true, true ,false))); #endif } diff --git a/ash/shell/shell_main.cc b/ash/shell/shell_main.cc index 4837071..e0521b3 100644 --- a/ash/shell/shell_main.cc +++ b/ash/shell/shell_main.cc @@ -58,6 +58,10 @@ class ShellDelegateImpl : public ash::ShellDelegate { return ash::internal::CreateStatusArea(); } + virtual void Exit() OVERRIDE { + MessageLoopForUI::current()->Quit(); + } + virtual void BuildAppListModel(ash::AppListModel* model) OVERRIDE { ash::shell::BuildAppListModel(model); } diff --git a/ash/shell_delegate.h b/ash/shell_delegate.h index ff60e8a..3be69cb 100644 --- a/ash/shell_delegate.h +++ b/ash/shell_delegate.h @@ -56,6 +56,9 @@ class ASH_EXPORT ShellDelegate { // Invoked to create a new status area. Can return NULL. virtual views::Widget* CreateStatusArea() = 0; + // Invoked when a user uses Ctrl-Shift-Q to close chrome. + virtual void Exit() = 0; + // Invoked to ask the delegate to populate the |model|. virtual void BuildAppListModel(AppListModel* model) = 0; diff --git a/ash/test/test_shell_delegate.cc b/ash/test/test_shell_delegate.cc index 67f1022..ef080e9 100644 --- a/ash/test/test_shell_delegate.cc +++ b/ash/test/test_shell_delegate.cc @@ -27,6 +27,9 @@ views::Widget* TestShellDelegate::CreateStatusArea() { return NULL; } +void TestShellDelegate::Exit() { +} + void TestShellDelegate::BuildAppListModel(AppListModel* model) { } diff --git a/ash/test/test_shell_delegate.h b/ash/test/test_shell_delegate.h index c9e3ab3..9eedc96 100644 --- a/ash/test/test_shell_delegate.h +++ b/ash/test/test_shell_delegate.h @@ -20,6 +20,7 @@ class TestShellDelegate : public ShellDelegate { // Overridden from ShellDelegate: virtual void CreateNewWindow() OVERRIDE; virtual views::Widget* CreateStatusArea() OVERRIDE; + virtual void Exit() OVERRIDE; virtual void BuildAppListModel(AppListModel* model) OVERRIDE; virtual AppListViewDelegate* CreateAppListViewDelegate() OVERRIDE; virtual std::vector<aura::Window*> GetCycleWindowList( diff --git a/chrome/browser/ui/views/accelerator_table.cc b/chrome/browser/ui/views/accelerator_table.cc index 78c85a8..96f077e 100644 --- a/chrome/browser/ui/views/accelerator_table.cc +++ b/chrome/browser/ui/views/accelerator_table.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 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. @@ -38,7 +38,9 @@ const AcceleratorMapping kAcceleratorMap[] = { #if !defined(OS_CHROMEOS) { ui::VKEY_F4, false, false, true, IDC_CLOSE_WINDOW }, #endif +#if !defined(USE_AURA) { ui::VKEY_Q, true, true, false, IDC_EXIT }, +#endif { ui::VKEY_F, false, true, false, IDC_FIND }, { ui::VKEY_G, false, true, false, IDC_FIND_NEXT }, #if !defined(OS_CHROMEOS) diff --git a/chrome/browser/ui/views/aura/chrome_shell_delegate.cc b/chrome/browser/ui/views/aura/chrome_shell_delegate.cc index 681f97a..3cc14e3 100644 --- a/chrome/browser/ui/views/aura/chrome_shell_delegate.cc +++ b/chrome/browser/ui/views/aura/chrome_shell_delegate.cc @@ -88,6 +88,10 @@ views::Widget* ChromeShellDelegate::CreateStatusArea() { return status_area_widget; } +void ChromeShellDelegate::Exit() { + BrowserList::AttemptUserExit(); +} + void ChromeShellDelegate::BuildAppListModel(ash::AppListModel* model) { AppListModelBuilder builder(ProfileManager::GetDefaultProfile(), model); diff --git a/chrome/browser/ui/views/aura/chrome_shell_delegate.h b/chrome/browser/ui/views/aura/chrome_shell_delegate.h index 3843c70..8bd55a4 100644 --- a/chrome/browser/ui/views/aura/chrome_shell_delegate.h +++ b/chrome/browser/ui/views/aura/chrome_shell_delegate.h @@ -42,6 +42,7 @@ class ChromeShellDelegate : public ash::ShellDelegate { // ash::ShellDelegate overrides; virtual void CreateNewWindow() OVERRIDE; virtual views::Widget* CreateStatusArea() OVERRIDE; + virtual void Exit() OVERRIDE; virtual void BuildAppListModel(ash::AppListModel* model) OVERRIDE; virtual ash::AppListViewDelegate* CreateAppListViewDelegate() OVERRIDE; virtual std::vector<aura::Window*> GetCycleWindowList( |