Chromium Code Reviews| Index: views/widget/widget_impl.cc |
| =================================================================== |
| --- views/widget/widget_impl.cc (revision 75181) |
| +++ views/widget/widget_impl.cc (working copy) |
| @@ -7,6 +7,7 @@ |
| #include "base/compiler_specific.h" |
| #include "base/message_loop.h" |
| #include "views/focus/focus_manager.h" |
| +#include "views/focus/view_storage.h" |
| #include "views/view.h" |
| #include "views/widget/native_widget.h" |
| #include "views/widget/root_view.h" |
| @@ -53,7 +54,8 @@ |
| is_mouse_button_pressed_(false), |
| last_mouse_event_was_move_(false), |
| ALLOW_THIS_IN_INITIALIZER_LIST(close_widget_factory_(this)), |
| - delete_on_destroy_(true) { |
| + delete_on_destroy_(true), |
| + dragged_view_(NULL) { |
| } |
| WidgetImpl::~WidgetImpl() { |
| @@ -365,7 +367,12 @@ |
| } |
| void WidgetImpl::ViewHierarchyChanged(bool is_add, View* parent, View* child) { |
| - NOTIMPLEMENTED(); |
| + if (!is_add) { |
| + FocusManager* focus_manager = GetFocusManager(); |
| + if (focus_manager) |
| + focus_manager->ViewRemoved(parent, child); |
| + ViewStorage::GetInstance()->ViewRemoved(parent, child); |
|
sky
2011/02/17 00:37:46
Don't you need the:
if (child == dragged_view_)
|
| + } |
| } |
| bool WidgetImpl::ContainsNativeView(gfx::NativeView native_view) { |
| @@ -373,6 +380,26 @@ |
| return false; |
| } |
| +void WidgetImpl::StartDragForViewFromMouseEvent( |
| + View* view, |
| + const OSExchangeData& data, |
| + int operation) { |
| + // NOTE: view may be NULL. |
| + dragged_view_ = view; |
| + native_widget_->RunShellDrag(data, operation); |
| + |
| + // If the view is removed during the drag operation, drag_view_ is set to |
| + // NULL. |
| + if (view && dragged_view_ == view) { |
| + dragged_view_ = NULL; |
| + view->OnDragDone(); |
| + } |
| +} |
| + |
| +View* WidgetImpl::GetDraggedView() { |
| + return dragged_view_; |
| +} |
| + |
| //////////////////////////////////////////////////////////////////////////////// |
| // WidgetImpl, private: |