Index: chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc |
diff --git a/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc b/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc |
deleted file mode 100644 |
index 71dab10f0b501c060d5bf526c0e7666c9422dead..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.cc |
+++ /dev/null |
@@ -1,206 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/browser/ui/gtk/tab_contents/chrome_web_contents_view_delegate_gtk.h" |
- |
-#include <map> |
- |
-#include "base/lazy_instance.h" |
-#include "chrome/browser/browser_shutdown.h" |
-#include "chrome/browser/ui/gtk/constrained_window_gtk.h" |
-#include "chrome/browser/ui/gtk/renderer_context_menu/render_view_context_menu_gtk.h" |
-#include "chrome/browser/ui/gtk/tab_contents/web_drag_bookmark_handler_gtk.h" |
-#include "chrome/browser/ui/tab_contents/chrome_web_contents_view_delegate.h" |
-#include "content/public/browser/render_process_host.h" |
-#include "content/public/browser/render_view_host.h" |
-#include "content/public/browser/render_widget_host_view.h" |
-#include "content/public/browser/web_contents.h" |
-#include "content/public/browser/web_contents_view.h" |
-#include "ui/base/gtk/focus_store_gtk.h" |
-#include "ui/base/gtk/gtk_floating_container.h" |
- |
-namespace { |
- |
-const char kViewDelegateUserDataKey[] = "ChromeWebContentsViewDelegateGtk"; |
- |
-class ViewDelegateUserData : public base::SupportsUserData::Data { |
- public: |
- explicit ViewDelegateUserData(ChromeWebContentsViewDelegateGtk* view_delegate) |
- : view_delegate_(view_delegate) {} |
- virtual ~ViewDelegateUserData() {} |
- ChromeWebContentsViewDelegateGtk* view_delegate() { return view_delegate_; } |
- |
- private: |
- ChromeWebContentsViewDelegateGtk* view_delegate_; // unowned |
-}; |
- |
-} // namespace |
- |
-ChromeWebContentsViewDelegateGtk* ChromeWebContentsViewDelegateGtk::GetFor( |
- content::WebContents* web_contents) { |
- ViewDelegateUserData* user_data = static_cast<ViewDelegateUserData*>( |
- web_contents->GetUserData(&kViewDelegateUserDataKey)); |
- |
- return user_data ? user_data->view_delegate() : NULL; |
-} |
- |
-ChromeWebContentsViewDelegateGtk::ChromeWebContentsViewDelegateGtk( |
- content::WebContents* web_contents) |
- : floating_(gtk_floating_container_new()), |
- web_contents_modal_dialog_(NULL), |
- web_contents_(web_contents), |
- expanded_container_(NULL), |
- focus_store_(NULL) { |
- g_object_ref_sink(floating_.get()); |
- gtk_widget_set_name(floating_.get(), "chrome-tab-contents-view"); |
- g_signal_connect(floating_.get(), "set-floating-position", |
- G_CALLBACK(OnSetFloatingPositionThunk), this); |
- |
- // Stash this in the WebContents. |
- web_contents->SetUserData(&kViewDelegateUserDataKey, |
- new ViewDelegateUserData(this)); |
-} |
- |
-ChromeWebContentsViewDelegateGtk::~ChromeWebContentsViewDelegateGtk() { |
-} |
- |
-void ChromeWebContentsViewDelegateGtk::AttachWebContentsModalDialog( |
- GtkWidget* web_contents_modal_dialog) { |
- DCHECK(web_contents_modal_dialog_ == NULL); |
- |
- web_contents_modal_dialog_ = web_contents_modal_dialog; |
- gtk_floating_container_add_floating(GTK_FLOATING_CONTAINER(floating_.get()), |
- web_contents_modal_dialog); |
-} |
- |
-void ChromeWebContentsViewDelegateGtk::RemoveWebContentsModalDialog( |
- GtkWidget* web_contents_modal_dialog) { |
- DCHECK(web_contents_modal_dialog == web_contents_modal_dialog_); |
- |
- web_contents_modal_dialog_ = NULL; |
-} |
- |
-void ChromeWebContentsViewDelegateGtk::Initialize( |
- GtkWidget* expanded_container, ui::FocusStoreGtk* focus_store) { |
- expanded_container_ = expanded_container; |
- focus_store_ = focus_store; |
- // We install a chrome specific handler to intercept bookmark drags for the |
- // bookmark manager/extension API. |
- bookmark_handler_gtk_.reset(new WebDragBookmarkHandlerGtk); |
- |
- gtk_container_add(GTK_CONTAINER(floating_.get()), expanded_container); |
- gtk_widget_show(floating_.get()); |
-} |
- |
-gfx::NativeView ChromeWebContentsViewDelegateGtk::GetNativeView() const { |
- return floating_.get(); |
-} |
- |
-void ChromeWebContentsViewDelegateGtk::Focus() { |
- if (!web_contents_modal_dialog_) { |
- GtkWidget* widget = web_contents_->GetView()->GetContentNativeView(); |
- if (widget) |
- gtk_widget_grab_focus(widget); |
- } |
-} |
- |
-gboolean ChromeWebContentsViewDelegateGtk::OnNativeViewFocusEvent( |
- GtkWidget* widget, |
- GtkDirectionType type, |
- gboolean* return_value) { |
- // If we are showing a web contents modal dialog, don't allow the native view |
- // to take focus. |
- if (web_contents_modal_dialog_) { |
- // If we return false, it will revert to the default handler, which will |
- // take focus. We don't want that. But if we return true, the event will |
- // stop being propagated, leaving focus wherever it is currently. That is |
- // also bad. So we return false to let the default handler run, but take |
- // focus first so as to trick it into thinking the view was already focused |
- // and allowing the event to propagate. |
- gtk_widget_grab_focus(widget); |
- *return_value = FALSE; |
- return TRUE; |
- } |
- |
- // Let the default WebContentsViewGtk::OnFocus() behaviour run. |
- return FALSE; |
-} |
- |
-void ChromeWebContentsViewDelegateGtk::ShowContextMenu( |
- content::RenderFrameHost* render_frame_host, |
- const content::ContextMenuParams& params) { |
- // Find out the RenderWidgetHostView that corresponds to the render widget on |
- // which this context menu is showed, so that we can retrieve the last mouse |
- // down event on the render widget and use it as the timestamp of the |
- // activation event to show the context menu. |
- content::RenderWidgetHostView* view = NULL; |
- if (params.custom_context.render_widget_id != |
- content::CustomContextMenuContext::kCurrentRenderWidget) { |
- content::RenderWidgetHost* host = content::RenderWidgetHost::FromID( |
- web_contents_->GetRenderProcessHost()->GetID(), |
- params.custom_context.render_widget_id); |
- if (!host) { |
- NOTREACHED(); |
- return; |
- } |
- view = host->GetView(); |
- } else { |
- view = web_contents_->GetRenderWidgetHostView(); |
- } |
- |
- context_menu_.reset( |
- new RenderViewContextMenuGtk(render_frame_host, params, view)); |
- context_menu_->Init(); |
- |
- // Don't show empty menus. |
- if (context_menu_->menu_model().GetItemCount() == 0) |
- return; |
- |
- gfx::Rect bounds; |
- web_contents_->GetView()->GetContainerBounds(&bounds); |
- gfx::Point point = bounds.origin(); |
- point.Offset(params.x, params.y); |
- context_menu_->Popup(point); |
-} |
- |
-content::WebDragDestDelegate* |
- ChromeWebContentsViewDelegateGtk::GetDragDestDelegate() { |
- return bookmark_handler_gtk_.get(); |
-} |
- |
-void ChromeWebContentsViewDelegateGtk::OnSetFloatingPosition( |
- GtkWidget* floating_container, GtkAllocation* allocation) { |
- if (!web_contents_modal_dialog_) |
- return; |
- |
- // Place each web contents modal dialog in the center of the view. |
- GtkWidget* widget = web_contents_modal_dialog_; |
- DCHECK(gtk_widget_get_parent(widget) == floating_.get()); |
- |
- GtkRequisition requisition; |
- gtk_widget_size_request(widget, &requisition); |
- |
- GValue value = { 0, }; |
- g_value_init(&value, G_TYPE_INT); |
- |
- int child_x = std::max((allocation->width - requisition.width) / 2, 0); |
- g_value_set_int(&value, child_x); |
- gtk_container_child_set_property(GTK_CONTAINER(floating_container), |
- widget, "x", &value); |
- |
- int child_y = std::max((allocation->height - requisition.height) / 2, 0); |
- g_value_set_int(&value, child_y); |
- gtk_container_child_set_property(GTK_CONTAINER(floating_container), |
- widget, "y", &value); |
- g_value_unset(&value); |
-} |
- |
-namespace chrome { |
- |
-content::WebContentsViewDelegate* CreateWebContentsViewDelegate( |
- content::WebContents* web_contents) { |
- return new ChromeWebContentsViewDelegateGtk(web_contents); |
-} |
- |
-} // namespace chrome |