summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config.h.meson3
-rw-r--r--meson.build8
-rw-r--r--meson_options.txt6
-rw-r--r--src/core/meta-sound-player.c82
-rw-r--r--src/meson.build7
5 files changed, 74 insertions, 32 deletions
diff --git a/config.h.meson b/config.h.meson
index e6ff572f5..c7724b24f 100644
--- a/config.h.meson
+++ b/config.h.meson
@@ -61,6 +61,9 @@
/* Defined if gnome-desktop is enabled */
#mesondefine HAVE_GNOME_DESKTOP
+/* Defined if sound player is enabled */
+#mesondefine HAVE_SOUND_PLAYER
+
/* Building with SM support */
#mesondefine HAVE_SM
diff --git a/meson.build b/meson.build
index cbfc8946a..45ed455dd 100644
--- a/meson.build
+++ b/meson.build
@@ -124,7 +124,6 @@ json_glib_dep = dependency('json-glib-1.0', version: json_glib_req)
xkbcommon_dep = dependency('xkbcommon', version: xkbcommon_req)
ice_dep = dependency('ice')
atk_dep = dependency('atk', version: atk_req)
-libcanberra_dep = dependency('libcanberra', version: libcanberra_req)
dbus_dep = dependency('dbus-1')
colord_dep = dependency('colord', version: colord_req)
lcms2_dep = dependency('lcms2', version: lcms2_req)
@@ -170,6 +169,11 @@ if have_gnome_desktop
gnome_desktop_dep = dependency('gnome-desktop-3.0')
endif
+have_sound_player = get_option('sound_player')
+if have_sound_player
+ libcanberra_dep = dependency('libcanberra', version: libcanberra_req)
+endif
+
have_gl = get_option('opengl')
if have_gl
gl_dep = dependency('gl')
@@ -500,6 +504,7 @@ cdata.set('HAVE_LIBSYSTEMD', have_libsystemd)
cdata.set('HAVE_NATIVE_BACKEND', have_native_backend)
cdata.set('HAVE_REMOTE_DESKTOP', have_remote_desktop)
cdata.set('HAVE_GNOME_DESKTOP', have_gnome_desktop)
+cdata.set('HAVE_SOUND_PLAYER', have_sound_player)
cdata.set('HAVE_EGL_DEVICE', have_egl_device)
cdata.set('HAVE_WAYLAND_EGLSTREAM', have_wayland_eglstream)
cdata.set('HAVE_LIBGUDEV', have_libgudev)
@@ -658,6 +663,7 @@ summary('Native Backend', have_native_backend, section: 'Options')
summary('EGL Device', have_egl_device, section: 'Options')
summary('Remote desktop', have_remote_desktop, section: 'Options')
summary('libgnome-desktop', have_gnome_desktop, section: 'Options')
+summary('Sound player', have_sound_player, section: 'Options')
summary('gudev', have_libgudev, section: 'Options')
summary('Wacom', have_libwacom, section: 'Options')
summary('SM', have_sm, section: 'Options')
diff --git a/meson_options.txt b/meson_options.txt
index 61b99d9e0..cddcc1a47 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -93,6 +93,12 @@ option('libwacom',
description: 'Enable libwacom support'
)
+option('sound_player',
+ type: 'boolean',
+ value: true,
+ description: 'Enable sound player support using libcanberra',
+)
+
option('pango_ft2',
type: 'boolean',
value: true,
diff --git a/src/core/meta-sound-player.c b/src/core/meta-sound-player.c
index e2d103893..29f831bab 100644
--- a/src/core/meta-sound-player.c
+++ b/src/core/meta-sound-player.c
@@ -21,24 +21,31 @@
#include "config.h"
+#ifdef HAVE_SOUND_PLAYER
#include <canberra.h>
+#endif
#include "meta/meta-sound-player.h"
#define EVENT_SOUNDS_KEY "event-sounds"
#define THEME_NAME_KEY "theme-name"
-typedef struct _MetaPlayRequest MetaPlayRequest;
struct _MetaSoundPlayer
{
GObject parent;
GThreadPool *queue;
GSettings *settings;
+#ifdef HAVE_SOUND_PLAYER
ca_context *context;
+#endif
uint32_t id_pool;
};
+#ifdef HAVE_SOUND_PLAYER
+
+typedef struct _MetaPlayRequest MetaPlayRequest;
+
struct _MetaPlayRequest
{
ca_proplist *props;
@@ -48,6 +55,8 @@ struct _MetaPlayRequest
MetaSoundPlayer *player;
};
+#endif
+
const char * const cache_allow_list[] = {
"bell-window-system",
"desktop-switch-left",
@@ -59,6 +68,31 @@ const char * const cache_allow_list[] = {
G_DEFINE_TYPE (MetaSoundPlayer, meta_sound_player, G_TYPE_OBJECT)
+static void
+meta_sound_player_finalize (GObject *object)
+{
+ MetaSoundPlayer *player = META_SOUND_PLAYER (object);
+
+ g_object_unref (player->settings);
+ g_thread_pool_free (player->queue, FALSE, TRUE);
+
+#ifdef HAVE_SOUND_PLAYER
+ ca_context_destroy (player->context);
+#endif
+
+ G_OBJECT_CLASS (meta_sound_player_parent_class)->finalize (object);
+}
+
+static void
+meta_sound_player_class_init (MetaSoundPlayerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->finalize = meta_sound_player_finalize;
+}
+
+#ifdef HAVE_SOUND_PLAYER
+
static MetaPlayRequest *
meta_play_request_new (MetaSoundPlayer *player,
ca_proplist *props,
@@ -83,26 +117,6 @@ meta_play_request_free (MetaPlayRequest *req)
}
static void
-meta_sound_player_finalize (GObject *object)
-{
- MetaSoundPlayer *player = META_SOUND_PLAYER (object);
-
- g_object_unref (player->settings);
- g_thread_pool_free (player->queue, FALSE, TRUE);
- ca_context_destroy (player->context);
-
- G_OBJECT_CLASS (meta_sound_player_parent_class)->finalize (object);
-}
-
-static void
-meta_sound_player_class_init (MetaSoundPlayerClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- object_class->finalize = meta_sound_player_finalize;
-}
-
-static void
cancelled_cb (GCancellable *cancellable,
MetaPlayRequest *req)
{
@@ -205,8 +219,20 @@ create_context (GSettings *settings)
}
static void
+build_ca_proplist (ca_proplist *props,
+ const char *event_property,
+ const char *event_id,
+ const char *event_description)
+{
+ ca_proplist_sets (props, event_property, event_id);
+ ca_proplist_sets (props, CA_PROP_EVENT_DESCRIPTION, event_description);
+}
+#endif /* HAVE_SOUND_PLAYER */
+
+static void
meta_sound_player_init (MetaSoundPlayer *player)
{
+#ifdef HAVE_SOUND_PLAYER
player->queue = g_thread_pool_new ((GFunc) play_sound,
player, 1, FALSE, NULL);
player->settings = g_settings_new ("org.gnome.desktop.sound");
@@ -214,17 +240,9 @@ meta_sound_player_init (MetaSoundPlayer *player)
g_signal_connect (player->settings, "changed",
G_CALLBACK (settings_changed_cb), player);
+#endif
}
-static void
-build_ca_proplist (ca_proplist *props,
- const char *event_property,
- const char *event_id,
- const char *event_description)
-{
- ca_proplist_sets (props, event_property, event_id);
- ca_proplist_sets (props, CA_PROP_EVENT_DESCRIPTION, event_description);
-}
/**
* meta_sound_player_play_from_theme:
@@ -241,6 +259,7 @@ meta_sound_player_play_from_theme (MetaSoundPlayer *player,
const char *description,
GCancellable *cancellable)
{
+#ifdef HAVE_SOUND_PLAYER
MetaPlayRequest *req;
ca_proplist *props;
@@ -258,6 +277,7 @@ meta_sound_player_play_from_theme (MetaSoundPlayer *player,
req = meta_play_request_new (player, props, cancellable);
g_thread_pool_push (player->queue, req, NULL);
+#endif
}
/**
@@ -275,6 +295,7 @@ meta_sound_player_play_from_file (MetaSoundPlayer *player,
const char *description,
GCancellable *cancellable)
{
+#ifdef HAVE_SOUND_PLAYER
MetaPlayRequest *req;
ca_proplist *props;
char *path;
@@ -293,4 +314,5 @@ meta_sound_player_play_from_file (MetaSoundPlayer *player,
req = meta_play_request_new (player, props, cancellable);
g_thread_pool_push (player->queue, req, NULL);
+#endif
}
diff --git a/src/meson.build b/src/meson.build
index 7b6237968..1dce13e13 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -27,7 +27,6 @@ mutter_pkg_private_deps = [
gmodule_no_export_dep,
gnome_settings_daemon_dep,
json_glib_dep,
- libcanberra_dep,
xkbcommon_dep,
]
@@ -37,6 +36,12 @@ if have_gnome_desktop
]
endif
+if have_sound_player
+ mutter_pkg_private_deps += [
+ libcanberra_dep,
+ ]
+endif
+
if have_gl
mutter_pkg_deps += [
gl_dep,