From 17a1654670870bf9e30d05d5c39942e0982c5223 Mon Sep 17 00:00:00 2001 From: Tom Anderson Date: Mon, 3 Aug 2020 12:04:57 -0700 Subject: [PATCH] Reland "[XProto] Add SharedXDisplay::IgnoreXServerGrabs" This is a reland of cf8ea9c25903edb2c907a3cf18e1d31e0196e2e9 Original change's description: > [XProto] Add SharedXDisplay::IgnoreXServerGrabs > > This is necessary for Chromium CL: > https://chromium-review.googlesource.com/c/chromium/src/+/2327373 > > BUG=chromium:1066670 > > Change-Id: I8c5e5976d6c4737135254b9715b3aa5c885bfc8c > Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/180773 > Reviewed-by: Jamie Walch > Commit-Queue: Thomas Anderson > Cr-Commit-Position: refs/heads/master@{#31901} TBR=jamiewalch@chromium.org, thomasanderson@chromium.org Bug: chromium:1066670 Change-Id: I8ea0a2ff5445524648243635724014ff5337767c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/181460 Reviewed-by: Mirko Bonadei Commit-Queue: Mirko Bonadei Cr-Commit-Position: refs/heads/master@{#31917} --- modules/desktop_capture/BUILD.gn | 1 + modules/desktop_capture/linux/shared_x_display.cc | 12 ++++++++++++ modules/desktop_capture/linux/shared_x_display.h | 5 ++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn index eb26f5c7bb..b40b7430f6 100644 --- a/modules/desktop_capture/BUILD.gn +++ b/modules/desktop_capture/BUILD.gn @@ -400,6 +400,7 @@ rtc_library("desktop_capture_generic") { "Xfixes", "Xrender", "Xrandr", + "Xtst", ] } diff --git a/modules/desktop_capture/linux/shared_x_display.cc b/modules/desktop_capture/linux/shared_x_display.cc index c475db6e78..f0b35f62d3 100644 --- a/modules/desktop_capture/linux/shared_x_display.cc +++ b/modules/desktop_capture/linux/shared_x_display.cc @@ -11,6 +11,7 @@ #include "modules/desktop_capture/linux/shared_x_display.h" #include +#include #include @@ -86,4 +87,15 @@ void SharedXDisplay::ProcessPendingXEvents() { } } +void SharedXDisplay::IgnoreXServerGrabs() { + int test_event_base = 0; + int test_error_base = 0; + int major = 0; + int minor = 0; + if (XTestQueryExtension(display(), &test_event_base, &test_error_base, &major, + &minor)) { + XTestGrabControl(display(), true); + } +} + } // namespace webrtc diff --git a/modules/desktop_capture/linux/shared_x_display.h b/modules/desktop_capture/linux/shared_x_display.h index 98b6101904..64c498c134 100644 --- a/modules/desktop_capture/linux/shared_x_display.h +++ b/modules/desktop_capture/linux/shared_x_display.h @@ -18,6 +18,7 @@ #include "api/ref_counted_base.h" #include "api/scoped_refptr.h" #include "rtc_base/constructor_magic.h" +#include "rtc_base/system/rtc_export.h" // Including Xlib.h will involve evil defines (Bool, Status, True, False), which // easily conflict with other headers. @@ -27,7 +28,7 @@ typedef union _XEvent XEvent; namespace webrtc { // A ref-counted object to store XDisplay connection. -class SharedXDisplay : public rtc::RefCountedBase { +class RTC_EXPORT SharedXDisplay : public rtc::RefCountedBase { public: class XEventHandler { public: @@ -62,6 +63,8 @@ class SharedXDisplay : public rtc::RefCountedBase { // Processes pending XEvents, calling corresponding event handlers. void ProcessPendingXEvents(); + void IgnoreXServerGrabs(); + protected: ~SharedXDisplay() override;