diff --git a/meson.build b/meson.build index 14b75c1c9..359fa2a35 100644 --- a/meson.build +++ b/meson.build @@ -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) diff --git a/src/st/meson.build b/src/st/meson.build index 6b88af295..a74581ff8 100644 --- a/src/st/meson.build +++ b/src/st/meson.build @@ -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, diff --git a/src/st/st-viewport.c b/src/st/st-viewport.c index 96b703b14..8aaaad54a 100644 --- a/src/st/st-viewport.c +++ b/src/st/st-viewport.c @@ -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)); } diff --git a/src/st/st-widget.c b/src/st/st-widget.c index 47a84c5c2..05a2dd134 100644 --- a/src/st/st-widget.c +++ b/src/st/st-widget.c @@ -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);