#include "ui/events/test/keyboard_layout.h"
#include "base/check_op.h"
#include "base/strings/sys_string_conversions.h"
namespace ui {
PlatformKeyboardLayout GetPlatformKeyboardLayout(KeyboardLayout layout) {
DCHECK_EQ(KEYBOARD_LAYOUT_ENGLISH_US, layout);
const char kUsInputSourceId[] = "com.apple.keylayout.US";
base::apple::ScopedCFTypeRef<CFMutableDictionaryRef> input_source_list_filter(
CFDictionaryCreateMutable(kCFAllocatorDefault, 1,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks));
base::apple::ScopedCFTypeRef<CFStringRef> input_source_id_ref =
base::SysUTF8ToCFStringRef(kUsInputSourceId);
CFDictionaryAddValue(input_source_list_filter.get(),
kTISPropertyInputSourceID, input_source_id_ref.get());
base::apple::ScopedCFTypeRef<CFArrayRef> input_source_list(
TISCreateInputSourceList(input_source_list_filter.get(), true));
if (CFArrayGetCount(input_source_list.get()) != 1) {
return PlatformKeyboardLayout();
}
return base::apple::ScopedCFTypeRef<TISInputSourceRef>(
(TISInputSourceRef)CFArrayGetValueAtIndex(input_source_list.get(), 0),
base::scoped_policy::RETAIN);
}
PlatformKeyboardLayout ScopedKeyboardLayout::GetActiveLayout() {
return PlatformKeyboardLayout(TISCopyCurrentKeyboardInputSource());
}
void ScopedKeyboardLayout::ActivateLayout(PlatformKeyboardLayout layout) {
DCHECK(layout);
OSStatus result = TISEnableInputSource(layout.get());
DCHECK_EQ(noErr, result);
result = TISSelectInputSource(layout.get());
DCHECK_EQ(noErr, result);
}
}