<!--
Thanks for opening an issue! A few things to keep in mind:

- The issue tracker is only for bugs and feature requests.
- Before reporting a bug, please try reproducing your issue against
  the latest version of Electron.
- If you need general advice, join our Slack: http://atom-slack.herokuapp.com
-->

* Electron version: 1.4.12
* Operating system: Windows 7

### Expected behavior

When a modal window is shown in a lazy manner, allow a manual (by code) disabling of parent window.

Suggestions:
- add option like `{..., disableParentImmediately: true, ...}`
- provide an API interface to the function [NativeWindowViews::SetEnabled(bool enable)](https://github.com/electron/electron/blob/master/atom/browser/native_window_views.cc#L987)

### Actual behavior

Actually is the parent window disabled only at the very moment of showing the modal window. The time between `new BrowserWindow(...)` and Event: 'ready-to-show' takes quite long time (cca 500ms) during which an user can take an action.

I created a topic on the atom discussion:
https://discuss.atom.io/t/modal-window-with-postponed-show-allows-interaction-with-a-parent-window/38094

In the end I had looked into the framework source code and I found that enabling/disabling of the window is a private feature of the atom in [NativeWindowViews::SetEnabled(bool enable)](https://github.com/electron/electron/blob/master/atom/browser/native_window_views.cc#L987) implementation, particularly in NativeWindowViews::Show(), NativeWindowViews::Hide(), NativeWindowViews::DeleteDelegate().

### How to reproduce

Create a window modal window, rendered from url and ensure that it is showed in a lazy manner and it takes at least a few ms. Maybe use some delay during the Event: 'ready-to-show' to ensure that. User will be able to click the parent.

Example of modal window lazy opening:
```
function openWarningWindow(parent: string) {
    let winWarn = new BrowserWindow({ width: 400, height: 160, modal: true, parent: global[parent], title: "Warning", show: false, maximizable: false, minimizable: false, frame: false, resizable: false, thickFrame: true });
    winWarn.setMenu(null);
    winWarn.loadURL(`${urlPrefix}/renderer.process.html?warning-window.view`);
    winWarn.once("ready-to-show", () => {
        winWarn.show();
    });
}
```

Thank you guys.
atom/browser/api/atom_api_window.h
void OnWindowUnmaximize() override;
  void OnWindowMinimize() override;
  void OnWindowRestore() override;
  void OnWindowResize() override;
  void OnWindowMove() override;
  void OnWindowMoved() override;
  void OnWindowScrollTouchBegin() override;
  void OnWindowScrollTouchEnd() override;
  void OnWindowScrollTouchEdge() override;
  void OnWindowSwipe(const std::string& direction) override;
  void OnWindowSheetBegin() override;
  void OnWindowSheetEnd() override;
  void OnWindowEnterFullScreen() override;
  void OnWindowLeaveFullScreen() override;
  void OnWindowEnterHtmlFullScreen() override;
  void OnWindowLeaveHtmlFullScreen() override;
  void OnRendererUnresponsive() override;
  void OnRendererResponsive() override;
  void OnExecuteWindowsCommand(const std::string& command_name) override;
  void OnTouchBarItemResult(const std::string& item_id,
                            const base::DictionaryValue& details) override;
  void OnNewWindowForTab() override;
  #if defined(OS_WIN)
  void OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) override;
  #endif
 private:
  void Init(v8::Isolate* isolate,
            v8::Local<v8::Object> wrapper,
            const mate::Dictionary& options,
            mate::Handle<class WebContents> web_contents);