add highlight function to batch mode 47/207647/2
authorRadoslaw Cybulski <r.cybulski@partner.samsung.com>
Fri, 7 Jun 2019 13:27:24 +0000 (15:27 +0200)
committerRadoslaw Cybulski <r.cybulski@partner.samsung.com>
Tue, 11 Jun 2019 14:33:04 +0000 (16:33 +0200)
Change-Id: I302c8579ee55f10ea9f8318863d0b67ca59eb7d8

src/Atspi.cpp
src/Atspi.hpp
src/batch/BatchRunner.cpp

index f8c2de4..445822b 100644 (file)
@@ -320,6 +320,17 @@ Optional<std::string> Atspi::getName(const AtspiAccessiblePtr &accessibleObj) co
        return std::move(z);
 }
 
+Optional<bool> Atspi::grabHighlight(const AtspiComponentPtr &obj) const
+{
+       GError *error = nullptr;
+       auto ret = atspi_component_grab_highlight(obj.get(), &error);
+       if (error) {
+               PRINT_ERROR_AND_FREE(error);
+               return {};
+       }
+       return ret;
+}
+
 Optional<AtspiRole> Atspi::getRole(const AtspiAccessiblePtr &accessibleObj) const
 {
        GError *error = nullptr;
index 9cb753e..981d5be 100644 (file)
@@ -379,6 +379,13 @@ public:
        Optional<size_t> countTextCharacters(const AtspiTextPtr &textInterface) const;
 
        /**
+        * @brief Tries to grab highlight on given object
+        *
+        * @return Optional<size_t> true if grab succesed or empty Optional object, if call failed
+        */
+       Optional<bool> grabHighlight(const AtspiComponentPtr &obj) const;
+
+       /**
         * @brief Returns range at given offset depending on granularity type
         *
         * This function starts at given offset and calculates range based on it's granularity
index 7bf1908..928223a 100644 (file)
@@ -882,6 +882,25 @@ void BatchExecutor::insertMethods()
                                return Singleton<UniversalSwitch>::instance().getMainWindow()->getDimensions();
                        });
                        return dims.contains(point);
+               },  { {"point"} } };
+
+       variables["highlight"] = EvaluationValueFunction{ [&](EvaluationValue e) -> EvaluationValue {
+                       AtspiAccessiblePtr obj;
+                       if (e.isPoint())
+                       {
+                               auto root = getVisibleRoot();
+                               obj = Singleton<UniversalSwitch>::instance().getAtspi()->getAtPoint(e.asPoint(), Atspi::CoordType::Screen, root->getObject());
+                       } else
+                       {
+                               if (e.isString()) e = convertToUIElement(e.asString());
+                               auto v = e.convertToUIElement();
+                               obj = v->getObject();
+                       }
+                       auto comp = Singleton<UniversalSwitch>::instance().getAtspi()->getComponentInterface(obj);
+                       if (!comp) throw EvaluationFailure{} << "atspi object '" << Atspi::getUniqueId(obj) << "' doesn't have a component interface";
+                       auto res = Singleton<UniversalSwitch>::instance().getAtspi()->grabHighlight(comp);
+                       if (!res) throw EvaluationFailure{} << "grabHighlight call failed (see dlog log for more details)";
+                       return *res;
                },  { {"value"} } };
 
        variables["len"] = EvaluationValueFunction{ [&](EvaluationValue e) -> EvaluationValue {