diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-05-03 11:30:00 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-05-03 11:31:40 +0100 |
commit | bfa360c6e761a1e9b3e34665b9b36d724979fdfd (patch) | |
tree | 3f4633e563474f6f3ad2e1e6906db637aed29137 /vcl/source/window/builder.cxx | |
parent | da06166015689eca260c702602bef4cea58afbd3 (diff) |
unset WB_GROUP on non-initial buttons in groups
Change-Id: I8846318e8d7fef862bb105af878b2df17045d7ff
Diffstat (limited to 'vcl/source/window/builder.cxx')
-rw-r--r-- | vcl/source/window/builder.cxx | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 362786a33176..cc3919e35e4b 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -1580,11 +1580,12 @@ void VclBuilder::handleChild(Window *pParent, xmlreader::XmlReader &reader) aChilds.push_back(pChild); } + bool bIsButtonBox = dynamic_cast<VclButtonBox*>(pCurrentChild) != NULL; + //sort child order within parent so that tabbing //between controls goes in a visually sensible sequence std::stable_sort(aChilds.begin(), aChilds.end(), sortIntoBestTabTraversalOrder(this)); - for (size_t i = 0; i < aChilds.size(); ++i) - reorderWithinParent(*aChilds[i], i); + reorderWithinParent(aChilds, bIsButtonBox); } } } @@ -1607,6 +1608,25 @@ void VclBuilder::handleChild(Window *pParent, xmlreader::XmlReader &reader) } } +void VclBuilder::reorderWithinParent(std::vector<Window*>& rChilds, bool bIsButtonBox) +{ + for (size_t i = 0; i < rChilds.size(); ++i) + { + reorderWithinParent(*rChilds[i], i); + + if (!bIsButtonBox) + break; + + //The first member of the group for legacy code needs WB_GROUP set and the + //others not + WinBits nBits = rChilds[i]->GetStyle(); + nBits &= ~WB_GROUP; + if (i == 0) + nBits |= WB_GROUP; + rChilds[i]->SetStyle(nBits); + } +} + void VclBuilder::collectPangoAttribute(xmlreader::XmlReader &reader, stringmap &rMap) { xmlreader::Span span; |