| Index: webrtc/modules/desktop_capture/window_capturer_x11.cc
|
| diff --git a/webrtc/modules/desktop_capture/window_capturer_x11.cc b/webrtc/modules/desktop_capture/window_capturer_x11.cc
|
| index ffe8a3ab9b463ac2ad10b7bc8590f6bdedac5e40..62c258ae85440b9a4609d0eb6be1ffc85d92a7ba 100644
|
| --- a/webrtc/modules/desktop_capture/window_capturer_x11.cc
|
| +++ b/webrtc/modules/desktop_capture/window_capturer_x11.cc
|
| @@ -111,6 +111,9 @@ class WindowCapturerLinux : public DesktopCapturer,
|
| // Returns window title for the specified X |window|.
|
| bool GetWindowTitle(::Window window, std::string* title);
|
|
|
| + // Return WM_STATE property of the |window|.
|
| + int32_t GetWindowState(::Window window);
|
| +
|
| Callback* callback_ = nullptr;
|
|
|
| rtc::scoped_refptr<SharedXDisplay> x_display_;
|
| @@ -286,6 +289,14 @@ void WindowCapturerLinux::CaptureFrame() {
|
| return;
|
| }
|
|
|
| + if (GetWindowState(selected_window_) == IconicState) {
|
| + // Window is in minimized. Return a 1x1 frame as same as OSX/Win does.
|
| + std::unique_ptr<DesktopFrame> frame(
|
| + new BasicDesktopFrame(DesktopSize(1, 1)));
|
| + callback_->OnCaptureResult(Result::SUCCESS, std::move(frame));
|
| + return;
|
| + }
|
| +
|
| std::unique_ptr<DesktopFrame> frame(
|
| new BasicDesktopFrame(x_server_pixel_buffer_.window_size()));
|
|
|
| @@ -317,13 +328,7 @@ bool WindowCapturerLinux::HandleXEvent(const XEvent& event) {
|
| }
|
|
|
| ::Window WindowCapturerLinux::GetApplicationWindow(::Window window) {
|
| - // Get WM_STATE property of the window.
|
| - XWindowProperty<uint32_t> window_state(display(), window, wm_state_atom_);
|
| -
|
| - // WM_STATE is considered to be set to WithdrawnState when it missing.
|
| - int32_t state = window_state.is_valid() ?
|
| - *window_state.data() : WithdrawnState;
|
| -
|
| + int32_t state = GetWindowState(window);
|
| if (state == NormalState) {
|
| // Window has WM_STATE==NormalState. Return it.
|
| return window;
|
| @@ -418,6 +423,14 @@ bool WindowCapturerLinux::GetWindowTitle(::Window window, std::string* title) {
|
| return result;
|
| }
|
|
|
| +int32_t WindowCapturerLinux::GetWindowState(::Window window) {
|
| + // Get WM_STATE property of the window.
|
| + XWindowProperty<uint32_t> window_state(display(), window, wm_state_atom_);
|
| +
|
| + // WM_STATE is considered to be set to WithdrawnState when it missing.
|
| + return window_state.is_valid() ? *window_state.data() : WithdrawnState;
|
| +}
|
| +
|
| } // namespace
|
|
|
| // static
|
|
|