vcl/unx/gtk3/gtkinst.cxx | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-)
New commits: commit f6b8e813e2a33221c400a050b183eb33b9237618 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri May 14 11:36:35 2021 +0100 Commit: Caolán McNamara <caol...@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 <caol...@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")) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits