• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
GetHostDesktopTypeForNativeView(gfx::NativeView native_view)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 
GetHostDesktopTypeForNativeWindow(gfx::NativeWindow native_window)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 
GetActiveDesktop()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