Added loopback module option

Submitted by archlinux@nicohood.de on Feb. 20, 2018, 7:59 a.m.

Details

Message ID 20180220075941.30546-1-archlinux@nicohood.de
State New
Headers show
Series "Added loopback module option" ( rev: 1 ) in PulseAudio

Not browsing as part of any series.

Commit Message

archlinux@nicohood.de Feb. 20, 2018, 7:59 a.m.
From: NicoHood <git@nicohood.de>

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

Patch hide | download patch | download mbox

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>

Comments

On 02/20/2018 08:59 AM, archlinux@nicohood.de wrote:
> From: NicoHood <git@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>
> 

*Push*

The changes are trivial, would be nice if someone can merge it and give
it a new tag. My other (already merged) fix about the fixed rtp port
would then also be included in paprefs :)

~Nico