summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorskuhne@chromium.org <skuhne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-20 22:05:38 +0000
committerskuhne@chromium.org <skuhne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-20 22:05:38 +0000
commit12abb20ae922d192978205a9259d663cd0aeeb3d (patch)
treee37dfffe1134658a8a8d832d5faed5c95f24766e /chrome
parent4a2697a63edf3887cd7663e45db4a97fc6553bc8 (diff)
downloadchromium_src-12abb20ae922d192978205a9259d663cd0aeeb3d.zip
chromium_src-12abb20ae922d192978205a9259d663cd0aeeb3d.tar.gz
chromium_src-12abb20ae922d192978205a9259d663cd0aeeb3d.tar.bz2
Adding Alt+<number> accelerator key
BUG=117481 TEST=None Review URL: http://codereview.chromium.org/9677046 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@127805 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc13
-rw-r--r--chrome/browser/ui/views/ash/launcher/launcher_updater_unittest.cc30
2 files changed, 43 insertions, 0 deletions
diff --git a/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc b/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc
index dbd03d2..bb98e2e 100644
--- a/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc
+++ b/chrome/browser/ui/views/ash/launcher/chrome_launcher_delegate.cc
@@ -6,6 +6,7 @@
#include "ash/launcher/launcher_model.h"
#include "ash/launcher/launcher_types.h"
+#include "ash/shell.h"
#include "ash/wm/window_util.h"
#include "base/command_line.h"
#include "base/utf_string_conversions.h"
@@ -32,6 +33,7 @@
#include "content/public/browser/notification_service.h"
#include "content/public/browser/web_contents.h"
#include "grit/theme_resources.h"
+#include "ui/aura/client/activation_client.h"
#include "ui/aura/window.h"
#include "ui/views/widget/widget.h"
@@ -464,6 +466,17 @@ void ChromeLauncherDelegate::LauncherItemMoved(
void ChromeLauncherDelegate::LauncherItemChanged(
int index,
const ash::LauncherItem& old_item) {
+ if (model_->items()[index].status == ash::STATUS_ACTIVE &&
+ old_item.status == ash::STATUS_RUNNING) {
+ ash::LauncherID id = model_->items()[index].id;
+ if (id_to_item_map_[id].updater) {
+ aura::Window* window_to_activate = id_to_item_map_[id].updater->window();
+ if (window_to_activate && ash::wm::IsActiveWindow(window_to_activate))
+ return;
+ window_to_activate->Show();
+ ash::wm::ActivateWindow(window_to_activate);
+ }
+ }
}
void ChromeLauncherDelegate::LauncherItemWillChange(int index) {
diff --git a/chrome/browser/ui/views/ash/launcher/launcher_updater_unittest.cc b/chrome/browser/ui/views/ash/launcher/launcher_updater_unittest.cc
index d8a8396..11d96b4 100644
--- a/chrome/browser/ui/views/ash/launcher/launcher_updater_unittest.cc
+++ b/chrome/browser/ui/views/ash/launcher/launcher_updater_unittest.cc
@@ -753,3 +753,33 @@ TEST_F(LauncherUpdaterTest, ActivateApps) {
EXPECT_EQ(ash::STATUS_ACTIVE, state1.GetUpdaterItem().status);
}
+// Confirm that window activation works through the model.
+TEST_F(LauncherUpdaterTest, SwitchDirectlyToApp) {
+ State state1(this, "1", LauncherUpdater::TYPE_APP);
+ int index1 = launcher_model_->ItemIndexByID(state1.GetUpdaterItem().id);
+
+ // Second app is active and first is inactive.
+ State state2(this, "2", LauncherUpdater::TYPE_APP);
+ int index2 = launcher_model_->ItemIndexByID(state2.GetUpdaterItem().id);
+
+ EXPECT_EQ(ash::STATUS_RUNNING, state1.GetUpdaterItem().status);
+ EXPECT_EQ(ash::STATUS_ACTIVE, state2.GetUpdaterItem().status);
+ EXPECT_EQ(&state2.window, activation_client_->GetActiveWindow());
+
+ // Test that we can properly switch to the first item.
+ ash::LauncherItem new_item1(launcher_model_->items()[index1]);
+ new_item1.status = ash::STATUS_ACTIVE;
+ launcher_model_->Set(index1, new_item1);
+ EXPECT_EQ(ash::STATUS_ACTIVE, launcher_model_->items()[index1].status);
+ EXPECT_EQ(ash::STATUS_RUNNING, launcher_model_->items()[index2].status);
+ EXPECT_EQ(&state1.window, activation_client_->GetActiveWindow());
+
+ // And to the second item active.
+ ash::LauncherItem new_item2(launcher_model_->items()[index2]);
+ new_item2.status = ash::STATUS_ACTIVE;
+ launcher_model_->Set(index2, new_item2);
+ EXPECT_EQ(ash::STATUS_RUNNING, launcher_model_->items()[index1].status);
+ EXPECT_EQ(ash::STATUS_ACTIVE, launcher_model_->items()[index2].status);
+ EXPECT_EQ(&state2.window, activation_client_->GetActiveWindow());
+}
+