Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: chrome/browser/gtk/tab_contents_drag_source.cc

Issue 1037008: Retry r41799:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <string> 7 #include <string>
8 8
9 #include "app/gtk_dnd_util.h" 9 #include "app/gtk_dnd_util.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 gtk_widget_destroy(drag_widget_); 63 gtk_widget_destroy(drag_widget_);
64 g_object_unref(drag_widget_); 64 g_object_unref(drag_widget_);
65 drag_widget_ = NULL; 65 drag_widget_ = NULL;
66 } 66 }
67 67
68 TabContents* TabContentsDragSource::tab_contents() const { 68 TabContents* TabContentsDragSource::tab_contents() const {
69 return tab_contents_view_->tab_contents(); 69 return tab_contents_view_->tab_contents();
70 } 70 }
71 71
72 void TabContentsDragSource::StartDragging(const WebDropData& drop_data, 72 void TabContentsDragSource::StartDragging(const WebDropData& drop_data,
73 GdkEventButton* last_mouse_down) { 73 GdkEventButton* last_mouse_down,
74 const SkBitmap& image,
75 const gfx::Point& image_offset) {
74 int targets_mask = 0; 76 int targets_mask = 0;
75 77
76 if (!drop_data.plain_text.empty()) 78 if (!drop_data.plain_text.empty())
77 targets_mask |= gtk_dnd_util::TEXT_PLAIN; 79 targets_mask |= gtk_dnd_util::TEXT_PLAIN;
78 if (drop_data.url.is_valid()) { 80 if (drop_data.url.is_valid()) {
79 targets_mask |= gtk_dnd_util::TEXT_URI_LIST; 81 targets_mask |= gtk_dnd_util::TEXT_URI_LIST;
80 targets_mask |= gtk_dnd_util::CHROME_NAMED_URL; 82 targets_mask |= gtk_dnd_util::CHROME_NAMED_URL;
81 targets_mask |= gtk_dnd_util::NETSCAPE_URL; 83 targets_mask |= gtk_dnd_util::NETSCAPE_URL;
82 } 84 }
83 if (!drop_data.text_html.empty()) 85 if (!drop_data.text_html.empty())
84 targets_mask |= gtk_dnd_util::TEXT_HTML; 86 targets_mask |= gtk_dnd_util::TEXT_HTML;
85 if (!drop_data.file_contents.empty()) 87 if (!drop_data.file_contents.empty())
86 targets_mask |= gtk_dnd_util::CHROME_WEBDROP_FILE_CONTENTS; 88 targets_mask |= gtk_dnd_util::CHROME_WEBDROP_FILE_CONTENTS;
87 if (!drop_data.download_metadata.empty() && 89 if (!drop_data.download_metadata.empty() &&
88 drag_download_util::ParseDownloadMetadata(drop_data.download_metadata, 90 drag_download_util::ParseDownloadMetadata(drop_data.download_metadata,
89 &wide_download_mime_type_, 91 &wide_download_mime_type_,
90 &download_file_name_, 92 &download_file_name_,
91 &download_url_)) { 93 &download_url_)) {
92 targets_mask |= gtk_dnd_util::DIRECT_SAVE_FILE; 94 targets_mask |= gtk_dnd_util::DIRECT_SAVE_FILE;
93 } 95 }
94 96
95 if (targets_mask == 0) { 97 if (targets_mask == 0) {
96 NOTIMPLEMENTED(); 98 NOTIMPLEMENTED();
97 if (tab_contents()->render_view_host()) 99 if (tab_contents()->render_view_host())
98 tab_contents()->render_view_host()->DragSourceSystemDragEnded(); 100 tab_contents()->render_view_host()->DragSourceSystemDragEnded();
99 } 101 }
100 102
101 drop_data_.reset(new WebDropData(drop_data)); 103 drop_data_.reset(new WebDropData(drop_data));
104 drag_image_ = image;
105 image_offset_ = image_offset;
102 106
103 GtkTargetList* list = gtk_dnd_util::GetTargetListFromCodeMask(targets_mask); 107 GtkTargetList* list = gtk_dnd_util::GetTargetListFromCodeMask(targets_mask);
104 if (targets_mask & gtk_dnd_util::CHROME_WEBDROP_FILE_CONTENTS) { 108 if (targets_mask & gtk_dnd_util::CHROME_WEBDROP_FILE_CONTENTS) {
105 drag_file_mime_type_ = gdk_atom_intern( 109 drag_file_mime_type_ = gdk_atom_intern(
106 mime_util::GetDataMimeType(drop_data.file_contents).c_str(), FALSE); 110 mime_util::GetDataMimeType(drop_data.file_contents).c_str(), FALSE);
107 gtk_target_list_add(list, drag_file_mime_type_, 111 gtk_target_list_add(list, drag_file_mime_type_,
108 0, gtk_dnd_util::CHROME_WEBDROP_FILE_CONTENTS); 112 0, gtk_dnd_util::CHROME_WEBDROP_FILE_CONTENTS);
109 } 113 }
110 114
111 drag_failed_ = false; 115 drag_failed_ = false;
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 gtk_dnd_util::GetAtomForTarget( 301 gtk_dnd_util::GetAtomForTarget(
298 gtk_dnd_util::DIRECT_SAVE_FILE), 302 gtk_dnd_util::DIRECT_SAVE_FILE),
299 gtk_dnd_util::GetAtomForTarget( 303 gtk_dnd_util::GetAtomForTarget(
300 gtk_dnd_util::TEXT_PLAIN_NO_CHARSET), 304 gtk_dnd_util::TEXT_PLAIN_NO_CHARSET),
301 8, 305 8,
302 GDK_PROP_MODE_REPLACE, 306 GDK_PROP_MODE_REPLACE,
303 reinterpret_cast<const guchar*>( 307 reinterpret_cast<const guchar*>(
304 generated_download_file_name.value().c_str()), 308 generated_download_file_name.value().c_str()),
305 generated_download_file_name.value().length()); 309 generated_download_file_name.value().length());
306 } 310 }
311
312 if (!drag_image_.isNull()) {
313 GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap(&drag_image_);
314 gtk_drag_set_icon_pixbuf(drag_context, pixbuf,
315 image_offset_.x(), image_offset_.y());
316 // Let the drag take ownership.
317 g_object_unref(pixbuf);
318 }
307 } 319 }
308 320
309 void TabContentsDragSource::OnDragEnd(GdkDragContext* drag_context, 321 void TabContentsDragSource::OnDragEnd(GdkDragContext* drag_context,
310 WebDragOperation operation) { 322 WebDragOperation operation) {
311 MessageLoopForUI::current()->RemoveObserver(this); 323 MessageLoopForUI::current()->RemoveObserver(this);
312 324
313 if (!download_url_.is_empty()) { 325 if (!download_url_.is_empty()) {
314 gdk_property_delete(drag_context->source_window, 326 gdk_property_delete(drag_context->source_window,
315 gtk_dnd_util::GetAtomForTarget( 327 gtk_dnd_util::GetAtomForTarget(
316 gtk_dnd_util::DIRECT_SAVE_FILE)); 328 gtk_dnd_util::DIRECT_SAVE_FILE));
(...skipping 11 matching lines...) Expand all
328 340
329 if (tab_contents()->render_view_host()) 341 if (tab_contents()->render_view_host())
330 tab_contents()->render_view_host()->DragSourceSystemDragEnded(); 342 tab_contents()->render_view_host()->DragSourceSystemDragEnded();
331 343
332 drop_data_.reset(); 344 drop_data_.reset();
333 } 345 }
334 346
335 gfx::NativeView TabContentsDragSource::GetContentNativeView() const { 347 gfx::NativeView TabContentsDragSource::GetContentNativeView() const {
336 return tab_contents_view_->GetContentNativeView(); 348 return tab_contents_view_->GetContentNativeView();
337 } 349 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698