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>
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 8c6386d..9ab2d5f 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" &&