blob: 21ce37d452b069e44c37ee3860780435365b20f2 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/base/cocoa/accessibility_focus_overrider.h"
#import <AppKit/AppKit.h>
#import <Foundation/Foundation.h>
#import <objc/runtime.h>
namespace ui {
namespace {
AccessibilityFocusOverrider::Client* g_overridden_focused_element = nil;
} // namespace
AccessibilityFocusOverrider::AccessibilityFocusOverrider(Client* client)
: client_(client) {}
AccessibilityFocusOverrider::~AccessibilityFocusOverrider() {
if (g_overridden_focused_element == client_)
g_overridden_focused_element = nullptr;
}
void AccessibilityFocusOverrider::SetAppIsRemote(bool app_is_remote) {
app_is_remote_ = app_is_remote;
UpdateOverriddenKeyElement();
}
void AccessibilityFocusOverrider::SetWindowIsKey(bool window_is_key) {
window_is_key_ = window_is_key;
UpdateOverriddenKeyElement();
}
void AccessibilityFocusOverrider::SetViewIsFirstResponder(
bool view_is_first_responder) {
view_is_first_responder_ = view_is_first_responder;
UpdateOverriddenKeyElement();
}
void AccessibilityFocusOverrider::UpdateOverriddenKeyElement() {
if (app_is_remote_ && window_is_key_ && view_is_first_responder_) {
g_overridden_focused_element = client_;
} else if (g_overridden_focused_element == client_) {
g_overridden_focused_element = nullptr;
}
}
// static
id AccessibilityFocusOverrider::GetFocusedUIElement() {
if (g_overridden_focused_element)
return g_overridden_focused_element->GetAccessibilityFocusedUIElement();
return nil;
}
} // namespace ui