diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-03-06 17:27:05 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-03-07 21:19:07 +0100 |
commit | f2a8f440bf2e8ad9ad0d595d1ab0cecf08de4a5c (patch) | |
tree | d9e6992930afb332fd5e9fe416a39e9df5b9b6e2 /vcl | |
parent | 82925b574209d3971c05b9bd98a317683dd583a5 (diff) |
workaround https://gitlab.gnome.org/GNOME/gtk/issues/70
Change-Id: I9175543f691095b843acc97ec3ad7f8299458337
Reviewed-on: https://gerrit.libreoffice.org/50879
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index ef8060662269..4a8912594e45 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -2545,10 +2545,32 @@ private: GtkExpander* m_pExpander; gulong m_nSignalId; - static void signalExpanded(GtkExpander*, GParamSpec *, gpointer widget) + static void signalExpanded(GtkExpander* pExpander, GParamSpec *, gpointer widget) { GtkInstanceExpander* pThis = static_cast<GtkInstanceExpander*>(widget); pThis->signal_expanded(); + + GtkWidget *pToplevel = gtk_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); + } } public: |