Home | History | Annotate | Download | only in ui
      1 // Copyright 2012 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/host_desktop.h"
      6 
      7 #if defined(OS_WIN)
      8 #include <windows.h>
      9 #endif
     10 
     11 #include "ash/shell.h"
     12 #include "chrome/browser/ui/ash/ash_util.h"
     13 #include "chrome/browser/ui/aura/active_desktop_monitor.h"
     14 #include "chrome/browser/ui/browser.h"
     15 #include "chrome/browser/ui/browser_list.h"
     16 
     17 namespace chrome {
     18 
     19 HostDesktopType GetHostDesktopTypeForNativeView(gfx::NativeView native_view) {
     20 #if defined(USE_ASH)
     21   // TODO(ananta)
     22   // Once we've threaded creation context to wherever needed, we should remove
     23   // this check here.
     24 #if defined(OS_WIN)
     25   if (!native_view)
     26     return GetActiveDesktop();
     27 #endif
     28   return IsNativeViewInAsh(native_view) ?
     29       HOST_DESKTOP_TYPE_ASH :
     30       HOST_DESKTOP_TYPE_NATIVE;
     31 #else
     32   return HOST_DESKTOP_TYPE_NATIVE;
     33 #endif
     34 }
     35 
     36 HostDesktopType GetHostDesktopTypeForNativeWindow(
     37     gfx::NativeWindow native_window) {
     38 #if defined(USE_ASH)
     39   // TODO(ananta)
     40   // Once we've threaded creation context to wherever needed, we should remove
     41   // this check here.
     42 #if defined(OS_WIN)
     43   if (!native_window)
     44     return GetActiveDesktop();
     45 #endif
     46   return IsNativeWindowInAsh(native_window) ?
     47       HOST_DESKTOP_TYPE_ASH :
     48       HOST_DESKTOP_TYPE_NATIVE;
     49 #else
     50   return HOST_DESKTOP_TYPE_NATIVE;
     51 #endif
     52 }
     53 
     54 HostDesktopType GetActiveDesktop() {
     55 #if defined(USE_ASH) && !defined(OS_CHROMEOS)
     56   // The Ash desktop is considered active if a non-desktop RootWindow was last
     57   // activated and the Ash desktop is still open.  As it is, the Ash desktop
     58   // will be considered the last active if a user switches from metro Chrome to
     59   // the Windows desktop but doesn't activate any Chrome windows there (e.g.,
     60   // by clicking on one or otherwise giving one focus).  Consider finding a way
     61   // to detect that the Windows desktop has been activated so that the native
     62   // desktop can be considered active once the user switches to it if its
     63   // BrowserList isn't empty.
     64   if ((ActiveDesktopMonitor::GetLastActivatedDesktopType() ==
     65        chrome::HOST_DESKTOP_TYPE_ASH) &&
     66       ash::Shell::HasInstance()) {
     67     return HOST_DESKTOP_TYPE_ASH;
     68   }
     69 #endif
     70   return HOST_DESKTOP_TYPE_NATIVE;
     71 }
     72 
     73 }  // namespace chrome
     74