**Is your feature request related to a problem? Please describe.**
The following cause a bad effect with the window appearing/exploding (glitch?) from top-left :
```
//user clicks on tray-icon => context-menu => show and I'm supposed to pop-up the app window
app.dock.show();
window.show();
```
This happens because app.dock.show() is not synchronous thus genie effect from the dockbar can't take place because the dock icon is not yet created when we call window.show().

**Describe the solution you'd like**
app.dock.show() should return a promise fullfilled when the icon is in the dock.

**Describe alternatives you've considered**
Right now I'm doing this and it works:
```
app.dock.show();
app.dock.setIcon(appIcon);
setTimeout(window.show, 500);
```

Another is to provide a way to disable system animation (OSX) for window.show() / window.hide().

**Additional context**
Of course I have no idea about internal API availability/functionality. If not possible we can just close this issue and other people will have a reference about it! :)
atom/browser/browser.h
void Hide();
  
  void Show();
  
  void SetUserActivity(const std::string& type,
                       const base::DictionaryValue& user_info,
                       mate::Arguments* args);
  
  std::string GetCurrentActivityType();
  
  void InvalidateCurrentActivity();
  
  void UpdateCurrentActivity(const std::string& type,
                             const base::DictionaryValue& user_info);
  
  bool WillContinueUserActivity(const std::string& type);
  
  void DidFailToContinueUserActivity(const std::string& type,
                                     const std::string& error);
  
  bool ContinueUserActivity(const std::string& type,
                            const base::DictionaryValue& user_info);
  
  void UserActivityWasContinued(const std::string& type,
                                const base::DictionaryValue& user_info);
  
  bool UpdateUserActivityState(const std::string& type,
                               const base::DictionaryValue& user_info);
  
  enum BounceType {