From: Hosang Kim Date: Thu, 24 Jun 2021 10:34:39 +0000 (+0900) Subject: libaurum: check invalid accessible object X-Git-Tag: submit/tizen/20210629.075325~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F19%2F260419%2F1;p=platform%2Fcore%2Fuifw%2Faurum.git libaurum: check invalid accessible object Change-Id: I912df64eae169eb60b57d39d4fdbb7e7f4811360 --- diff --git a/libaurum/src/Accessibility/AccessibleNode.cc b/libaurum/src/Accessibility/AccessibleNode.cc index 6e86d51..8e6dbb3 100644 --- a/libaurum/src/Accessibility/AccessibleNode.cc +++ b/libaurum/src/Accessibility/AccessibleNode.cc @@ -66,7 +66,6 @@ std::string AccessibleNode::description() { void AccessibleNode::notify(int type, int type2, void *src) { - LOG_SCOPE_F(INFO, "notified for obj(%p) t1:%d t2:%d src:%p",this, type, type2, src); void *handler = getRawHandler(); if ((EventType)type == EventType::Object && (ObjectEventType)type2 == ObjectEventType::ObjectStateDefunct) { @@ -227,4 +226,4 @@ bool AccessibleNode::isShowing() const bool AccessibleNode::isActive() const { return hasFeatureProperty(NodeFeatureProperties::ACTIVE); -} \ No newline at end of file +} diff --git a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc index 23b15b4..46544d7 100644 --- a/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc +++ b/libaurum/src/Impl/Accessibility/AtspiAccessibleWatcher.cc @@ -74,17 +74,15 @@ static gpointer _event_thread_loop (gpointer data) { LOG_F(INFO, "event thread start"); AtspiEventListener * listener = - atspi_event_listener_new(AtspiAccessibleWatcher::onAtspiEvents, NULL, NULL); + atspi_event_listener_new(AtspiAccessibleWatcher::onAtspiEvents, data, NULL); atspi_event_listener_register(listener, "window:", NULL); - atspi_event_listener_register(listener, "object:state-changed:focused", NULL); - atspi_event_listener_register(listener, "object:text-changed:insert", NULL); + atspi_event_listener_register(listener, "object:", NULL); atspi_event_main(); LOG_F(INFO, "event thread end"); - atspi_event_listener_deregister(listener, "object:state-changed:focused", NULL); - atspi_event_listener_deregister(listener, "object:text-changed:insert", NULL); + atspi_event_listener_deregister(listener, "object:", NULL); atspi_event_listener_deregister(listener, "window:", NULL); g_object_unref(listener); @@ -99,7 +97,7 @@ AtspiAccessibleWatcher::AtspiAccessibleWatcher() atspi_set_main_context (g_main_context_default ()); atspi_init(); - mEventThread = g_thread_new("AtspiEventThread", _event_thread_loop, nullptr); + mEventThread = g_thread_new("AtspiEventThread", _event_thread_loop, this); mDbusProxy = g_dbus_proxy_new_for_bus_sync( G_BUS_TYPE_SESSION, G_DBUS_PROXY_FLAGS_NONE, @@ -148,6 +146,7 @@ void AtspiAccessibleWatcher::onAtspiEvents(AtspiEvent *event, void *user_data) return; } char *name = NULL, *pkg = NULL; + AtspiAccessibleWatcher *instance = (AtspiAccessibleWatcher *)user_data; name = AtspiWrapper::Atspi_accessible_get_name(event->source, NULL); AtspiAccessible *app = AtspiWrapper::Atspi_accessible_get_application(event->source, NULL); @@ -160,6 +159,11 @@ void AtspiAccessibleWatcher::onAtspiEvents(AtspiEvent *event, void *user_data) pkg = strdup(""); mEventQueue.push_back(std::make_shared(std::string(event->type), std::string(name), std::string(pkg))); + + if (!strcmp(event->type, "object:state-changed:defunct")) { + instance->onObjectDefunct( + static_cast(event->source)); + } if (name) free(name); if (pkg) free(pkg); /* char *name = NULL, *pname = NULL; @@ -257,7 +261,6 @@ void AtspiAccessibleWatcher::onObjectDefunct(AtspiAccessible *node) notifyAll((int)EventType::Object, (int)ObjectEventType::ObjectStateDefunct, node); } - int AtspiAccessibleWatcher::getApplicationCount(void) const { AtspiWrapper::lock();