diff options
author | petersont@google.com <petersont@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-10 22:12:19 +0000 |
---|---|---|
committer | petersont@google.com <petersont@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-09-10 22:12:19 +0000 |
commit | b7937d5ba2a47d0016933fae4f856e83e5a57afb (patch) | |
tree | d8d77aa380b72a5d92a810ebe41e9fb312808a4d /chrome/browser/task_manager.cc | |
parent | 2f668e22a495259d53772c6cc055547cd26cd7f1 (diff) | |
download | chromium_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.cc | 50 |
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); } |