[pulseaudio-discuss] [PATCH] Added loopback module option

archlinux at nicohood.de archlinux at nicohood.de
Tue Feb 20 07:59:41 UTC 2018


From: NicoHood <git at nicohood.de>

---
 src/paprefs.cc    | 34 ++++++++++++++++++++++++++++++++++
 src/paprefs.glade | 17 ++++++++++++++++-
 2 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/src/paprefs.cc b/src/paprefs.cc
index ca6d9bf..793bb29 100644
--- a/src/paprefs.cc
+++ b/src/paprefs.cc
@@ -62,6 +62,7 @@ public:
         *rtpLoopbackCheckButton,
         *rtpPortCheckButton,
         *combineCheckButton,
+        *loopbackCheckButton,
         *upnpMediaServerCheckButton,
         *upnpNullSinkCheckButton;
 
@@ -84,6 +85,7 @@ public:
     void onChangeRtpReceive();
     void onChangeRtpSend();
     void onChangeCombine();
+    void onChangeLoopback();
     void onChangeUpnp();
 
     void onZeroconfDiscoverInstallButtonClicked();
@@ -105,6 +107,7 @@ public:
     void writeToGConfRtpReceive();
     void writeToGConfRtpSend();
     void writeToGConfCombine();
+    void writeToGConfLoopback();
     void writeToGConfUPnP();
 
     void onGConfChange(const Glib::ustring& key, const Gnome::Conf::Value& value);
@@ -149,6 +152,7 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade:
     x->get_widget("rtpLoopbackCheckButton", rtpLoopbackCheckButton);
     x->get_widget("rtpPortCheckButton", rtpPortCheckButton);
     x->get_widget("combineCheckButton", combineCheckButton);
+    x->get_widget("loopbackCheckButton", loopbackCheckButton);
     x->get_widget("upnpMediaServerCheckButton", upnpMediaServerCheckButton);
     x->get_widget("upnpNullSinkCheckButton", upnpNullSinkCheckButton);
 
@@ -185,6 +189,7 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade:
     rtpNullSinkRadioButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onChangeRtpSend));
 
     combineCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onChangeCombine));
+    loopbackCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onChangeLoopback));
 
     upnpMediaServerCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onChangeUpnp));
     upnpNullSinkCheckButton->signal_toggled().connect(sigc::mem_fun(*this, &MainWindow::onChangeUpnp));
@@ -292,6 +297,13 @@ void MainWindow::onChangeCombine() {
     writeToGConfCombine();
 }
 
+void MainWindow::onChangeLoopback() {
+    if (ignoreChanges)
+        return;
+
+    writeToGConfLoopback();
+}
+
 void MainWindow::onChangeUpnp() {
 
     if (ignoreChanges)
@@ -407,6 +419,27 @@ void MainWindow::writeToGConfCombine() {
     gconf->suggest_sync();
 }
 
+void MainWindow::writeToGConfLoopback() {
+    Gnome::Conf::ChangeSet changeSet;
+    changeSet.set(PA_GCONF_PATH_MODULES"/loopback/locked", true);
+    gconf->change_set_commit(changeSet, true);
+
+    if (loopbackCheckButton->get_active()) {
+        changeSet.set(PA_GCONF_PATH_MODULES"/loopback/name0", Glib::ustring("module-loopback"));
+        changeSet.set(PA_GCONF_PATH_MODULES"/loopback/args0", Glib::ustring(""));
+
+        changeSet.set(PA_GCONF_PATH_MODULES"/loopback/enabled", true);
+    } else
+        changeSet.set(PA_GCONF_PATH_MODULES"/loopback/enabled", false);
+
+    gconf->change_set_commit(changeSet, true);
+
+    changeSet.set(PA_GCONF_PATH_MODULES"/loopback/locked", false);
+    gconf->change_set_commit(changeSet, true);
+
+    gconf->suggest_sync();
+}
+
 void MainWindow::writeToGConfRemoteAccess() {
     Gnome::Conf::ChangeSet changeSet;
     bool zeroconfEnabled, anonymousEnabled;
@@ -644,6 +677,7 @@ void MainWindow::readFromGConf() {
         rtpNullSinkRadioButton->set_active(TRUE);
 
     combineCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/combine/enabled"));
+    loopbackCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/loopback/enabled"));
 
     upnpMediaServerCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/upnp-media-server/enabled"));
     upnpNullSinkCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/upnp-media-server/null-sink-enabled"));
diff --git a/src/paprefs.glade b/src/paprefs.glade
index da6b891..293f991 100644
--- a/src/paprefs.glade
+++ b/src/paprefs.glade
@@ -581,6 +581,21 @@
                     <property name="position">0</property>
                   </packing>
                 </child>
+                <child>
+                  <widget class="GtkCheckButton" id="loopbackCheckButton">
+                    <property name="label" translatable="yes">Add _loopback output device for routing audio from a source to a sink</property>
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="receives_default">False</property>
+                    <property name="use_underline">True</property>
+                    <property name="draw_indicator">True</property>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
               </widget>
               <packing>
                 <property name="position">3</property>
@@ -590,7 +605,7 @@
               <widget class="GtkLabel" id="label4">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="label" translatable="yes">Simultaneous _Output</property>
+                <property name="label" translatable="yes">_Miscellaneous</property>
                 <property name="use_underline">True</property>
               </widget>
               <packing>
-- 
2.16.1



More information about the pulseaudio-discuss mailing list