summaryrefslogtreecommitdiffstats
path: root/views/widget/widget.cc
diff options
context:
space:
mode:
Diffstat (limited to 'views/widget/widget.cc')
-rw-r--r--views/widget/widget.cc10
1 files changed, 9 insertions, 1 deletions
diff --git a/views/widget/widget.cc b/views/widget/widget.cc
index 45423c6..12956ee 100644
--- a/views/widget/widget.cc
+++ b/views/widget/widget.cc
@@ -153,10 +153,13 @@ Widget::Widget()
saved_maximized_state_(false),
minimum_size_(100, 100),
focus_on_creation_(true),
- is_top_level_(false) {
+ is_top_level_(false),
+ destroy_state_(DESTROY_STATE_NONE) {
}
Widget::~Widget() {
+ destroy_state_ = DESTROY_STATE_DELETED;
+
while (!event_stack_.empty()) {
event_stack_.top()->reset();
event_stack_.pop();
@@ -862,12 +865,17 @@ void Widget::OnNativeWidgetCreated() {
void Widget::OnNativeWidgetDestroying() {
FOR_EACH_OBSERVER(Observer, observers_, OnWidgetClosing(this));
+ if (destroy_state_ == DESTROY_STATE_NONE)
+ destroy_state_ = DESTROY_STATE_IN_DESTROYING;
if (non_client_view_)
non_client_view_->WindowClosing();
widget_delegate_->WindowClosing();
}
void Widget::OnNativeWidgetDestroyed() {
+ if (destroy_state_ == DESTROY_STATE_IN_DESTROYING ||
+ destroy_state_ == DESTROY_STATE_NONE)
+ destroy_state_ = DESTROY_STATE_DESTROYED;
widget_delegate_->DeleteDelegate();
widget_delegate_ = NULL;
}