diff --git a/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc b/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc index ec3974a653..1c74ed97ab 100644 --- a/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc +++ b/webrtc/modules/desktop_capture/mac/full_screen_chrome_window_detector.cc @@ -147,7 +147,7 @@ FullScreenChromeWindowDetector::~FullScreenChromeWindowDetector() {} CGWindowID FullScreenChromeWindowDetector::FindFullScreenWindow( CGWindowID original_window) { - if (!IsChromeWindow(original_window) || !IsWindowMinimized(original_window)) + if (!IsChromeWindow(original_window) || IsWindowOnScreen(original_window)) return kCGNullWindowID; CGWindowID full_screen_window_id = @@ -176,7 +176,7 @@ void FullScreenChromeWindowDetector::UpdateWindowListIfNeeded( previous_window_list_.swap(current_window_list_); // No need to update the window list when the window is minimized. - if (IsWindowMinimized(original_window)) { + if (!IsWindowOnScreen(original_window)) { previous_window_list_.clear(); return; } diff --git a/webrtc/modules/desktop_capture/mac/window_list_utils.cc b/webrtc/modules/desktop_capture/mac/window_list_utils.cc index 6fc697bd9b..8b668c9703 100644 --- a/webrtc/modules/desktop_capture/mac/window_list_utils.cc +++ b/webrtc/modules/desktop_capture/mac/window_list_utils.cc @@ -83,7 +83,7 @@ bool GetWindowList(rtc::FunctionView on_window, } // Skip windows that are minimized and not full screen. - if (ignore_minimized && IsWindowMinimized(window) && + if (ignore_minimized && !IsWindowOnScreen(window) && !IsWindowFullScreen(desktop_config, window)) { continue; } @@ -138,29 +138,28 @@ bool IsWindowFullScreen( return fullscreen; } -bool IsWindowMinimized(CFDictionaryRef window) { +bool IsWindowOnScreen(CFDictionaryRef window) { CFBooleanRef on_screen = reinterpret_cast( CFDictionaryGetValue(window, kCGWindowIsOnscreen)); - return on_screen != NULL && !CFBooleanGetValue(on_screen); + return on_screen == NULL || CFBooleanGetValue(on_screen); } -// Returns true if the window is minimized. -bool IsWindowMinimized(CGWindowID id) { +bool IsWindowOnScreen(CGWindowID id) { CFArrayRef window_id_array = CFArrayCreate(NULL, reinterpret_cast(&id), 1, NULL); CFArrayRef window_array = CGWindowListCreateDescriptionFromArray(window_id_array); - bool minimized = false; + bool on_screen = true; if (window_array && CFArrayGetCount(window_array)) { - minimized = IsWindowMinimized(reinterpret_cast( + on_screen = IsWindowOnScreen(reinterpret_cast( CFArrayGetValueAtIndex(window_array, 0))); } CFRelease(window_id_array); CFRelease(window_array); - return minimized; + return on_screen; } std::string GetWindowTitle(CFDictionaryRef window) { diff --git a/webrtc/modules/desktop_capture/mac/window_list_utils.h b/webrtc/modules/desktop_capture/mac/window_list_utils.h index 7147e89a18..b4608f6641 100644 --- a/webrtc/modules/desktop_capture/mac/window_list_utils.h +++ b/webrtc/modules/desktop_capture/mac/window_list_utils.h @@ -36,11 +36,16 @@ bool GetWindowList(DesktopCapturer::SourceList* windows, bool ignore_minimized); bool IsWindowFullScreen(const MacDesktopConfiguration& desktop_config, CFDictionaryRef window); -// Returns true if the |window| is minimized. -bool IsWindowMinimized(CFDictionaryRef window); +// TODO(zijiehe): Flip the behaviors of the following two functions when native +// APIs fail. If |window| does not represent a window, or |id| cannot be found, +// returning false is more reasonable. +// Returns true if the |window| is on screen. This function returns true if +// native APIs fail. +bool IsWindowOnScreen(CFDictionaryRef window); -// Returns true if the window is minimized. -bool IsWindowMinimized(CGWindowID id); +// Returns true if the window is on screen. This function returns true if native +// APIs fail or |id| cannot be found. +bool IsWindowOnScreen(CGWindowID id); // Returns utf-8 encoded title of |window|. If |window| is not a window or no // valid title can be retrieved, this function returns an empty string.