summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-01-21 11:12:49 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-01-22 16:29:40 +0000
commitf58c3774ed4a3e76f475b1def5874aa1295bc0fd (patch)
tree33ea2f9c683afb4658ea0ff60e9bf50afb02a67d /vcl
parent492498b86e2f39b81da3fec895f0efdcce3a9655 (diff)
add accessible-name and accessible-description support to VclBuilder
Change-Id: Ifa85b2e2bf562786cb9d69b904a24ab1b8e0413b
Diffstat (limited to 'vcl')
-rw-r--r--vcl/inc/vcl/builder.hxx2
-rw-r--r--vcl/source/window/builder.cxx54
-rw-r--r--vcl/source/window/window2.cxx8
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