pipewire: module-x11-bell: mark connection as terminatable

Since XFixes version 6[1] it is possible to mark
an X connection as terminatable. The X server will
gracefully terminate after a timeout if only
terminatable connections remain.

[1]: https://gitlab.freedesktop.org/xorg/lib/libxfixes/-/merge_requests/1
This commit is contained in:
Barnabás Pőcze 2022-02-17 20:16:22 +01:00
parent c9612225e1
commit d6c5da5678
4 changed files with 16 additions and 1 deletions

View file

@ -280,6 +280,9 @@ x11_dep = dependency('x11-xcb', required : get_option('x11'))
summary({'X11 (x11-bell)': x11_dep.found()}, bool_yn: true,
section: 'Misc dependencies')
xfixes_dep = dependency('xfixes', required : get_option('x11-xfixes'), version: '>= 6')
cdata.set('HAVE_XFIXES_6', xfixes_dep.found())
canberra_dep = dependency('libcanberra', required : get_option('libcanberra'))
summary({'libcanberra (x11-bell)': canberra_dep.found()}, bool_yn: true,
section: 'Misc dependencies')

View file

@ -229,6 +229,10 @@ option('x11',
description: 'Enable code that depends on X11',
type: 'feature',
value: 'auto')
option('x11-xfixes',
description: 'Enable code that depends on XFixes',
type: 'feature',
value: 'auto')
option('libcanberra',
description: 'Enable code that depends on libcanberra',
type: 'feature',

View file

@ -489,7 +489,7 @@ pipewire_module_x11_bell = shared_library('pipewire-module-x11-bell',
install : true,
install_dir : modules_install_dir,
install_rpath: modules_install_dir,
dependencies : [mathlib, dl_lib, rt_lib, pipewire_dep, x11_dep, canberra_dep],
dependencies : [mathlib, dl_lib, rt_lib, pipewire_dep, x11_dep, xfixes_dep, canberra_dep],
)
endif
summary({'x11-bell': build_module_x11_bell}, bool_yn: true, section: 'Optional Modules')

View file

@ -38,6 +38,10 @@
#include <X11/Xlib-xcb.h>
#include <X11/XKBlib.h>
#ifdef HAVE_XFIXES_6
#include <X11/extensions/Xfixes.h>
#endif
#include <canberra.h>
#include <pipewire/pipewire.h>
@ -190,6 +194,10 @@ static int x11_connect(struct impl *impl, const char *name)
XSetIOErrorExitHandler(impl->display, x11_io_error_exit_handler, impl);
#endif
#ifdef HAVE_XFIXES_6
XFixesSetClientDisconnectMode(impl->display, XFixesClientDisconnectFlagTerminate);
#endif
major = XkbMajorVersion;
minor = XkbMinorVersion;