summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2021-05-24 16:07:36 +0100
committerCaolán McNamara <caolanm@redhat.com>2021-05-24 18:21:37 +0200
commit8e34098774a002a8734d9d03d1ba7cb445b815c4 (patch)
tree2a464966d53572948c24d0b7d1578e49ce93b099 /vcl
parent761c10bdf310fef2879874b6d5057fc51f54c0ca (diff)
gtk4: always transform internal-child GtkButtonBox to GtkHeaderBar
except for GtkMessageDialog ones Change-Id: I7bb1ff1533ebc07872342fdf632f5a950bf73d88 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116064 Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx25
1 files changed, 22 insertions, 3 deletions
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 90c36c060476..017bf4f76f3d 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -18235,6 +18235,23 @@ Reference<css::xml::dom::XNode> CreateProperty(const css::uno::Reference<css::xm
return xProperty;
}
+bool ToplevelIsMessageDialog(const Reference<css::xml::dom::XNode>& xNode)
+{
+ 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() == "GtkMessageDialog")
+ return true;
+ }
+ }
+ return false;
+}
+
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();
@@ -18582,8 +18599,10 @@ bool ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
OUString sClass(xClass->getNodeValue());
if (sClass == "GtkButtonBox")
{
- css::uno::Reference<css::xml::dom::XNode> xId = xMap->getNamedItem("id");
- if (xId->getNodeValue().startsWith("dialog-action_area"))
+ auto xInternalChildCandidate = xChild->getParentNode();
+ css::uno::Reference<css::xml::dom::XNamedNodeMap> xInternalChildCandidateMap = xInternalChildCandidate->getAttributes();
+ css::uno::Reference<css::xml::dom::XNode> xId = xInternalChildCandidateMap->getNamedItem("internal-child");
+ if (xId && xId->getNodeValue() == "action_area" && !ToplevelIsMessageDialog(xChild))
{
xClass->setNodeValue("GtkHeaderBar");
auto xDoc = xChild->getOwnerDocument();
@@ -18650,7 +18669,7 @@ bool ConvertTree(const Reference<css::xml::dom::XNode>& xNode)
xContentAreaCandidate = xContentAreaCandidate->getParentNode();
}
}
- else // if (!xId->getNodeValue().startsWith("messagedialog-action_area"))
+ else // GtkMessageDialog
xClass->setNodeValue("GtkBox");
}
else if (sClass == "GtkRadioButton")