diff options
| author | Victor Kareh <[email protected]> | 2026-02-04 14:49:54 -0500 |
|---|---|---|
| committer | Victor Kareh <[email protected]> | 2026-02-04 14:49:54 -0500 |
| commit | cb60caeb060c73d2ffd1b0736d501857e89d14be (patch) | |
| tree | 52adce633674edcd23d4b10ddf80664a2870643a | |
| parent | 6df44358e1e1688a32c63d840ea50e21491ffc0a (diff) | |
| download | mate-session-manager-canberra-sounds.tar.bz2 mate-session-manager-canberra-sounds.tar.xz | |
session: Add sound events for login and logoutcanberra-sounds
Adds optional libcanberra support to play desktop-login and
desktop-logout sound events during session start and end. Sound playback
is controlled through the system sound theme configuration.
Fixes #328
| -rw-r--r-- | configure.ac | 21 | ||||
| -rw-r--r-- | mate-session/Makefile.am | 4 | ||||
| -rw-r--r-- | mate-session/gsm-manager.c | 17 |
3 files changed, 41 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac index 0bf02ca..c6d13c9 100644 --- a/configure.ac +++ b/configure.ac @@ -84,6 +84,26 @@ fi AM_CONDITIONAL([HAVE_GLESV2], [test "x$have_glesv2" = "xyes"]) dnl ==================================================================== +dnl libcanberra (optional) for sound events +dnl ==================================================================== + +AC_ARG_WITH([libcanberra], + AS_HELP_STRING([--without-libcanberra], [Disable sound events (default: auto)]), + [with_libcanberra=$withval], [with_libcanberra=auto]) + +have_libcanberra=no +if test "x$with_libcanberra" != "xno"; then + PKG_CHECK_MODULES(LIBCANBERRA, libcanberra-gtk3, + [AC_DEFINE(HAVE_LIBCANBERRA, 1, [Define if libcanberra-gtk3 is available]) + have_libcanberra=yes], have_libcanberra=no) + if test "x$have_libcanberra" = xno -a "x$with_libcanberra" = xyes; then + AC_MSG_ERROR([libcanberra support requested but library not found]) + fi +fi +AC_SUBST(LIBCANBERRA_CFLAGS) +AC_SUBST(LIBCANBERRA_LIBS) + +dnl ==================================================================== dnl Option to set the default window manager dnl ==================================================================== AC_ARG_WITH(default-wm, @@ -385,5 +405,6 @@ echo " XTest support: ${have_xtest} Build documentation: ${enable_docbook_docs} Native Language support: ${USE_NLS} + Libcanberra support: ${have_libcanberra} " diff --git a/mate-session/Makefile.am b/mate-session/Makefile.am index 448ee76..aa2be01 100644 --- a/mate-session/Makefile.am +++ b/mate-session/Makefile.am @@ -63,6 +63,7 @@ mate_session_CPPFLAGS = \ $(SM_CFLAGS) \ $(ICE_CFLAGS) \ $(XEXT_CFLAGS) \ + $(LIBCANBERRA_CFLAGS) \ -I$(top_srcdir)/mate-submodules/libegg \ -DLOCALE_DIR=\""$(datadir)/locale"\" \ -DDATA_DIR=\""$(datadir)/mate-session"\" \ @@ -82,7 +83,8 @@ mate_session_LDADD = \ $(MATE_SESSION_LIBS) \ $(SYSTEMD_LIBS) \ $(LIBELOGIND_LIBS) \ - $(EXECINFO_LIBS) + $(EXECINFO_LIBS) \ + $(LIBCANBERRA_LIBS) libgsmutil_la_SOURCES = \ gsm-util.c \ diff --git a/mate-session/gsm-manager.c b/mate-session/gsm-manager.c index 37ca39d..d67bed1 100644 --- a/mate-session/gsm-manager.c +++ b/mate-session/gsm-manager.c @@ -65,6 +65,10 @@ #endif #include "gsm-session-save.h" +#ifdef HAVE_LIBCANBERRA +#include <canberra-gtk.h> +#endif + #define GSM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_MANAGER, GsmManagerPrivate)) #define GSM_MANAGER_DBUS_PATH "/org/gnome/SessionManager" @@ -1548,6 +1552,13 @@ do_phase_query_end_session (GsmManager *manager) data.flags = 0; priv = gsm_manager_get_instance_private (manager); +#ifdef HAVE_LIBCANBERRA + ca_context_play (ca_gtk_context_get (), 0, + CA_PROP_EVENT_ID, "desktop-logout", + CA_PROP_EVENT_DESCRIPTION, "Session logout", + NULL); +#endif + if (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) { data.flags |= GSM_CLIENT_END_SESSION_FLAG_FORCEFUL; } @@ -1620,6 +1631,12 @@ start_phase (GsmManager *manager) break; case GSM_MANAGER_PHASE_RUNNING: g_signal_emit (manager, signals[SESSION_RUNNING], 0); +#ifdef HAVE_LIBCANBERRA + ca_context_play (ca_gtk_context_get (), 0, + CA_PROP_EVENT_ID, "desktop-login", + CA_PROP_EVENT_DESCRIPTION, "Session login", + NULL); +#endif update_idle (manager); break; case GSM_MANAGER_PHASE_QUERY_END_SESSION: |
