Index: chrome/browser/fullscreen_win.cc |
=================================================================== |
--- chrome/browser/fullscreen_win.cc (revision 0) |
+++ chrome/browser/fullscreen_win.cc (revision 0) |
@@ -0,0 +1,84 @@ |
+// Copyright (c) 2011 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/fullscreen.h" |
+ |
+#include <windows.h> |
+#include <shellapi.h> |
+ |
+static bool IsPlatformFullScreenMode() { |
+ // SHQueryUserNotificationState is only available for Vista and above. |
+#if defined(NTDDI_VERSION) && (NTDDI_VERSION >= NTDDI_VISTA) |
+ QUERY_USER_NOTIFICATION_STATE state; |
+ if (FAILED(SHQueryUserNotificationState(&state))) |
levin
2011/01/21 20:41:08
Seems like you'd want to put a :: here since you p
|
+ return false; |
+ return state == QUNS_RUNNING_D3D_FULL_SCREEN || |
+ state == QUNS_PRESENTATION_MODE; |
+#else |
+ return false; |
+#endif |
+} |
+ |
+static bool IsFullScreenWindowMode() { |
+ // Get the foreground window which the user is currently working on. |
+ HWND wnd = ::GetForegroundWindow(); |
+ if (!wnd) |
+ return false; |
+ |
+ // Get the monitor where the window is located. |
+ RECT wnd_rc; |
levin
2011/01/21 20:41:08
Whenever I see "rc", I think resource compiler.
r
|
+ if (!::GetWindowRect(wnd, &wnd_rc)) |
+ return false; |
+ HMONITOR monitor = ::MonitorFromRect(&wnd_rc, MONITOR_DEFAULTTONULL); |
+ if (!monitor) |
+ return false; |
+ MONITORINFO monitor_info = { sizeof(monitor_info) }; |
+ if (!::GetMonitorInfo(monitor, &monitor_info)) |
+ return false; |
+ |
+ // It should be the main monitor. |
+ if (!(monitor_info.dwFlags & MONITORINFOF_PRIMARY)) |
+ return false; |
+ |
+ // The window should be at least as large as the monitor. |
+ if (!::IntersectRect(&wnd_rc, &wnd_rc, &monitor_info.rcMonitor)) |
+ return false; |
+ if (!::EqualRect(&wnd_rc, &monitor_info.rcMonitor)) |
+ return false; |
+ |
+ // At last, the window style should not have WS_DLGFRAME and WS_THICKFRAME and |
+ // its extended style should not have WS_EX_WINDOWEDGE and WS_EX_TOOLWINDOW. |
+ LONG style = ::GetWindowLong(wnd, GWL_STYLE); |
+ LONG ext_style = ::GetWindowLong(wnd, GWL_EXSTYLE); |
+ return !((style & (WS_DLGFRAME | WS_THICKFRAME)) || |
+ (ext_style & (WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW))); |
+} |
+ |
+static bool IsFullScreenConsoleMode() { |
+ // We detect this by attaching the current process to the console of the |
+ // foreground window and then checking if it is in full screen mode. |
+ DWORD pid = 0; |
+ ::GetWindowThreadProcessId(::GetForegroundWindow(), &pid); |
+ if (!pid) |
+ return false; |
+ |
+ if (!::AttachConsole(pid)) |
+ return false; |
+ |
+ DWORD modes = 0; |
+ ::GetConsoleDisplayMode(&modes); |
+ ::FreeConsole(); |
+ |
+ return (modes & (CONSOLE_FULLSCREEN | CONSOLE_FULLSCREEN_HARDWARE)) != 0; |
+} |
+ |
+bool IsFullScreenMode() { |
+ if (IsPlatformFullScreenMode()) |
+ return true; |
+ if (IsFullScreenWindowMode()) |
+ return true; |
+ if (IsFullScreenConsoleMode()) |
+ return true; |
+ return false; |
levin
2011/01/21 20:41:08
Or just
return IsPlatformFullScreenMode() || Is
|
+} |
Property changes on: chrome\browser\fullscreen_win.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |