From 9d9260eadb124a7418855e7d06afccae66cc0667 Mon Sep 17 00:00:00 2001 From: Lukasz Stanislawski Date: Tue, 3 Nov 2015 11:41:50 +0100 Subject: [PATCH] mobile-lua: add additional LABELLED_BY relation Change-Id: I543b531ad4386ce7996e3b7ee061d70e5e564a9e --- res/scripts/mobile.lua | 44 ++++++++++++++++++++++++++++++++++++-------- src/lua_engine.c | 6 +++--- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/res/scripts/mobile.lua b/res/scripts/mobile.lua index c53c2e0..39d5396 100644 --- a/res/scripts/mobile.lua +++ b/res/scripts/mobile.lua @@ -114,16 +114,44 @@ function trait(obj) end end +function stringArrayAppend(strings, string) + if string ~= "" then + table.insert(strings, string) + end +end + +function generateStringArray(objects, createFunc) + local ret = {} + for k, target in ipairs(objects) do + stringArrayAppend(ret, createFunc(target)) + end + return ret +end + function describeObject(obj) - local related_trait = {} - for k, target in ipairs(obj:inRelation(RELATION_DESCRIBED_BY)) do - table.insert(related_trait, trait(target)) + local labels = generateStringArray(obj:inRelation(RELATION_LABELLED_BY), function(x) return x:name() end) + local descriptions = generateStringArray(obj:inRelation(RELATION_DESCRIBED_BY), function(x) return x:description() end) + local traits = generateStringArray(obj:inRelation(RELATION_DESCRIBED_BY), trait) + + -- use original object name if related objects do not provide other + if table.getn(labels) == 0 then + stringArrayAppend(labels, obj:name()) end - local ret = {obj:name(), trait(obj), obj:description(), table.concat(related_trait, ", ")} - for i=#ret,1,-1 do - if ret[i] == nil or ret[i] == "" then - table.remove(ret, i) - end + + -- use original object description if related objects do not provide other + if table.getn(descriptions) == 0 then + stringArrayAppend(descriptions, obj:description()) end + + -- use original object trait if related objects do not provide other + if table.getn(traits) == 0 then + stringArrayAppend(traits, trait(obj)) + end + + local ret = {} + stringArrayAppend(ret, table.concat(labels, ", ")) + stringArrayAppend(ret, table.concat(traits, ", ")) + stringArrayAppend(ret, table.concat(descriptions, ", ")) + return table.concat(ret, ", ") end diff --git a/src/lua_engine.c b/src/lua_engine.c index b2d8207..76cd94f 100644 --- a/src/lua_engine.c +++ b/src/lua_engine.c @@ -166,7 +166,7 @@ static int _accessible_relations(lua_State *L) { AtspiAccessible *obj = _pop_class_obj(L, 1, 1, ACCESSIBLE_CLASS_NAME); AtspiRelationType type = lua_tonumber(L, -1); GError *err = NULL; - int i, j; + int i, j, idx; lua_newtable(L); if (!obj) return 1; @@ -174,7 +174,7 @@ static int _accessible_relations(lua_State *L) { GERROR_CHECK(err); if (!rels) return 1; - for (i = 0; i < rels->len; i++) + for (i = 0, idx = 1; i < rels->len; i++) { AtspiRelation *rel = g_array_index(rels, AtspiRelation*, i); if (atspi_relation_get_relation_type(rel) == type) @@ -183,7 +183,7 @@ static int _accessible_relations(lua_State *L) { { AtspiAccessible *target = atspi_relation_get_target(rel, j); if (!target) continue; - lua_pushinteger(L, j); + lua_pushinteger(L, idx++); _push_class_obj(L, target, ACCESSIBLE_CLASS_NAME); lua_settable(L, -3); } -- 2.7.4