X11Application: Ensure TIS operations are done on the main thread
Fixes: https://github.com/XQuartz/XQuartz/issues/205
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
(cherry picked from commit b1afcecc61
)
This commit is contained in:
parent
bd3564cf37
commit
663af2f17e
|
@ -1701,8 +1701,17 @@ handle_mouse:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (darwinSyncKeymap) {
|
if (darwinSyncKeymap) {
|
||||||
TISInputSourceRef key_layout =
|
__block TISInputSourceRef key_layout;
|
||||||
TISCopyCurrentKeyboardLayoutInputSource();
|
dispatch_block_t copyCurrentKeyboardLayoutInputSource = ^{
|
||||||
|
key_layout = TISCopyCurrentKeyboardLayoutInputSource();
|
||||||
|
};
|
||||||
|
/* This is an ugly ant-pattern, but it is more expedient to address the problem right now. */
|
||||||
|
if (pthread_main_np()) {
|
||||||
|
copyCurrentKeyboardLayoutInputSource();
|
||||||
|
} else {
|
||||||
|
dispatch_sync(dispatch_get_main_queue(), copyCurrentKeyboardLayoutInputSource);
|
||||||
|
}
|
||||||
|
|
||||||
TISInputSourceRef clear;
|
TISInputSourceRef clear;
|
||||||
if (CFEqual(key_layout, last_key_layout)) {
|
if (CFEqual(key_layout, last_key_layout)) {
|
||||||
CFRelease(key_layout);
|
CFRelease(key_layout);
|
||||||
|
|
Loading…
Reference in New Issue