* Electron version: 1.4.4
* Operating system: Ubuntu 16.04.1 (64bit Lubuntu)

I wrote a code to call `BrowserWindow.destroy()` in `dialog.showMessageBox()`'s callback.
https://github.com/yhatt/electron-playground/blob/terminate-without-quit-events/main.js

It's a simple app to open two windows. When you're about to close, it would expect to close just one window by accepting confirmation. It seems like to work correctly in Windows and macOS.

But in Linux, It will terminate app unexpectedly. In addition, the app events about `quit` will not fire. (includes `before-quit` and `will-quit`) 

This issue would be brought only when passing `browserWindow` as first argument of `dialog.showMessageBox()` (Effects by #6160's change?).

Currently It seems that we can avoid by wrapping with `setTimeout(func, 0)` (e.g. https://github.com/yhatt/marp/pull/112). However I think this approach is not a better way.

atom/browser/ui/message_box_gtk.cc
std::string lower = base::ToLowerASCII(text);
    if (lower == "cancel")
      return GTK_STOCK_CANCEL;
    else if (lower == "no")
      return GTK_STOCK_NO;
    else if (lower == "ok")
      return GTK_STOCK_OK;
    else if (lower == "yes")
      return GTK_STOCK_YES;
    else
      return text.c_str();
  }
  void Show() {
    gtk_widget_show_all(dialog_);
    
    
    int time = views::X11DesktopHandler::get()->wm_user_time_ms();
    gtk_window_present_with_time(GTK_WINDOW(dialog_), time);
  }
  int RunSynchronous() {
    Show();
    int response = gtk_dialog_run(GTK_DIALOG(dialog_));
    if (response < 0)
      return cancel_id_;
    else
      return response;
  }
  void RunAsynchronous(const MessageBoxCallback& callback) {