summaryrefslogtreecommitdiff
path: root/vcl/unx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/unx')
-rw-r--r--vcl/unx/gtk4/convert3to4.cxx14
1 files changed, 14 insertions, 0 deletions
diff --git a/vcl/unx/gtk4/convert3to4.cxx b/vcl/unx/gtk4/convert3to4.cxx
index 747ea7553093..470b12de490a 100644
--- a/vcl/unx/gtk4/convert3to4.cxx
+++ b/vcl/unx/gtk4/convert3to4.cxx
@@ -15,6 +15,7 @@
#include <comphelper/processfactory.hxx>
#include <unx/gtk/gtkdata.hxx>
#include <vcl/builder.hxx>
+#include <cairo/cairo-gobject.h>
#include "convert3to4.hxx"
namespace
@@ -1502,6 +1503,17 @@ ConvertResult Convert3To4(const css::uno::Reference<css::xml::dom::XNode>& xNode
return ConvertResult(bChildCanFocus, bHasVisible, bHasIconSize, bAlwaysShowImage, bUseUnderline,
bVertOrientation, bXAlign, eImagePos, xPropertyLabel, xPropertyIconName);
}
+
+std::once_flag cairo_surface_type_flag;
+
+void ensure_cairo_surface_type()
+{
+ // cairo_gobject_surface_get_type needs to be called at least once for
+ // g_type_from_name to be able to resolve "CairoSurface". In gtk3 there was fallback
+ // mechanism to attempt to resolve such "missing" types which is not in place for
+ // gtk4 so ensure it can be found explicitly
+ std::call_once(cairo_surface_type_flag, []() { cairo_gobject_surface_get_type(); });
+}
}
void builder_add_from_gtk3_file(GtkBuilder* pBuilder, const OUString& rUri)
@@ -1533,6 +1545,8 @@ void builder_add_from_gtk3_file(GtkBuilder* pBuilder, const OUString& rUri)
css::uno::Reference<css::xml::sax::XDocumentHandler>(xWriter, css::uno::UNO_QUERY_THROW),
css::uno::Sequence<css::beans::StringPair>());
+ ensure_cairo_surface_type();
+
// feed it to GtkBuilder
css::uno::Reference<css::io::XSeekable> xTempSeek(xTempStream, css::uno::UNO_QUERY_THROW);
xTempSeek->seek(0);