Skip to content

Commit a5a8b10

Browse files
committed
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
1 parent 8dbae50 commit a5a8b10

3 files changed

Lines changed: 41 additions & 1 deletion

File tree

configure.ac

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,26 @@ if test "x$have_glesv2" = "xyes"; then
8383
fi
8484
AM_CONDITIONAL([HAVE_GLESV2], [test "x$have_glesv2" = "xyes"])
8585

86+
dnl ====================================================================
87+
dnl libcanberra (optional) for sound events
88+
dnl ====================================================================
89+
90+
AC_ARG_WITH([libcanberra],
91+
AS_HELP_STRING([--without-libcanberra], [Disable sound events (default: auto)]),
92+
[with_libcanberra=$withval], [with_libcanberra=auto])
93+
94+
have_libcanberra=no
95+
if test "x$with_libcanberra" != "xno"; then
96+
PKG_CHECK_MODULES(LIBCANBERRA, libcanberra-gtk3,
97+
[AC_DEFINE(HAVE_LIBCANBERRA, 1, [Define if libcanberra-gtk3 is available])
98+
have_libcanberra=yes], have_libcanberra=no)
99+
if test "x$have_libcanberra" = xno -a "x$with_libcanberra" = xyes; then
100+
AC_MSG_ERROR([libcanberra support requested but library not found])
101+
fi
102+
fi
103+
AC_SUBST(LIBCANBERRA_CFLAGS)
104+
AC_SUBST(LIBCANBERRA_LIBS)
105+
86106
dnl ====================================================================
87107
dnl Option to set the default window manager
88108
dnl ====================================================================
@@ -385,5 +405,6 @@ echo "
385405
XTest support: ${have_xtest}
386406
Build documentation: ${enable_docbook_docs}
387407
Native Language support: ${USE_NLS}
408+
Libcanberra support: ${have_libcanberra}
388409

389410
"

mate-session/Makefile.am

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ mate_session_CPPFLAGS = \
6262
$(SM_CFLAGS) \
6363
$(ICE_CFLAGS) \
6464
$(XEXT_CFLAGS) \
65+
$(LIBCANBERRA_CFLAGS) \
6566
-I$(top_srcdir)/mate-submodules/libegg \
6667
-DLOCALE_DIR=\""$(datadir)/locale"\" \
6768
-DDATA_DIR=\""$(datadir)/mate-session"\" \
@@ -81,7 +82,8 @@ mate_session_LDADD = \
8182
$(MATE_SESSION_LIBS) \
8283
$(SYSTEMD_LIBS) \
8384
$(LIBELOGIND_LIBS) \
84-
$(EXECINFO_LIBS)
85+
$(EXECINFO_LIBS) \
86+
$(LIBCANBERRA_LIBS)
8587

8688
libgsmutil_la_SOURCES = \
8789
gsm-util.c \

mate-session/gsm-manager.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@
6565
#endif
6666
#include "gsm-session-save.h"
6767

68+
#ifdef HAVE_LIBCANBERRA
69+
#include <canberra-gtk.h>
70+
#endif
71+
6872
#define GSM_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSM_TYPE_MANAGER, GsmManagerPrivate))
6973

7074
#define GSM_MANAGER_DBUS_PATH "/org/gnome/SessionManager"
@@ -1548,6 +1552,13 @@ do_phase_query_end_session (GsmManager *manager)
15481552
data.flags = 0;
15491553
priv = gsm_manager_get_instance_private (manager);
15501554

1555+
#ifdef HAVE_LIBCANBERRA
1556+
ca_context_play (ca_gtk_context_get (), 0,
1557+
CA_PROP_EVENT_ID, "desktop-logout",
1558+
CA_PROP_EVENT_DESCRIPTION, "Session logout",
1559+
NULL);
1560+
#endif
1561+
15511562
if (priv->logout_mode == GSM_MANAGER_LOGOUT_MODE_FORCE) {
15521563
data.flags |= GSM_CLIENT_END_SESSION_FLAG_FORCEFUL;
15531564
}
@@ -1620,6 +1631,12 @@ start_phase (GsmManager *manager)
16201631
break;
16211632
case GSM_MANAGER_PHASE_RUNNING:
16221633
g_signal_emit (manager, signals[SESSION_RUNNING], 0);
1634+
#ifdef HAVE_LIBCANBERRA
1635+
ca_context_play (ca_gtk_context_get (), 0,
1636+
CA_PROP_EVENT_ID, "desktop-login",
1637+
CA_PROP_EVENT_DESCRIPTION, "Session login",
1638+
NULL);
1639+
#endif
16231640
update_idle (manager);
16241641
break;
16251642
case GSM_MANAGER_PHASE_QUERY_END_SESSION:

0 commit comments

Comments
 (0)