// Copyright 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/ui/host_desktop.h" #if defined(OS_WIN) #include #endif #include "ash/shell.h" #include "chrome/browser/ui/ash/ash_util.h" #include "chrome/browser/ui/aura/active_desktop_monitor.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" namespace chrome { HostDesktopType GetHostDesktopTypeForNativeView(gfx::NativeView native_view) { #if defined(USE_ASH) // TODO(ananta) // Once we've threaded creation context to wherever needed, we should remove // this check here. #if defined(OS_WIN) if (!native_view) return GetActiveDesktop(); #endif return IsNativeViewInAsh(native_view) ? HOST_DESKTOP_TYPE_ASH : HOST_DESKTOP_TYPE_NATIVE; #else return HOST_DESKTOP_TYPE_NATIVE; #endif } HostDesktopType GetHostDesktopTypeForNativeWindow( gfx::NativeWindow native_window) { #if defined(USE_ASH) // TODO(ananta) // Once we've threaded creation context to wherever needed, we should remove // this check here. #if defined(OS_WIN) if (!native_window) return GetActiveDesktop(); #endif return IsNativeWindowInAsh(native_window) ? HOST_DESKTOP_TYPE_ASH : HOST_DESKTOP_TYPE_NATIVE; #else return HOST_DESKTOP_TYPE_NATIVE; #endif } HostDesktopType GetActiveDesktop() { #if defined(USE_ASH) && !defined(OS_CHROMEOS) // The Ash desktop is considered active if a non-desktop RootWindow was last // activated and the Ash desktop is still open. As it is, the Ash desktop // will be considered the last active if a user switches from metro Chrome to // the Windows desktop but doesn't activate any Chrome windows there (e.g., // by clicking on one or otherwise giving one focus). Consider finding a way // to detect that the Windows desktop has been activated so that the native // desktop can be considered active once the user switches to it if its // BrowserList isn't empty. if ((ActiveDesktopMonitor::GetLastActivatedDesktopType() == chrome::HOST_DESKTOP_TYPE_ASH) && ash::Shell::HasInstance()) { return HOST_DESKTOP_TYPE_ASH; } #endif return HOST_DESKTOP_TYPE_NATIVE; } } // namespace chrome