#include "ui/views/accessibility/view_accessibility_utils.h"
#include <set>
#include "base/ranges/algorithm.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"
namespace views {
Widget* ViewAccessibilityUtils::GetFocusedChildWidgetForAccessibility(
const View* view) {
const FocusManager* focus_manager = view->GetFocusManager();
if (!focus_manager)
return nullptr;
const View* focused_view = view->GetFocusManager()->GetFocusedView();
if (!focused_view)
return nullptr;
std::set<Widget*> child_widgets;
Widget::GetAllOwnedWidgets(view->GetWidget()->GetNativeView(),
&child_widgets);
const auto i =
base::ranges::find_if(child_widgets, [focused_view](auto* child_widget) {
return IsFocusedChildWidget(child_widget, focused_view);
});
return (i == child_widgets.cend()) ? nullptr : *i;
}
bool ViewAccessibilityUtils::IsFocusedChildWidget(Widget* widget,
const View* focused_view) {
return widget->IsVisible() &&
widget->GetContentsView()->Contains(focused_view);
}
}