Index: views/widget/widget_gtk.cc |
=================================================================== |
--- views/widget/widget_gtk.cc (revision 75181) |
+++ views/widget/widget_gtk.cc (working copy) |
@@ -19,6 +19,7 @@ |
#include "ui/base/dragdrop/os_exchange_data.h" |
#include "ui/base/dragdrop/os_exchange_data_provider_gtk.h" |
#include "ui/gfx/path.h" |
+#include "views/focus/view_storage.h" |
#include "views/widget/default_theme_provider.h" |
#include "views/widget/drop_target_gtk.h" |
#include "views/widget/gtk_views_fixed.h" |
@@ -251,7 +252,8 @@ |
delegate_(NULL), |
always_on_top_(false), |
is_double_buffered_(false), |
- should_handle_menu_key_release_(false) { |
+ should_handle_menu_key_release_(false), |
+ dragged_view_(NULL) { |
static bool installed_message_loop_observer = false; |
if (!installed_message_loop_observer) { |
installed_message_loop_observer = true; |
@@ -840,6 +842,16 @@ |
View *child) { |
if (drop_target_.get()) |
drop_target_->ResetTargetViewIfEquals(child); |
+ |
+ if (!is_add) { |
+ if (child == dragged_view_) |
+ dragged_view_ = NULL; |
+ |
+ FocusManager* focus_manager = GetFocusManager(); |
+ if (focus_manager) |
+ focus_manager->ViewRemoved(parent, child); |
+ ViewStorage::GetInstance()->ViewRemoved(parent, child); |
+ } |
} |
bool WidgetGtk::ContainsNativeView(gfx::NativeView native_view) { |
@@ -848,6 +860,25 @@ |
return false; |
} |
+void WidgetGtk::StartDragForViewFromMouseEvent( |
+ View* view, |
+ const OSExchangeData& data, |
+ int operation) { |
+ // NOTE: view may be null. |
+ dragged_view_ = view; |
+ DoDrag(data, operation); |
+ // If the view is removed during the drag operation, drag_view_ is set to |
sky
2011/02/17 00:37:46
drag_view_ -> dragged_view_
|
+ // NULL. |
+ if (view && dragged_view_ == view) { |
+ dragged_view_ = NULL; |
+ view->OnDragDone(); |
+ } |
+} |
+ |
+View* WidgetGtk::GetDraggedView() { |
+ return dragged_view_; |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// WidgetGtk, FocusTraversable implementation: |