browser_frame_ashwin.cc revision f2477e01787aa58f445919b809d89e252beef54f
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/ui/views/frame/browser_frame_ashwin.h"
6
7#include "base/bind.h"
8#include "base/message_loop/message_loop.h"
9#include "chrome/browser/browser_shutdown.h"
10#include "chrome/browser/metro_utils/metro_chrome_win.h"
11#include "ui/aura/remote_root_window_host_win.h"
12
13BrowserFrameAshWin::BrowserFrameAshWin(BrowserFrame* browser_frame,
14                                       BrowserView* browser_view)
15    : BrowserFrameAsh(browser_frame, browser_view) {
16}
17
18BrowserFrameAshWin::~BrowserFrameAshWin() {
19}
20
21void BrowserFrameAshWin::OnWindowFocused(aura::Window* gained_focus,
22                                         aura::Window* lost_focus) {
23  BrowserFrameAsh::OnWindowFocused(gained_focus, lost_focus);
24  if (GetNativeWindow() != gained_focus)
25    return;
26
27  // TODO(shrikant): We need better way to handle chrome activation.
28  // There may be cases where focus events do not follow a user
29  // action to create or focus a window
30
31  // If the activated window is in Metro mode, and the viewer process window is
32  // not in the foreground, activate Metro Chrome.
33  if (!aura::RemoteRootWindowHostWin::Instance()->IsForegroundWindow() &&
34      !browser_shutdown::IsTryingToQuit()) {
35    // PostTask because ActivateMetroChrome can not be called nested in another
36    // ::SendMessage().
37    base::MessageLoop::current()->PostTask(
38        FROM_HERE,
39        base::Bind(base::IgnoreResult(chrome::ActivateMetroChrome)));
40  }
41}
42