Commit eeee643a authored by David Bienvenu's avatar David Bienvenu Committed by Commit Bot

Fix handling of failure case of IsWindowOnCurrentVirtualDesktop

If the IVirtualDestkopManager COM method IsWindowOnCurrentVirtualDesktop
fails on a window, treat the window as non-occluding, because that's
safer than treating it as occluding - it might be on an another virtual
desktop, and thus should be non-occluding.

Previously, IsWindowOnCurrentVirtualDesktop was incorrectly returning
base::Optional nullopt on Windows 7 and 8.1 (i.e., unknown). This CL
makes it return true, because there are no virtual desktops on Win 7/8,
so every window is on the current desktop. This allows us to require
that IsWindowOnCurrentVirtualDesktop return true to say that a window
is occluding - previously we checked for != false, to handle Win7.

Bug: 813093
Change-Id: Iee49eff9333a8530314720702b1815256acdbfc5
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2410420Reviewed-by: default avatarJesse McKenna <jessemckenna@google.com>
Commit-Queue: David Bienvenu <davidbienvenu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#806683}
parent 4e7cbac1
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "ui/aura/native_window_occlusion_tracker_win.h" #include "ui/aura/native_window_occlusion_tracker_win.h"
#include <dwmapi.h>
#include <memory> #include <memory>
#include "base/bind.h" #include "base/bind.h"
...@@ -19,8 +20,6 @@ ...@@ -19,8 +20,6 @@
#include "base/win/windows_version.h" #include "base/win/windows_version.h"
#include "ui/aura/window_tree_host.h" #include "ui/aura/window_tree_host.h"
#include "dwmapi.h"
namespace aura { namespace aura {
namespace { namespace {
...@@ -669,18 +668,18 @@ bool NativeWindowOcclusionTrackerWin::WindowOcclusionCalculator:: ...@@ -669,18 +668,18 @@ bool NativeWindowOcclusionTrackerWin::WindowOcclusionCalculator::
HWND hwnd, HWND hwnd,
gfx::Rect* window_rect) { gfx::Rect* window_rect) {
return IsWindowVisibleAndFullyOpaque(hwnd, window_rect) && return IsWindowVisibleAndFullyOpaque(hwnd, window_rect) &&
(IsWindowOnCurrentVirtualDesktop(hwnd) != false); (IsWindowOnCurrentVirtualDesktop(hwnd) == true);
} }
base::Optional<bool> NativeWindowOcclusionTrackerWin:: base::Optional<bool> NativeWindowOcclusionTrackerWin::
WindowOcclusionCalculator::IsWindowOnCurrentVirtualDesktop(HWND hwnd) { WindowOcclusionCalculator::IsWindowOnCurrentVirtualDesktop(HWND hwnd) {
if (virtual_desktop_manager_) { if (!virtual_desktop_manager_)
BOOL on_current_desktop; return true;
if (SUCCEEDED(virtual_desktop_manager_->IsWindowOnCurrentVirtualDesktop( BOOL on_current_desktop;
hwnd, &on_current_desktop))) { if (SUCCEEDED(virtual_desktop_manager_->IsWindowOnCurrentVirtualDesktop(
return on_current_desktop; hwnd, &on_current_desktop))) {
} return on_current_desktop;
} }
return base::nullopt; return base::nullopt;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment