**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
#endif  
#if defined(OS_MACOSX) || defined(OS_LINUX)
  void ShowAboutPanel();
  void SetAboutPanelOptions(const base::DictionaryValue& options);
#endif
#if defined(OS_WIN)
  struct UserTask {
    base::FilePath program;
    base::string16 arguments;
    base::string16 title;
    base::string16 description;
    base::FilePath icon_path;
    int icon_index;
    UserTask();
    UserTask(const UserTask&);
    ~UserTask();
  };
  
  bool SetUserTasks(const std::vector<UserTask>& tasks);
  
  
  
  PCWSTR GetAppUserModelID();
#endif  
#if defined(OS_LINUX)
  
  bool IsUnityRunning();
#endif  
  
  bool OpenFile(const std::string& file_path);