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/tab_contents/tab_contents_view_gtk.h" | 5 #include "chrome/browser/tab_contents/tab_contents_view_gtk.h" |
6 | 6 |
7 #include <gdk/gdk.h> | 7 #include <gdk/gdk.h> |
8 #include <gtk/gtk.h> | 8 #include <gtk/gtk.h> |
9 | 9 |
10 #include "base/mime_util.h" | 10 #include "base/mime_util.h" |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 break; | 343 break; |
344 } | 344 } |
345 default: | 345 default: |
346 NOTREACHED() << "Got a notification we didn't register for."; | 346 NOTREACHED() << "Got a notification we didn't register for."; |
347 break; | 347 break; |
348 } | 348 } |
349 } | 349 } |
350 | 350 |
351 void TabContentsViewGtk::ShowContextMenu(const ContextMenuParams& params) { | 351 void TabContentsViewGtk::ShowContextMenu(const ContextMenuParams& params) { |
352 context_menu_.reset(new RenderViewContextMenuGtk(tab_contents(), params, | 352 context_menu_.reset(new RenderViewContextMenuGtk(tab_contents(), params, |
353 last_mouse_down_time_)); | 353 last_mouse_down_.time)); |
354 context_menu_->Init(); | 354 context_menu_->Init(); |
355 context_menu_->Popup(); | 355 context_menu_->Popup(); |
356 } | 356 } |
357 | 357 |
358 // Render view DnD ------------------------------------------------------------- | 358 // Render view DnD ------------------------------------------------------------- |
359 | 359 |
360 void TabContentsViewGtk::DragEnded() { | 360 void TabContentsViewGtk::DragEnded() { |
361 if (tab_contents()->render_view_host()) | 361 if (tab_contents()->render_view_host()) |
362 tab_contents()->render_view_host()->DragSourceSystemDragEnded(); | 362 tab_contents()->render_view_host()->DragSourceSystemDragEnded(); |
363 } | 363 } |
(...skipping 21 matching lines...) Expand all Loading... |
385 drop_data_.reset(new WebDropData(drop_data)); | 385 drop_data_.reset(new WebDropData(drop_data)); |
386 | 386 |
387 GtkTargetList* list = GtkDndUtil::GetTargetListFromCodeMask(targets_mask); | 387 GtkTargetList* list = GtkDndUtil::GetTargetListFromCodeMask(targets_mask); |
388 if (targets_mask & GtkDndUtil::X_CHROME_WEBDROP_FILE_CONTENTS) { | 388 if (targets_mask & GtkDndUtil::X_CHROME_WEBDROP_FILE_CONTENTS) { |
389 drag_file_mime_type_ = gdk_atom_intern( | 389 drag_file_mime_type_ = gdk_atom_intern( |
390 mime_util::GetDataMimeType(drop_data.file_contents).c_str(), FALSE); | 390 mime_util::GetDataMimeType(drop_data.file_contents).c_str(), FALSE); |
391 gtk_target_list_add(list, drag_file_mime_type_, | 391 gtk_target_list_add(list, drag_file_mime_type_, |
392 0, GtkDndUtil::X_CHROME_WEBDROP_FILE_CONTENTS); | 392 0, GtkDndUtil::X_CHROME_WEBDROP_FILE_CONTENTS); |
393 } | 393 } |
394 | 394 |
395 gtk_drag_begin(GetContentNativeView(), list, GDK_ACTION_COPY, 1, NULL); | 395 // If we don't pass an event, GDK won't know what event time to start grabbing |
| 396 // mouse events. Technically it's the mouse motion event and not the mouse |
| 397 // down event that causes the drag, but there's no reliable way to know |
| 398 // *which* motion event initiated the drag, so this will have to do. |
| 399 gtk_drag_begin(GetContentNativeView(), list, GDK_ACTION_COPY, |
| 400 last_mouse_down_.button, |
| 401 reinterpret_cast<GdkEvent*>(&last_mouse_down_)); |
396 // The drag adds a ref; let it own the list. | 402 // The drag adds a ref; let it own the list. |
397 gtk_target_list_unref(list); | 403 gtk_target_list_unref(list); |
398 } | 404 } |
399 | 405 |
400 // static | 406 // static |
401 void TabContentsViewGtk::OnDragDataGet( | 407 void TabContentsViewGtk::OnDragDataGet( |
402 GtkWidget* drag_widget, | 408 GtkWidget* drag_widget, |
403 GdkDragContext* context, GtkSelectionData* selection_data, | 409 GdkDragContext* context, GtkSelectionData* selection_data, |
404 guint target_type, guint time, TabContentsViewGtk* view) { | 410 guint target_type, guint time, TabContentsViewGtk* view) { |
405 const int bits_per_byte = 8; | 411 const int bits_per_byte = 8; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
452 } | 458 } |
453 | 459 |
454 // ----------------------------------------------------------------------------- | 460 // ----------------------------------------------------------------------------- |
455 | 461 |
456 void TabContentsViewGtk::InsertIntoContentArea(GtkWidget* widget) { | 462 void TabContentsViewGtk::InsertIntoContentArea(GtkWidget* widget) { |
457 gtk_fixed_put(GTK_FIXED(fixed_), widget, 0, 0); | 463 gtk_fixed_put(GTK_FIXED(fixed_), widget, 0, 0); |
458 } | 464 } |
459 | 465 |
460 gboolean TabContentsViewGtk::OnMouseDown(GtkWidget* widget, | 466 gboolean TabContentsViewGtk::OnMouseDown(GtkWidget* widget, |
461 GdkEventButton* event, TabContentsViewGtk* view) { | 467 GdkEventButton* event, TabContentsViewGtk* view) { |
462 view->last_mouse_down_time_ = event->time; | 468 view->last_mouse_down_ = *event; |
463 return FALSE; | 469 return FALSE; |
464 } | 470 } |
465 | 471 |
466 gboolean TabContentsViewGtk::OnSizeAllocate(GtkWidget* widget, | 472 gboolean TabContentsViewGtk::OnSizeAllocate(GtkWidget* widget, |
467 GtkAllocation* allocation, | 473 GtkAllocation* allocation, |
468 TabContentsViewGtk* view) { | 474 TabContentsViewGtk* view) { |
469 int width = allocation->width; | 475 int width = allocation->width; |
470 int height = allocation->height; | 476 int height = allocation->height; |
471 // |delegate()| can be NULL here during browser teardown. | 477 // |delegate()| can be NULL here during browser teardown. |
472 if (view->tab_contents()->delegate()) | 478 if (view->tab_contents()->delegate()) |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
529 gtk_container_child_set_property(GTK_CONTAINER(floating_container), | 535 gtk_container_child_set_property(GTK_CONTAINER(floating_container), |
530 widget, "x", &value); | 536 widget, "x", &value); |
531 | 537 |
532 int child_y = std::max(half_view_height - (requisition.height / 2), 0); | 538 int child_y = std::max(half_view_height - (requisition.height / 2), 0); |
533 g_value_set_int(&value, child_y); | 539 g_value_set_int(&value, child_y); |
534 gtk_container_child_set_property(GTK_CONTAINER(floating_container), | 540 gtk_container_child_set_property(GTK_CONTAINER(floating_container), |
535 widget, "y", &value); | 541 widget, "y", &value); |
536 g_value_unset(&value); | 542 g_value_unset(&value); |
537 } | 543 } |
538 } | 544 } |
OLD | NEW |