vcl/inc/qt5/QtBuilder.hxx |    4 +++-
 vcl/qt5/QtBuilder.cxx     |   23 +++++++++++++++--------
 2 files changed, 18 insertions(+), 9 deletions(-)

New commits:
commit 2172bb226ab29ff0e9ea8ebe1a498f83afb5c891
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Jan 18 17:23:32 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sun Jan 19 21:34:43 2025 +0100

    tdf#130857 qt weld: Set GtkButton props for MenuButton
    
    The GTK 3 GtkMenuButton [1] subclasses GtkButton [2].
    Therefore, let QtBuilder apply the GtkButton properties for the
    QToolButton created for a "GtkMenuButton" object in a .ui file as well.
    
    This e.g. ensures that the menu button in the
    "File" -> "Templates" -> "Manage Templates" dialog
    gets the "Manage" label in a WIP branch where support
    for that dialog using native Qt widgets is declared.
    
    [1] https://docs.gtk.org/gtk3/class.MenuButton.html
    [2] https://docs.gtk.org/gtk3/class.Button.html
    
    Change-Id: I3f2e7b701776476a6677d2bb324ffbdd4956f471
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180461
    Reviewed-by: Michael Weghorn <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/inc/qt5/QtBuilder.hxx b/vcl/inc/qt5/QtBuilder.hxx
index 254fb379023b..c2987dc33b19 100644
--- a/vcl/inc/qt5/QtBuilder.hxx
+++ b/vcl/inc/qt5/QtBuilder.hxx
@@ -97,7 +97,7 @@ private:
     // remove pOldWidget from the widget hierarchy and set (child widget) 
pNewWidget in its place
     static void replaceWidget(QWidget* pOldWidget, QWidget* pNewWidget);
     static void setProperties(QObject* obj, stringmap& rProps);
-    void setButtonProperties(QPushButton& rButton, stringmap& rProps);
+    void setButtonProperties(QAbstractButton& rButton, stringmap& rProps);
     static void setLabelProperties(QLabel& rLabel, stringmap& rProps);
     void setMenuButtonProperties(QToolButton& rButton, stringmap& rProps);
     void setScaleProperties(QSlider& rSlider, stringmap& rProps);
diff --git a/vcl/qt5/QtBuilder.cxx b/vcl/qt5/QtBuilder.cxx
index 1dafdae0ee57..132d9e8a38c0 100644
--- a/vcl/qt5/QtBuilder.cxx
+++ b/vcl/qt5/QtBuilder.cxx
@@ -801,7 +801,7 @@ void QtBuilder::setProperties(QObject* pObject, stringmap& 
rProps)
     }
 }
 
-void QtBuilder::setButtonProperties(QPushButton& rButton, stringmap& rProps)
+void QtBuilder::setButtonProperties(QAbstractButton& rButton, stringmap& 
rProps)
 {
     for (auto const & [ rKey, rValue ] : rProps)
     {
@@ -846,6 +846,8 @@ void QtBuilder::setMenuButtonProperties(QToolButton& 
rButton, stringmap& rProps)
         assert(pMenu && "menu button references non-existing menu");
         rButton.setMenu(pMenu);
     }
+
+    setButtonProperties(rButton, rProps);
 }
 
 void QtBuilder::setScaleProperties(QSlider& rSlider, stringmap& rProps)
commit a6cd97bd9c513a6131be1e7f46c44e2d135f8dc7
Author:     Michael Weghorn <[email protected]>
AuthorDate: Sat Jan 18 17:17:25 2025 +0100
Commit:     Michael Weghorn <[email protected]>
CommitDate: Sun Jan 19 21:34:34 2025 +0100

    tdf#130857 qt weld: Extract helper method to set menu button props
    
    Change-Id: I5f23f3e5734cee99ed54c9082fe9cbb3d9b54f0d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/180460
    Tested-by: Jenkins
    Reviewed-by: Michael Weghorn <[email protected]>

diff --git a/vcl/inc/qt5/QtBuilder.hxx b/vcl/inc/qt5/QtBuilder.hxx
index bb5ba7ad6278..254fb379023b 100644
--- a/vcl/inc/qt5/QtBuilder.hxx
+++ b/vcl/inc/qt5/QtBuilder.hxx
@@ -20,6 +20,7 @@
 #include <QtWidgets/QMessageBox>
 #include <QtWidgets/QPushButton>
 #include <QtWidgets/QSlider>
+#include <QtWidgets/QToolButton>
 
 #include <rtl/ustring.hxx>
 #include <unotools/resmgr.hxx>
@@ -98,6 +99,7 @@ private:
     static void setProperties(QObject* obj, stringmap& rProps);
     void setButtonProperties(QPushButton& rButton, stringmap& rProps);
     static void setLabelProperties(QLabel& rLabel, stringmap& rProps);
+    void setMenuButtonProperties(QToolButton& rButton, stringmap& rProps);
     void setScaleProperties(QSlider& rSlider, stringmap& rProps);
     void setSpinButtonProperties(QDoubleSpinBox& rSpinBox, stringmap& rProps);
     static QWidget* windowForObject(QObject* pObject);
diff --git a/vcl/qt5/QtBuilder.cxx b/vcl/qt5/QtBuilder.cxx
index 8b1b4293c8ff..1dafdae0ee57 100644
--- a/vcl/qt5/QtBuilder.cxx
+++ b/vcl/qt5/QtBuilder.cxx
@@ -286,13 +286,7 @@ QObject* QtBuilder::makeObject(QObject* pParent, 
std::u16string_view sName, std:
     else if (sName == u"GtkMenuButton")
     {
         QToolButton* pMenuButton = new QToolButton(pParentWidget);
-        const OUString sMenu = extractPopupMenu(rMap);
-        if (!sMenu.isEmpty())
-        {
-            QMenu* pMenu = get_menu(sMenu);
-            assert(pMenu && "menu button references non-existing menu");
-            pMenuButton->setMenu(pMenu);
-        }
+        setMenuButtonProperties(*pMenuButton, rMap);
         pObject = pMenuButton;
     }
     else if (sName == u"GtkNotebook")
@@ -843,6 +837,17 @@ void QtBuilder::setLabelProperties(QLabel& rLabel, 
stringmap& rProps)
     }
 }
 
+void QtBuilder::setMenuButtonProperties(QToolButton& rButton, stringmap& 
rProps)
+{
+    const OUString sMenu = extractPopupMenu(rProps);
+    if (!sMenu.isEmpty())
+    {
+        QMenu* pMenu = get_menu(sMenu);
+        assert(pMenu && "menu button references non-existing menu");
+        rButton.setMenu(pMenu);
+    }
+}
+
 void QtBuilder::setScaleProperties(QSlider& rSlider, stringmap& rProps)
 {
     if (!hasOrientationVertical(rProps))

Reply via email to