From c8353d170f4ef515f07f9d587078025ecdd0c115 Mon Sep 17 00:00:00 2001
From: Curve <fynnbwdt@gmail.com>
Date: Fri, 31 May 2024 01:21:29 +0200
Subject: [PATCH] feat(ScreenShare): add `ignoreInputMedia`

---
 src/renderer/components/ScreenSharePicker.tsx | 22 ++++++++++++++-----
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/renderer/components/ScreenSharePicker.tsx b/src/renderer/components/ScreenSharePicker.tsx
index 167c592..0303a51 100644
--- a/src/renderer/components/ScreenSharePicker.tsx
+++ b/src/renderer/components/ScreenSharePicker.tsx
@@ -49,6 +49,7 @@ interface StreamSettings {
     audioSources?: AudioSources;
     contentHint?: string;
     workaround?: boolean;
+    ignoreInputMedia?: boolean;
     onlyDefaultSpeakers?: boolean;
     granularSelect?: boolean;
 }
@@ -305,11 +306,13 @@ function StreamSettings({
                     <AudioSourcePickerLinux
                         audioSources={settings.audioSources}
                         workaround={settings.workaround}
+                        ignoreInputMedia={settings.ignoreInputMedia}
                         onlyDefaultSpeakers={settings.onlyDefaultSpeakers}
                         granularSelect={settings.granularSelect}
                         setAudioSources={sources => setSettings(s => ({ ...s, audioSources: sources }))}
                         setWorkaround={value => setSettings(s => ({ ...s, workaround: value }))}
                         setOnlyDefaultSpeakers={value => setSettings(s => ({ ...s, onlyDefaultSpeakers: value }))}
+                        setIgnoreInputMedia={value => setSettings(s => ({ ...s, ignoreInputMedia: value }))}
                         setGranularSelect={value => setSettings(s => ({ ...s, granularSelect: value }))}
                     />
                 )}
@@ -386,18 +389,22 @@ function AudioSourcePickerLinux({
     audioSources,
     workaround,
     onlyDefaultSpeakers,
+    ignoreInputMedia,
     granularSelect,
     setAudioSources,
     setWorkaround,
+    setIgnoreInputMedia,
     setOnlyDefaultSpeakers,
     setGranularSelect
 }: {
     audioSources?: AudioSources;
     workaround?: boolean;
     onlyDefaultSpeakers?: boolean;
+    ignoreInputMedia?: boolean;
     granularSelect?: boolean;
     setAudioSources(s: AudioSources): void;
     setWorkaround(b: boolean): void;
+    setIgnoreInputMedia(b: boolean): void;
     setOnlyDefaultSpeakers(b: boolean): void;
     setGranularSelect(b: boolean): void;
 }) {
@@ -526,15 +533,18 @@ function AudioSourcePickerLinux({
                     onChange={setOnlyDefaultSpeakers}
                     disabled={audioSources !== "Entire System"}
                     value={onlyDefaultSpeakers ?? true}
-                    note={
-                        <>
-                            When sharing entire desktop audio, only share apps that play to the default speakers and
-                            ignore apps that play to other speakers or devices.
-                        </>
-                    }
+                    note={<>When sharing entire desktop audio, only share apps that play to the default speakers.</>}
                 >
                     Only Default Speakers
                 </Switch>
+                <Switch
+                    hideBorder
+                    onChange={setIgnoreInputMedia}
+                    value={ignoreInputMedia ?? true}
+                    note={<>Ignore Nodes that are intended to capture audio.</>}
+                >
+                    Ignore Input Media
+                </Switch>
                 <Switch
                     hideBorder
                     onChange={value => {