[Libreoffice-commits] core.git: vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Mon May 24 19:40:29 UTC 2021


 vcl/unx/gtk3/gtkinst.cxx |   80 +++++++++++++++++++++++++++++++++++++----------
 1 file changed, 64 insertions(+), 16 deletions(-)

New commits:
commit 08e99279226206db8ce83cdebc4cf2994739e90b
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon May 24 17:07:08 2021 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon May 24 21:39:43 2021 +0200

    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 at redhat.com>

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" &&


More information about the Libreoffice-commits mailing list