Index: ash/accelerators/accelerator_controller.cc |
diff --git a/ash/accelerators/accelerator_controller.cc b/ash/accelerators/accelerator_controller.cc |
index 1df6887fd1a8cd0619651af764c031bd1acdfb36..159a27f71a7a478ff9c23467b6570ee9bc14f45b 100644 |
--- a/ash/accelerators/accelerator_controller.cc |
+++ b/ash/accelerators/accelerator_controller.cc |
@@ -16,6 +16,7 @@ |
#include "ash/volume_control_delegate.h" |
#include "ash/wm/window_cycle_controller.h" |
#include "ash/wm/window_util.h" |
+#include "ui/aura/client/activation_client.h" |
#include "ui/aura/event.h" |
#include "ui/aura/root_window.h" |
#include "ui/base/accelerators/accelerator.h" |
@@ -52,6 +53,15 @@ enum AcceleratorAction { |
TOGGLE_DESKTOP_BACKGROUND_MODE, |
TOGGLE_ROOT_WINDOW_FULL_SCREEN, |
#endif |
+ SELECT_WIN_0, |
+ SELECT_WIN_1, |
+ SELECT_WIN_2, |
+ SELECT_WIN_3, |
+ SELECT_WIN_4, |
+ SELECT_WIN_5, |
+ SELECT_WIN_6, |
+ SELECT_WIN_7, |
+ SELECT_WIN_8, |
}; |
// Accelerators handled by AcceleratorController. |
@@ -119,6 +129,25 @@ const struct AcceleratorData { |
{ ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_F10, false, false, false, VOLUME_UP }, |
{ ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_VOLUME_UP, false, false, false, |
VOLUME_UP }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_1, false, false, true, |
+ SELECT_WIN_0 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_2, false, false, true, |
+ SELECT_WIN_1 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_3, false, false, true, |
+ SELECT_WIN_2 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_4, false, false, true, |
+ SELECT_WIN_3 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_5, false, false, true, |
+ SELECT_WIN_4 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_6, false, false, true, |
+ SELECT_WIN_5 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_7, false, false, true, |
+ SELECT_WIN_6 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_8, false, false, true, |
+ SELECT_WIN_7 }, |
+ { ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_9, false, false, true, |
+ SELECT_WIN_8 }, |
+ |
#if !defined(NDEBUG) |
{ ui::ET_TRANSLATED_KEY_PRESS, ui::VKEY_HOME, false, true, false, |
ROTATE_SCREEN }, |
@@ -316,6 +345,7 @@ bool AcceleratorController::AcceleratorPressed( |
std::map<ui::Accelerator, int>::const_iterator it = |
accelerators_.find(accelerator); |
DCHECK(it != accelerators_.end()); |
+ unsigned int window = 0; |
switch (static_cast<AcceleratorAction>(it->second)) { |
case CYCLE_BACKWARD: |
return HandleCycleWindow(WindowCycleController::BACKWARD, |
@@ -379,6 +409,33 @@ bool AcceleratorController::AcceleratorPressed( |
if (ime_control_delegate_.get()) |
return ime_control_delegate_->HandleSwitchIme(accelerator); |
break; |
+ case SELECT_WIN_8: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_7: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_6: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_5: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_4: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_3: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_2: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_1: |
+ window++; |
+ // Fallthrough. |
+ case SELECT_WIN_0: |
+ SwitchToWindow(window); |
+ break; |
#if !defined(NDEBUG) |
case ROTATE_SCREEN: |
return HandleRotateScreen(); |
@@ -397,6 +454,29 @@ bool AcceleratorController::AcceleratorPressed( |
return false; |
} |
+void AcceleratorController::SwitchToWindow(const unsigned int window) { |
+ const std::vector<aura::Window*>& windows = |
+ Shell::GetInstance()->delegate()->GetCycleWindowList( |
+ ShellDelegate::SOURCE_LAUNCHER, |
+ ShellDelegate::ORDER_LINEAR); |
+ if (window < windows.size()) { |
+ aura::client::ActivationClient* activation_client = |
+ aura::client::GetActivationClient(Shell::GetRootWindow()); |
+ aura::Window* window_to_activate = windows[window]; |
+ aura::Window* current_window = wm::GetActiveWindow(); |
+ if (window_to_activate != current_window) { |
+ bool maximized = wm::IsWindowMaximized(current_window); |
+ if (maximized) { |
+ wm::RestoreWindow(current_window); |
+ } |
+ activation_client->ActivateWindow(window_to_activate); |
+ if (maximized) { |
+ wm::MaximizeWindow(window_to_activate); |
+ } |
+ } |
+ } |
+} |
+ |
bool AcceleratorController::CanHandleAccelerators() const { |
return true; |
} |