diff options
author | Caolán McNamara <caolanm@redhat.com> | 2021-05-24 17:07:08 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-05-24 21:39:43 +0200 |
commit | 08e99279226206db8ce83cdebc4cf2994739e90b (patch) | |
tree | a177dda09b1bd3abd0ec6cd3cf453c0df87b98d0 /vcl | |
parent | 811c9ca5747c8144ffa4ff327d0e4238f4197033 (diff) |
gtk4: restore collapse/undo_collapse for calc cell reference dialogs
hide the entire titlebar for now, maybe we should just hide the
action widgets and keep the titlebar.
Change-Id: I81667ac0d5edbf4f5c7e12909672fa0de84c059a
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116071
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/unx/gtk3/gtkinst.cxx | 80 |
1 files changed, 64 insertions, 16 deletions
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 8c6386dd693a..9ab2d5f40a6d 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -4766,7 +4766,9 @@ public: virtual void resize_to_request() override { -#if !GTK_CHECK_VERSION(4, 0, 0) +#if GTK_CHECK_VERSION(4, 0, 0) + gtk_window_set_default_size(m_pWindow, 1, 1); +#else gtk_window_resize(m_pWindow, 1, 1); #endif } @@ -5144,11 +5146,42 @@ typedef std::set<GtkWidget*> winset; namespace { -#if !GTK_CHECK_VERSION(4, 0, 0) - void hideUnless(GtkContainer *pTop, const winset& rVisibleWidgets, +#if GTK_CHECK_VERSION(4, 0, 0) + void collectVisibleChildren(GtkWidget* pTop, winset& rVisibleWidgets) + { + for (GtkWidget* pChild = gtk_widget_get_first_child(pTop); + pChild; pChild = gtk_widget_get_next_sibling(pChild)) + { + if (!gtk_widget_get_visible(pChild)) + continue; + rVisibleWidgets.insert(pChild); + collectVisibleChildren(pChild, rVisibleWidgets); + } + } +#endif + + void hideUnless(GtkWidget* pTop, const winset& rVisibleWidgets, std::vector<GtkWidget*> &rWasVisibleWidgets) { - GList* pChildren = gtk_container_get_children(pTop); +#if GTK_CHECK_VERSION(4, 0, 0) + for (GtkWidget* pChild = gtk_widget_get_first_child(pTop); + pChild; pChild = gtk_widget_get_next_sibling(pChild)) + { + if (!gtk_widget_get_visible(pChild)) + continue; + if (rVisibleWidgets.find(pChild) == rVisibleWidgets.end()) + { + g_object_ref(pChild); + rWasVisibleWidgets.emplace_back(pChild); + gtk_widget_hide(pChild); + } + else + { + hideUnless(pChild, rVisibleWidgets, rWasVisibleWidgets); + } + } +#else + GList* pChildren = gtk_container_get_children(GTK_CONTAINER(pTop)); for (GList* pEntry = g_list_first(pChildren); pEntry; pEntry = g_list_next(pEntry)) { GtkWidget* pChild = static_cast<GtkWidget*>(pEntry->data); @@ -5162,12 +5195,12 @@ namespace } else if (GTK_IS_CONTAINER(pChild)) { - hideUnless(GTK_CONTAINER(pChild), rVisibleWidgets, rWasVisibleWidgets); + hideUnless(pChild, rVisibleWidgets, rWasVisibleWidgets); } } g_list_free(pChildren); - } #endif + } class GtkInstanceButton; @@ -5526,25 +5559,36 @@ public: { aVisibleWidgets.insert(pCandidate); } - //same again with pRefBtn, except stop if there's a - //shared parent in the existing widgets - for (GtkWidget *pCandidate = pRefBtn; - pCandidate && pCandidate != pContentArea && gtk_widget_get_visible(pCandidate); - pCandidate = gtk_widget_get_parent(pCandidate)) +#if GTK_CHECK_VERSION(4, 0, 0) + collectVisibleChildren(pRefEdit, aVisibleWidgets); +#endif + if (pRefBtn) { - if (aVisibleWidgets.insert(pCandidate).second) - break; +#if GTK_CHECK_VERSION(4, 0, 0) + collectVisibleChildren(pRefBtn, aVisibleWidgets); +#endif + //same again with pRefBtn, except stop if there's a + //shared parent in the existing widgets + for (GtkWidget *pCandidate = pRefBtn; + pCandidate && pCandidate != pContentArea && gtk_widget_get_visible(pCandidate); + pCandidate = gtk_widget_get_parent(pCandidate)) + { + if (aVisibleWidgets.insert(pCandidate).second) + break; + } } -#if !GTK_CHECK_VERSION(4, 0, 0) //hide everything except the aVisibleWidgets - hideUnless(GTK_CONTAINER(pContentArea), aVisibleWidgets, m_aHiddenWidgets); - + hideUnless(pContentArea, aVisibleWidgets, m_aHiddenWidgets); gtk_widget_set_size_request(pRefEdit, m_nOldEditWidth, -1); +#if !GTK_CHECK_VERSION(4, 0, 0) m_nOldBorderWidth = gtk_container_get_border_width(GTK_CONTAINER(m_pDialog)); gtk_container_set_border_width(GTK_CONTAINER(m_pDialog), 0); if (GtkWidget* pActionArea = gtk_dialog_get_action_area(GTK_DIALOG(m_pDialog))) gtk_widget_hide(pActionArea); +#else + if (GtkWidget* pActionArea = gtk_dialog_get_header_bar(GTK_DIALOG(m_pDialog))) + gtk_widget_hide(pActionArea); #endif // calc's insert->function is springing back to its original size if the ref-button @@ -5582,6 +5626,9 @@ public: gtk_container_set_border_width(GTK_CONTAINER(m_pDialog), m_nOldBorderWidth); if (GtkWidget* pActionArea = gtk_dialog_get_action_area(GTK_DIALOG(m_pDialog))) gtk_widget_show(pActionArea); +#else + if (GtkWidget* pActionArea = gtk_dialog_get_header_bar(GTK_DIALOG(m_pDialog))) + gtk_widget_show(pActionArea); #endif resize_to_request(); present(); @@ -19666,6 +19713,7 @@ weld::Builder* GtkInstance::CreateBuilder(weld::Widget* pParent, const OUString& rUIFile != "svx/ui/fontworkgallerydialog.ui" && rUIFile != "modules/scalc/ui/deletecells.ui" && rUIFile != "modules/scalc/ui/deletecontents.ui" && + rUIFile != "modules/scalc/ui/goalseekdlg.ui" && rUIFile != "modules/scalc/ui/inputstringdialog.ui" && rUIFile != "modules/scalc/ui/insertcells.ui" && rUIFile != "modules/scalc/ui/optimalcolwidthdialog.ui" && |