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