browser_frame_ashwin.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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_window_tree_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::RemoteWindowTreeHostWin::IsValid() && 34 !aura::RemoteWindowTreeHostWin::Instance()->IsForegroundWindow() && 35 !browser_shutdown::IsTryingToQuit()) { 36 // PostTask because ActivateMetroChrome can not be called nested in another 37 // ::SendMessage(). 38 base::MessageLoop::current()->PostTask( 39 FROM_HERE, 40 base::Bind(base::IgnoreResult(chrome::ActivateMetroChrome))); 41 } 42} 43