st: Only use clutter_actor_invalidate_paint_volume() if the API exists
With commitsfab39bbea5
and62e40a1350
we started depending on a new ClutterActor API: clutter_actor_invalidate_paint_volume() Given that this commit was applied to the 40 stable release, it broke ABI compatibility with mutter, which is something we guarantee between stable releases. So use GModule to dynamically find the symbol in our loaded libraries. If it exists, use it and invalidate the paint volume. If it doesn't exist, libmutter is still at version 40.0 and we don't need to invalidate the paint volume. This also adds a dependency on gmodule. We need to link against gmodule to use g_module_open() and g_module_symbol() APIs. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1807>
This commit is contained in:
parent
d7ad8da48d
commit
1cefd589da
@ -81,6 +81,7 @@ gi_dep = dependency('gobject-introspection-1.0', version: gi_req)
|
||||
gio_dep = dependency('gio-2.0', version: gio_req)
|
||||
gio_unix_dep = dependency('gio-unix-2.0', version: gio_req)
|
||||
gjs_dep = dependency('gjs-1.0', version: gjs_req)
|
||||
gmodule_dep = dependency('gmodule-2.0')
|
||||
gtk_dep = dependency('gtk+-3.0', version: gtk_req)
|
||||
libxml_dep = dependency('libxml-2.0')
|
||||
clutter_dep = dependency(clutter_pc, version: mutter_req)
|
||||
|
@ -180,7 +180,7 @@ st_cflags = [
|
||||
libst = shared_library('st-1.0',
|
||||
sources: st_gir_sources + st_nogir_sources + croco_sources,
|
||||
c_args: st_cflags,
|
||||
dependencies: [clutter_dep, gtk_dep, mutter_dep, libxml_dep, m_dep],
|
||||
dependencies: [clutter_dep, gmodule_dep, gtk_dep, mutter_dep, libxml_dep, m_dep],
|
||||
build_rpath: mutter_typelibdir,
|
||||
install_rpath: mutter_typelibdir,
|
||||
install_dir: pkglibdir,
|
||||
|
@ -80,8 +80,22 @@ adjustment_value_notify_cb (StAdjustment *adjustment,
|
||||
GParamSpec *pspec,
|
||||
StViewport *viewport)
|
||||
{
|
||||
static gboolean invalidate_paint_volume_valid = FALSE;
|
||||
static void (* invalidate_paint_volume) (ClutterActor *) = NULL;
|
||||
|
||||
clutter_actor_invalidate_transform (CLUTTER_ACTOR (viewport));
|
||||
clutter_actor_invalidate_paint_volume (CLUTTER_ACTOR (viewport));
|
||||
|
||||
if (!invalidate_paint_volume_valid)
|
||||
{
|
||||
g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LAZY),
|
||||
"clutter_actor_invalidate_paint_volume",
|
||||
(gpointer *)&invalidate_paint_volume);
|
||||
invalidate_paint_volume_valid = TRUE;
|
||||
}
|
||||
|
||||
if (invalidate_paint_volume)
|
||||
invalidate_paint_volume (CLUTTER_ACTOR (viewport));
|
||||
|
||||
clutter_actor_queue_relayout (CLUTTER_ACTOR (viewport));
|
||||
}
|
||||
|
||||
|
@ -1722,7 +1722,19 @@ st_widget_recompute_style (StWidget *widget,
|
||||
|
||||
if (!paint_equal)
|
||||
{
|
||||
clutter_actor_invalidate_paint_volume (CLUTTER_ACTOR (widget));
|
||||
static gboolean invalidate_paint_volume_valid = FALSE;
|
||||
static void (* invalidate_paint_volume) (ClutterActor *) = NULL;
|
||||
|
||||
if (!invalidate_paint_volume_valid)
|
||||
{
|
||||
g_module_symbol (g_module_open (NULL, G_MODULE_BIND_LAZY),
|
||||
"clutter_actor_invalidate_paint_volume",
|
||||
(gpointer *)&invalidate_paint_volume);
|
||||
invalidate_paint_volume_valid = TRUE;
|
||||
}
|
||||
|
||||
if (invalidate_paint_volume)
|
||||
invalidate_paint_volume (CLUTTER_ACTOR (widget));
|
||||
|
||||
next_paint_state (widget);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user