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" |
11 #include "base/gfx/point.h" | 11 #include "base/gfx/point.h" |
12 #include "base/gfx/rect.h" | 12 #include "base/gfx/rect.h" |
13 #include "base/gfx/size.h" | 13 #include "base/gfx/size.h" |
14 #include "base/string_util.h" | 14 #include "base/string_util.h" |
15 #include "build/build_config.h" | 15 #include "build/build_config.h" |
16 #include "chrome/browser/download/download_shelf.h" | 16 #include "chrome/browser/download/download_shelf.h" |
17 #include "chrome/browser/gtk/blocked_popup_container_view_gtk.h" | 17 #include "chrome/browser/gtk/blocked_popup_container_view_gtk.h" |
18 #include "chrome/browser/gtk/browser_window_gtk.h" | 18 #include "chrome/browser/gtk/browser_window_gtk.h" |
19 #include "chrome/browser/gtk/constrained_window_gtk.h" | 19 #include "chrome/browser/gtk/constrained_window_gtk.h" |
20 #include "chrome/browser/gtk/gtk_dnd_util.h" | 20 #include "chrome/browser/gtk/gtk_dnd_util.h" |
21 #include "chrome/browser/gtk/gtk_floating_container.h" | 21 #include "chrome/browser/gtk/gtk_floating_container.h" |
| 22 #include "chrome/browser/gtk/gtk_theme_provider.h" |
22 #include "chrome/browser/gtk/sad_tab_gtk.h" | 23 #include "chrome/browser/gtk/sad_tab_gtk.h" |
23 #include "chrome/browser/renderer_host/render_view_host.h" | 24 #include "chrome/browser/renderer_host/render_view_host.h" |
24 #include "chrome/browser/renderer_host/render_view_host_factory.h" | 25 #include "chrome/browser/renderer_host/render_view_host_factory.h" |
25 #include "chrome/browser/renderer_host/render_widget_host_view_gtk.h" | 26 #include "chrome/browser/renderer_host/render_widget_host_view_gtk.h" |
26 #include "chrome/browser/tab_contents/interstitial_page.h" | 27 #include "chrome/browser/tab_contents/interstitial_page.h" |
27 #include "chrome/browser/tab_contents/render_view_context_menu_gtk.h" | 28 #include "chrome/browser/tab_contents/render_view_context_menu_gtk.h" |
28 #include "chrome/browser/tab_contents/tab_contents.h" | 29 #include "chrome/browser/tab_contents/tab_contents.h" |
29 #include "chrome/browser/tab_contents/tab_contents_delegate.h" | 30 #include "chrome/browser/tab_contents/tab_contents_delegate.h" |
30 #include "chrome/common/gtk_util.h" | 31 #include "chrome/common/gtk_util.h" |
| 32 #include "chrome/common/notification_service.h" |
31 #include "chrome/common/notification_source.h" | 33 #include "chrome/common/notification_source.h" |
32 #include "chrome/common/notification_type.h" | 34 #include "chrome/common/notification_type.h" |
33 #include "webkit/glue/webdropdata.h" | 35 #include "webkit/glue/webdropdata.h" |
34 | 36 |
35 namespace { | 37 namespace { |
36 | 38 |
37 // TODO(erg): I have no idea how to progromatically figure out how wide the | 39 // TODO(erg): I have no idea how to progromatically figure out how wide the |
38 // vertical scrollbar is. Hack it with a hardcoded value for now. | 40 // vertical scrollbar is. Hack it with a hardcoded value for now. |
39 const int kScrollbarWidthHack = 25; | 41 const int kScrollbarWidthHack = 25; |
40 | 42 |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 method_factory_(this) { | 115 method_factory_(this) { |
114 gtk_drag_dest_set(widget, static_cast<GtkDestDefaults>(0), | 116 gtk_drag_dest_set(widget, static_cast<GtkDestDefaults>(0), |
115 NULL, 0, GDK_ACTION_COPY); | 117 NULL, 0, GDK_ACTION_COPY); |
116 g_signal_connect(widget, "drag-motion", | 118 g_signal_connect(widget, "drag-motion", |
117 G_CALLBACK(OnDragMotionThunk), this); | 119 G_CALLBACK(OnDragMotionThunk), this); |
118 g_signal_connect(widget, "drag-leave", | 120 g_signal_connect(widget, "drag-leave", |
119 G_CALLBACK(OnDragLeaveThunk), this); | 121 G_CALLBACK(OnDragLeaveThunk), this); |
120 g_signal_connect(widget, "drag-drop", | 122 g_signal_connect(widget, "drag-drop", |
121 G_CALLBACK(OnDragDropThunk), this); | 123 G_CALLBACK(OnDragDropThunk), this); |
122 g_signal_connect(widget, "drag-data-received", | 124 g_signal_connect(widget, "drag-data-received", |
123 G_CALLBACK(OnDragDataReceivedThunk),this); | 125 G_CALLBACK(OnDragDataReceivedThunk), this); |
124 | 126 |
125 destroy_handler_ = g_signal_connect(widget, "destroy", | 127 destroy_handler_ = g_signal_connect(widget, "destroy", |
126 G_CALLBACK(gtk_widget_destroyed), &widget_); | 128 G_CALLBACK(gtk_widget_destroyed), &widget_); |
127 } | 129 } |
128 | 130 |
129 ~WebDragDest() { | 131 ~WebDragDest() { |
130 if (widget_) { | 132 if (widget_) { |
131 gtk_drag_dest_unset(widget_); | 133 gtk_drag_dest_unset(widget_); |
132 g_signal_handler_disconnect(widget_, destroy_handler_); | 134 g_signal_handler_disconnect(widget_, destroy_handler_); |
133 } | 135 } |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 g_signal_connect(fixed_, "size-allocate", | 315 g_signal_connect(fixed_, "size-allocate", |
314 G_CALLBACK(OnSizeAllocate), this); | 316 G_CALLBACK(OnSizeAllocate), this); |
315 g_signal_connect(floating_.get(), "set-floating-position", | 317 g_signal_connect(floating_.get(), "set-floating-position", |
316 G_CALLBACK(OnSetFloatingPosition), this); | 318 G_CALLBACK(OnSetFloatingPosition), this); |
317 | 319 |
318 gtk_container_add(GTK_CONTAINER(floating_.get()), fixed_); | 320 gtk_container_add(GTK_CONTAINER(floating_.get()), fixed_); |
319 gtk_widget_show(fixed_); | 321 gtk_widget_show(fixed_); |
320 gtk_widget_show(floating_.get()); | 322 gtk_widget_show(floating_.get()); |
321 registrar_.Add(this, NotificationType::TAB_CONTENTS_CONNECTED, | 323 registrar_.Add(this, NotificationType::TAB_CONTENTS_CONNECTED, |
322 Source<TabContents>(tab_contents)); | 324 Source<TabContents>(tab_contents)); |
| 325 registrar_.Add(this, NotificationType::BROWSER_THEME_CHANGED, |
| 326 NotificationService::AllSources()); |
323 } | 327 } |
324 | 328 |
325 TabContentsViewGtk::~TabContentsViewGtk() { | 329 TabContentsViewGtk::~TabContentsViewGtk() { |
326 floating_.Destroy(); | 330 floating_.Destroy(); |
327 } | 331 } |
328 | 332 |
329 void TabContentsViewGtk::AttachBlockedPopupView( | 333 void TabContentsViewGtk::AttachBlockedPopupView( |
330 BlockedPopupContainerViewGtk* popup_view) { | 334 BlockedPopupContainerViewGtk* popup_view) { |
331 DCHECK(popup_view_ == NULL); | 335 DCHECK(popup_view_ == NULL); |
332 popup_view_ = popup_view; | 336 popup_view_ = popup_view; |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
534 const NotificationSource& source, | 538 const NotificationSource& source, |
535 const NotificationDetails& details) { | 539 const NotificationDetails& details) { |
536 switch (type.value) { | 540 switch (type.value) { |
537 case NotificationType::TAB_CONTENTS_CONNECTED: { | 541 case NotificationType::TAB_CONTENTS_CONNECTED: { |
538 // No need to remove the SadTabGtk's widget from the container since | 542 // No need to remove the SadTabGtk's widget from the container since |
539 // the new RenderWidgetHostViewGtk instance already removed all the | 543 // the new RenderWidgetHostViewGtk instance already removed all the |
540 // vbox's children. | 544 // vbox's children. |
541 sad_tab_.reset(); | 545 sad_tab_.reset(); |
542 break; | 546 break; |
543 } | 547 } |
| 548 case NotificationType::BROWSER_THEME_CHANGED: { |
| 549 GtkThemeProperties properties(tab_contents()->profile()); |
| 550 UserChangedTheme(&properties); |
| 551 break; |
| 552 } |
544 default: | 553 default: |
545 NOTREACHED() << "Got a notification we didn't register for."; | 554 NOTREACHED() << "Got a notification we didn't register for."; |
546 break; | 555 break; |
547 } | 556 } |
548 } | 557 } |
549 | 558 |
550 void TabContentsViewGtk::ShowContextMenu(const ContextMenuParams& params) { | 559 void TabContentsViewGtk::ShowContextMenu(const ContextMenuParams& params) { |
551 context_menu_.reset(new RenderViewContextMenuGtk(tab_contents(), params, | 560 context_menu_.reset(new RenderViewContextMenuGtk(tab_contents(), params, |
552 last_mouse_down_.time)); | 561 last_mouse_down_.time)); |
553 context_menu_->Init(); | 562 context_menu_->Init(); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 | 660 |
652 // static | 661 // static |
653 void TabContentsViewGtk::OnDragEnd(GtkWidget* widget, | 662 void TabContentsViewGtk::OnDragEnd(GtkWidget* widget, |
654 GdkDragContext* drag_context, TabContentsViewGtk* view) { | 663 GdkDragContext* drag_context, TabContentsViewGtk* view) { |
655 view->DragEnded(); | 664 view->DragEnded(); |
656 view->drop_data_.reset(); | 665 view->drop_data_.reset(); |
657 } | 666 } |
658 | 667 |
659 // ----------------------------------------------------------------------------- | 668 // ----------------------------------------------------------------------------- |
660 | 669 |
| 670 void TabContentsViewGtk::UserChangedTheme(GtkThemeProperties* properties) { |
| 671 if (popup_view_) |
| 672 popup_view_->UserChangedTheme(properties); |
| 673 |
| 674 // TODO(erg): Plumb the selected text color, etc from here all the way to |
| 675 // RenderThemeChromiumLinux.cpp in WebKit through our associated |
| 676 // RenderViewHost. |
| 677 } |
| 678 |
661 void TabContentsViewGtk::InsertIntoContentArea(GtkWidget* widget) { | 679 void TabContentsViewGtk::InsertIntoContentArea(GtkWidget* widget) { |
662 gtk_fixed_put(GTK_FIXED(fixed_), widget, 0, 0); | 680 gtk_fixed_put(GTK_FIXED(fixed_), widget, 0, 0); |
663 } | 681 } |
664 | 682 |
665 gboolean TabContentsViewGtk::OnMouseDown(GtkWidget* widget, | 683 gboolean TabContentsViewGtk::OnMouseDown(GtkWidget* widget, |
666 GdkEventButton* event, TabContentsViewGtk* view) { | 684 GdkEventButton* event, TabContentsViewGtk* view) { |
667 view->last_mouse_down_ = *event; | 685 view->last_mouse_down_ = *event; |
668 return FALSE; | 686 return FALSE; |
669 } | 687 } |
670 | 688 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 gtk_container_child_set_property(GTK_CONTAINER(floating_container), | 752 gtk_container_child_set_property(GTK_CONTAINER(floating_container), |
735 widget, "x", &value); | 753 widget, "x", &value); |
736 | 754 |
737 int child_y = std::max(half_view_height - (requisition.height / 2), 0); | 755 int child_y = std::max(half_view_height - (requisition.height / 2), 0); |
738 g_value_set_int(&value, child_y); | 756 g_value_set_int(&value, child_y); |
739 gtk_container_child_set_property(GTK_CONTAINER(floating_container), | 757 gtk_container_child_set_property(GTK_CONTAINER(floating_container), |
740 widget, "y", &value); | 758 widget, "y", &value); |
741 g_value_unset(&value); | 759 g_value_unset(&value); |
742 } | 760 } |
743 } | 761 } |
OLD | NEW |