vcl/unx/gtk3/gtkinst.cxx | 66 ++++++++++++++++++++++++----------------------- 1 file changed, 35 insertions(+), 31 deletions(-)
New commits: commit 5b41abc85d0a74fb3c047fe723d5b55abb6499ae Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Tue Nov 22 08:50:22 2022 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Tue Nov 22 11:58:05 2022 +0100 move workaround out of GtkInstanceExpander ctor and into the builder so get the same result if there was an explicit expander instantiated or not Change-Id: Ia5af8de81d6fa0780cf507f565c6819e16cde43c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/143093 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 8382d7d29f2e..dce54e17d693 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -22768,40 +22768,10 @@ private: gulong m_nMappedSignalId; #endif - static void signalExpanded(GtkExpander* pExpander, GParamSpec*, gpointer widget) + static void signalExpanded(GtkExpander* /*pExpander*/, GParamSpec*, gpointer widget) { GtkInstanceExpander* pThis = static_cast<GtkInstanceExpander*>(widget); SolarMutexGuard aGuard; - -#if !GTK_CHECK_VERSION(4, 0, 0) - if (gtk_expander_get_resize_toplevel(pExpander)) - { - GtkWidget *pToplevel = widget_get_toplevel(GTK_WIDGET(pExpander)); - - // https://gitlab.gnome.org/GNOME/gtk/issues/70 - // I imagine at some point a release with a fix will be available in which - // case this can be avoided depending on version number - if (pToplevel && GTK_IS_WINDOW(pToplevel) && gtk_widget_get_realized(pToplevel)) - { - int nToplevelWidth, nToplevelHeight; - int nChildHeight; - - GtkWidget* child = gtk_bin_get_child(GTK_BIN(pExpander)); - gtk_widget_get_preferred_height(child, &nChildHeight, nullptr); - gtk_window_get_size(GTK_WINDOW(pToplevel), &nToplevelWidth, &nToplevelHeight); - - if (pThis->get_expanded()) - nToplevelHeight += nChildHeight; - else - nToplevelHeight -= nChildHeight; - - gtk_window_resize(GTK_WINDOW(pToplevel), nToplevelWidth, nToplevelHeight); - } - } -#else - (void)pExpander; -#endif - pThis->signal_expanded(); } @@ -23322,6 +23292,36 @@ void load_ui_file(GtkBuilder* pBuilder, const OUString& rUri) #endif } +#if !GTK_CHECK_VERSION(4, 0, 0) +void fix_expander(GtkExpander* pExpander, GParamSpec*, gpointer) +{ + if (gtk_expander_get_resize_toplevel(pExpander)) + { + GtkWidget *pToplevel = widget_get_toplevel(GTK_WIDGET(pExpander)); + + // https://gitlab.gnome.org/GNOME/gtk/issues/70 + // I imagine at some point a release with a fix will be available in which + // case this can be avoided depending on version number + if (pToplevel && GTK_IS_WINDOW(pToplevel) && gtk_widget_get_realized(pToplevel)) + { + int nToplevelWidth, nToplevelHeight; + int nChildHeight; + + GtkWidget* child = gtk_bin_get_child(GTK_BIN(pExpander)); + gtk_widget_get_preferred_height(child, &nChildHeight, nullptr); + gtk_window_get_size(GTK_WINDOW(pToplevel), &nToplevelWidth, &nToplevelHeight); + + if (gtk_expander_get_expanded(pExpander)) + nToplevelHeight += nChildHeight; + else + nToplevelHeight -= nChildHeight; + + gtk_window_resize(GTK_WINDOW(pToplevel), nToplevelWidth, nToplevelHeight); + } + } +} +#endif + class GtkInstanceBuilder : public weld::Builder { private: @@ -23403,6 +23403,10 @@ private: gtk_widget_set_tooltip_text(pWidget, label); } } + else if (GTK_IS_EXPANDER(pWidget)) + { + g_signal_connect(pWidget, "notify::expanded", G_CALLBACK(fix_expander), this); + } #else else if (GTK_IS_BUTTON(pWidget)) {