void AXObjectCache::notificationPostTimerFired(Timer<AXObjectCache>*) { RefPtr<Document> protectorForCacheOwner(m_document); m_notificationPostTimer.stop(); unsigned i = 0, count = m_notificationsToPost.size(); for (i = 0; i < count; ++i) { AccessibilityObject* obj = m_notificationsToPost[i].first.get(); #ifndef NDEBUG // Make sure none of the render views are in the process of being layed out. // Notifications should only be sent after the renderer has finished if (obj->isAccessibilityRenderObject()) { AccessibilityRenderObject* renderObj = static_cast<AccessibilityRenderObject*>(obj); RenderObject* renderer = renderObj->renderer(); if (renderer && renderer->view()) ASSERT(!renderer->view()->layoutState()); } #endif postPlatformNotification(obj, m_notificationsToPost[i].second); } m_notificationsToPost.clear(); }
void AXObjectCache::notificationPostTimerFired(Timer<AXObjectCache>*) { RefPtr<Document> protectorForCacheOwner(m_document); m_notificationPostTimer.stop(); unsigned i = 0, count = m_notificationsToPost.size(); for (i = 0; i < count; ++i) { AccessibilityObject* obj = m_notificationsToPost[i].first.get(); if (!obj->axObjectID()) continue; if (!obj->axObjectCache()) continue; #ifndef NDEBUG // Make sure none of the render views are in the process of being layed out. // Notifications should only be sent after the renderer has finished if (obj->isAccessibilityRenderObject()) { AccessibilityRenderObject* renderObj = toAccessibilityRenderObject(obj); RenderObject* renderer = renderObj->renderer(); if (renderer && renderer->view()) ASSERT(!renderer->view()->layoutState()); } #endif AXNotification notification = m_notificationsToPost[i].second; postPlatformNotification(obj, notification); if (notification == AXChildrenChanged && obj->parentObjectIfExists() && obj->lastKnownIsIgnoredValue() != obj->accessibilityIsIgnored()) childrenChanged(obj->parentObject()); } m_notificationsToPost.clear(); }
static PangoLayout* getPangoLayoutForAtk(AtkText* textObject) { AccessibilityObject* coreObject = core(textObject); HostWindow* hostWindow = coreObject->document()->view()->hostWindow(); if (!hostWindow) return 0; PlatformPageClient webView = hostWindow->platformPageClient(); if (!webView) return 0; GString* str = g_string_new(NULL); AccessibilityRenderObject* accObject = static_cast<AccessibilityRenderObject*>(coreObject); if (!accObject) return 0; RenderText* renderText = toRenderText(accObject->renderer()); if (!renderText) return 0; // Create a string with the layout as it appears on the screen InlineTextBox* box = renderText->firstTextBox(); while (box) { gchar *text = convertUniCharToUTF8(renderText->characters(), renderText->textLength(), box->start(), box->end()); g_string_append(str, text); g_string_append(str, "\n"); box = box->nextTextBox(); } PangoLayout* layout = gtk_widget_create_pango_layout(static_cast<GtkWidget*>(webView), g_string_free(str, FALSE)); g_object_set_data_full(G_OBJECT(textObject), "webkit-accessible-pango-layout", layout, g_object_unref); return layout; }
void AXObjectCache::notificationPostTimerFired(Timer<AXObjectCache>&) { Ref<Document> protectorForCacheOwner(m_document); m_notificationPostTimer.stop(); // In DRT, posting notifications has a tendency to immediately queue up other notifications, which can lead to unexpected behavior // when the notification list is cleared at the end. Instead copy this list at the start. auto notifications = m_notificationsToPost; m_notificationsToPost.clear(); for (const auto& note : notifications) { AccessibilityObject* obj = note.first.get(); if (!obj->axObjectID()) continue; if (!obj->axObjectCache()) continue; #ifndef NDEBUG // Make sure none of the render views are in the process of being layed out. // Notifications should only be sent after the renderer has finished if (obj->isAccessibilityRenderObject()) { AccessibilityRenderObject* renderObj = toAccessibilityRenderObject(obj); RenderObject* renderer = renderObj->renderer(); if (renderer) ASSERT(!renderer->view().layoutState()); } #endif AXNotification notification = note.second; postPlatformNotification(obj, notification); if (notification == AXChildrenChanged && obj->parentObjectIfExists() && obj->lastKnownIsIgnoredValue() != obj->accessibilityIsIgnored()) childrenChanged(obj->parentObject()); } }