summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-11-22 08:50:22 +0000
committerCaolán McNamara <caolanm@redhat.com>2022-11-22 11:58:05 +0100
commit5b41abc85d0a74fb3c047fe723d5b55abb6499ae (patch)
tree2f21cf69d7fab0688439dfd02553252f25727a11
parent55d87b3a3fc87dca3114744f4a4e676ec51a9aa1 (diff)
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 <caolanm@redhat.com>
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx66
1 files changed, 35 insertions, 31 deletions
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))
{