Chromium Code Reviews| Index: chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc |
| diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_container.cc b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc |
| similarity index 42% |
| copy from chrome/browser/ui/views/tab_contents/tab_contents_container.cc |
| copy to chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc |
| index 47ed229eb4bd11a8a17b01040e0e08aec0d04c33..b711c8453a3710723170ee5e31527888dfd4e2a6 100644 |
| --- a/chrome/browser/ui/views/tab_contents/tab_contents_container.cc |
| +++ b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc |
| @@ -13,12 +13,9 @@ |
| #include "chrome/common/notification_details.h" |
| #include "chrome/common/notification_source.h" |
| -#if defined(TOUCH_UI) |
| -#include "chrome/browser/ui/views/tab_contents/native_tab_contents_container_gtk.h" |
| -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h" |
| -#include "views/border.h" |
| -#include "views/fill_layout.h" |
| -#endif |
| +// Some of this class is implemented in tab_contents_container.cc, where |
| +// the implementation doesn't vary between a pure views approach and a |
| +// native view host approach. See the header file for details. |
| //////////////////////////////////////////////////////////////////////////////// |
| // TabContentsContainer, public: |
| @@ -30,156 +27,60 @@ TabContentsContainer::TabContentsContainer() |
| SetID(VIEW_ID_TAB_CONTAINER); |
| } |
| -TabContentsContainer::~TabContentsContainer() { |
| - if (tab_contents_) |
| - RemoveObservers(); |
| -} |
| - |
| void TabContentsContainer::ChangeTabContents(TabContents* contents) { |
| if (tab_contents_) { |
| -#if !defined(TOUCH_UI) |
| native_container_->DetachContents(tab_contents_); |
| -#else |
| - views::View *v = static_cast<TabContentsViewViews*>(tab_contents_->view()); |
| - RemoveChildView(v); |
| -#endif |
| tab_contents_->WasHidden(); |
| RemoveObservers(); |
| } |
| -#if !defined(TOUCH_UI) |
| TabContents* old_contents = tab_contents_; |
| -#endif |
| tab_contents_ = contents; |
| // When detaching the last tab of the browser ChangeTabContents is invoked |
| // with NULL. Don't attempt to do anything in that case. |
| if (tab_contents_) { |
| -#if defined(TOUCH_UI) |
| - views::View *v = static_cast<TabContentsViewViews*>(contents->view()); |
| - // Guard against re-adding ourselves, which happens because the NULL |
| - // value is ignored by the pre-existing if() above. |
| - if (v->GetParent() != this) { |
| - AddChildView(v); |
| - SetLayoutManager(new views::FillLayout()); |
| - Layout(); |
| - } |
| -#else |
| RenderWidgetHostViewChanged( |
| old_contents ? old_contents->GetRenderWidgetHostView() : NULL, |
| tab_contents_->GetRenderWidgetHostView()); |
| native_container_->AttachContents(tab_contents_); |
| -#endif |
| AddObservers(); |
| } |
| } |
| void TabContentsContainer::TabContentsFocused(TabContents* tab_contents) { |
| - if (native_container_) |
| - native_container_->TabContentsFocused(tab_contents); |
| + native_container_->TabContentsFocused(tab_contents); |
| } |
| void TabContentsContainer::SetFastResize(bool fast_resize) { |
| - if (native_container_) |
| - native_container_->SetFastResize(fast_resize); |
| -} |
| - |
| -//////////////////////////////////////////////////////////////////////////////// |
| -// TabContentsContainer, NotificationObserver implementation: |
| - |
| -void TabContentsContainer::Observe(NotificationType type, |
| - const NotificationSource& source, |
| - const NotificationDetails& details) { |
| - if (type == NotificationType::RENDER_VIEW_HOST_CHANGED) { |
| - RenderViewHostSwitchedDetails* switched_details = |
| - Details<RenderViewHostSwitchedDetails>(details).ptr(); |
| - RenderViewHostChanged(switched_details->old_host, |
| - switched_details->new_host); |
| - } else if (type == NotificationType::TAB_CONTENTS_DESTROYED) { |
| - TabContentsDestroyed(Source<TabContents>(source).ptr()); |
| - } else { |
| - NOTREACHED(); |
| - } |
| + native_container_->SetFastResize(fast_resize); |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| // TabContentsContainer, View overrides: |
| void TabContentsContainer::Layout() { |
| -#if defined(TOUCH_UI) |
| - views::View::Layout(); |
| -#else |
| - if (native_container_) { |
|
sky
2011/01/05 16:43:03
You need this if.
|
| - if (reserved_area_delegate_) |
| - reserved_area_delegate_->UpdateReservedContentsRect(this); |
| - native_container_->GetView()->SetBounds(0, 0, width(), height()); |
| - native_container_->GetView()->Layout(); |
| - } |
| -#endif |
| -} |
| - |
| -AccessibilityTypes::Role TabContentsContainer::GetAccessibleRole() { |
| - return AccessibilityTypes::ROLE_WINDOW; |
| + if (reserved_area_delegate_) |
| + reserved_area_delegate_->UpdateReservedContentsRect(this); |
| + native_container_->GetView()->SetBounds(0, 0, width(), height()); |
| + native_container_->GetView()->Layout(); |
| } |
| void TabContentsContainer::ViewHierarchyChanged(bool is_add, |
| views::View* parent, |
| views::View* child) { |
| -#if defined(TOUCH_UI) |
| - views::View::ViewHierarchyChanged(is_add, parent, child); |
| -#else |
| if (is_add && child == this) { |
| native_container_ = NativeTabContentsContainer::CreateNativeContainer(this); |
| AddChildView(native_container_->GetView()); |
| } |
| -#endif |
| } |
| //////////////////////////////////////////////////////////////////////////////// |
| // TabContentsContainer, private: |
| -void TabContentsContainer::AddObservers() { |
| - // TabContents can change their RenderViewHost and hence the HWND that is |
| - // shown and getting focused. We need to keep track of that so we install |
| - // the focus subclass on the shown HWND so we intercept focus change events. |
| - registrar_.Add(this, |
| - NotificationType::RENDER_VIEW_HOST_CHANGED, |
| - Source<NavigationController>(&tab_contents_->controller())); |
| - |
| - registrar_.Add(this, |
| - NotificationType::TAB_CONTENTS_DESTROYED, |
| - Source<TabContents>(tab_contents_)); |
| -} |
| - |
| -void TabContentsContainer::RemoveObservers() { |
| - registrar_.RemoveAll(); |
| -} |
| - |
| void TabContentsContainer::RenderViewHostChanged(RenderViewHost* old_host, |
| RenderViewHost* new_host) { |
| -#if defined(TOUCH_UI) |
| - NOTIMPLEMENTED(); // TODO(anicolao) |
| -#else |
| if (new_host) { |
| RenderWidgetHostViewChanged( |
| old_host ? old_host->view() : NULL, new_host->view()); |
| } |
| native_container_->RenderViewHostChanged(old_host, new_host); |
| -#endif |
| -} |
| - |
| -void TabContentsContainer::TabContentsDestroyed(TabContents* contents) { |
| - // Sometimes, a TabContents is destroyed before we know about it. This allows |
| - // us to clean up our state in case this happens. |
| - DCHECK(contents == tab_contents_); |
| - ChangeTabContents(NULL); |
| -} |
| - |
| -void TabContentsContainer::RenderWidgetHostViewChanged( |
| - RenderWidgetHostView* old_view, RenderWidgetHostView* new_view) { |
| - // Carry over the reserved rect, if possible. |
| - if (old_view && new_view) { |
| - new_view->set_reserved_contents_rect(old_view->reserved_contents_rect()); |
| - } else { |
| - if (reserved_area_delegate_) |
| - reserved_area_delegate_->UpdateReservedContentsRect(this); |
| - } |
| } |