ブースト C++ によって作成されたスレッドから NSOpenPanel を呼び出しています。
パネルが不規則に動作し、マウスにうまく反応しません。つまり、最上位のコンボ ボックスをクリックすると反応が改善されるのに、オブジェクトをクリックしても何も起こらないことがあります。
独自のループを実行する必要がある runModalForDirectory を実行しています。
メインスレッドでパネルを表示するために performSelectorOnMainThread を実行する別の objc クラスも作成しましたが、それでも動作は同じです。
[ps performSelectorOnMainThread:@selector(showOpenPanel) withObject:nil
waitUntilDone:YES
modes:[NSArray arrayWithObject:NSRunLoopCommonModes]];
また、waitUntilDone:NO を試してみましたが、どちらも役に立たない CFRunLoopRunInMode を実行しています。
- (bool) showOpenPanel
{
NSOpenPanel *op = [NSOpenPanel openPanel];
[op setAllowsMultipleSelection:YES];
[op setTitle:@"Choose File"];
[op setMessage:@"Choose file for Importing."];
[op setFloatingPanel:true];
bool result =[op runModalForDirectory:NSHomeDirectory() file:nil types:self.fileTypes];
if (result == NSOKButton) {
[self setSelectedFiles:[op filenames]];
[self setLastShowResult:true];
}
else {
[self setLastShowResult:false];
}
[self setPanelIsDone:true];
return self.lastShowResult;
}