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

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

Issue 12086095: Fixed drag and drop into and out of Browser Plugin. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Splitting up patch Created 7 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
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_source_gtk.h" 5 #include "content/browser/web_contents/web_drag_source_gtk.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/nix/mime_util_xdg.h" 10 #include "base/nix/mime_util_xdg.h"
(...skipping 18 matching lines...) Expand all
29 #include "ui/gfx/gtk_util.h" 29 #include "ui/gfx/gtk_util.h"
30 #include "webkit/glue/webdropdata.h" 30 #include "webkit/glue/webdropdata.h"
31 31
32 using WebKit::WebDragOperation; 32 using WebKit::WebDragOperation;
33 using WebKit::WebDragOperationsMask; 33 using WebKit::WebDragOperationsMask;
34 using WebKit::WebDragOperationNone; 34 using WebKit::WebDragOperationNone;
35 35
36 namespace content { 36 namespace content {
37 37
38 WebDragSourceGtk::WebDragSourceGtk(WebContents* web_contents) 38 WebDragSourceGtk::WebDragSourceGtk(WebContents* web_contents)
39 : web_contents_(web_contents), 39 : web_contents_(static_cast<WebContentsImpl*>(web_contents)),
40 drag_pixbuf_(NULL), 40 drag_pixbuf_(NULL),
41 drag_failed_(false), 41 drag_failed_(false),
42 drag_widget_(gtk_invisible_new()), 42 drag_widget_(gtk_invisible_new()),
43 drag_context_(NULL), 43 drag_context_(NULL),
44 drag_icon_(gtk_window_new(GTK_WINDOW_POPUP)) { 44 drag_icon_(gtk_window_new(GTK_WINDOW_POPUP)) {
45 signals_.Connect(drag_widget_, "drag-failed", 45 signals_.Connect(drag_widget_, "drag-failed",
46 G_CALLBACK(OnDragFailedThunk), this); 46 G_CALLBACK(OnDragFailedThunk), this);
47 signals_.Connect(drag_widget_, "drag-begin", 47 signals_.Connect(drag_widget_, "drag-begin",
48 G_CALLBACK(OnDragBeginThunk), 48 G_CALLBACK(OnDragBeginThunk),
49 this); 49 this);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 // No-op. 156 // No-op.
157 } 157 }
158 158
159 void WebDragSourceGtk::DidProcessEvent(GdkEvent* event) { 159 void WebDragSourceGtk::DidProcessEvent(GdkEvent* event) {
160 if (event->type != GDK_MOTION_NOTIFY) 160 if (event->type != GDK_MOTION_NOTIFY)
161 return; 161 return;
162 162
163 GdkEventMotion* event_motion = reinterpret_cast<GdkEventMotion*>(event); 163 GdkEventMotion* event_motion = reinterpret_cast<GdkEventMotion*>(event);
164 gfx::Point client = ui::ClientPoint(GetContentNativeView()); 164 gfx::Point client = ui::ClientPoint(GetContentNativeView());
165 165
166 if (GetRenderViewHost()) { 166 if (web_contents_) {
167 GetRenderViewHost()->DragSourceMovedTo( 167 web_contents_->DragSourceMovedTo(
168 client.x(), client.y(), 168 client.x(), client.y(),
169 static_cast<int>(event_motion->x_root), 169 static_cast<int>(event_motion->x_root),
170 static_cast<int>(event_motion->y_root)); 170 static_cast<int>(event_motion->y_root));
171 } 171 }
172 } 172 }
173 173
174 void WebDragSourceGtk::OnDragDataGet(GtkWidget* sender, 174 void WebDragSourceGtk::OnDragDataGet(GtkWidget* sender,
175 GdkDragContext* context, 175 GdkDragContext* context,
176 GtkSelectionData* selection_data, 176 GtkSelectionData* selection_data,
177 guint target_type, 177 guint target_type,
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 } 292 }
293 293
294 gboolean WebDragSourceGtk::OnDragFailed(GtkWidget* sender, 294 gboolean WebDragSourceGtk::OnDragFailed(GtkWidget* sender,
295 GdkDragContext* context, 295 GdkDragContext* context,
296 GtkDragResult result) { 296 GtkDragResult result) {
297 drag_failed_ = true; 297 drag_failed_ = true;
298 298
299 gfx::Point root = ui::ScreenPoint(GetContentNativeView()); 299 gfx::Point root = ui::ScreenPoint(GetContentNativeView());
300 gfx::Point client = ui::ClientPoint(GetContentNativeView()); 300 gfx::Point client = ui::ClientPoint(GetContentNativeView());
301 301
302 if (GetRenderViewHost()) { 302 if (web_contents_) {
303 GetRenderViewHost()->DragSourceEndedAt( 303 web_contents_->DragSourceEndedAt(
304 client.x(), client.y(), root.x(), root.y(), 304 client.x(), client.y(), root.x(), root.y(),
305 WebDragOperationNone); 305 WebDragOperationNone);
306 } 306 }
307 307
308 // Let the native failure animation run. 308 // Let the native failure animation run.
309 return FALSE; 309 return FALSE;
310 } 310 }
311 311
312 void WebDragSourceGtk::OnDragBegin(GtkWidget* sender, 312 void WebDragSourceGtk::OnDragBegin(GtkWidget* sender,
313 GdkDragContext* drag_context) { 313 GdkDragContext* drag_context) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 364
365 if (!download_url_.is_empty()) { 365 if (!download_url_.is_empty()) {
366 gdk_property_delete(drag_context->source_window, 366 gdk_property_delete(drag_context->source_window,
367 ui::GetAtomForTarget(ui::DIRECT_SAVE_FILE)); 367 ui::GetAtomForTarget(ui::DIRECT_SAVE_FILE));
368 } 368 }
369 369
370 if (!drag_failed_) { 370 if (!drag_failed_) {
371 gfx::Point root = ui::ScreenPoint(GetContentNativeView()); 371 gfx::Point root = ui::ScreenPoint(GetContentNativeView());
372 gfx::Point client = ui::ClientPoint(GetContentNativeView()); 372 gfx::Point client = ui::ClientPoint(GetContentNativeView());
373 373
374 if (GetRenderViewHost()) { 374 if (web_contents_) {
375 GetRenderViewHost()->DragSourceEndedAt( 375 web_contents_->DragSourceEndedAt(
376 client.x(), client.y(), root.x(), root.y(), 376 client.x(), client.y(), root.x(), root.y(),
377 GdkDragActionToWebDragOp(drag_context->action)); 377 GdkDragActionToWebDragOp(drag_context->action));
378 } 378 }
379 } 379 }
380 380
381 web_contents_->SystemDragEnded(); 381 web_contents_->SystemDragEnded();
382 382
383 drop_data_.reset(); 383 drop_data_.reset();
384 drag_context_ = NULL; 384 drag_context_ = NULL;
385 } 385 }
386 386
387 RenderViewHostImpl* WebDragSourceGtk::GetRenderViewHost() const {
388 return static_cast<RenderViewHostImpl*>(web_contents_->GetRenderViewHost());
389 }
390
391 gfx::NativeView WebDragSourceGtk::GetContentNativeView() const { 387 gfx::NativeView WebDragSourceGtk::GetContentNativeView() const {
392 return web_contents_->GetView()->GetContentNativeView(); 388 return web_contents_->GetView()->GetContentNativeView();
393 } 389 }
394 390
395 gboolean WebDragSourceGtk::OnDragIconExpose(GtkWidget* sender, 391 gboolean WebDragSourceGtk::OnDragIconExpose(GtkWidget* sender,
396 GdkEventExpose* event) { 392 GdkEventExpose* event) {
397 cairo_t* cr = gdk_cairo_create(event->window); 393 cairo_t* cr = gdk_cairo_create(event->window);
398 gdk_cairo_rectangle(cr, &event->area); 394 gdk_cairo_rectangle(cr, &event->area);
399 cairo_clip(cr); 395 cairo_clip(cr);
400 cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE); 396 cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
401 gdk_cairo_set_source_pixbuf(cr, drag_pixbuf_, 0, 0); 397 gdk_cairo_set_source_pixbuf(cr, drag_pixbuf_, 0, 0);
402 cairo_paint(cr); 398 cairo_paint(cr);
403 cairo_destroy(cr); 399 cairo_destroy(cr);
404 400
405 return TRUE; 401 return TRUE;
406 } 402 }
407 403
408 } // namespace content 404 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_drag_source_gtk.h ('k') | content/browser/web_contents/web_drag_source_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698