Merge pull request #8252 from electron/dialog-window-crash

Don't crash when window is closed by dialog callback
This commit is contained in:
Kevin Sawicki 2016-12-22 09:34:07 -08:00 коммит произвёл GitHub
Родитель 371b347ee9 8c5f26373b
Коммит 57d682a050
1 изменённых файлов: 11 добавлений и 2 удалений

Просмотреть файл

@ -5,6 +5,7 @@
#include "atom/browser/ui/message_box.h"
#include "atom/browser/browser.h"
#include "atom/browser/native_window_observer.h"
#include "atom/browser/native_window_views.h"
#include "atom/browser/unresponsive_suppressor.h"
#include "base/callback.h"
@ -25,7 +26,7 @@ namespace atom {
namespace {
class GtkMessageBox {
class GtkMessageBox : public NativeWindowObserver {
public:
GtkMessageBox(NativeWindow* parent_window,
MessageBoxType type,
@ -77,6 +78,7 @@ class GtkMessageBox {
// Parent window.
if (parent_) {
parent_->AddObserver(this);
parent_->SetEnabled(false);
libgtk2ui::SetGtkTransientForAura(dialog_, parent_->GetNativeWindow());
gtk_window_set_modal(GTK_WINDOW(dialog_), TRUE);
@ -85,9 +87,11 @@ class GtkMessageBox {
~GtkMessageBox() {
gtk_widget_destroy(dialog_);
if (parent_)
if (parent_) {
parent_->RemoveObserver(this);
parent_->SetEnabled(true);
}
}
GtkMessageType GetMessageType(MessageBoxType type) {
switch (type) {
@ -144,6 +148,11 @@ class GtkMessageBox {
Show();
}
void OnWindowClosed() override {
parent_->RemoveObserver(this);
parent_ = nullptr;
}
CHROMEGTK_CALLBACK_1(GtkMessageBox, void, OnResponseDialog, int);
private: