Fix sharing full screen PowerPoint pres on macOS
Before this change the full screen application handler was failing to detect PowerPoint going into presentation mode, resulting in the editor window continuing to be shared rather than the intended behavior of sharing the presentation itself. Fix this by always looking for the PowerPoint full screen presentation window, regardless of whether the editor window is still open. In the current version of PowerPoint, the editor stays open during presentation. Bug: chromium:1231437 Change-Id: I1b21e263d25320cc236d127d22d4d64bb52fcbda Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/269560 Reviewed-by: Mark Foltz <mfoltz@chromium.org> Commit-Queue: Mark Foltz <mfoltz@chromium.org> Cr-Commit-Position: refs/heads/main@{#37632}
This commit is contained in:
parent
1fa87c44cb
commit
275e2683b3
1
AUTHORS
1
AUTHORS
@ -82,6 +82,7 @@ Miguel Paris <mparisdiaz@gmail.com>
|
|||||||
Mike Gilbert <floppymaster@gmail.com>
|
Mike Gilbert <floppymaster@gmail.com>
|
||||||
Min Wang <mingewang@gmail.com>
|
Min Wang <mingewang@gmail.com>
|
||||||
Mo Zanaty <mzanaty@cisco.com>
|
Mo Zanaty <mzanaty@cisco.com>
|
||||||
|
Nico Schlumprecht <me@github.nico.onl>
|
||||||
Niek van der Maas <mail@niekvandermaas.nl>
|
Niek van der Maas <mail@niekvandermaas.nl>
|
||||||
Olivier Crête <olivier.crete@ocrete.ca>
|
Olivier Crête <olivier.crete@ocrete.ca>
|
||||||
Pali Rohar
|
Pali Rohar
|
||||||
|
|||||||
@ -55,10 +55,12 @@ class FullScreenMacApplicationHandler : public FullScreenApplicationHandler {
|
|||||||
std::function<bool(const std::string&, const std::string&)>;
|
std::function<bool(const std::string&, const std::string&)>;
|
||||||
|
|
||||||
FullScreenMacApplicationHandler(DesktopCapturer::SourceId sourceId,
|
FullScreenMacApplicationHandler(DesktopCapturer::SourceId sourceId,
|
||||||
TitlePredicate title_predicate)
|
TitlePredicate title_predicate,
|
||||||
|
bool ignore_original_window)
|
||||||
: FullScreenApplicationHandler(sourceId),
|
: FullScreenApplicationHandler(sourceId),
|
||||||
title_predicate_(title_predicate),
|
title_predicate_(title_predicate),
|
||||||
owner_pid_(GetWindowOwnerPid(sourceId)) {}
|
owner_pid_(GetWindowOwnerPid(sourceId)),
|
||||||
|
ignore_original_window_(ignore_original_window) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
using CachePredicate =
|
using CachePredicate =
|
||||||
@ -119,7 +121,7 @@ class FullScreenMacApplicationHandler : public FullScreenApplicationHandler {
|
|||||||
DesktopCapturer::SourceId FindFullScreenWindow(
|
DesktopCapturer::SourceId FindFullScreenWindow(
|
||||||
const DesktopCapturer::SourceList& source_list,
|
const DesktopCapturer::SourceList& source_list,
|
||||||
int64_t timestamp) const override {
|
int64_t timestamp) const override {
|
||||||
return IsWindowOnScreen(GetSourceId())
|
return !ignore_original_window_ && IsWindowOnScreen(GetSourceId())
|
||||||
? 0
|
? 0
|
||||||
: FindFullScreenWindowWithSamePid(source_list, timestamp);
|
: FindFullScreenWindowWithSamePid(source_list, timestamp);
|
||||||
}
|
}
|
||||||
@ -127,6 +129,7 @@ class FullScreenMacApplicationHandler : public FullScreenApplicationHandler {
|
|||||||
protected:
|
protected:
|
||||||
const TitlePredicate title_predicate_;
|
const TitlePredicate title_predicate_;
|
||||||
const int owner_pid_;
|
const int owner_pid_;
|
||||||
|
const bool ignore_original_window_;
|
||||||
mutable int64_t cache_timestamp_ = 0;
|
mutable int64_t cache_timestamp_ = 0;
|
||||||
mutable DesktopCapturer::SourceList cache_sources_;
|
mutable DesktopCapturer::SourceList cache_sources_;
|
||||||
};
|
};
|
||||||
@ -151,7 +154,7 @@ bool slide_show_title_predicate(const std::string& original_title,
|
|||||||
class OpenOfficeApplicationHandler : public FullScreenMacApplicationHandler {
|
class OpenOfficeApplicationHandler : public FullScreenMacApplicationHandler {
|
||||||
public:
|
public:
|
||||||
OpenOfficeApplicationHandler(DesktopCapturer::SourceId sourceId)
|
OpenOfficeApplicationHandler(DesktopCapturer::SourceId sourceId)
|
||||||
: FullScreenMacApplicationHandler(sourceId, nullptr) {}
|
: FullScreenMacApplicationHandler(sourceId, nullptr, false) {}
|
||||||
|
|
||||||
DesktopCapturer::SourceId FindFullScreenWindow(
|
DesktopCapturer::SourceId FindFullScreenWindow(
|
||||||
const DesktopCapturer::SourceList& source_list,
|
const DesktopCapturer::SourceList& source_list,
|
||||||
@ -207,10 +210,12 @@ CreateFullScreenMacApplicationHandler(DesktopCapturer::SourceId sourceId) {
|
|||||||
const std::string name{last_slash ? last_slash + 1 : buffer};
|
const std::string name{last_slash ? last_slash + 1 : buffer};
|
||||||
const std::string owner_name = GetWindowOwnerName(sourceId);
|
const std::string owner_name = GetWindowOwnerName(sourceId);
|
||||||
FullScreenMacApplicationHandler::TitlePredicate predicate = nullptr;
|
FullScreenMacApplicationHandler::TitlePredicate predicate = nullptr;
|
||||||
|
bool ignore_original_window = false;
|
||||||
if (name.find("Google Chrome") == 0 || name == "Chromium") {
|
if (name.find("Google Chrome") == 0 || name == "Chromium") {
|
||||||
predicate = equal_title_predicate;
|
predicate = equal_title_predicate;
|
||||||
} else if (name == "Microsoft PowerPoint") {
|
} else if (name == "Microsoft PowerPoint") {
|
||||||
predicate = slide_show_title_predicate;
|
predicate = slide_show_title_predicate;
|
||||||
|
ignore_original_window = true;
|
||||||
} else if (name == "Keynote") {
|
} else if (name == "Keynote") {
|
||||||
predicate = equal_title_predicate;
|
predicate = equal_title_predicate;
|
||||||
} else if (owner_name == "OpenOffice") {
|
} else if (owner_name == "OpenOffice") {
|
||||||
@ -218,7 +223,8 @@ CreateFullScreenMacApplicationHandler(DesktopCapturer::SourceId sourceId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (predicate) {
|
if (predicate) {
|
||||||
result.reset(new FullScreenMacApplicationHandler(sourceId, predicate));
|
result.reset(new FullScreenMacApplicationHandler(sourceId, predicate,
|
||||||
|
ignore_original_window));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user