Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / ash / wm / workspace / workspace_window_resizer.cc
index 395c2ad..3e551f3 100644 (file)
@@ -110,6 +110,9 @@ namespace {
 // when resizing a window using touchscreen.
 const int kScreenEdgeInsetForTouchDrag = 32;
 
+// Current instance for use by the WorkspaceWindowResizerTest.
+WorkspaceWindowResizer* instance = NULL;
+
 // Returns true if the window should stick to the edge.
 bool ShouldStickToEdge(int distance_from_edge, int sticky_size) {
   return distance_from_edge < sticky_size &&
@@ -256,8 +259,9 @@ const int WorkspaceWindowResizer::kMinOnscreenHeight = 32;
 // static
 const int WorkspaceWindowResizer::kScreenEdgeInset = 8;
 
-// static
-WorkspaceWindowResizer* WorkspaceWindowResizer::instance_ = NULL;
+WorkspaceWindowResizer* WorkspaceWindowResizer::GetInstanceForTest() {
+  return instance;
+}
 
 // Represents the width or height of a window with constraints on its minimum
 // and maximum size. 0 represents a lack of a constraint.
@@ -333,8 +337,8 @@ WorkspaceWindowResizer::~WorkspaceWindowResizer() {
     Shell* shell = Shell::GetInstance();
     shell->cursor_manager()->UnlockCursor();
   }
-  if (instance_ == this)
-    instance_ = NULL;
+  if (instance == this)
+    instance = NULL;
 }
 
 // static
@@ -443,23 +447,31 @@ void WorkspaceWindowResizer::CompleteDrag() {
     }
   }
 
-  if (!snapped && window_state()->IsSnapped()) {
-    // Keep the window snapped if the user resizes the window such that the
-    // window has valid bounds for a snapped window. Always unsnap the window
-    // if the user dragged the window via the caption area because doing this is
-    // slightly less confusing.
-    if (details().window_component == HTCAPTION ||
-        !AreBoundsValidSnappedBounds(window_state()->GetStateType(),
-                                     GetTarget()->bounds())) {
-      // Set the window to WINDOW_STATE_TYPE_NORMAL but keep the
-      // window at the bounds that the user has moved/resized the
-      // window to. ClearRestoreBounds() is used instead of
-      // SaveCurrentBoundsForRestore() because most of the restore
-      // logic is skipped because we are still in the middle of a
-      // drag.  TODO(pkotwicz): Fix this and use
-      // SaveCurrentBoundsForRestore().
+  if (!snapped) {
+    if (window_state()->IsSnapped()) {
+      // Keep the window snapped if the user resizes the window such that the
+      // window has valid bounds for a snapped window. Always unsnap the window
+      // if the user dragged the window via the caption area because doing this
+      // is slightly less confusing.
+      if (details().window_component == HTCAPTION ||
+          !AreBoundsValidSnappedBounds(window_state()->GetStateType(),
+                                       GetTarget()->bounds())) {
+        // Set the window to WINDOW_STATE_TYPE_NORMAL but keep the
+        // window at the bounds that the user has moved/resized the
+        // window to. ClearRestoreBounds() is used instead of
+        // SaveCurrentBoundsForRestore() because most of the restore
+        // logic is skipped because we are still in the middle of a
+        // drag.  TODO(pkotwicz): Fix this and use
+        // SaveCurrentBoundsForRestore().
+        window_state()->ClearRestoreBounds();
+        window_state()->Restore();
+      }
+    } else if (!dock_layout_->is_dragged_window_docked()) {
+      // The window was not snapped and is not snapped. This is a user
+      // resize/drag and so the current bounds should be maintained, clearing
+      // any prior restore bounds. When the window is docked the restore bound
+      // must be kept so the docked state can be reverted properly.
       window_state()->ClearRestoreBounds();
-      window_state()->Restore();
     }
   }
 }
@@ -547,7 +559,7 @@ WorkspaceWindowResizer::WorkspaceWindowResizer(
     total_initial_size_ += initial_size;
     total_available += std::max(min_size, initial_size) - min_size;
   }
-  instance_ = this;
+  instance = this;
 }
 
 void WorkspaceWindowResizer::LayoutAttachedWindows(