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 +#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, @@ -82,26 +116,6 @@ meta_play_request_free (MetaPlayRequest *req) g_free (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) @@ -204,9 +218,21 @@ create_context (GSettings *settings) return context; } +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,