| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/gtk/tab_contents_drag_source.h" | 5 #include "chrome/browser/gtk/tab_contents_drag_source.h" |
| 6 | 6 |
| 7 #include "app/gtk_dnd_util.h" | 7 #include "app/gtk_dnd_util.h" |
| 8 #include "base/mime_util.h" | 8 #include "base/mime_util.h" |
| 9 #include "chrome/browser/renderer_host/render_view_host_delegate.h" | 9 #include "chrome/browser/renderer_host/render_view_host_delegate.h" |
| 10 #include "chrome/browser/tab_contents/tab_contents.h" | 10 #include "chrome/browser/tab_contents/tab_contents.h" |
| 11 #include "chrome/browser/tab_contents/tab_contents_view.h" | 11 #include "chrome/browser/tab_contents/tab_contents_view.h" |
| 12 #include "chrome/common/gtk_util.h" | 12 #include "chrome/common/gtk_util.h" |
| 13 #include "webkit/glue/webdropdata.h" | 13 #include "webkit/glue/webdropdata.h" |
| 14 | 14 |
| 15 using WebKit::WebDragOperation; |
| 16 using WebKit::WebDragOperationNone; |
| 17 |
| 15 TabContentsDragSource::TabContentsDragSource( | 18 TabContentsDragSource::TabContentsDragSource( |
| 16 TabContentsView* tab_contents_view) | 19 TabContentsView* tab_contents_view) |
| 17 : tab_contents_view_(tab_contents_view), | 20 : tab_contents_view_(tab_contents_view), |
| 18 drag_failed_(false), | 21 drag_failed_(false), |
| 19 drag_widget_(NULL) { | 22 drag_widget_(NULL) { |
| 20 drag_widget_ = gtk_invisible_new(); | 23 drag_widget_ = gtk_invisible_new(); |
| 21 g_signal_connect(drag_widget_, "drag-failed", | 24 g_signal_connect(drag_widget_, "drag-failed", |
| 22 G_CALLBACK(OnDragFailedThunk), this); | 25 G_CALLBACK(OnDragFailedThunk), this); |
| 23 g_signal_connect(drag_widget_, "drag-end", G_CALLBACK(OnDragEndThunk), this); | 26 g_signal_connect(drag_widget_, "drag-end", G_CALLBACK(OnDragEndThunk), this); |
| 24 g_signal_connect(drag_widget_, "drag-data-get", | 27 g_signal_connect(drag_widget_, "drag-data-get", |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 } | 166 } |
| 164 } | 167 } |
| 165 | 168 |
| 166 gboolean TabContentsDragSource::OnDragFailed() { | 169 gboolean TabContentsDragSource::OnDragFailed() { |
| 167 drag_failed_ = true; | 170 drag_failed_ = true; |
| 168 | 171 |
| 169 gfx::Point root = gtk_util::ScreenPoint(GetContentNativeView()); | 172 gfx::Point root = gtk_util::ScreenPoint(GetContentNativeView()); |
| 170 gfx::Point client = gtk_util::ClientPoint(GetContentNativeView()); | 173 gfx::Point client = gtk_util::ClientPoint(GetContentNativeView()); |
| 171 | 174 |
| 172 if (tab_contents()->render_view_host()) { | 175 if (tab_contents()->render_view_host()) { |
| 173 tab_contents()->render_view_host()->DragSourceCancelledAt( | 176 tab_contents()->render_view_host()->DragSourceEndedAt( |
| 174 client.x(), client.y(), root.x(), root.y()); | 177 client.x(), client.y(), root.x(), root.y(), |
| 178 WebDragOperationNone); |
| 175 } | 179 } |
| 176 | 180 |
| 177 // Let the native failure animation run. | 181 // Let the native failure animation run. |
| 178 return FALSE; | 182 return FALSE; |
| 179 } | 183 } |
| 180 | 184 |
| 181 void TabContentsDragSource::OnDragEnd() { | 185 void TabContentsDragSource::OnDragEnd(WebDragOperation operation) { |
| 182 MessageLoopForUI::current()->RemoveObserver(this); | 186 MessageLoopForUI::current()->RemoveObserver(this); |
| 183 | 187 |
| 184 if (!drag_failed_) { | 188 if (!drag_failed_) { |
| 185 gfx::Point root = gtk_util::ScreenPoint(GetContentNativeView()); | 189 gfx::Point root = gtk_util::ScreenPoint(GetContentNativeView()); |
| 186 gfx::Point client = gtk_util::ClientPoint(GetContentNativeView()); | 190 gfx::Point client = gtk_util::ClientPoint(GetContentNativeView()); |
| 187 | 191 |
| 188 if (tab_contents()->render_view_host()) { | 192 if (tab_contents()->render_view_host()) { |
| 189 tab_contents()->render_view_host()->DragSourceEndedAt( | 193 tab_contents()->render_view_host()->DragSourceEndedAt( |
| 190 client.x(), client.y(), root.x(), root.y()); | 194 client.x(), client.y(), root.x(), root.y(), operation); |
| 191 } | 195 } |
| 192 } | 196 } |
| 193 | 197 |
| 194 if (tab_contents()->render_view_host()) | 198 if (tab_contents()->render_view_host()) |
| 195 tab_contents()->render_view_host()->DragSourceSystemDragEnded(); | 199 tab_contents()->render_view_host()->DragSourceSystemDragEnded(); |
| 196 | 200 |
| 197 drop_data_.reset(); | 201 drop_data_.reset(); |
| 198 } | 202 } |
| 199 | 203 |
| 200 gfx::NativeView TabContentsDragSource::GetContentNativeView() const { | 204 gfx::NativeView TabContentsDragSource::GetContentNativeView() const { |
| 201 return tab_contents_view_->GetContentNativeView(); | 205 return tab_contents_view_->GetContentNativeView(); |
| 202 } | 206 } |
| OLD | NEW |