**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
std::string GetExecutableFileProductName() const;
  
  void NotifyAndShutdown();
  
  bool HandleBeforeQuit();
  bool is_quiting_ = false;
 private:
  
  void OnWindowCloseCancelled(NativeWindow* window) override;
  void OnWindowAllClosed() override;
  
  base::ObserverList<BrowserObserver> observers_;
  
  bool is_exiting_ = false;
  
  bool is_ready_ = false;
  
  bool is_shutdown_ = false;
  
  base::OnceClosure quit_main_message_loop_;
  int badge_count_ = 0;
  util::Promise* ready_promise_ = nullptr;
#if defined(OS_LINUX) || defined(OS_MACOSX)
  base::DictionaryValue about_panel_options_;
#endif
  DISALLOW_COPY_AND_ASSIGN(Browser);
};
}  
#endif