IDEA-295159: obtain appmenu pointer on AppKit-thread

GitOrigin-RevId: a4ddefe47da198159fb64a2af2962083327e3344
This commit is contained in:
Artem Bochkarev
2022-06-11 11:53:48 +04:00
committed by intellij-monorepo-bot
parent 62cb3f7bb6
commit 11c77aa610
2 changed files with 15 additions and 5 deletions

Binary file not shown.

View File

@@ -410,11 +410,21 @@ Java_com_intellij_ui_mac_screenmenu_Menu_nativeFindItemByTitle(JNIEnv *env, jobj
*/
JNIEXPORT jlong JNICALL
Java_com_intellij_ui_mac_screenmenu_Menu_nativeGetAppMenu(JNIEnv *env, jclass peerClass) {
NSMenu * mainMenu = [NSApplication sharedApplication].mainMenu;
id appMenu = [mainMenu numberOfItems] > 0 ? [mainMenu itemAtIndex:0] : nil;
if (appMenu != nil) {
appMenu = [appMenu submenu];
[appMenu retain];
JNI_COCOA_ENTER();
__block id appMenu = nil;
dispatch_block_t block = ^{
NSMenu * mainMenu = [NSApplication sharedApplication].mainMenu;
appMenu = [mainMenu numberOfItems] > 0 ? [mainMenu itemAtIndex:0] : nil;
if (appMenu != nil) {
appMenu = [appMenu submenu];
[appMenu retain];
}
};
if ([NSThread isMainThread]) {
block();
} else {
dispatch_async_and_wait(dispatch_get_main_queue(), block);
}
return (jlong)appMenu;
JNI_COCOA_EXIT();
}