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

Side by Side Diff: content/browser/web_contents/web_drag_dest_gtk.cc

Issue 10377119: Plumb event flags (shift/alt/ctrl modifiers) for drag/drop events to WebKit. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed compile error Created 8 years, 7 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/web_contents/web_drag_dest_gtk.h" 5 #include "content/browser/web_contents/web_drag_dest_gtk.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/file_path.h" 10 #include "base/file_path.h"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "content/browser/renderer_host/render_view_host_impl.h" 13 #include "content/browser/renderer_host/render_view_host_impl.h"
14 #include "content/browser/web_contents/drag_utils_gtk.h" 14 #include "content/browser/web_contents/drag_utils_gtk.h"
15 #include "content/browser/web_contents/web_contents_impl.h" 15 #include "content/browser/web_contents/web_contents_impl.h"
16 #include "content/public/browser/web_drag_dest_delegate.h" 16 #include "content/public/browser/web_drag_dest_delegate.h"
17 #include "content/public/common/url_constants.h" 17 #include "content/public/common/url_constants.h"
18 #include "net/base/net_util.h" 18 #include "net/base/net_util.h"
19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
19 #include "ui/base/clipboard/custom_data_helper.h" 20 #include "ui/base/clipboard/custom_data_helper.h"
20 #include "ui/base/dragdrop/gtk_dnd_util.h" 21 #include "ui/base/dragdrop/gtk_dnd_util.h"
21 #include "ui/base/gtk/gtk_screen_util.h" 22 #include "ui/base/gtk/gtk_screen_util.h"
22 23
23 using content::RenderViewHostImpl; 24 using content::RenderViewHostImpl;
24 using WebKit::WebDragOperation; 25 using WebKit::WebDragOperation;
25 using WebKit::WebDragOperationNone; 26 using WebKit::WebDragOperationNone;
26 27
27 namespace content { 28 namespace content {
28 29
30 namespace {
31
32 int GetModifierFlags(GtkWidget* widget) {
33 int modifier_state = 0;
34 GdkModifierType state;
35 gdk_window_get_pointer(gtk_widget_get_window(widget), NULL, NULL, &state);
36
37 if (state & GDK_SHIFT_MASK)
38 modifier_state |= WebKit::WebInputEvent::ShiftKey;
39 if (state & GDK_CONTROL_MASK)
40 modifier_state |= WebKit::WebInputEvent::ControlKey;
41 if (state & GDK_MOD1_MASK)
42 modifier_state |= WebKit::WebInputEvent::AltKey;
43 if (state & GDK_META_MASK)
44 modifier_state |= WebKit::WebInputEvent::MetaKey;
45 return modifier_state;
46 }
47
48 } // namespace
49
29 WebDragDestGtk::WebDragDestGtk(WebContents* web_contents, GtkWidget* widget) 50 WebDragDestGtk::WebDragDestGtk(WebContents* web_contents, GtkWidget* widget)
30 : web_contents_(web_contents), 51 : web_contents_(web_contents),
31 widget_(widget), 52 widget_(widget),
32 context_(NULL), 53 context_(NULL),
33 data_requests_(0), 54 data_requests_(0),
34 delegate_(NULL), 55 delegate_(NULL),
35 method_factory_(this) { 56 method_factory_(this) {
36 gtk_drag_dest_set(widget, static_cast<GtkDestDefaults>(0), 57 gtk_drag_dest_set(widget, static_cast<GtkDestDefaults>(0),
37 NULL, 0, 58 NULL, 0,
38 static_cast<GdkDragAction>(GDK_ACTION_COPY | 59 static_cast<GdkDragAction>(GDK_ACTION_COPY |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 } 135 }
115 136
116 if (delegate()) { 137 if (delegate()) {
117 gtk_drag_get_data(widget_, context, delegate()->GetBookmarkTargetAtom(), 138 gtk_drag_get_data(widget_, context, delegate()->GetBookmarkTargetAtom(),
118 time); 139 time);
119 } 140 }
120 } else if (data_requests_ == 0) { 141 } else if (data_requests_ == 0) {
121 GetRenderViewHost()->DragTargetDragOver( 142 GetRenderViewHost()->DragTargetDragOver(
122 ui::ClientPoint(widget_), 143 ui::ClientPoint(widget_),
123 ui::ScreenPoint(widget_), 144 ui::ScreenPoint(widget_),
124 content::GdkDragActionToWebDragOp(context->actions)); 145 content::GdkDragActionToWebDragOp(context->actions),
146 GetModifierFlags(widget_));
125 147
126 if (delegate()) 148 if (delegate())
127 delegate()->OnDragOver(); 149 delegate()->OnDragOver();
128 150
129 drag_over_time_ = time; 151 drag_over_time_ = time;
130 } 152 }
131 153
132 // Pretend we are a drag destination because we don't want to wait for 154 // Pretend we are a drag destination because we don't want to wait for
133 // the renderer to tell us if we really are or not. 155 // the renderer to tell us if we really are or not.
134 return TRUE; 156 return TRUE;
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 } 244 }
223 } 245 }
224 246
225 if (data_requests_ == 0) { 247 if (data_requests_ == 0) {
226 // Tell the renderer about the drag. 248 // Tell the renderer about the drag.
227 // |x| and |y| are seemingly arbitrary at this point. 249 // |x| and |y| are seemingly arbitrary at this point.
228 GetRenderViewHost()->DragTargetDragEnter( 250 GetRenderViewHost()->DragTargetDragEnter(
229 *drop_data_.get(), 251 *drop_data_.get(),
230 ui::ClientPoint(widget_), 252 ui::ClientPoint(widget_),
231 ui::ScreenPoint(widget_), 253 ui::ScreenPoint(widget_),
232 content::GdkDragActionToWebDragOp(context->actions)); 254 content::GdkDragActionToWebDragOp(context->actions),
255 GetModifierFlags(widget_));
233 256
234 if (delegate()) 257 if (delegate())
235 delegate()->OnDragEnter(); 258 delegate()->OnDragEnter();
236 259
237 drag_over_time_ = time; 260 drag_over_time_ = time;
238 } 261 }
239 } 262 }
240 263
241 // The drag has left our widget; forward this information to the renderer. 264 // The drag has left our widget; forward this information to the renderer.
242 void WebDragDestGtk::OnDragLeave(GtkWidget* sender, GdkDragContext* context, 265 void WebDragDestGtk::OnDragLeave(GtkWidget* sender, GdkDragContext* context,
(...skipping 10 matching lines...) Expand all
253 base::Bind(&WebDragDestGtk::DragLeave, method_factory_.GetWeakPtr())); 276 base::Bind(&WebDragDestGtk::DragLeave, method_factory_.GetWeakPtr()));
254 } 277 }
255 278
256 // Called by GTK when the user releases the mouse, executing a drop. 279 // Called by GTK when the user releases the mouse, executing a drop.
257 gboolean WebDragDestGtk::OnDragDrop(GtkWidget* sender, GdkDragContext* context, 280 gboolean WebDragDestGtk::OnDragDrop(GtkWidget* sender, GdkDragContext* context,
258 gint x, gint y, guint time) { 281 gint x, gint y, guint time) {
259 // Cancel that drag leave! 282 // Cancel that drag leave!
260 method_factory_.InvalidateWeakPtrs(); 283 method_factory_.InvalidateWeakPtrs();
261 284
262 GetRenderViewHost()-> 285 GetRenderViewHost()->
263 DragTargetDrop(ui::ClientPoint(widget_), ui::ScreenPoint(widget_)); 286 DragTargetDrop(ui::ClientPoint(widget_), ui::ScreenPoint(widget_),
287 GetModifierFlags(widget_));
264 288
265 if (delegate()) 289 if (delegate())
266 delegate()->OnDrop(); 290 delegate()->OnDrop();
267 291
268 // The second parameter is just an educated guess as to whether or not the 292 // The second parameter is just an educated guess as to whether or not the
269 // drag succeeded, but at least we will get the drag-end animation right 293 // drag succeeded, but at least we will get the drag-end animation right
270 // sometimes. 294 // sometimes.
271 gtk_drag_finish(context, is_drop_target_, FALSE, time); 295 gtk_drag_finish(context, is_drop_target_, FALSE, time);
272 296
273 return TRUE; 297 return TRUE;
274 } 298 }
275 299
276 RenderViewHostImpl* WebDragDestGtk::GetRenderViewHost() const { 300 RenderViewHostImpl* WebDragDestGtk::GetRenderViewHost() const {
277 return static_cast<RenderViewHostImpl*>(web_contents_->GetRenderViewHost()); 301 return static_cast<RenderViewHostImpl*>(web_contents_->GetRenderViewHost());
278 } 302 }
279 303
280 } // namespace content 304 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_view_aura.cc ('k') | content/browser/web_contents/web_drag_dest_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698