Index: chrome/browser/ui/panels/detached_panel_strip.cc |
diff --git a/chrome/browser/ui/panels/detached_panel_strip.cc b/chrome/browser/ui/panels/detached_panel_strip.cc |
index 44cc362dce49c81c1d207228d03b4b412e146830..fc34b6d5db7f68cd2879bb88d95cd024160b925b 100644 |
--- a/chrome/browser/ui/panels/detached_panel_strip.cc |
+++ b/chrome/browser/ui/panels/detached_panel_strip.cc |
@@ -10,7 +10,8 @@ |
DetachedPanelStrip::DetachedPanelStrip(PanelManager* panel_manager) |
: PanelStrip(PanelStrip::DETACHED), |
- panel_manager_(panel_manager) { |
+ panel_manager_(panel_manager), |
+ dragging_panel_(NULL) { |
} |
DetachedPanelStrip::~DetachedPanelStrip() { |
@@ -79,3 +80,34 @@ void DetachedPanelStrip::RestorePanel(Panel* panel) { |
NOTIMPLEMENTED(); |
} |
+bool DetachedPanelStrip::CanDragPanel(Panel* panel) const { |
+ // All detached panels are draggable. |
+ return true; |
+} |
+ |
+void DetachedPanelStrip::StartDraggingPanel(Panel* panel) { |
+ DCHECK(!dragging_panel_); |
+ |
+ dragging_panel_ = panel; |
+ dragging_panel_original_position_ = panel->GetBounds().origin(); |
+} |
+ |
+void DetachedPanelStrip::DragPanel(int delta_x, int delta_y) { |
+ DCHECK(dragging_panel_); |
+ |
+ gfx::Rect new_bounds(dragging_panel_->GetBounds()); |
+ new_bounds.Offset(delta_x, delta_y); |
+ dragging_panel_->SetPanelBounds(new_bounds); |
+} |
+ |
+void DetachedPanelStrip::EndDraggingPanel(bool cancelled) { |
+ DCHECK(dragging_panel_); |
+ |
+ if (cancelled) { |
+ gfx::Rect new_bounds(dragging_panel_->GetBounds()); |
+ new_bounds.set_origin(dragging_panel_original_position_); |
+ dragging_panel_->SetPanelBounds(new_bounds); |
+ } |
Andrei
2012/02/17 00:08:18
It looks like cancelling the drag will happen very
jianli
2012/02/17 00:15:13
Yes. Inter-strip drags are not included in this pa
|
+ |
+ dragging_panel_ = NULL; |
+} |