summaryrefslogtreecommitdiffstats
path: root/chrome/browser/task_manager.cc
diff options
context:
space:
mode:
authorpetersont@google.com <petersont@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-10 22:12:19 +0000
committerpetersont@google.com <petersont@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-09-10 22:12:19 +0000
commitb7937d5ba2a47d0016933fae4f856e83e5a57afb (patch)
treed8d77aa380b72a5d92a810ebe41e9fb312808a4d /chrome/browser/task_manager.cc
parent2f668e22a495259d53772c6cc055547cd26cd7f1 (diff)
downloadchromium_src-b7937d5ba2a47d0016933fae4f856e83e5a57afb.zip
chromium_src-b7937d5ba2a47d0016933fae4f856e83e5a57afb.tar.gz
chromium_src-b7937d5ba2a47d0016933fae4f856e83e5a57afb.tar.bz2
Double clicking on an item in the task manager should bring the relevant tab forward.
Review URL: http://codereview.chromium.org/1822 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@2026 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/task_manager.cc')
-rw-r--r--chrome/browser/task_manager.cc50
1 files changed, 50 insertions, 0 deletions
diff --git a/chrome/browser/task_manager.cc b/chrome/browser/task_manager.cc
index 7cb75ff..5d9b8f0 100644
--- a/chrome/browser/task_manager.cc
+++ b/chrome/browser/task_manager.cc
@@ -511,12 +511,15 @@ class TaskManagerContents : public ChromeViews::View,
virtual void ViewHierarchyChanged(bool is_add, ChromeViews::View* parent,
ChromeViews::View* child);
void GetSelection(std::vector<int>* selection);
+ void GetFocused(std::vector<int>* focused);
// NativeButton::Listener implementation.
virtual void ButtonPressed(ChromeViews::NativeButton* sender);
// ChromeViews::TableViewObserver implementation.
virtual void OnSelectionChanged();
+ virtual void OnDoubleClick();
+ virtual void OnKeyDown(unsigned short virtual_keycode);
// ChromeViews::LinkController implementation.
virtual void LinkActivated(ChromeViews::Link* source, int event_flags);
@@ -721,6 +724,16 @@ void TaskManagerContents::GetSelection(std::vector<int>* selection) {
}
}
+void TaskManagerContents::GetFocused(std::vector<int>* focused) {
+ DCHECK(focused);
+ int row_count = tab_table_->RowCount();
+ for (int i = 0; i < row_count; ++i) {
+ // The TableView returns the selection starting from the end.
+ if (tab_table_->ItemHasTheFocus(i))
+ focused->insert(focused->begin(), i);
+ }
+}
+
// NativeButton::Listener implementation.
void TaskManagerContents::ButtonPressed(ChromeViews::NativeButton* sender) {
if (sender == kill_button_)
@@ -733,6 +746,15 @@ void TaskManagerContents::OnSelectionChanged() {
tab_table_->SelectedRowCount() > 0);
}
+void TaskManagerContents::OnDoubleClick() {
+ task_manager_->ActivateFocusedTab();
+}
+
+void TaskManagerContents::OnKeyDown(unsigned short virtual_keycode) {
+ if (virtual_keycode == VK_RETURN)
+ task_manager_->ActivateFocusedTab();
+}
+
// ChromeViews::LinkController implementation
void TaskManagerContents::LinkActivated(ChromeViews::Link* source,
int event_flags) {
@@ -826,6 +848,34 @@ void TaskManager::KillSelectedProcesses() {
}
}
+void TaskManager::ActivateFocusedTab() {
+ std::vector<int> focused;
+ contents_->GetFocused(&focused);
+ int focused_size = static_cast<int>(focused.size());
+
+ DCHECK(focused_size == 1);
+
+ // Gracefully return if there is not exactly one item in focus.
+ if (focused_size != 1)
+ return;
+
+ // Otherwise, the one focused thing should be one the user intends to bring
+ // forth, so get see if GetTabContents returns non-null. If it does, activate
+ // those contents.
+ int index = focused[0];
+
+ // GetTabContents returns a pointer to the relevant tab contents for the
+ // resource. If the index doesn't correspond to a Tab (i.e. refers to the
+ // Browser process or a plugin), GetTabContents will return NULL.
+ TabContents* chosen_tab_contents =
+ table_model_->resources_[index]->GetTabContents();
+
+ if (!chosen_tab_contents)
+ return;
+
+ chosen_tab_contents->Activate();
+}
+
void TaskManager::AddResourceProvider(ResourceProvider* provider) {
table_model_->AddResourceProvider(provider);
}