On 02/20/2018 08:59 AM, archlinux at nicohood.de wrote: > 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> > *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