| 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..904f6ad9c09be83d78962673a49d04eb328a3b48 100644
|
| --- a/chrome/browser/ui/browser_list.cc
|
| +++ b/chrome/browser/ui/browser_list.cc
|
| @@ -217,12 +217,52 @@ bool BrowserList::IsOffTheRecordSessionActiveForProfile(Profile* profile) {
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| +// BrowserList, display::DesktopObserver implementation:
|
| +
|
| +void BrowserList::OnWorkspaceChanged(const std::string& new_workspace) {
|
| + DCHECK(!new_workspace.empty());
|
| +
|
| + Browser* old_last_active = GetLastActive();
|
| +
|
| + // Reorder 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}].
|
| + BrowserVector in_this_workspace;
|
| + BrowserVector in_different_workspace;
|
| + for (Browser* browser : last_active_browsers_) {
|
| + if (browser->window()->GetWorkspace() == new_workspace)
|
| + in_this_workspace.push_back(browser);
|
| + else
|
| + in_different_workspace.push_back(browser);
|
| + }
|
| + last_active_browsers_.clear();
|
| + last_active_browsers_.insert(last_active_browsers_.end(),
|
| + in_different_workspace.begin(),
|
| + in_different_workspace.end());
|
| + last_active_browsers_.insert(last_active_browsers_.end(),
|
| + in_this_workspace.begin(),
|
| + in_this_workspace.end());
|
| +
|
| + Browser* new_last_active = GetLastActive();
|
| + if (old_last_active != new_last_active) {
|
| + FOR_EACH_OBSERVER(chrome::BrowserListObserver, observers_.Get(),
|
| + OnBrowserSetLastActive(new_last_active));
|
| + }
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| // BrowserList, private:
|
|
|
| BrowserList::BrowserList() {
|
| + display::desktop::AddObserver(this);
|
| }
|
|
|
| BrowserList::~BrowserList() {
|
| + display::desktop::RemoveObserver(this);
|
| }
|
|
|
| // static
|
|
|