From cb60caeb060c73d2ffd1b0736d501857e89d14be Mon Sep 17 00:00:00 2001 From: Victor Kareh Date: Wed, 4 Feb 2026 14:49:54 -0500 Subject: session: Add sound events for login and logout 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 --- mate-session/Makefile.am | 4 +++- mate-session/gsm-manager.c | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'mate-session') 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 +#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: -- cgit v1.2.1