diff options
author | Caolán McNamara <caolanm@redhat.com> | 2022-04-12 16:01:33 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2022-04-12 20:50:03 +0200 |
commit | f7fd2d4e3ec89afa524b3dac1c8533acafa9a015 (patch) | |
tree | ba5a2ab5065424a520a3f986f5712bc1108e3020 /vcl/unx | |
parent | 22c7ce6c8e7d5b7f8b37ad6c519c2b8ca4853724 (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.cxx | 14 |
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); |