mirror of
https://gitlab.freedesktop.org/wayland/weston
synced 2024-09-06 18:05:39 +00:00
![Alexandros Frantzis](/assets/img/avatar_default.png)
Wayland signals (wl_signal) do not reliably handle changes to the notification list during signal emission. Such scenarios occasionally come up and can be difficult to investigate and debug. This commit introduces the weston_signal_emit_mutable() function which can be used in place of wl_signal_emit() and safely implements the following behavior regarding notification list changes: 1. Listeners deleted during a signal emission and which have not already been notified at the time of deletion are not notified by that emission. 2. Listeners added during signal emission are ignored by that emission. The implementation of weston_signal_emit_mutable() is copied from the wlr_signal_emit_safe() function of the wlroots project. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
86 lines
2 KiB
Meson
86 lines
2 KiB
Meson
srcs_libshared = [
|
|
'config-parser.c',
|
|
'option-parser.c',
|
|
'signal.c',
|
|
'file-util.c',
|
|
'os-compatibility.c',
|
|
'xalloc.c',
|
|
]
|
|
deps_libshared = [dep_wayland_client, dep_wayland_server]
|
|
|
|
lib_libshared = static_library(
|
|
'shared',
|
|
srcs_libshared,
|
|
include_directories: common_inc,
|
|
dependencies: deps_libshared,
|
|
pic: true,
|
|
install: false
|
|
)
|
|
dep_libshared = declare_dependency(
|
|
link_with: lib_libshared,
|
|
include_directories: public_inc,
|
|
dependencies: deps_libshared
|
|
)
|
|
|
|
srcs_cairo_shared = [
|
|
'image-loader.c',
|
|
'cairo-util.c',
|
|
'frame.c',
|
|
]
|
|
|
|
deps_cairo_shared = [
|
|
dep_libshared,
|
|
dependency('cairo'),
|
|
dependency('libpng'),
|
|
dep_pixman,
|
|
dep_libm,
|
|
]
|
|
|
|
dep_pango = dependency('pango', required: false)
|
|
dep_pangocairo = dependency('pangocairo', required: false)
|
|
dep_glib = dependency('glib-2.0', version: '>= 2.36', required: false)
|
|
|
|
if dep_pango.found() and dep_pangocairo.found() and dep_glib.found()
|
|
deps_cairo_shared += [ dep_pango, dep_pangocairo, dep_glib ]
|
|
config_h.set('HAVE_PANGO', '1')
|
|
endif
|
|
|
|
if get_option('image-jpeg')
|
|
dep_libjpeg = dependency('libjpeg', required: false)
|
|
if not dep_libjpeg.found()
|
|
dep_libjpeg = cc.find_library('jpeg', required: false)
|
|
endif
|
|
if not dep_libjpeg.found()
|
|
error('JPEG image loading requires libjpeg or jpeg, neither was found. Or, you can use \'-Dimage-jpeg=false\'.')
|
|
endif
|
|
deps_cairo_shared += dep_libjpeg
|
|
config_h.set('HAVE_JPEG', '1')
|
|
endif
|
|
|
|
if get_option('image-webp')
|
|
dep_webp = dependency('libwebp', required: false)
|
|
if not dep_webp.found()
|
|
error('WEBP image loading requires libwebp which was not found. Or, you can use \'-Dimage-webp=false\'.')
|
|
endif
|
|
deps_cairo_shared += dep_webp
|
|
config_h.set('HAVE_WEBP', '1')
|
|
endif
|
|
|
|
lib_cairo_shared = static_library(
|
|
'cairo-shared',
|
|
srcs_cairo_shared,
|
|
include_directories: common_inc,
|
|
dependencies: deps_cairo_shared,
|
|
install: false
|
|
)
|
|
dep_lib_cairo_shared = declare_dependency(
|
|
link_with: lib_cairo_shared,
|
|
dependencies: deps_cairo_shared
|
|
)
|
|
|
|
dep_matrix_c = declare_dependency(
|
|
sources: 'matrix.c',
|
|
include_directories: public_inc,
|
|
dependencies: dep_libm
|
|
)
|