#define _A11Y_EVENT_HANDLER_H_
#include "A11yEvent.h"
+#include <functional>
namespace Aurum {
-typedef bool (*EventHandler)(void *data, const A11yEvent type, std::string pkg);
+using EventHandler = std::function<bool(void *, const A11yEvent, std::shared_ptr<AccessibleNode>)>;
/**
* @class A11yEventHandler
*
* @since_tizen 7.5
*/
- bool operator() (std::string pkg);
+ bool operator() (std::shared_ptr<AccessibleNode> node);
private:
A11yEvent mType;
void appendApp(AtspiAccessible *app, char *pkg, int pid);
void removeApp(char *pkg, int pid);
void setXMLsync();
- void processCallback(char *type, char *name, char *pkg);
+ void processCallback(char *type, char *name, char *pkg, AtspiAccessible *node = nullptr);
void processWindowEvent(AtspiEvent *event);
void processPostRender();
{
return mType;
}
-bool A11yEventHandler::operator() (std::string pkg)
+bool A11yEventHandler::operator() (std::shared_ptr<AccessibleNode> node)
{
- return mCb(mData, mType, pkg);
+ return mCb(mData, mType, node);
}
-
return NULL;
}
-void AtspiAccessibleWatcher::processCallback(char *type, char *name, char *pkg)
+void AtspiAccessibleWatcher::processCallback(char *type, char *name, char *pkg, AtspiAccessible *node)
{
mMutex.lock();
auto a11yEvent = std::make_shared<A11yEventInfo>(std::string(type), std::string(name), std::string(pkg));
{
LOGI("Callback call type %s pkg %s", type, pkg);
auto handler = *it;
- bool res = (*handler)(std::string(pkg));
+ if (node) g_object_ref(node);
+ bool res = (*handler)(std::make_shared<AtspiAccessibleNode>(node));
if (!res) it = list.erase(it);
else ++it;
}
char *name = NULL, *pkg = NULL;
name = AtspiWrapper::Atspi_accessible_get_name(event->source, NULL);
pkg = AtspiWrapper::Atspi_accessible_get_name(event->sender, NULL);
- instance->processCallback(event->type, name, pkg);
+ instance->processCallback(event->type, name, pkg, event->source);
if (name) g_free(name);
if (pkg) g_free(pkg);
}