use crate::platform::PermissionStatus;
use core_foundation::base::TCFType;
use core_foundation::boolean::CFBoolean;
use core_foundation::dictionary::CFMutableDictionary;
use core_foundation::string::CFString;
use std::ffi::c_void;
#[link(name = "ApplicationServices", kind = "framework")]
unsafe extern "C" {
fn AXIsProcessTrusted() -> bool;
fn AXIsProcessTrustedWithOptions(options: *const c_void) -> bool;
}
pub fn accessibility_status() -> PermissionStatus {
unsafe {
if AXIsProcessTrusted() {
PermissionStatus::Granted
} else {
PermissionStatus::Denied
}
}
}
pub fn request_accessibility_permission() {
unsafe {
let key = CFString::new("AXTrustedCheckOptionPrompt");
let value = CFBoolean::true_value();
let mut options = CFMutableDictionary::new();
options.set(
key.as_CFTypeRef() as *const c_void,
value.as_CFTypeRef() as *const c_void,
);
AXIsProcessTrustedWithOptions(options.as_concrete_TypeRef() as *const c_void);
}
}