summaryrefslogtreecommitdiff
path: root/vcl/unx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-04-12 16:01:33 +0100
committerCaolán McNamara <caolanm@redhat.com>2022-04-12 20:50:03 +0200
commitf7fd2d4e3ec89afa524b3dac1c8533acafa9a015 (patch)
treeba5a2ab5065424a520a3f986f5712bc1108e3020 /vcl/unx
parent22c7ce6c8e7d5b7f8b37ad6c519c2b8ca4853724 (diff)
gtk4: cairo_gobject_surface_get_type() needs to be called at least once
before "CairoSurface" can be resolved to its type, this worked in gtk3 because there was some fallback code which guessed what function name was needed to call to get it, but that's not present in gtk4 Change-Id: I85a957ecd37e0e7a572578e8273152fbb19dac3c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132920 Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com>
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);