summaryrefslogtreecommitdiff
path: root/vcl/unx
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 /vcl/unx
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>
Diffstat (limited to 'vcl/unx')
-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))
{