void AXObjectCache::postPlatformNotification(AccessibilityObject* obj, AXNotification notification) { if (obj && obj->isAccessibilityScrollbar() && notification == AXValueChanged) { // Send document value changed on scrollbar value changed notification. Scrollbar* scrollBar = static_cast<AccessibilityScrollbar*>(obj)->scrollbar(); if (!scrollBar || !scrollBar->parent() || !scrollBar->parent()->isFrameView()) return; Document* document = toFrameView(scrollBar->parent())->frame().document(); if (document != document->topDocument()) return; obj = get(document->renderer()); } if (!obj || !obj->document() || !obj->documentFrameView() || !obj->documentFrameView()->frame().page()) return; ChromeClient& client = obj->documentFrameView()->frame().page()->chrome().client(); if (notification == AXActiveDescendantChanged && obj->document()->focusedElement() && obj->node() == obj->document()->focusedElement()) { // Calling handleFocusedUIElementChanged will focus the new active // descendant and send the AXFocusedUIElementChanged notification. handleFocusedUIElementChanged(0, obj->document()->focusedElement()); } client.postAccessibilityNotification(obj, notification); }
void AXObjectCache::postPlatformNotification(AccessibilityObject* obj, AXNotification notification) { if (obj && obj->isAccessibilityScrollbar() && notification == AXValueChanged) { // Send document value changed on scrollbar value changed notification. Scrollbar* scrollBar = static_cast<AccessibilityScrollbar*>(obj)->scrollbar(); if (!scrollBar || !scrollBar->parent() || !scrollBar->parent()->isFrameView()) return; Document* document = toFrameView(scrollBar->parent())->frame()->document(); if (document != document->topDocument()) return; obj = get(document->renderer()); } if (!obj || !obj->document() || !obj->documentFrameView() || !obj->documentFrameView()->frame() || !obj->documentFrameView()->frame()->page()) return; ChromeClient* client = obj->documentFrameView()->frame()->page()->chrome().client(); if (!client) return; switch (notification) { case AXActiveDescendantChanged: if (!obj->document()->focusedNode() || (obj->node() != obj->document()->focusedNode())) break; // Calling handleFocusedUIElementChanged will focus the new active // descendant and send the AXFocusedUIElementChanged notification. handleFocusedUIElementChanged(0, obj->document()->focusedNode()); break; case AXAriaAttributeChanged: case AXAutocorrectionOccured: case AXCheckedStateChanged: case AXChildrenChanged: case AXFocusedUIElementChanged: case AXInvalidStatusChanged: case AXLayoutComplete: case AXLiveRegionChanged: case AXLoadComplete: case AXMenuListItemSelected: case AXMenuListValueChanged: case AXRowCollapsed: case AXRowCountChanged: case AXRowExpanded: case AXScrolledToAnchor: case AXSelectedChildrenChanged: case AXSelectedTextChanged: case AXTextChanged: case AXValueChanged: break; } client->postAccessibilityNotification(obj, notification); }
void ScrollbarThemeGtk::updateThemeProperties() { MozGtkScrollbarMetrics metrics; moz_gtk_get_scrollbar_metrics(&metrics); m_thumbFatness = metrics.slider_width; m_troughBorderWidth = metrics.trough_border; m_stepperSize = metrics.stepper_size; m_stepperSpacing = metrics.stepper_spacing; m_minThumbLength = metrics.min_slider_size; m_troughUnderSteppers = metrics.trough_under_steppers; m_hasForwardButtonStartPart = metrics.has_secondary_forward_stepper; m_hasBackButtonEndPart = metrics.has_secondary_backward_stepper; if (!gScrollbars) return; // Update the thickness of every interior frame scrollbar widget. The // platform-independent scrollbar them code isn't yet smart enough to get // this information when it paints. HashSet<Scrollbar*>::iterator end = gScrollbars->end(); for (HashSet<Scrollbar*>::iterator it = gScrollbars->begin(); it != end; ++it) { Scrollbar* scrollbar = (*it); // Top-level scrollbar i.e. scrollbars who have a parent ScrollView // with no parent are native, and thus do not need to be resized. if (!scrollbar->parent() || !scrollbar->parent()->parent()) return; int thickness = scrollbarThickness(scrollbar->controlSize()); if (scrollbar->orientation() == HorizontalScrollbar) scrollbar->setFrameRect(IntRect(0, scrollbar->parent()->height() - thickness, scrollbar->width(), thickness)); else scrollbar->setFrameRect(IntRect(scrollbar->parent()->width() - thickness, 0, thickness, scrollbar->height())); } }