diff options
author | Caolán McNamara <caolanm@redhat.com> | 2013-01-21 11:12:49 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2013-01-22 16:29:40 +0000 |
commit | f58c3774ed4a3e76f475b1def5874aa1295bc0fd (patch) | |
tree | 33ea2f9c683afb4658ea0ff60e9bf50afb02a67d /vcl | |
parent | 492498b86e2f39b81da3fec895f0efdcce3a9655 (diff) |
add accessible-name and accessible-description support to VclBuilder
Change-Id: Ifa85b2e2bf562786cb9d69b904a24ab1b8e0413b
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/vcl/builder.hxx | 2 | ||||
-rw-r--r-- | vcl/source/window/builder.cxx | 54 | ||||
-rw-r--r-- | vcl/source/window/window2.cxx | 8 |
3 files changed, 64 insertions, 0 deletions
diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index 3bc96420055f..1aa1c2004008 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -283,6 +283,8 @@ private: void handleSizeGroup(xmlreader::XmlReader &reader, const OString &rID); + void handleAtkObject(xmlreader::XmlReader &reader, const OString &rID, Window *pWindow); + PackingData get_window_packing_data(const Window *pWindow) const; void set_window_packing_position(const Window *pWindow, sal_Int32 nPosition); diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 583d6ce5ddd3..793defc5fa46 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -1510,6 +1510,55 @@ void VclBuilder::handleListStore(xmlreader::XmlReader &reader, const OString &rI } } +void VclBuilder::handleAtkObject(xmlreader::XmlReader &reader, const OString &rID, Window *pWindow) +{ + assert(pWindow); + + int nLevel = 1; + + stringmap aProperties; + + while(1) + { + xmlreader::Span name; + int nsId; + + xmlreader::XmlReader::Result res = reader.nextItem( + xmlreader::XmlReader::TEXT_NONE, &name, &nsId); + + if (res == xmlreader::XmlReader::RESULT_DONE) + break; + + if (res == xmlreader::XmlReader::RESULT_BEGIN) + { + ++nLevel; + if (name.equals(RTL_CONSTASCII_STRINGPARAM("property"))) + collectProperty(reader, rID, aProperties); + } + + if (res == xmlreader::XmlReader::RESULT_END) + { + --nLevel; + } + + if (!nLevel) + break; + } + + for (stringmap::iterator aI = aProperties.begin(), aEnd = aProperties.end(); aI != aEnd; ++aI) + { + const OString &rKey = aI->first; + const OString &rValue = aI->second; + + if (rKey.match("AtkObject::")) + pWindow->set_property(rKey.copy(RTL_CONSTASCII_LENGTH("AtkObject::")), rValue); + else + SAL_WARN("vcl.layout", "unhandled atk prop: " << rKey.getStr()); + + fprintf(stderr, "setting atk props on %p\n", pWindow); + } +} + std::vector<OString> VclBuilder::handleItems(xmlreader::XmlReader &reader, const OString &rID) { int nLevel = 1; @@ -1902,6 +1951,11 @@ Window* VclBuilder::handleObject(Window *pParent, xmlreader::XmlReader &reader) handleSizeGroup(reader, sID); return NULL; } + else if (sClass == "AtkObject") + { + handleAtkObject(reader, sID, pParent); + return NULL; + } int nLevel = 1; diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx index acf9aada3c5e..0dc6d1792a6c 100644 --- a/vcl/source/window/window2.cxx +++ b/vcl/source/window/window2.cxx @@ -1968,6 +1968,14 @@ bool Window::set_property(const OString &rKey, const OString &rValue) nBits |= WB_AUTOVSCROLL; SetStyle(nBits); } + else if (rKey == "accessible-name") + { + SetAccessibleName(OStringToOUString(rValue, RTL_TEXTENCODING_UTF8)); + } + else if (rKey == "accessible-description") + { + SetAccessibleDescription(OStringToOUString(rValue, RTL_TEXTENCODING_UTF8)); + } else if (rKey == "use-markup") { //https://live.gnome.org/GnomeGoals/RemoveMarkupInMessages |