Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1548)

Unified Diff: ash/wm/dock/docked_window_resizer.cc

Issue 1800793003: Check if the resizer has been deleted during drag start. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/wm/dock/docked_window_resizer.cc
diff --git a/ash/wm/dock/docked_window_resizer.cc b/ash/wm/dock/docked_window_resizer.cc
index 9e4eb2d0b66ab85a75520662cdc12943c9041c6f..624dc72822d419af0847eb8122a95754ca4c69e9 100644
--- a/ash/wm/dock/docked_window_resizer.cc
+++ b/ash/wm/dock/docked_window_resizer.cc
@@ -64,17 +64,21 @@ DockedWindowResizer::Create(WindowResizer* next_window_resizer,
void DockedWindowResizer::Drag(const gfx::Point& location, int event_flags) {
last_location_ = location;
::wm::ConvertPointToScreen(GetTarget()->parent(), &last_location_);
+ base::WeakPtr<DockedWindowResizer> resizer(weak_ptr_factory_.GetWeakPtr());
+
if (!did_move_or_resize_) {
did_move_or_resize_ = true;
- StartedDragging();
+ StartedDragging(resizer);
}
+ if (!resizer)
+ return;
+
gfx::Point offset;
gfx::Rect bounds(CalculateBoundsForDrag(location));
MaybeSnapToEdge(bounds, &offset);
gfx::Point modified_location(location);
modified_location.Offset(offset.x(), offset.y());
- base::WeakPtr<DockedWindowResizer> resizer(weak_ptr_factory_.GetWeakPtr());
next_window_resizer_->Drag(modified_location, event_flags);
if (!resizer)
return;
@@ -181,7 +185,8 @@ void DockedWindowResizer::MaybeSnapToEdge(const gfx::Rect& bounds,
}
}
-void DockedWindowResizer::StartedDragging() {
+void DockedWindowResizer::StartedDragging(
+ base::WeakPtr<DockedWindowResizer>& resizer) {
// During resizing the window width is preserved by DockedwindowLayoutManager.
if (is_docked_ &&
(details().bounds_change & WindowResizer::kBoundsChange_Resizes)) {
@@ -192,6 +197,8 @@ void DockedWindowResizer::StartedDragging() {
// At this point we are not yet animating the window as it may not be
// inside the docked area.
dock_layout_->StartDragging(GetTarget());
+ if (!resizer)
+ return;
// Reparent workspace windows during the drag to elevate them above workspace.
// Other windows for which the DockedWindowResizer is instantiated include
// panels and windows that are already docked. Those do not need reparenting.
@@ -205,6 +212,8 @@ void DockedWindowResizer::StartedDragging() {
wm::ReparentChildWithTransientChildren(GetTarget(),
GetTarget()->parent(),
docked_container);
+ if (!resizer)
+ return;
}
if (is_docked_)
dock_layout_->DockDraggedWindow(GetTarget());

Powered by Google App Engine
This is Rietveld 408576698