| Index: chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc
|
| ===================================================================
|
| --- chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc (revision 0)
|
| +++ chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc (revision 0)
|
| @@ -0,0 +1,133 @@
|
| +// Copyright (c) 2011 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/views/tab_contents/native_tab_contents_container_views.h"
|
| +
|
| +#include "chrome/browser/renderer_host/render_widget_host_view_views.h"
|
| +#include "chrome/browser/ui/view_ids.h"
|
| +#include "chrome/browser/ui/views/tab_contents/tab_contents_container.h"
|
| +#include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h"
|
| +#include "content/browser/renderer_host/render_widget_host_view.h"
|
| +#include "content/browser/tab_contents/interstitial_page.h"
|
| +#include "content/browser/tab_contents/tab_contents.h"
|
| +#include "ui/base/accessibility/accessible_view_state.h"
|
| +#include "views/focus/focus_manager.h"
|
| +#include "views/layout/fill_layout.h"
|
| +#include "views/widget/native_widget_views.h"
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// NativeTabContentsContainerViews, public:
|
| +
|
| +NativeTabContentsContainerViews::NativeTabContentsContainerViews(
|
| + TabContentsContainer* container)
|
| + : container_(container) {
|
| + set_id(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW);
|
| + SetLayoutManager(new views::FillLayout);
|
| +}
|
| +
|
| +NativeTabContentsContainerViews::~NativeTabContentsContainerViews() {
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// NativeTabContentsContainerViews, NativeTabContentsContainer overrides:
|
| +
|
| +void NativeTabContentsContainerViews::AttachContents(TabContents* contents) {
|
| + TabContentsViewViews* widget =
|
| + static_cast<TabContentsViewViews*>(contents->view());
|
| + views::NativeWidgetViews* nwv =
|
| + static_cast<views::NativeWidgetViews*>(widget->native_widget());
|
| + AddChildView(nwv->GetView());
|
| + Layout();
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::DetachContents(TabContents* contents) {
|
| + TabContentsViewViews* widget =
|
| + static_cast<TabContentsViewViews*>(contents->view());
|
| + views::NativeWidgetViews* nwv =
|
| + static_cast<views::NativeWidgetViews*>(widget->native_widget());
|
| + RemoveChildView(nwv->GetView());
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::SetFastResize(bool fast_resize) {
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::RenderViewHostChanged(
|
| + RenderViewHost* old_host,
|
| + RenderViewHost* new_host) {
|
| + // If we are focused, we need to pass the focus to the new RenderViewHost.
|
| + if (GetFocusManager()->GetFocusedView() == this)
|
| + OnFocus();
|
| +}
|
| +
|
| +views::View* NativeTabContentsContainerViews::GetView() {
|
| + return this;
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::TabContentsFocused(
|
| + TabContents* tab_contents) {
|
| + views::FocusManager* focus_manager = GetFocusManager();
|
| + if (!focus_manager) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + focus_manager->SetFocusedView(this);
|
| +}
|
| +
|
| +////////////////////////////////////////////////////////////////////////////////
|
| +// NativeTabContentsContainerWin, views::View overrides:
|
| +
|
| +bool NativeTabContentsContainerViews::SkipDefaultKeyEventProcessing(
|
| + const views::KeyEvent& e) {
|
| + // Don't look-up accelerators or tab-traversal if we are showing a non-crashed
|
| + // TabContents.
|
| + // We'll first give the page a chance to process the key events. If it does
|
| + // not process them, they'll be returned to us and we'll treat them as
|
| + // accelerators then.
|
| + return container_->tab_contents() &&
|
| + !container_->tab_contents()->is_crashed();
|
| +}
|
| +
|
| +bool NativeTabContentsContainerViews::IsFocusable() const {
|
| + // We need to be focusable when our contents is not a view hierarchy, as
|
| + // clicking on the contents needs to focus us.
|
| + return container_->tab_contents() != NULL;
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::OnFocus() {
|
| + if (container_->tab_contents())
|
| + container_->tab_contents()->Focus();
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::RequestFocus() {
|
| + // This is a hack to circumvent the fact that a the OnFocus() method is not
|
| + // invoked when RequestFocus() is called on an already focused view.
|
| + // The TabContentsContainer is the view focused when the TabContents has
|
| + // focus. When switching between from one tab that has focus to another tab
|
| + // that should also have focus, RequestFocus() is invoked one the
|
| + // TabContentsContainer. In order to make sure OnFocus() is invoked we need
|
| + // to clear the focus before hands.
|
| + {
|
| + // Disable notifications. Clear focus will assign the focus to the main
|
| + // browser window. Because this change of focus was not user requested,
|
| + // don't send it to listeners.
|
| + views::AutoNativeNotificationDisabler local_notification_disabler;
|
| + GetFocusManager()->ClearFocus();
|
| + }
|
| + View::RequestFocus();
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::AboutToRequestFocusFromTabTraversal(
|
| + bool reverse) {
|
| + container_->tab_contents()->FocusThroughTabTraversal(reverse);
|
| +}
|
| +
|
| +void NativeTabContentsContainerViews::GetAccessibleState(
|
| + ui::AccessibleViewState* state) {
|
| + state->role = ui::AccessibilityTypes::ROLE_GROUPING;
|
| +}
|
| +
|
| +gfx::NativeViewAccessible
|
| + NativeTabContentsContainerViews::GetNativeViewAccessible() {
|
| + return View::GetNativeViewAccessible();
|
| +}
|
|
|
| Property changes on: chrome\browser\ui\views\tab_contents\native_tab_contents_container_views.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|