[pulseaudio-discuss] [paprefs][PATCH 1/9] Move from GConf to GSettings
Tanu Kaskinen
tanuk at iki.fi
Tue Apr 17 06:25:40 UTC 2018
From: Sylvain Baubeau <sbaubeau at redhat.com>
---
configure.ac | 4 +
src/Makefile.am | 10 +-
src/org.freedesktop.paprefs.gschema.xml | 12 +
src/paprefs.cc | 411 +++++++++++++++++---------------
src/paprefs.convert | 160 +++++++++++++
5 files changed, 400 insertions(+), 197 deletions(-)
create mode 100644 src/org.freedesktop.paprefs.gschema.xml
create mode 100644 src/paprefs.convert
diff --git a/configure.ac b/configure.ac
index 3df69d1..2dc5d7d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -71,6 +71,10 @@ fi
AM_CONDITIONAL([USE_LYNX], [test "x$lynx" = xyes])
+#### GSettings support ####
+PKG_CHECK_MODULES(GSETTINGS, [ gio-2.0 >= 2.26.0 ])
+GLIB_GSETTINGS
+
AM_GNU_GETTEXT([external])
IT_PROG_INTLTOOL([0.35.0])
diff --git a/src/Makefile.am b/src/Makefile.am
index 34f454f..e030983 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -30,10 +30,16 @@ desktop_DATA=$(desktop_in_files:.desktop.in=.desktop)
paprefs_SOURCES=paprefs.cc
paprefs_LDADD=$(AM_LDADD) $(GUILIBS_LIBS) $(LIBPULSE_LIBS)
-paprefs_CXXFLAGS=$(AM_CXXFLAGS) $(GUILIBS_CFLAGS) $(LIBPULSE_CFLAGS)
+paprefs_CXXFLAGS=$(AM_CXXFLAGS) $(GUILIBS_CFLAGS) $(LIBPULSE_CFLAGS) $(GSETTINGS_CFLAGS)
paprefs_CXXFLAGS+=-DGLADE_FILE=\"$(gladedir)/paprefs.glade\" -DLOCALEDIR=\"$(localedir)\" -DMODDIR=\""$(LIBPULSE_MODLIBEXECDIR)"\" -DSHREXT=\"$(SHREXT)\"
-EXTRA_DIST = $(glade_DATA) $(desktop_in_files)
+gsettings_SCHEMAS = org.freedesktop.paprefs.gschema.xml
+ at GSETTINGS_RULES@
+
+convertdir = $(datadir)/GConf/gsettings
+convert_DATA = paprefs.convert
+
+EXTRA_DIST = $(glade_DATA) $(desktop_in_files) paprefs.convert
CLEANFILES = $(desktop_DATA)
diff --git a/src/org.freedesktop.paprefs.gschema.xml b/src/org.freedesktop.paprefs.gschema.xml
new file mode 100644
index 0000000..a3dcd77
--- /dev/null
+++ b/src/org.freedesktop.paprefs.gschema.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<schemalist>
+ <schema id="org.freedesktop.pulseaudio.modules" path="/org/freedesktop/pulseaudio/modules/">
+ <child name="combine" schema="org.freedesktop.pulseaudio.module"/>
+ <child name="remote-access" schema="org.freedesktop.pulseaudio.module"/>
+ <child name="zeroconf-discover" schema="org.freedesktop.pulseaudio.module"/>
+ <child name="raop-discover" schema="org.freedesktop.pulseaudio.module"/>
+ <child name="rtp-recv" schema="org.freedesktop.pulseaudio.module"/>
+ <child name="rtp-send" schema="org.freedesktop.pulseaudio.module"/>
+ <child name="upnp-media-server" schema="org.freedesktop.pulseaudio.module"/>
+ </schema>
+</schemalist>
diff --git a/src/paprefs.cc b/src/paprefs.cc
index ca6d9bf..dc63e2e 100644
--- a/src/paprefs.cc
+++ b/src/paprefs.cc
@@ -24,8 +24,9 @@
#include <signal.h>
#include <gtkmm.h>
+#include <glibmm.h>
+#include <glibmm/regex.h>
#include <libglademm.h>
-#include <gconfmm.h>
#include <libintl.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus.h>
@@ -33,8 +34,8 @@
#include <pulse/version.h>
-#define PA_GCONF_ROOT "/system/pulseaudio"
-#define PA_GCONF_PATH_MODULES PA_GCONF_ROOT"/modules"
+#define PA_GSETTINGS_PATH_MODULES "/org/freedesktop/pulseaudio/modules"
+#define MAX_MODULES 10
class MainWindow : public Gtk::Window {
public:
@@ -70,7 +71,13 @@ public:
*rtpSpeakerRadioButton,
*rtpNullSinkRadioButton;
- Glib::RefPtr<Gnome::Conf::Client> gconf;
+ Glib::RefPtr<Gio::Settings> combineSettings;
+ Glib::RefPtr<Gio::Settings> remoteAccessSettings;
+ Glib::RefPtr<Gio::Settings> zeroconfSettings;
+ Glib::RefPtr<Gio::Settings> raopSettings;
+ Glib::RefPtr<Gio::Settings> rtpRecvSettings;
+ Glib::RefPtr<Gio::Settings> rtpSendSettings;
+ Glib::RefPtr<Gio::Settings> upnpSettings;
bool ignoreChanges;
@@ -94,20 +101,22 @@ public:
void rtpRecvInstallButtonClicked();
void rtpSendInstallButtonClicked();
- void readFromGConf();
+ void readFromGSettings();
void checkForPackageKit();
void checkForModules();
- void writeToGConfRemoteAccess();
- void writeToGConfZeroconfDiscover();
- void writeToGConfZeroconfRaopDiscover();
- void writeToGConfRtpReceive();
- void writeToGConfRtpSend();
- void writeToGConfCombine();
- void writeToGConfUPnP();
+ void writeToGSettingsRemoteAccess();
+ void writeToGSettingsZeroconfDiscover();
+ void writeToGSettingsZeroconfRaopDiscover();
+ void writeToGSettingsRtpReceive();
+ void writeToGSettingsRtpSend();
+ void writeToGSettingsCombine();
+ void writeToGSettingsUPnP();
- void onGConfChange(const Glib::ustring& key, const Gnome::Conf::Value& value);
+ void onGSettingsChange(const Glib::ustring& key);
+
+ bool moduleHasArgument(Glib::RefPtr<Gio::Settings> gsettings, const Glib::ustring& module, const Glib::ustring& name, const Glib::ustring& value);
void showInstallButton(Gtk::Button *button, bool available);
void installFiles(const char *a, const char *b);
@@ -159,12 +168,35 @@ MainWindow::MainWindow(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade:
checkForPackageKit();
checkForModules();
- gconf = Gnome::Conf::Client::get_default_client();
- gconf->set_error_handling(Gnome::Conf::CLIENT_HANDLE_ALL);
- gconf->add_dir(PA_GCONF_ROOT, Gnome::Conf::CLIENT_PRELOAD_RECURSIVE);
+ combineSettings = Gio::Settings::create("org.freedesktop.pulseaudio.module",
+ "/org/freedesktop/pulseaudio/modules/combine/");
+
+ remoteAccessSettings = Gio::Settings::create("org.freedesktop.pulseaudio.module",
+ "/org/freedesktop/pulseaudio/modules/remote-access/");
+
+ zeroconfSettings = Gio::Settings::create("org.freedesktop.pulseaudio.module",
+ "/org/freedesktop/pulseaudio/modules/zeroconf-discover/");
+
+ raopSettings = Gio::Settings::create("org.freedesktop.pulseaudio.module",
+ "/org/freedesktop/pulseaudio/modules/raop-discover/");
+
+ rtpRecvSettings = Gio::Settings::create("org.freedesktop.pulseaudio.module",
+ "/org/freedesktop/pulseaudio/modules/rtp-recv/");
+
+ rtpSendSettings = Gio::Settings::create("org.freedesktop.pulseaudio.module",
+ "/org/freedesktop/pulseaudio/modules/rtp-send/");
- gconf->signal_value_changed().connect(sigc::mem_fun(*this, &MainWindow::onGConfChange));
- readFromGConf();
+ upnpSettings = Gio::Settings::create("org.freedesktop.pulseaudio.module",
+ "/org/freedesktop/pulseaudio/modules/upnp-media-server/");
+
+ combineSettings->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onGSettingsChange));
+ remoteAccessSettings->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onGSettingsChange));
+ zeroconfSettings->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onGSettingsChange));
+ raopSettings->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onGSettingsChange));
+ rtpRecvSettings->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onGSettingsChange));
+ rtpSendSettings->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onGSettingsChange));
+ upnpSettings->signal_changed().connect(sigc::mem_fun(*this, &MainWindow::onGSettingsChange));
+ readFromGSettings();
closeButton->signal_clicked().connect(sigc::mem_fun(*this, &MainWindow::onCloseButtonClicked));
@@ -247,7 +279,7 @@ void MainWindow::onChangeRemoteAccess() {
return;
updateSensitive();
- writeToGConfRemoteAccess();
+ writeToGSettingsRemoteAccess();
}
void MainWindow::onChangeZeroconfDiscover() {
@@ -256,7 +288,7 @@ void MainWindow::onChangeZeroconfDiscover() {
return;
updateSensitive();
- writeToGConfZeroconfDiscover();
+ writeToGSettingsZeroconfDiscover();
}
void MainWindow::onChangeZeroconfRaopDiscover() {
@@ -265,7 +297,7 @@ void MainWindow::onChangeZeroconfRaopDiscover() {
return;
updateSensitive();
- writeToGConfZeroconfRaopDiscover();
+ writeToGSettingsZeroconfRaopDiscover();
}
void MainWindow::onChangeRtpReceive() {
@@ -273,8 +305,8 @@ void MainWindow::onChangeRtpReceive() {
return;
updateSensitive();
- writeToGConfRtpReceive();
- writeToGConfRtpSend();
+ writeToGSettingsRtpReceive();
+ writeToGSettingsRtpSend();
}
void MainWindow::onChangeRtpSend() {
@@ -282,14 +314,14 @@ void MainWindow::onChangeRtpSend() {
return;
updateSensitive();
- writeToGConfRtpSend();
+ writeToGSettingsRtpSend();
}
void MainWindow::onChangeCombine() {
if (ignoreChanges)
return;
- writeToGConfCombine();
+ writeToGSettingsCombine();
}
void MainWindow::onChangeUpnp() {
@@ -298,7 +330,7 @@ void MainWindow::onChangeUpnp() {
return;
updateSensitive();
- writeToGConfUPnP();
+ writeToGSettingsUPnP();
}
void MainWindow::showInstallButton(Gtk::Button *button, bool available) {
@@ -386,171 +418,128 @@ void MainWindow::rtpSendInstallButtonClicked() {
installModules("module-rtp-send" SHREXT);
}
-void MainWindow::writeToGConfCombine() {
- Gnome::Conf::ChangeSet changeSet;
- changeSet.set(PA_GCONF_PATH_MODULES"/combine/locked", true);
- gconf->change_set_commit(changeSet, true);
+void MainWindow::writeToGSettingsCombine() {
+ combineSettings->delay();
if (combineCheckButton->get_active()) {
- changeSet.set(PA_GCONF_PATH_MODULES"/combine/name0", Glib::ustring("module-combine"));
- changeSet.set(PA_GCONF_PATH_MODULES"/combine/args0", Glib::ustring(""));
+ combineSettings->set_string("name0", Glib::ustring("module-combine"));
+ combineSettings->set_string("args0", Glib::ustring(""));
- changeSet.set(PA_GCONF_PATH_MODULES"/combine/enabled", true);
+ combineSettings->set_boolean("enabled", true);
} else
- changeSet.set(PA_GCONF_PATH_MODULES"/combine/enabled", false);
-
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/combine/locked", false);
- gconf->change_set_commit(changeSet, true);
+ combineSettings->set_boolean("enabled", false);
- gconf->suggest_sync();
+ combineSettings->apply();
}
-void MainWindow::writeToGConfRemoteAccess() {
- Gnome::Conf::ChangeSet changeSet;
+void MainWindow::writeToGSettingsRemoteAccess() {
bool zeroconfEnabled, anonymousEnabled;
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/locked", true);
- gconf->change_set_commit(changeSet, true);
+ remoteAccessSettings->delay();
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/zeroconf_enabled", zeroconfEnabled = zeroconfPublishCheckButton->get_active());
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/anonymous_enabled", anonymousEnabled = anonymousAuthCheckButton->get_active());
+ zeroconfEnabled = zeroconfPublishCheckButton->get_active();
+ anonymousEnabled = anonymousAuthCheckButton->get_active();
if (remoteAccessCheckButton->get_active()) {
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/name0", Glib::ustring("module-native-protocol-tcp"));
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/name1", Glib::ustring("module-esound-protocol-tcp"));
+ remoteAccessSettings->set_string("name0", Glib::ustring("module-native-protocol-tcp"));
+ remoteAccessSettings->set_string("name1", Glib::ustring("module-esound-protocol-tcp"));
if (anonymousEnabled) {
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/args0", Glib::ustring("auth-anonymous=1"));
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/args1", Glib::ustring("auth-anonymous=1"));
+ remoteAccessSettings->set_string("args0", Glib::ustring("auth-anonymous=1"));
+ remoteAccessSettings->set_string("args1", Glib::ustring("auth-anonymous=1"));
} else {
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/args0", Glib::ustring(""));
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/args1", Glib::ustring(""));
+ remoteAccessSettings->set_string("args0", Glib::ustring(""));
+ remoteAccessSettings->set_string("args1", Glib::ustring(""));
}
if (zeroconfEnabled) {
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/name2", Glib::ustring("module-zeroconf-publish"));
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/args2", Glib::ustring(""));
+ remoteAccessSettings->set_string("name2", Glib::ustring("module-zeroconf-publish"));
+ remoteAccessSettings->set_string("args2", Glib::ustring(""));
} else {
- changeSet.unset(PA_GCONF_PATH_MODULES"/remote-access/name2");
- changeSet.unset(PA_GCONF_PATH_MODULES"/remote-access/args2");
+ remoteAccessSettings->reset("name2");
+ remoteAccessSettings->reset("args2");
}
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/enabled", true);
+ remoteAccessSettings->set_boolean("enabled", true);
} else
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/enabled", false);
+ remoteAccessSettings->set_boolean("enabled", false);
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/remote-access/locked", false);
- gconf->change_set_commit(changeSet, true);
-
- gconf->suggest_sync();
+ remoteAccessSettings->apply();
}
-void MainWindow::writeToGConfZeroconfDiscover() {
- Gnome::Conf::ChangeSet changeSet;
-
- changeSet.set(PA_GCONF_PATH_MODULES"/zeroconf-discover/locked", true);
- gconf->change_set_commit(changeSet, true);
+void MainWindow::writeToGSettingsZeroconfDiscover() {
+ zeroconfSettings->delay();
if (zeroconfDiscoverCheckButton->get_active()) {
- changeSet.set(PA_GCONF_PATH_MODULES"/zeroconf-discover/name0", Glib::ustring("module-zeroconf-discover"));
- changeSet.set(PA_GCONF_PATH_MODULES"/zeroconf-discover/args0", Glib::ustring(""));
+ zeroconfSettings->set_string("name0", Glib::ustring("module-zeroconf-discover"));
+ zeroconfSettings->set_string("args0", Glib::ustring(""));
- changeSet.set(PA_GCONF_PATH_MODULES"/zeroconf-discover/enabled", true);
+ zeroconfSettings->set_boolean("enabled", true);
} else
- changeSet.set(PA_GCONF_PATH_MODULES"/zeroconf-discover/enabled", false);
+ zeroconfSettings->set_boolean("enabled", false);
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/zeroconf-discover/locked", false);
- gconf->change_set_commit(changeSet, true);
-
- gconf->suggest_sync();
+ zeroconfSettings->apply();
}
-void MainWindow::writeToGConfZeroconfRaopDiscover() {
- Gnome::Conf::ChangeSet changeSet;
-
- changeSet.set(PA_GCONF_PATH_MODULES"/raop-discover/locked", true);
- gconf->change_set_commit(changeSet, true);
+void MainWindow::writeToGSettingsZeroconfRaopDiscover() {
+ raopSettings->delay();
if (zeroconfRaopDiscoverCheckButton->get_active()) {
- changeSet.set(PA_GCONF_PATH_MODULES"/raop-discover/name0", Glib::ustring("module-raop-discover"));
- changeSet.set(PA_GCONF_PATH_MODULES"/raop-discover/args0", Glib::ustring(""));
+ raopSettings->set_string("name0", Glib::ustring("module-raop-discover"));
+ raopSettings->set_string("args0", Glib::ustring(""));
- changeSet.set(PA_GCONF_PATH_MODULES"/raop-discover/enabled", true);
+ raopSettings->set_boolean("enabled", true);
} else
- changeSet.set(PA_GCONF_PATH_MODULES"/raop-discover/enabled", false);
+ raopSettings->set_boolean("enabled", false);
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/raop-discover/locked", false);
- gconf->change_set_commit(changeSet, true);
-
- gconf->suggest_sync();
+ raopSettings->apply();
}
-void MainWindow::writeToGConfRtpReceive() {
- Gnome::Conf::ChangeSet changeSet;
-
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-recv/locked", true);
- gconf->change_set_commit(changeSet, true);
+void MainWindow::writeToGSettingsRtpReceive() {
+ rtpRecvSettings->delay();
if (rtpReceiveCheckButton->get_active()) {
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-recv/name0", Glib::ustring("module-rtp-recv"));
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-recv/args0", Glib::ustring(""));
+ rtpRecvSettings->set_string("name0", Glib::ustring("module-rtp-recv"));
+ rtpRecvSettings->set_string("args0", Glib::ustring(""));
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-recv/enabled", true);
+ rtpRecvSettings->set_boolean("enabled", true);
} else
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-recv/enabled", false);
+ rtpRecvSettings->set_boolean("enabled", false);
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-recv/locked", false);
- gconf->change_set_commit(changeSet, true);
-
- gconf->suggest_sync();
+ rtpRecvSettings->apply();
}
-void MainWindow::writeToGConfRtpSend() {
- Gnome::Conf::ChangeSet changeSet;
+void MainWindow::writeToGSettingsRtpSend() {
bool loopbackEnabled, fixedPort, mikeEnabled, speakerEnabled = false;
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/locked", true);
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/loopback_enabled", loopbackEnabled = rtpLoopbackCheckButton->get_active());
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/fixed_port", fixedPort = rtpPortCheckButton->get_active());
+ rtpSendSettings->delay();
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/mode", Glib::ustring(
- (mikeEnabled = rtpMikeRadioButton->get_active()) ? "microphone" :
- ((speakerEnabled = rtpSpeakerRadioButton->get_active()) ? "speaker" : "null-sink")));
+ loopbackEnabled = rtpLoopbackCheckButton->get_active();
+ fixedPort = rtpPortCheckButton->get_active();
+ mikeEnabled = rtpMikeRadioButton->get_active();
+ speakerEnabled = rtpSpeakerRadioButton->get_active();
if (rtpSendCheckButton->get_active()) {
if (!mikeEnabled && !speakerEnabled) {
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/name0", Glib::ustring("module-null-sink"));
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/args0", Glib::ustring("sink_name=rtp "
- "format=s16be "
- "channels=2 "
- "rate=44100 "
- "sink_properties=\"device.description='RTP Multicast' device.bus='network' device.icon_name='network-server'\""));
-
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/name1", Glib::ustring("module-rtp-send"));
+ rtpSendSettings->set_string("name0", Glib::ustring("module-null-sink"));
+ rtpSendSettings->set_string("args0", Glib::ustring("sink_name=rtp "
+ "format=s16be "
+ "channels=2 "
+ "rate=44100 "
+ "sink_properties=\"device.description='RTP Multicast' device.bus='network' device.icon_name='network-server'\""));
Glib::ustring params = "source=rtp.monitor";
- if (loopbackEnabled) {
+
+ if (loopbackEnabled)
params += " loop=1";
- }
- else {
+ else
params += " loop=0";
- }
- if(fixedPort) {
+
+ if (fixedPort)
params += " port=5004";
- }
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/args1", params);
+
+ rtpSendSettings->set_string("name1", Glib::ustring("module-rtp-send"));
+ rtpSendSettings->set_string("args1", params);
} else {
char tmp[256];
@@ -558,95 +547,129 @@ void MainWindow::writeToGConfRtpSend() {
mikeEnabled ? "source=@DEFAULT_SOURCE@" : "source=@DEFAULT_MONITOR@",
mikeEnabled && loopbackEnabled ? "loop=1" : "loop=0");
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/name0", Glib::ustring("module-rtp-send"));
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/args0", Glib::ustring(tmp));
+ rtpSendSettings->set_string("name0", Glib::ustring("module-rtp-send"));
+ rtpSendSettings->set_string("args0", Glib::ustring(tmp));
- changeSet.unset(PA_GCONF_PATH_MODULES"/rtp-send/name1");
- changeSet.unset(PA_GCONF_PATH_MODULES"/rtp-send/args1");
+ rtpSendSettings->reset("name1");
+ rtpSendSettings->reset("args1");
}
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/enabled", true);
- } else
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/enabled", false);
-
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/rtp-send/locked", false);
- gconf->change_set_commit(changeSet, true);
+ rtpSendSettings->set_boolean("enabled", true);
+ } else
+ rtpSendSettings->set_boolean("enabled", false);
- gconf->suggest_sync();
+ rtpSendSettings->apply();
}
-void MainWindow::writeToGConfUPnP() {
- Gnome::Conf::ChangeSet changeSet;
+void MainWindow::writeToGSettingsUPnP() {
+ upnpSettings->delay();
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/locked", true);
- gconf->change_set_commit(changeSet, true);
+ bool mediaServer = upnpMediaServerCheckButton->get_active();
+ bool nullSink = upnpNullSinkCheckButton->get_active();
- if (upnpMediaServerCheckButton->get_active()) {
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/name0", Glib::ustring("module-rygel-media-server"));
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/args0", Glib::ustring(""));
+ if (mediaServer) {
+ upnpSettings->set_string("name0", Glib::ustring("module-rygel-media-server"));
+ upnpSettings->set_string("args0", Glib::ustring(""));
- if (upnpNullSinkCheckButton->get_active()) {
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/name1", Glib::ustring("module-null-sink"));
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/args1", Glib::ustring("sink_name=upnp "
- "format=s16be "
- "channels=2 "
- "rate=44100 "
- "sink_properties=\"device.description='DLNA/UPnP Streaming' device.bus='network' device.icon_name='network-server'\""));
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/null-sink-enabled", true);
+ if (nullSink) {
+ upnpSettings->set_string("name1", Glib::ustring("module-null-sink"));
+ upnpSettings->set_string("args1", Glib::ustring("sink_name=upnp "
+ "format=s16be "
+ "channels=2 "
+ "rate=44100 "
+ "sink_properties=\"device.description='DLNA/UPnP Streaming' device.bus='network' device.icon_name='network-server'\""));
} else {
- changeSet.unset(PA_GCONF_PATH_MODULES"/upnp-media-server/name1");
- changeSet.unset(PA_GCONF_PATH_MODULES"/upnp-media-server/args1");
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/null-sink-enabled", false);
+ upnpSettings->reset("name1");
+ upnpSettings->reset("args1");
}
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/enabled", true);
- } else
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/enabled", false);
-
- gconf->change_set_commit(changeSet, true);
-
- changeSet.set(PA_GCONF_PATH_MODULES"/upnp-media-server/locked", false);
- gconf->change_set_commit(changeSet, true);
+ upnpSettings->set_boolean("enabled", true);
+ } else
+ upnpSettings->set_boolean("enabled", false);
- gconf->suggest_sync();
+ upnpSettings->apply();
}
-void MainWindow::onGConfChange(const Glib::ustring&, const Gnome::Conf::Value&) {
- readFromGConf();
+void MainWindow::onGSettingsChange(const Glib::ustring&) {
+ readFromGSettings();
}
-void MainWindow::readFromGConf() {
- Glib::ustring mode;
+bool MainWindow::moduleHasArgument(Glib::RefPtr<Gio::Settings> gsettings, const Glib::ustring& module, const Glib::ustring& name = "", const Glib::ustring& value = "") {
+ Glib::ustring args;
+ std::vector<std::string> moduleArgs, keyValue;
+ for (int i=0; i<MAX_MODULES; i++) {
+ char tmp[256];
+ snprintf(tmp, sizeof(tmp), "name%d", i);
+ if (gsettings->get_string(tmp) == module) {
+ if (name.empty() && value.empty()) {
+ return gsettings->get_boolean("enabled");
+ }
+ snprintf(tmp, sizeof(tmp), "args%d", i);
+ args = gsettings->get_string(tmp);
+ moduleArgs = Glib::Regex::split_simple(" ", args);
+ for (std::vector<std::string>::iterator it = moduleArgs.begin(); it != moduleArgs.end(); ++it) {
+ keyValue = Glib::Regex::split_simple("=", *it);
+ if (keyValue.size() >= 2 && keyValue[0] == name) {
+ return keyValue[1] == value;
+ }
+ }
+ break;
+ }
+ }
+ return false;
+}
+
+void MainWindow::readFromGSettings() {
+ Glib::ustring mode, args;
+ std::vector<std::string> moduleArgs, keyValue;
+ bool loopbackEnabled = false;
+ bool fixedPort = false;
+ bool anonymousEnabled = false;
+ bool zeroconfEnabled = false;
+ bool mikeEnabled = false;
+ bool speakerEnabled = false;
+ bool nullSink = false;
ignoreChanges = TRUE;
- remoteAccessCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/remote-access/enabled"));
- zeroconfPublishCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/remote-access/zeroconf_enabled"));
- anonymousAuthCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/remote-access/anonymous_enabled"));
+ remoteAccessCheckButton->set_active(remoteAccessSettings->get_boolean("enabled"));
+
+ zeroconfDiscoverCheckButton->set_active(zeroconfSettings->get_boolean("enabled"));
+ zeroconfRaopDiscoverCheckButton->set_active(raopSettings->get_boolean("enabled"));
+
+ rtpReceiveCheckButton->set_active(rtpRecvSettings->get_boolean("enabled"));
- zeroconfDiscoverCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/zeroconf-discover/enabled"));
- zeroconfRaopDiscoverCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/raop-discover/enabled"));
+ rtpSendCheckButton->set_active(rtpSendSettings->get_boolean("enabled"));
- rtpReceiveCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/rtp-recv/enabled"));
+ loopbackEnabled = moduleHasArgument(rtpSendSettings, "module-rtp-send", "loop", "1");
+ rtpLoopbackCheckButton->set_active(loopbackEnabled);
- rtpSendCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/rtp-send/enabled"));
- rtpLoopbackCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/rtp-send/loopback_enabled"));
- rtpPortCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/rtp-send/fixed_port"));
+ fixedPort = moduleHasArgument(rtpSendSettings, "module-rtp-send", "port", "5004");
+ rtpPortCheckButton->set_active(fixedPort);
- mode = gconf->get_string(PA_GCONF_PATH_MODULES"/rtp-send/mode");
- if (mode == "microphone")
+ anonymousEnabled = moduleHasArgument(remoteAccessSettings, "module-native-protocol-tcp", "auth-anonymous", "1") &&
+ moduleHasArgument(remoteAccessSettings, "module-esound-protocol-tcp", "auth-anonymous", "1");
+ anonymousAuthCheckButton->set_active(anonymousEnabled);
+
+ zeroconfEnabled = moduleHasArgument(remoteAccessSettings, "module-zeroconf-publish");
+ zeroconfPublishCheckButton->set_active(zeroconfEnabled);
+
+ mikeEnabled = moduleHasArgument(rtpSendSettings, "module-rtp-send", "source", "@DEFAULT_SOURCE@");
+ speakerEnabled = moduleHasArgument(rtpSendSettings, "module-rtp-send", "source", "@DEFAULT_MONITOR@");
+
+ if (mikeEnabled)
rtpMikeRadioButton->set_active(TRUE);
- else if (mode == "speaker")
+ else if (speakerEnabled)
rtpSpeakerRadioButton->set_active(TRUE);
else
rtpNullSinkRadioButton->set_active(TRUE);
- combineCheckButton->set_active(gconf->get_bool(PA_GCONF_PATH_MODULES"/combine/enabled"));
+ combineCheckButton->set_active(combineSettings->get_boolean("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"));
+ upnpMediaServerCheckButton->set_active(upnpSettings->get_boolean("enabled"));
+
+ nullSink = moduleHasArgument(upnpSettings, "module-null-sink", "sink_name", "upnp");
+ upnpNullSinkCheckButton->set_active(nullSink);
ignoreChanges = FALSE;
@@ -734,8 +757,6 @@ int main(int argc, char *argv[]) {
Gtk::Main kit(argc, argv);
- Gnome::Conf::init();
-
Gtk::Window* mainWindow = MainWindow::create();
Gtk::Main::run(*mainWindow);
diff --git a/src/paprefs.convert b/src/paprefs.convert
new file mode 100644
index 0000000..e23a963
--- /dev/null
+++ b/src/paprefs.convert
@@ -0,0 +1,160 @@
+[org.freedesktop.pulseaudio.module:/org/freedesktop/pulseaudio/modules/combine/]
+args0 = /system/pulseaudio/modules/combine/args0
+args1 = /system/pulseaudio/modules/combine/args1
+args2 = /system/pulseaudio/modules/combine/args2
+args3 = /system/pulseaudio/modules/combine/args3
+args4 = /system/pulseaudio/modules/combine/args4
+args5 = /system/pulseaudio/modules/combine/args5
+args6 = /system/pulseaudio/modules/combine/args6
+args7 = /system/pulseaudio/modules/combine/args7
+args8 = /system/pulseaudio/modules/combine/args8
+args9 = /system/pulseaudio/modules/combine/args9
+name0 = /system/pulseaudio/modules/combine/name0
+name1 = /system/pulseaudio/modules/combine/name1
+name2 = /system/pulseaudio/modules/combine/name2
+name3 = /system/pulseaudio/modules/combine/name3
+name4 = /system/pulseaudio/modules/combine/name4
+name5 = /system/pulseaudio/modules/combine/name5
+name6 = /system/pulseaudio/modules/combine/name6
+name7 = /system/pulseaudio/modules/combine/name7
+name8 = /system/pulseaudio/modules/combine/name8
+name9 = /system/pulseaudio/modules/combine/name9
+enabled = /system/pulseaudio/modules/combine/enabled
+
+[org.freedesktop.pulseaudio.module:/org/freedesktop/pulseaudio/modules/remote-access/]
+args0 = /system/pulseaudio/modules/remote-access/args0
+args1 = /system/pulseaudio/modules/remote-access/args1
+args2 = /system/pulseaudio/modules/remote-access/args2
+args3 = /system/pulseaudio/modules/remote-access/args3
+args4 = /system/pulseaudio/modules/remote-access/args4
+args5 = /system/pulseaudio/modules/remote-access/args5
+args6 = /system/pulseaudio/modules/remote-access/args6
+args7 = /system/pulseaudio/modules/remote-access/args7
+args8 = /system/pulseaudio/modules/remote-access/args8
+args9 = /system/pulseaudio/modules/remote-access/args9
+name0 = /system/pulseaudio/modules/remote-access/name0
+name1 = /system/pulseaudio/modules/remote-access/name1
+name2 = /system/pulseaudio/modules/remote-access/name2
+name3 = /system/pulseaudio/modules/remote-access/name3
+name4 = /system/pulseaudio/modules/remote-access/name4
+name5 = /system/pulseaudio/modules/remote-access/name5
+name6 = /system/pulseaudio/modules/remote-access/name6
+name7 = /system/pulseaudio/modules/remote-access/name7
+name8 = /system/pulseaudio/modules/remote-access/name8
+name9 = /system/pulseaudio/modules/remote-access/name9
+enabled = /system/pulseaudio/modules/remote-access/enabled
+
+[org.freedesktop.pulseaudio.module:/org/freedesktop/pulseaudio/modules/zeroconf-discover/]
+args0 = /system/pulseaudio/modules/zeroconf-discover/args0
+args1 = /system/pulseaudio/modules/zeroconf-discover/args1
+args2 = /system/pulseaudio/modules/zeroconf-discover/args2
+args3 = /system/pulseaudio/modules/zeroconf-discover/args3
+args4 = /system/pulseaudio/modules/zeroconf-discover/args4
+args5 = /system/pulseaudio/modules/zeroconf-discover/args5
+args6 = /system/pulseaudio/modules/zeroconf-discover/args6
+args7 = /system/pulseaudio/modules/zeroconf-discover/args7
+args8 = /system/pulseaudio/modules/zeroconf-discover/args8
+args9 = /system/pulseaudio/modules/zeroconf-discover/args9
+name0 = /system/pulseaudio/modules/zeroconf-discover/name0
+name1 = /system/pulseaudio/modules/zeroconf-discover/name1
+name2 = /system/pulseaudio/modules/zeroconf-discover/name2
+name3 = /system/pulseaudio/modules/zeroconf-discover/name3
+name4 = /system/pulseaudio/modules/zeroconf-discover/name4
+name5 = /system/pulseaudio/modules/zeroconf-discover/name5
+name6 = /system/pulseaudio/modules/zeroconf-discover/name6
+name7 = /system/pulseaudio/modules/zeroconf-discover/name7
+name8 = /system/pulseaudio/modules/zeroconf-discover/name8
+name9 = /system/pulseaudio/modules/zeroconf-discover/name9
+enabled = /system/pulseaudio/modules/zeroconf-discover/enabled
+
+[org.freedesktop.pulseaudio.module:/org/freedesktop/pulseaudio/modules/raop-discover/]
+args0 = /system/pulseaudio/modules/raop-discover/args0
+args1 = /system/pulseaudio/modules/raop-discover/args1
+args2 = /system/pulseaudio/modules/raop-discover/args2
+args3 = /system/pulseaudio/modules/raop-discover/args3
+args4 = /system/pulseaudio/modules/raop-discover/args4
+args5 = /system/pulseaudio/modules/raop-discover/args5
+args6 = /system/pulseaudio/modules/raop-discover/args6
+args7 = /system/pulseaudio/modules/raop-discover/args7
+args8 = /system/pulseaudio/modules/raop-discover/args8
+args9 = /system/pulseaudio/modules/raop-discover/args9
+name0 = /system/pulseaudio/modules/raop-discover/name0
+name1 = /system/pulseaudio/modules/raop-discover/name1
+name2 = /system/pulseaudio/modules/raop-discover/name2
+name3 = /system/pulseaudio/modules/raop-discover/name3
+name4 = /system/pulseaudio/modules/raop-discover/name4
+name5 = /system/pulseaudio/modules/raop-discover/name5
+name6 = /system/pulseaudio/modules/raop-discover/name6
+name7 = /system/pulseaudio/modules/raop-discover/name7
+name8 = /system/pulseaudio/modules/raop-discover/name8
+name9 = /system/pulseaudio/modules/raop-discover/name9
+enabled = /system/pulseaudio/modules/raop-discover/enabled
+
+[org.freedesktop.pulseaudio.module:/org/freedesktop/pulseaudio/modules/rtp-recv/]
+args0 = /system/pulseaudio/modules/rtp-recv/args0
+args1 = /system/pulseaudio/modules/rtp-recv/args1
+args2 = /system/pulseaudio/modules/rtp-recv/args2
+args3 = /system/pulseaudio/modules/rtp-recv/args3
+args4 = /system/pulseaudio/modules/rtp-recv/args4
+args5 = /system/pulseaudio/modules/rtp-recv/args5
+args6 = /system/pulseaudio/modules/rtp-recv/args6
+args7 = /system/pulseaudio/modules/rtp-recv/args7
+args8 = /system/pulseaudio/modules/rtp-recv/args8
+args9 = /system/pulseaudio/modules/rtp-recv/args9
+name0 = /system/pulseaudio/modules/rtp-recv/name0
+name1 = /system/pulseaudio/modules/rtp-recv/name1
+name2 = /system/pulseaudio/modules/rtp-recv/name2
+name3 = /system/pulseaudio/modules/rtp-recv/name3
+name4 = /system/pulseaudio/modules/rtp-recv/name4
+name5 = /system/pulseaudio/modules/rtp-recv/name5
+name6 = /system/pulseaudio/modules/rtp-recv/name6
+name7 = /system/pulseaudio/modules/rtp-recv/name7
+name8 = /system/pulseaudio/modules/rtp-recv/name8
+name9 = /system/pulseaudio/modules/rtp-recv/name9
+enabled = /system/pulseaudio/modules/rtp-recv/enabled
+
+[org.freedesktop.pulseaudio.module:/org/freedesktop/pulseaudio/modules/rtp-send/]
+args0 = /system/pulseaudio/modules/rtp-send/args0
+args1 = /system/pulseaudio/modules/rtp-send/args1
+args2 = /system/pulseaudio/modules/rtp-send/args2
+args3 = /system/pulseaudio/modules/rtp-send/args3
+args4 = /system/pulseaudio/modules/rtp-send/args4
+args5 = /system/pulseaudio/modules/rtp-send/args5
+args6 = /system/pulseaudio/modules/rtp-send/args6
+args7 = /system/pulseaudio/modules/rtp-send/args7
+args8 = /system/pulseaudio/modules/rtp-send/args8
+args9 = /system/pulseaudio/modules/rtp-send/args9
+name0 = /system/pulseaudio/modules/rtp-send/name0
+name1 = /system/pulseaudio/modules/rtp-send/name1
+name2 = /system/pulseaudio/modules/rtp-send/name2
+name3 = /system/pulseaudio/modules/rtp-send/name3
+name4 = /system/pulseaudio/modules/rtp-send/name4
+name5 = /system/pulseaudio/modules/rtp-send/name5
+name6 = /system/pulseaudio/modules/rtp-send/name6
+name7 = /system/pulseaudio/modules/rtp-send/name7
+name8 = /system/pulseaudio/modules/rtp-send/name8
+name9 = /system/pulseaudio/modules/rtp-send/name9
+enabled = /system/pulseaudio/modules/rtp-send/enabled
+
+[org.freedesktop.pulseaudio.module:/org/freedesktop/pulseaudio/modules/upnp-media-server/]
+args0 = /system/pulseaudio/modules/upnp-media-server/args0
+args1 = /system/pulseaudio/modules/upnp-media-server/args1
+args2 = /system/pulseaudio/modules/upnp-media-server/args2
+args3 = /system/pulseaudio/modules/upnp-media-server/args3
+args4 = /system/pulseaudio/modules/upnp-media-server/args4
+args5 = /system/pulseaudio/modules/upnp-media-server/args5
+args6 = /system/pulseaudio/modules/upnp-media-server/args6
+args7 = /system/pulseaudio/modules/upnp-media-server/args7
+args8 = /system/pulseaudio/modules/upnp-media-server/args8
+args9 = /system/pulseaudio/modules/upnp-media-server/args9
+name0 = /system/pulseaudio/modules/upnp-media-server/name0
+name1 = /system/pulseaudio/modules/upnp-media-server/name1
+name2 = /system/pulseaudio/modules/upnp-media-server/name2
+name3 = /system/pulseaudio/modules/upnp-media-server/name3
+name4 = /system/pulseaudio/modules/upnp-media-server/name4
+name5 = /system/pulseaudio/modules/upnp-media-server/name5
+name6 = /system/pulseaudio/modules/upnp-media-server/name6
+name7 = /system/pulseaudio/modules/upnp-media-server/name7
+name8 = /system/pulseaudio/modules/upnp-media-server/name8
+name9 = /system/pulseaudio/modules/upnp-media-server/name9
+enabled = /system/pulseaudio/modules/upnp-media-server/enabled
--
2.16.3
More information about the pulseaudio-discuss
mailing list