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))
         {

Reply via email to