| Index: ash/root_window_controller.cc
|
| ===================================================================
|
| --- ash/root_window_controller.cc (revision 197747)
|
| +++ ash/root_window_controller.cc (working copy)
|
| @@ -36,11 +36,15 @@
|
| #include "ash/wm/workspace_controller.h"
|
| #include "base/command_line.h"
|
| #include "base/time.h"
|
| +#include "ui/aura/client/activation_client.h"
|
| #include "ui/aura/client/aura_constants.h"
|
| +#include "ui/aura/client/capture_client.h"
|
| +#include "ui/aura/client/focus_client.h"
|
| #include "ui/aura/client/tooltip_client.h"
|
| #include "ui/aura/root_window.h"
|
| #include "ui/aura/window.h"
|
| #include "ui/aura/window_observer.h"
|
| +#include "ui/aura/window_tracker.h"
|
| #include "ui/base/models/menu_model.h"
|
| #include "ui/gfx/display.h"
|
| #include "ui/gfx/screen.h"
|
| @@ -384,10 +388,38 @@
|
| }
|
|
|
| void RootWindowController::MoveWindowsTo(aura::RootWindow* dst) {
|
| + aura::Window* focused = aura::client::GetFocusClient(dst)->GetFocusedWindow();
|
| + aura::WindowTracker tracker;
|
| + if (focused)
|
| + tracker.Add(focused);
|
| + aura::client::ActivationClient* activation_client =
|
| + aura::client::GetActivationClient(dst);
|
| + aura::Window* active = activation_client->GetActiveWindow();
|
| + if (active && focused != active)
|
| + tracker.Add(active);
|
| + // Deactivate the window to close menu / bubble windows.
|
| + activation_client->DeactivateWindow(active);
|
| + // Release capture if any.
|
| + aura::client::GetCaptureClient(root_window_.get())->
|
| + SetCapture(NULL);
|
| + // Clear the focused window if any. This is necessary because a
|
| + // window may be deleted when losing focus (fullscreen flash for
|
| + // example). If the focused window is still alive after move, it'll
|
| + // be re-focused below.
|
| + aura::client::GetFocusClient(dst)->FocusWindow(NULL);
|
| +
|
| // Forget the shelf early so that shelf don't update itself using wrong
|
| // display info.
|
| workspace_controller_->SetShelf(NULL);
|
| +
|
| ReparentAllWindows(root_window_.get(), dst);
|
| +
|
| + // Restore focused or active window if it's still alive.
|
| + if (focused && tracker.Contains(focused) && dst->Contains(focused)) {
|
| + aura::client::GetFocusClient(dst)->FocusWindow(focused);
|
| + } else if (active && tracker.Contains(active) && dst->Contains(active)) {
|
| + activation_client->ActivateWindow(active);
|
| + }
|
| }
|
|
|
| ShelfLayoutManager* RootWindowController::GetShelfLayoutManager() {
|
|
|