| // 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 <windows.h> |
| #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 |