diff --git a/README.md b/README.md index 4041f936..75c45210 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,15 @@ Ruby | [libui-ruby](https://github.com/jamescook/libui-ruby) Rust | [libui-rs](https://github.com/pcwalton/libui-rs) Swift | [libui-swift](https://github.com/sclukey/libui-swift) +## Frequently Asked Questions + +### Why does my program start in the background on OS X if I run from the command line? +OS X normally does not start program executables directly; instead, it uses [Launch Services](https://developer.apple.com/reference/coreservices/1658613-launch_services?language=objc) to coordinate the launching of the program between the various parts of the system and the loading of info from an .app bundle. One of these coordination tasks is responsible for bringing a newly launched app into the foreground. This is called "activation". + +When you run a binary directly from the Terminal, however, you are running it directly, not through Launch Services. Therefore, the program starts in the background, because no one told it to activate! Now, it turns out [there is an API](https://developer.apple.com/reference/appkit/nsapplication/1428468-activateignoringotherapps) that we can use to force our app to be activated. But if we use it, then we'd be trampling over Launch Services, which already knows whether it should activate or not. Therefore, libui does not step over Launch Services, at the cost of requiring an extra user step if running directly from the command line. + +See also [this](https://github.com/andlabs/libui/pull/20#issuecomment-211381971) and [this](http://stackoverflow.com/questions/25318524/what-exactly-should-i-pass-to-nsapp-activateignoringotherapps-to-get-my-appl). + ## Screenshots From examples/controlgallery: