| Index: ui/views/win/scoped_fullscreen_visibility.cc
|
| ===================================================================
|
| --- ui/views/win/scoped_fullscreen_visibility.cc (revision 0)
|
| +++ ui/views/win/scoped_fullscreen_visibility.cc (revision 0)
|
| @@ -0,0 +1,53 @@
|
| +// Copyright (c) 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 "ui/views/win/scoped_fullscreen_visibility.h"
|
| +
|
| +#include "base/logging.h"
|
| +
|
| +namespace views {
|
| +
|
| +// static
|
| +std::map<HWND, int>* ScopedFullscreenVisibility::full_screen_windows_ = NULL;
|
| +
|
| +ScopedFullscreenVisibility::ScopedFullscreenVisibility(HWND hwnd)
|
| + : hwnd_(hwnd) {
|
| + if (!full_screen_windows_)
|
| + full_screen_windows_ = new FullscreenHWNDs;
|
| + FullscreenHWNDs::iterator it = full_screen_windows_->find(hwnd_);
|
| + if (it != full_screen_windows_->end()) {
|
| + it->second++;
|
| + } else {
|
| + full_screen_windows_->insert(std::make_pair(hwnd_, 1));
|
| + // NOTE: Be careful not to activate any windows here (for example, calling
|
| + // ShowWindow(SW_HIDE) will automatically activate another window). This
|
| + // code can be called while a window is being deactivated, and activating
|
| + // another window will screw up the activation that is already in progress.
|
| + SetWindowPos(hwnd_, NULL, 0, 0, 0, 0,
|
| + SWP_HIDEWINDOW | SWP_NOACTIVATE | SWP_NOMOVE |
|
| + SWP_NOREPOSITION | SWP_NOSIZE | SWP_NOZORDER);
|
| + }
|
| +}
|
| +
|
| +ScopedFullscreenVisibility::~ScopedFullscreenVisibility() {
|
| + FullscreenHWNDs::iterator it = full_screen_windows_->find(hwnd_);
|
| + DCHECK(it != full_screen_windows_->end());
|
| + if (--it->second == 0) {
|
| + full_screen_windows_->erase(it);
|
| + ShowWindow(hwnd_, SW_SHOW);
|
| + }
|
| + if (full_screen_windows_->empty()) {
|
| + delete full_screen_windows_;
|
| + full_screen_windows_ = NULL;
|
| + }
|
| +}
|
| +
|
| +// static
|
| +bool ScopedFullscreenVisibility::IsHiddenForFullscreen(HWND hwnd) {
|
| + if (!full_screen_windows_)
|
| + return false;
|
| + return full_screen_windows_->find(hwnd) != full_screen_windows_->end();
|
| +}
|
| +
|
| +} // namespace views
|
|
|