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

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Fri May 14 13:55:21 UTC 2021


 vcl/unx/gtk3/gtkinst.cxx |   43 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

New commits:
commit f6b8e813e2a33221c400a050b183eb33b9237618
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri May 14 11:36:35 2021 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri May 14 15:54:38 2021 +0200

    gtk4: move has-default has-focus to toplevel equivalents
    
    not sure how far that'll get us for the general case, but fine
    for simple dialogs
    
    Change-Id: Iab65af6454701a62f426bced52de1425b0abc536
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115603
    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 7bd4f1991690..d4b0303207d0 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -17543,6 +17543,30 @@ Reference<css::xml::dom::XNode> CreateProperty(const css::uno::Reference<css::xm
     return xProperty;
 }
 
+void SetPropertyOnTopLevel(const Reference<css::xml::dom::XNode>& xNode, const Reference<css::xml::dom::XNode>& xProperty)
+{
+    for (css::uno::Reference<css::xml::dom::XNode> xObjectCandidate = xNode->getParentNode();
+         xObjectCandidate.is();
+         xObjectCandidate = xObjectCandidate->getParentNode())
+    {
+        if (xObjectCandidate->getNodeName() == "object")
+        {
+            css::uno::Reference<css::xml::dom::XNamedNodeMap> xObjectMap = xObjectCandidate->getAttributes();
+            css::uno::Reference<css::xml::dom::XNode> xClass = xObjectMap->getNamedItem("class");
+            if (xClass->getNodeValue() == "GtkDialog")
+            {
+                auto xFirstChild = xObjectCandidate->getFirstChild();
+                if (xFirstChild.is())
+                    xObjectCandidate->insertBefore(xProperty, xFirstChild);
+                else
+                    xObjectCandidate->appendChild(xProperty);
+
+                break;
+            }
+        }
+    }
+}
+
 void ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
 {
     css::uno::Reference<css::xml::dom::XNodeList> xNodeList = xNode->getChildNodes();
@@ -17575,6 +17599,24 @@ void ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
             if (sName == "border-width")
                 sBorderWidth = xChild->getFirstChild()->getNodeValue();
 
+            if (sName == "has-default")
+            {
+                css::uno::Reference<css::xml::dom::XNamedNodeMap> xParentMap = xChild->getParentNode()->getAttributes();
+                css::uno::Reference<css::xml::dom::XNode> xId = xParentMap->getNamedItem("id");
+                auto xDoc = xChild->getOwnerDocument();
+                auto xDefaultWidget = CreateProperty(xDoc, "default-widget", xId->getNodeValue());
+                SetPropertyOnTopLevel(xChild, xDefaultWidget);
+            }
+
+            if (sName == "has-focus")
+            {
+                css::uno::Reference<css::xml::dom::XNamedNodeMap> xParentMap = xChild->getParentNode()->getAttributes();
+                css::uno::Reference<css::xml::dom::XNode> xId = xParentMap->getNamedItem("id");
+                auto xDoc = xChild->getOwnerDocument();
+                auto xDefaultWidget = CreateProperty(xDoc, "focus-widget", xId->getNodeValue());
+                SetPropertyOnTopLevel(xChild, xDefaultWidget);
+            }
+
             if (sName == "type-hint" || sName == "skip-taskbar-hint" ||
                 sName == "can-default" || sName == "has-default" ||
                 sName == "border-width" || sName == "layout-style" ||
@@ -17754,7 +17796,6 @@ void ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
                             {
                                 if (xTitleChild->getNodeName() == "child")
                                 {
-                                    fprintf(stderr, "node is %s\n", xTitleChild->getNodeName().toUtf8().getStr());
                                     css::uno::Reference<css::xml::dom::XElement> xChildElem(xTitleChild, css::uno::UNO_QUERY_THROW);
                                     if (!xChildElem->hasAttribute("type"))
                                     {


More information about the Libreoffice-commits mailing list