I have a command line application running in a terminal and I want to be able use AppKit file requestor. In the C code I initialise the AppKit using:
[NSApplication sharedApplication];
[NSApp setActivationPolicy:NSApplicationActivationPolicyAccessory]; // no additional window in the Dock
[NSApp setDelegate: my_app_delegate];
To open a dialog I then call from the C side such a function:
void request_file(void) {
NSOpenPanel* openPanel = [NSOpenPanel openPanel];
openPanel.canChooseFiles = YES;
[NSApp activateIgnoringOtherApps:YES]; // to activate the dialog
[openPanel makeKeyAndOrderFront:nil];
[openPanel beginWithCompletionHandler:^(NSInteger result) {
if (result==NSModalResponseOK) {
// do something with URLs
}
[NSApp stopModal];
}];
[openPanel runModal];
}
It works, but after closing the requestor, I must manually click with the mouse back on the terminal window to continue typing there.
Is there some way how to activate the terminal window automatically after stopping the modal loop?
It looks that I can use NSRunningApplication
like:
void request_file(void) {
// store currently active application so it can be reactivated later
NSRunningApplication* wasRunningApp = [[NSWorkspace sharedWorkspace] frontmostApplication];
NSOpenPanel* openPanel = [NSOpenPanel openPanel];
openPanel.canChooseFiles = YES;
[NSApp activateIgnoringOtherApps:YES]; // to activate the dialog
[openPanel makeKeyAndOrderFront:nil];
[openPanel beginWithCompletionHandler:^(NSInteger result) {
if (result==NSModalResponseOK) {
// do something with URLs
}
[NSApp stopModal];
// try to reactivate the previous application
[wasRunningApp activateWithOptions:NSApplicationActivateIgnoringOtherApps];
}];
[openPanel runModal];
}