Honor sound theme on GNOME

We don't set this for other DEs since they might want to pick
a good default from elsewhere.
This commit is contained in:
Guido Günther
2020-05-26 18:39:58 +02:00
parent 851b46f4a4
commit 00c363293a
+42
View File
@@ -14,6 +14,9 @@
#include <gsound.h>
#define GNOME_SOUND_SCHEMA_ID "org.gnome.desktop.sound"
#define GNOME_SOUND_KEY_THEME_NAME "theme-name"
/**
* SECTION:fbd-dev-sound
* @short_description: Sound interface
@@ -32,6 +35,7 @@ typedef struct _FbdDevSound {
GObject parent;
GSoundContext *ctx;
GSettings *sound_settings;
} FbdDevSound;
static void initable_iface_init (GInitableIface *iface);
@@ -39,12 +43,39 @@ static void initable_iface_init (GInitableIface *iface);
G_DEFINE_TYPE_WITH_CODE (FbdDevSound, fbd_dev_sound, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init));
static void
on_sound_theme_name_changed (FbdDevSound *self,
const gchar *key,
GSettings *settings)
{
gboolean ok;
g_autoptr(GError) error = NULL;
g_autofree gchar *name = NULL;
g_return_if_fail (FBD_IS_DEV_SOUND (self));
g_return_if_fail (G_IS_SETTINGS (settings));
g_return_if_fail (!g_strcmp0 (key, GNOME_SOUND_KEY_THEME_NAME));
g_return_if_fail (self->ctx);
name = g_settings_get_string (settings, key);
g_debug ("Setting sound theme to %s", name);
ok = gsound_context_set_attributes (self->ctx,
&error,
GSOUND_ATTR_CANBERRA_XDG_THEME_NAME,
name,
NULL);
if (!ok)
g_warning ("Failed to set sound theme name to %s: %s", key, error->message);
}
static void
fbd_dev_sound_dispose (GObject *object)
{
FbdDevSound *self = FBD_DEV_SOUND (object);
g_clear_object (&self->ctx);
g_clear_object (&self->sound_settings);
G_OBJECT_CLASS (fbd_dev_sound_parent_class)->dispose (object);
}
@@ -55,11 +86,22 @@ initable_init (GInitable *initable,
GError **error)
{
FbdDevSound *self = FBD_DEV_SOUND (initable);
const char *desktop;
self->ctx = gsound_context_new(NULL, error);
if (!self->ctx)
return FALSE;
desktop = g_getenv ("XDG_CURRENT_DESKTOP");
if (!g_strcmp0 (desktop, "GNOME")) {
self->sound_settings = g_settings_new (GNOME_SOUND_SCHEMA_ID);
g_signal_connect_object (self->sound_settings, "changed::" GNOME_SOUND_KEY_THEME_NAME,
G_CALLBACK (on_sound_theme_name_changed), self,
G_CONNECT_SWAPPED);
on_sound_theme_name_changed (self, GNOME_SOUND_KEY_THEME_NAME, self->sound_settings);
}
return TRUE;
}