Index: ui/views/widget/root_view.cc |
diff --git a/ui/views/widget/root_view.cc b/ui/views/widget/root_view.cc |
index 1092f2dbd6b95e285e08be18136387146af17342..0d3d0d33dae3d94d3169ee8acbc673aaafa1a378 100644 |
--- a/ui/views/widget/root_view.cc |
+++ b/ui/views/widget/root_view.cc |
@@ -18,6 +18,7 @@ |
#include "ui/views/layout/fill_layout.h" |
#include "ui/views/widget/widget.h" |
#include "ui/views/widget/widget_delegate.h" |
+#include "ui/views/widget/widget_deletion_observer.h" |
namespace views { |
namespace internal { |
@@ -433,7 +434,12 @@ bool RootView::OnMousePressed(const ui::MouseEvent& event) { |
mouse_pressed_event.set_flags(event.flags() & ~ui::EF_IS_DOUBLE_CLICK); |
drag_info_.Reset(); |
- DispatchEventToTarget(mouse_pressed_handler_, &mouse_pressed_event); |
+ { |
+ WidgetDeletionObserver widget_deletion_observer(widget_); |
+ DispatchEventToTarget(mouse_pressed_handler_, &mouse_pressed_event); |
+ if (!widget_deletion_observer.IsWidgetAlive()) |
+ return mouse_pressed_event.handled(); |
+ } |
// The view could have removed itself from the tree when handling |
// OnMousePressed(). In this case, the removal notification will have |