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

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

Issue 1084003: Fix HTML5 effectAllowed and dragEffect on Chrome Linux. (Closed)
Patch Set: actual 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
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"
11 #include "base/mime_util.h" 11 #include "base/mime_util.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/download/download_manager.h" 13 #include "chrome/browser/download/download_manager.h"
14 #include "chrome/browser/download/drag_download_file.h" 14 #include "chrome/browser/download/drag_download_file.h"
15 #include "chrome/browser/download/drag_download_util.h" 15 #include "chrome/browser/download/drag_download_util.h"
16 #include "chrome/browser/gtk/gtk_util.h" 16 #include "chrome/browser/gtk/gtk_util.h"
17 #include "chrome/browser/renderer_host/render_view_host.h" 17 #include "chrome/browser/renderer_host/render_view_host.h"
18 #include "chrome/browser/renderer_host/render_view_host_delegate.h" 18 #include "chrome/browser/renderer_host/render_view_host_delegate.h"
19 #include "chrome/browser/tab_contents/tab_contents.h" 19 #include "chrome/browser/tab_contents/tab_contents.h"
20 #include "chrome/browser/tab_contents/tab_contents_view.h" 20 #include "chrome/browser/tab_contents/tab_contents_view.h"
21 #include "gfx/gtk_util.h" 21 #include "gfx/gtk_util.h"
22 #include "net/base/file_stream.h" 22 #include "net/base/file_stream.h"
23 #include "net/base/net_util.h" 23 #include "net/base/net_util.h"
24 #include "webkit/glue/webdropdata.h" 24 #include "webkit/glue/webdropdata.h"
25 25
26 using WebKit::WebDragOperation; 26 using WebKit::WebDragOperation;
27 using WebKit::WebDragOperationsMask;
27 using WebKit::WebDragOperationNone; 28 using WebKit::WebDragOperationNone;
28 29
29 TabContentsDragSource::TabContentsDragSource( 30 TabContentsDragSource::TabContentsDragSource(
30 TabContentsView* tab_contents_view) 31 TabContentsView* tab_contents_view)
31 : tab_contents_view_(tab_contents_view), 32 : tab_contents_view_(tab_contents_view),
32 drag_failed_(false), 33 drag_failed_(false),
33 drag_widget_(NULL) { 34 drag_widget_(NULL) {
34 drag_widget_ = gtk_invisible_new(); 35 drag_widget_ = gtk_invisible_new();
35 g_signal_connect(drag_widget_, "drag-failed", 36 g_signal_connect(drag_widget_, "drag-failed",
36 G_CALLBACK(OnDragFailedThunk), this); 37 G_CALLBACK(OnDragFailedThunk), this);
(...skipping 26 matching lines...) Expand all
63 gtk_widget_destroy(drag_widget_); 64 gtk_widget_destroy(drag_widget_);
64 g_object_unref(drag_widget_); 65 g_object_unref(drag_widget_);
65 drag_widget_ = NULL; 66 drag_widget_ = NULL;
66 } 67 }
67 68
68 TabContents* TabContentsDragSource::tab_contents() const { 69 TabContents* TabContentsDragSource::tab_contents() const {
69 return tab_contents_view_->tab_contents(); 70 return tab_contents_view_->tab_contents();
70 } 71 }
71 72
72 void TabContentsDragSource::StartDragging(const WebDropData& drop_data, 73 void TabContentsDragSource::StartDragging(const WebDropData& drop_data,
74 WebDragOperationsMask allowed_ops,
73 GdkEventButton* last_mouse_down, 75 GdkEventButton* last_mouse_down,
74 const SkBitmap& image, 76 const SkBitmap& image,
75 const gfx::Point& image_offset) { 77 const gfx::Point& image_offset) {
76 int targets_mask = 0; 78 int targets_mask = 0;
77 79
78 if (!drop_data.plain_text.empty()) 80 if (!drop_data.plain_text.empty())
79 targets_mask |= gtk_dnd_util::TEXT_PLAIN; 81 targets_mask |= gtk_dnd_util::TEXT_PLAIN;
80 if (drop_data.url.is_valid()) { 82 if (drop_data.url.is_valid()) {
81 targets_mask |= gtk_dnd_util::TEXT_URI_LIST; 83 targets_mask |= gtk_dnd_util::TEXT_URI_LIST;
82 targets_mask |= gtk_dnd_util::CHROME_NAMED_URL; 84 targets_mask |= gtk_dnd_util::CHROME_NAMED_URL;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 // If we don't pass an event, GDK won't know what event time to start grabbing 118 // If we don't pass an event, GDK won't know what event time to start grabbing
117 // mouse events. Technically it's the mouse motion event and not the mouse 119 // mouse events. Technically it's the mouse motion event and not the mouse
118 // down event that causes the drag, but there's no reliable way to know 120 // down event that causes the drag, but there's no reliable way to know
119 // *which* motion event initiated the drag, so this will have to do. 121 // *which* motion event initiated the drag, so this will have to do.
120 // TODO(estade): This can sometimes be very far off, e.g. if the user clicks 122 // TODO(estade): This can sometimes be very far off, e.g. if the user clicks
121 // and holds and doesn't start dragging for a long time. I doubt it matters 123 // and holds and doesn't start dragging for a long time. I doubt it matters
122 // much, but we should probably look into the possibility of getting the 124 // much, but we should probably look into the possibility of getting the
123 // initiating event from webkit. 125 // initiating event from webkit.
124 GdkDragContext* context = gtk_drag_begin( 126 GdkDragContext* context = gtk_drag_begin(
125 drag_widget_, list, 127 drag_widget_, list,
126 static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_LINK), 128 gtk_dnd_util::WebDragOpToGdkDragAction(allowed_ops),
127 1, // Drags are always initiated by the left button. 129 1, // Drags are always initiated by the left button.
128 reinterpret_cast<GdkEvent*>(last_mouse_down)); 130 reinterpret_cast<GdkEvent*>(last_mouse_down));
129 // The drag adds a ref; let it own the list. 131 // The drag adds a ref; let it own the list.
130 gtk_target_list_unref(list); 132 gtk_target_list_unref(list);
131 133
132 // Sometimes the drag fails to start; |context| will be NULL and we won't 134 // Sometimes the drag fails to start; |context| will be NULL and we won't
133 // get a drag-end signal. 135 // get a drag-end signal.
134 if (!context) { 136 if (!context) {
135 drop_data_.reset(); 137 drop_data_.reset();
136 if (tab_contents()->render_view_host()) 138 if (tab_contents()->render_view_host())
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 342
341 if (tab_contents()->render_view_host()) 343 if (tab_contents()->render_view_host())
342 tab_contents()->render_view_host()->DragSourceSystemDragEnded(); 344 tab_contents()->render_view_host()->DragSourceSystemDragEnded();
343 345
344 drop_data_.reset(); 346 drop_data_.reset();
345 } 347 }
346 348
347 gfx::NativeView TabContentsDragSource::GetContentNativeView() const { 349 gfx::NativeView TabContentsDragSource::GetContentNativeView() const {
348 return tab_contents_view_->GetContentNativeView(); 350 return tab_contents_view_->GetContentNativeView();
349 } 351 }
OLDNEW
« no previous file with comments | « chrome/browser/gtk/tab_contents_drag_source.h ('k') | chrome/browser/tab_contents/tab_contents_view_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698