Chromium Code Reviews| Index: chrome/browser/ui/browser_list.cc |
| diff --git a/chrome/browser/ui/browser_list.cc b/chrome/browser/ui/browser_list.cc |
| index 5516e79a2d661b03360ed12af48582c656e1ed4b..9e42677e0cdd49edaf0f3850571b29178fc3f516 100644 |
| --- a/chrome/browser/ui/browser_list.cc |
| +++ b/chrome/browser/ui/browser_list.cc |
| @@ -186,6 +186,36 @@ void BrowserList::PostBeforeUnloadHandlers( |
| } |
| // static |
| +void BrowserList::ReorderAfterWorkspaceChange( |
| + const std::string& new_workspace) { |
| + DCHECK(!new_workspace.empty()); |
| + |
| + BrowserList* instance = GetInstance(); |
| + |
| + Browser* old_last_active = instance->GetLastActive(); |
| + BrowserVector& last_active_browsers = instance->last_active_browsers_; |
| + |
| + // Perform a stable partition on the browsers in the list so that the browsers |
| + // in the new workspace appear after the browsers in the other workspaces. |
| + // |
| + // For example, if we have a list of browser-workspace pairs |
| + // [{b1, 0}, {b2, 1}, {b3, 0}, {b4, 1}] |
| + // and we switch to workspace 1, we want the resulting browser list to look |
| + // like [{b1, 0}, {b3, 0}, {b2, 1}, {b4, 1}]. |
| + std::stable_sort(last_active_browsers.begin(), last_active_browsers.end(), |
| + [](Browser* b1, Browser* b2) { |
| + return b1->window()->GetWorkspace() != |
|
sky
2016/07/07 03:23:27
Don't you want < ?
Tom (Use chromium acct)
2016/07/07 19:12:10
actually wanted stable_partition
|
| + b2->window()->GetWorkspace(); |
| + }); |
| + |
| + Browser* new_last_active = instance->GetLastActive(); |
| + if (old_last_active != new_last_active) { |
| + FOR_EACH_OBSERVER(chrome::BrowserListObserver, observers_.Get(), |
| + OnBrowserSetLastActive(new_last_active)); |
| + } |
| +} |
| + |
| +// static |
| void BrowserList::SetLastActive(Browser* browser) { |
| content::RecordAction(UserMetricsAction("ActiveBrowserChanged")); |