diff options
author | oshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-13 01:37:35 +0000 |
---|---|---|
committer | oshima@google.com <oshima@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-09-13 01:37:35 +0000 |
commit | caee17863b73aa083656381a918a98e76d93b61f (patch) | |
tree | 37621788206406eac0fd880fe31e4639be79164a /chrome/browser | |
parent | 86da286163563a0c1fd3079e677289b2ebc8a932 (diff) | |
download | chromium_src-caee17863b73aa083656381a918a98e76d93b61f.zip chromium_src-caee17863b73aa083656381a918a98e76d93b61f.tar.gz chromium_src-caee17863b73aa083656381a918a98e76d93b61f.tar.bz2 |
Relanding 100792
Use TabContentsViewViews for RenderWidgetHostViweViews.
* Removed TabContentsViewTouch.
* Changed so that mouse and resize event goes through NativeWidgetViews so that NativeTabContentsViewViews can invoke NativeTabContentsViewDelegates.
BUG=none
TEST=none
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=100792
Review URL: http://codereview.chromium.org/7460001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@100834 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
23 files changed, 168 insertions, 684 deletions
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 1df60b6..5a42dde 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc @@ -76,9 +76,7 @@ #include "chrome/browser/crash_handler_host_linux.h" #endif -#if defined(TOUCH_UI) -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" -#elif defined(TOOLKIT_VIEWS) +#if defined(TOOLKIT_VIEWS) #include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h" #elif defined(OS_LINUX) #include "chrome/browser/tab_contents/tab_contents_view_gtk.h" @@ -137,9 +135,7 @@ content::BrowserMainParts* ChromeContentBrowserClient::CreateBrowserMainParts( TabContentsView* ChromeContentBrowserClient::CreateTabContentsView( TabContents* tab_contents) { -#if defined(TOUCH_UI) - return new TabContentsViewTouch(tab_contents); -#elif defined(TOOLKIT_VIEWS) +#if defined(TOOLKIT_VIEWS) return new TabContentsViewViews(tab_contents); #elif defined(OS_LINUX) return new TabContentsViewGtk(tab_contents); diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.cc b/chrome/browser/renderer_host/render_widget_host_view_views.cc index 6396c4b..2fac61d 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_views.cc +++ b/chrome/browser/renderer_host/render_widget_host_view_views.cc @@ -194,7 +194,8 @@ void RenderWidgetHostViewViews::SetSize(const gfx::Size& size) { } void RenderWidgetHostViewViews::SetBounds(const gfx::Rect& rect) { - NOTIMPLEMENTED(); + // TODO(oshima): chromeos/touch doesn't allow moving window. + SetSize(rect.size()); } gfx::NativeView RenderWidgetHostViewViews::GetNativeView() const { @@ -748,7 +749,7 @@ void RenderWidgetHostViewViews::OnPaint(gfx::Canvas* canvas) { // Only render the widget if it is attached to a window; there's a short // period where this object isn't attached to a window but hasn't been // Destroy()ed yet and it receives paint messages... - if (GetInnerNativeView()->window) { + if (IsReadyToPaint()) { #endif if (!visually_deemphasized_) { // In the common case, use XCopyArea. We don't draw more than once, so diff --git a/chrome/browser/renderer_host/render_widget_host_view_views.h b/chrome/browser/renderer_host/render_widget_host_view_views.h index e81b48d..6c7b8a9 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_views.h +++ b/chrome/browser/renderer_host/render_widget_host_view_views.h @@ -174,7 +174,7 @@ class RenderWidgetHostViewViews : public RenderWidgetHostView, #endif protected: - // Overridden views::View. + // Overridden from views::View. virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; virtual void OnFocus() OVERRIDE; virtual void OnBlur() OVERRIDE; @@ -210,10 +210,8 @@ class RenderWidgetHostViewViews : public RenderWidgetHostView, void UpdateTouchSelectionController(); #if defined(TOOLKIT_USES_GTK) - // On some systems, there can be two native views, where an outer native view - // contains the inner native view (e.g. when using GTK+). This returns the - // inner view. This can return NULL when it's not attached to a view. - gfx::NativeView GetInnerNativeView() const; + // Returns true if the RWHV is ready to paint the content. + bool IsReadyToPaint(); #endif // The model object. diff --git a/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc index e8437a7..f253314 100644 --- a/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc +++ b/chrome/browser/renderer_host/render_widget_host_view_views_gtk.cc @@ -69,25 +69,26 @@ gfx::PluginWindowHandle RenderWidgetHostViewViews::GetCompositingSurface() { } #endif -gfx::NativeView RenderWidgetHostViewViews::GetInnerNativeView() const { - const views::View* view = NULL; - if (views::ViewsDelegate::views_delegate) - view = views::ViewsDelegate::views_delegate->GetDefaultParentView(); - if (!view) - view = this; - - // TODO(sad): Ideally this function should be equivalent to GetNativeView, and - // NativeWidgetGtk-specific function call should not be necessary. - const views::Widget* widget = view->GetWidget(); - const views::NativeWidget* native = widget ? widget->native_widget() : NULL; - return native ? static_cast<const views::NativeWidgetGtk*>(native)-> - window_contents() : NULL; +bool RenderWidgetHostViewViews::IsReadyToPaint() { + views::Widget* top = NULL; + // TODO(oshima): move this functionality to Widget. + if (views::ViewsDelegate::views_delegate && + views::ViewsDelegate::views_delegate->GetDefaultParentView()) { + top = views::ViewsDelegate::views_delegate->GetDefaultParentView()-> + GetWidget(); + } else { + top = GetWidget() ? GetWidget()->GetTopLevelWidget() : NULL; + } + + return top ? + !!(static_cast<const views::NativeWidgetGtk*>(top->native_widget())-> + window_contents()->window) : false; } void RenderWidgetHostViewViews::ShowCurrentCursor() { // The widget may not have a window. If that's the case, abort mission. This // is the same issue as that explained above in Paint(). - if (!GetInnerNativeView() || !GetInnerNativeView()->window) + if (!IsReadyToPaint()) return; native_cursor_ = current_cursor_.GetNativeCursor(); diff --git a/chrome/browser/ui/gtk/constrained_window_gtk.cc b/chrome/browser/ui/gtk/constrained_window_gtk.cc index f2026a8..01cc99b 100644 --- a/chrome/browser/ui/gtk/constrained_window_gtk.cc +++ b/chrome/browser/ui/gtk/constrained_window_gtk.cc @@ -13,7 +13,7 @@ #include "ui/base/gtk/gtk_hig_constants.h" #if defined(TOUCH_UI) -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" +#include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h" #elif defined(TOOLKIT_VIEWS) #include "chrome/browser/ui/views/tab_contents/native_tab_contents_view_gtk.h" #include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h" diff --git a/chrome/browser/ui/gtk/constrained_window_gtk.h b/chrome/browser/ui/gtk/constrained_window_gtk.h index 25a9912..2b7b4c1 100644 --- a/chrome/browser/ui/gtk/constrained_window_gtk.h +++ b/chrome/browser/ui/gtk/constrained_window_gtk.h @@ -17,7 +17,7 @@ class TabContents; typedef struct _GdkColor GdkColor; #if defined(TOUCH_UI) -class TabContentsViewTouch; +class TabContentsViewViews; #elif defined(TOOLKIT_VIEWS) class NativeTabContentsViewGtk; #else @@ -51,7 +51,7 @@ class ConstrainedWindowGtkDelegate { class ConstrainedWindowGtk : public ConstrainedWindow { public: #if defined(TOUCH_UI) - typedef TabContentsViewTouch TabContentsViewType; + typedef TabContentsViewViews TabContentsViewType; #elif defined(TOOLKIT_VIEWS) typedef NativeTabContentsViewGtk TabContentsViewType; #else diff --git a/chrome/browser/ui/touch/keyboard/keyboard_manager.cc b/chrome/browser/ui/touch/keyboard/keyboard_manager.cc index 97f78a9..bb9f85c 100644 --- a/chrome/browser/ui/touch/keyboard/keyboard_manager.cc +++ b/chrome/browser/ui/touch/keyboard/keyboard_manager.cc @@ -13,12 +13,10 @@ #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/browser/ui/views/dom_view.h" -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" #include "chrome/common/chrome_notification_types.h" #include "chrome/common/extensions/extension_messages.h" #include "chrome/common/url_constants.h" #include "content/browser/site_instance.h" -#include "content/browser/tab_contents/tab_contents.h" #include "content/browser/tab_contents/tab_contents_observer.h" #include "content/common/notification_service.h" #include "ui/base/animation/animation_delegate.h" diff --git a/chrome/browser/ui/views/dom_view.cc b/chrome/browser/ui/views/dom_view.cc index 4555bd1..6f90426 100644 --- a/chrome/browser/ui/views/dom_view.cc +++ b/chrome/browser/ui/views/dom_view.cc @@ -6,12 +6,10 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/renderer_preferences_util.h" +#include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h" #include "content/browser/tab_contents/tab_contents.h" #include "views/focus/focus_manager.h" - -#if defined(TOUCH_UI) -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" -#endif +#include "views/widget/native_widget_views.h" // static const char DOMView::kViewClassName[] = @@ -81,9 +79,13 @@ void DOMView::ViewHierarchyChanged(bool is_add, views::View* parent, } void DOMView::AttachTabContents() { -#if defined(TOUCH_UI) - AttachToView(static_cast<TabContentsViewTouch*>(tab_contents_->view())); -#else - Attach(tab_contents_->GetNativeView()); -#endif + if (views::Widget::IsPureViews()) { + TabContentsViewViews* widget = + static_cast<TabContentsViewViews*>(tab_contents_->view()); + views::NativeWidgetViews* nwv = + static_cast<views::NativeWidgetViews*>(widget->native_widget()); + AttachToView(nwv->GetView()); + } else { + Attach(tab_contents_->GetNativeView()); + } } diff --git a/chrome/browser/ui/views/find_bar_host_gtk.cc b/chrome/browser/ui/views/find_bar_host_gtk.cc index 1600e34..ca516d6 100644 --- a/chrome/browser/ui/views/find_bar_host_gtk.cc +++ b/chrome/browser/ui/views/find_bar_host_gtk.cc @@ -7,13 +7,10 @@ #include "chrome/browser/ui/find_bar/find_bar_controller.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/browser/ui/views/frame/browser_view.h" +#include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h" #include "content/browser/tab_contents/tab_contents.h" #include "content/browser/tab_contents/tab_contents_view.h" -#if defined(TOUCH_UI) -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" -#endif - void FindBarHost::AudibleAlert() { // TODO(davemoore) implement. NOTIMPLEMENTED(); @@ -23,12 +20,7 @@ void FindBarHost::GetWidgetPositionNative(gfx::Rect* avoid_overlapping_rect) { gfx::Rect frame_rect = host()->GetTopLevelWidget()->GetWindowScreenBounds(); TabContentsView* tab_view = find_bar_controller_->tab_contents()->view(); gfx::Rect webcontents_rect; -#if defined(TOUCH_UI) - webcontents_rect = - static_cast<TabContentsViewTouch*>(tab_view)->GetScreenBounds(); -#else tab_view->GetViewBounds(&webcontents_rect); -#endif avoid_overlapping_rect->Offset(0, webcontents_rect.y() - frame_rect.y()); } diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_gtk.cc b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_gtk.cc index e836183..7705344 100644 --- a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_gtk.cc +++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_gtk.cc @@ -13,7 +13,6 @@ #include "content/browser/tab_contents/tab_contents.h" #include "ui/base/accessibility/accessible_view_state.h" #include "views/focus/focus_manager.h" -#include "views/views_delegate.h" //////////////////////////////////////////////////////////////////////////////// // NativeTabContentsContainerGtk, public: @@ -63,7 +62,6 @@ views::View* NativeTabContentsContainerGtk::GetView() { void NativeTabContentsContainerGtk::TabContentsFocused( TabContents* tab_contents) { -#if !defined(TOUCH_UI) // Called when the tab contents native view gets focused (typically through a // user click). We make ourself the focused view, so the focus is restored // properly when the browser window is deactivated/reactivated. @@ -73,9 +71,6 @@ void NativeTabContentsContainerGtk::TabContentsFocused( return; } focus_manager->SetFocusedView(this); -#else - // no native views in TOUCH_UI, so don't steal the focus -#endif } //////////////////////////////////////////////////////////////////////////////// @@ -147,8 +142,7 @@ void NativeTabContentsContainerGtk::GetAccessibleState( // static NativeTabContentsContainer* NativeTabContentsContainer::CreateNativeContainer( TabContentsContainer* container) { - if (views::Widget::IsPureViews() && - views::ViewsDelegate::views_delegate->GetDefaultParentView()) + if (views::Widget::IsPureViews()) return new NativeTabContentsContainerViews(container); return new NativeTabContentsContainerGtk(container); } diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc index 6a2bec9..1849428 100644 --- a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc +++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_views.cc @@ -66,12 +66,9 @@ views::View* NativeTabContentsContainerViews::GetView() { void NativeTabContentsContainerViews::TabContentsFocused( TabContents* tab_contents) { - views::FocusManager* focus_manager = GetFocusManager(); - if (!focus_manager) { - NOTREACHED(); - return; - } - focus_manager->SetFocusedView(this); + // This is called from RWHVViews::OnFocus, which means + // the focus manager already set focus to RWHVViews, so don't + // Update focus manager. } //////////////////////////////////////////////////////////////////////////////// diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc index 6045638..750dc45 100644 --- a/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc +++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_container_win.cc @@ -12,7 +12,6 @@ #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/views_delegate.h" #include "views/focus/focus_manager.h" //////////////////////////////////////////////////////////////////////////////// @@ -157,8 +156,7 @@ gfx::NativeViewAccessible // static NativeTabContentsContainer* NativeTabContentsContainer::CreateNativeContainer( TabContentsContainer* container) { - if (views::Widget::IsPureViews() && - views::ViewsDelegate::views_delegate->GetDefaultParentView()) + if (views::Widget::IsPureViews()) return new NativeTabContentsContainerViews(container); return new NativeTabContentsContainerWin(container); } diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_view_gtk.cc b/chrome/browser/ui/views/tab_contents/native_tab_contents_view_gtk.cc index f0566e6..ee2f37f 100644 --- a/chrome/browser/ui/views/tab_contents/native_tab_contents_view_gtk.cc +++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_view_gtk.cc @@ -15,7 +15,6 @@ #include "content/browser/tab_contents/tab_contents_view.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebDragData.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" -#include "views/views_delegate.h" using WebKit::WebDragOperation; using WebKit::WebDragOperationsMask; @@ -262,8 +261,7 @@ void NativeTabContentsViewGtk::PositionConstrainedWindows( // static NativeTabContentsView* NativeTabContentsView::CreateNativeTabContentsView( internal::NativeTabContentsViewDelegate* delegate) { - if (views::Widget::IsPureViews() && - views::ViewsDelegate::views_delegate->GetDefaultParentView()) + if (views::Widget::IsPureViews()) return new NativeTabContentsViewViews(delegate); return new NativeTabContentsViewGtk(delegate); } diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.cc b/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.cc index 9ed403e..d143b61 100644 --- a/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.cc +++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.cc @@ -25,6 +25,33 @@ NativeTabContentsViewViews::~NativeTabContentsViewViews() { } //////////////////////////////////////////////////////////////////////////////// +// NativeTabContentsViewViews, NativeWidgetViews implementation: +void NativeTabContentsViewViews::OnBoundsChanged( + const gfx::Rect& new_bounds, const gfx::Rect& old_bounds) { + // TODO(oshima): Find out if we need to adjust constrained window. + delegate_->OnNativeTabContentsViewSized(new_bounds.size()); + views::NativeWidgetViews::OnBoundsChanged(new_bounds, old_bounds); +} + +bool NativeTabContentsViewViews::OnMouseEvent(const views::MouseEvent& event) { + if (!delegate_->IsShowingSadTab()) { + switch (event.type()) { + case ui::ET_MOUSE_EXITED: + delegate_->OnNativeTabContentsViewMouseMove(false); + break; + case ui::ET_MOUSE_MOVED: + delegate_->OnNativeTabContentsViewMouseMove(true); + break; + default: + // TODO(oshima): mouse wheel + break; + } + } + // Pass all mouse event to renderer. + return views::NativeWidgetViews::OnMouseEvent(event); +} + +//////////////////////////////////////////////////////////////////////////////// // NativeTabContentsViewViews, NativeTabContentsView implementation: void NativeTabContentsViewViews::InitNativeTabContentsView() { @@ -88,3 +115,11 @@ void NativeTabContentsViewViews::SetDragCursor( views::NativeWidget* NativeTabContentsViewViews::AsNativeWidget() { return this; } + +#if defined(TOUCH_UI) +// static +NativeTabContentsView* NativeTabContentsView::CreateNativeTabContentsView( + internal::NativeTabContentsViewDelegate* delegate) { + return new NativeTabContentsViewViews(delegate); +} +#endif diff --git a/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.h b/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.h index feacb03..f7961ba 100644 --- a/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.h +++ b/chrome/browser/ui/views/tab_contents/native_tab_contents_view_views.h @@ -11,6 +11,10 @@ class TabContents; +namespace views { +class MouseEvent; +} + class NativeTabContentsViewViews : public views::NativeWidgetViews, public NativeTabContentsView { public: @@ -19,6 +23,11 @@ class NativeTabContentsViewViews : public views::NativeWidgetViews, virtual ~NativeTabContentsViewViews(); private: + // Overridden from NativeWidgetViews: + virtual void OnBoundsChanged(const gfx::Rect& new_bounds, + const gfx::Rect& old_bounds) OVERRIDE; + virtual bool OnMouseEvent(const views::MouseEvent& event) OVERRIDE; + // Overridden from NativeTabContentsView: virtual void InitNativeTabContentsView() OVERRIDE; virtual void Unparent() OVERRIDE; diff --git a/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc b/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc index efd7593..e7fa35a 100644 --- a/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc +++ b/chrome/browser/ui/views/tab_contents/render_view_context_menu_views.cc @@ -6,6 +6,7 @@ #include "base/logging.h" #include "chrome/app/chrome_command_ids.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/tab_contents.h" #include "content/browser/tab_contents/tab_contents_view.h" @@ -16,13 +17,6 @@ #include "views/controls/menu/menu_model_adapter.h" #include "views/controls/menu/menu_runner.h" -#if defined(TOUCH_UI) -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h" -#include "views/widget/widget.h" -#else -#include "chrome/browser/ui/views/tab_contents/tab_contents_view_views.h" -#endif - //////////////////////////////////////////////////////////////////////////////// // RenderViewContextMenuViews, public: @@ -37,17 +31,9 @@ RenderViewContextMenuViews::~RenderViewContextMenuViews() { } void RenderViewContextMenuViews::RunMenuAt(int x, int y) { -#if defined(TOUCH_UI) - // TODO(oshima): Eliminate this once TabContentsViewTouch is replaced - // with TabContentsViewViews. - TabContentsViewTouch* touch = - static_cast<TabContentsViewTouch*>(source_tab_contents_->view()); - views::Widget* parent = touch->GetWidget()->GetTopLevelWidget(); -#else TabContentsViewViews* tab = static_cast<TabContentsViewViews*>(source_tab_contents_->view()); views::Widget* parent = tab->GetTopLevelWidget(); -#endif if (menu_runner_->RunMenuAt(parent, NULL, gfx::Rect(gfx::Point(x, y), gfx::Size()), views::MenuItemView::TOPLEFT, views::MenuRunner::HAS_MNEMONICS) == diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_container.h b/chrome/browser/ui/views/tab_contents/tab_contents_container.h index 1777479..67a3159 100644 --- a/chrome/browser/ui/views/tab_contents/tab_contents_container.h +++ b/chrome/browser/ui/views/tab_contents/tab_contents_container.h @@ -16,10 +16,11 @@ // views-only code is in tab_contents_container_views.cc and native-widget only // code is in tab_contents_container_native.cc. The headers are distinct // because the classes have different member variables. -#if defined(TOUCH_UI) -#include "chrome/browser/ui/views/tab_contents/tab_contents_container_views.h" -#else + +// TODO(oshima): Rename tab_contents_container_native to tab_contents_container. +// TODO(oshima): Figure out if we can consolidate +// native_tab_contents_containers. + #include "chrome/browser/ui/views/tab_contents/tab_contents_container_native.h" -#endif #endif // CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_CONTAINER_H_ diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc index 28ce5f2..69633aa 100644 --- a/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc +++ b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.cc @@ -4,6 +4,10 @@ #include "chrome/browser/ui/views/tab_contents/tab_contents_container.h" +#if defined(HAVE_XINPUT2) +#include <X11/extensions/XInput2.h> +#endif + #include "chrome/browser/ui/view_ids.h" #include "chrome/browser/ui/views/tab_contents/native_tab_contents_container.h" #include "content/browser/renderer_host/render_view_host.h" @@ -69,6 +73,48 @@ void TabContentsContainer::Layout() { } } +#if defined(HAVE_XINPUT2) +bool TabContentsContainer::OnMousePressed(const views::MouseEvent& event) { + DCHECK(tab_contents_); + if (event.flags() & (ui::EF_LEFT_BUTTON_DOWN | + ui::EF_RIGHT_BUTTON_DOWN | + ui::EF_MIDDLE_BUTTON_DOWN)) { + return false; + } + // It is necessary to look at the native event to determine what special + // button was pressed. + views::NativeEvent2 native_event = event.native_event_2(); + if (!native_event) + return false; + + int button = 0; + switch (native_event->type) { + case ButtonPress: { + button = native_event->xbutton.button; + break; + } + case GenericEvent: { + XIDeviceEvent* xievent = + static_cast<XIDeviceEvent*>(native_event->xcookie.data); + button = xievent->detail; + break; + } + default: + break; + } + switch (button) { + case 8: + tab_contents_->controller().GoBack(); + return true; + case 9: + tab_contents_->controller().GoForward(); + return true; + } + + return false; +} +#endif + void TabContentsContainer::ViewHierarchyChanged(bool is_add, views::View* parent, views::View* child) { diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_container_native.h b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.h index da28347..528b5f0 100644 --- a/chrome/browser/ui/views/tab_contents/tab_contents_container_native.h +++ b/chrome/browser/ui/views/tab_contents/tab_contents_container_native.h @@ -49,6 +49,9 @@ class TabContentsContainer : public views::View, // Overridden from views::View: virtual void Layout() OVERRIDE; virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; +#if defined(HAVE_XINPUT2) + virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE; +#endif protected: // Overridden from views::View: diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_view_touch.cc b/chrome/browser/ui/views/tab_contents/tab_contents_view_touch.cc deleted file mode 100644 index 1e13c51..0000000 --- a/chrome/browser/ui/views/tab_contents/tab_contents_view_touch.cc +++ /dev/null @@ -1,430 +0,0 @@ -// 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/tab_contents_view_touch.h" - -#include <X11/extensions/XInput2.h> -#undef Status - -#include "base/string_util.h" -#include "build/build_config.h" -#include "chrome/browser/renderer_host/render_widget_host_view_views.h" -#include "chrome/browser/ui/views/sad_tab_view.h" -#include "chrome/browser/ui/views/tab_contents/render_view_context_menu_views.h" -#include "content/browser/renderer_host/render_view_host.h" -#include "content/browser/renderer_host/render_view_host_factory.h" -#include "content/browser/tab_contents/interstitial_page.h" -#include "content/browser/tab_contents/tab_contents.h" -#include "content/browser/tab_contents/tab_contents_delegate.h" -#include "ui/gfx/canvas_skia_paint.h" -#include "ui/gfx/point.h" -#include "ui/gfx/rect.h" -#include "ui/gfx/size.h" -#include "views/controls/native/native_view_host.h" -#include "views/focus/focus_manager.h" -#include "views/focus/view_storage.h" -#include "views/layout/fill_layout.h" -#include "views/widget/widget.h" - -using WebKit::WebDragOperation; -using WebKit::WebDragOperationsMask; -using WebKit::WebInputEvent; - -// static -const char TabContentsViewTouch::kViewClassName[] = - "browser/ui/views/tab_contents/TabContentsViewTouch"; - -TabContentsViewTouch::TabContentsViewTouch(TabContents* tab_contents) - : tab_contents_(tab_contents), - sad_tab_(NULL), - ignore_next_char_event_(false) { - last_focused_view_storage_id_ = - views::ViewStorage::GetInstance()->CreateStorageID(); - SetLayoutManager(new views::FillLayout()); -} - -TabContentsViewTouch::~TabContentsViewTouch() { - // Make sure to remove any stored view we may still have in the ViewStorage. - // - // It is possible the view went away before us, so we only do this if the - // view is registered. - views::ViewStorage* view_storage = views::ViewStorage::GetInstance(); - if (view_storage->RetrieveView(last_focused_view_storage_id_) != NULL) - view_storage->RemoveView(last_focused_view_storage_id_); -} - -void TabContentsViewTouch::AttachConstrainedWindow( - ConstrainedWindowGtk* constrained_window) { - // TODO(anicolao): reimplement all dialogs as WebUI - NOTIMPLEMENTED(); -} - -void TabContentsViewTouch::RemoveConstrainedWindow( - ConstrainedWindowGtk* constrained_window) { - // TODO(anicolao): reimplement all dialogs as WebUI - NOTIMPLEMENTED(); -} - -void TabContentsViewTouch::CreateView(const gfx::Size& initial_size) { - SetBoundsRect(gfx::Rect(bounds().origin(), initial_size)); -} - -RenderWidgetHostView* TabContentsViewTouch::CreateViewForWidget( - RenderWidgetHost* render_widget_host) { - if (render_widget_host->view()) { - // During testing, the view will already be set up in most cases to the - // test view, so we don't want to clobber it with a real one. To verify that - // this actually is happening (and somebody isn't accidentally creating the - // view twice), we check for the RVH Factory, which will be set when we're - // making special ones (which go along with the special views). - DCHECK(RenderViewHostFactory::has_factory()); - return render_widget_host->view(); - } - - // If we were showing sad tab, remove it now. - if (sad_tab_ != NULL) { - RemoveChildView(sad_tab_.get()); - sad_tab_.reset(); - } - - RenderWidgetHostViewViews* view = - new RenderWidgetHostViewViews(render_widget_host); - AddChildView(view); - view->Show(); - view->InitAsChild(); - - // TODO(anicolao): implement drag'n'drop hooks if needed - - return view; -} - -gfx::NativeView TabContentsViewTouch::GetNativeView() const { - return GetWidget()->GetNativeView(); -} - -gfx::NativeView TabContentsViewTouch::GetContentNativeView() const { - RenderWidgetHostView* rwhv = tab_contents_->GetRenderWidgetHostView(); - if (!rwhv) - return NULL; - return rwhv->GetNativeView(); -} - -gfx::NativeWindow TabContentsViewTouch::GetTopLevelNativeWindow() const { - GtkWidget* window = gtk_widget_get_ancestor(GetNativeView(), GTK_TYPE_WINDOW); - return window ? GTK_WINDOW(window) : NULL; -} - -void TabContentsViewTouch::GetContainerBounds(gfx::Rect* out) const { - *out = bounds(); -} - -void TabContentsViewTouch::StartDragging(const WebDropData& drop_data, - WebDragOperationsMask ops, - const SkBitmap& image, - const gfx::Point& image_offset) { - // TODO(anicolao): implement dragging -} - -void TabContentsViewTouch::SetPageTitle(const std::wstring& title) { - // TODO(anicolao): figure out if there's anything useful to do here -} - -void TabContentsViewTouch::OnTabCrashed(base::TerminationStatus status, - int /* error_code */) { - if (sad_tab_ != NULL) - return; - - sad_tab_.reset(new SadTabView( - tab_contents_, - status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED ? - SadTabView::KILLED : SadTabView::CRASHED)); - RemoveAllChildViews(true); - AddChildView(sad_tab_.get()); - Layout(); -} - -void TabContentsViewTouch::SizeContents(const gfx::Size& size) { - WasSized(size); - - // We need to send this immediately. - RenderWidgetHostView* rwhv = tab_contents_->GetRenderWidgetHostView(); - if (rwhv) - rwhv->SetSize(size); -} - -void TabContentsViewTouch::RenderViewCreated(RenderViewHost* host) { -} - -void TabContentsViewTouch::Focus() { - if (tab_contents_->interstitial_page()) { - tab_contents_->interstitial_page()->Focus(); - return; - } - - if (tab_contents_->is_crashed() && sad_tab_ != NULL) { - sad_tab_->RequestFocus(); - return; - } - - RenderWidgetHostView* rwhv = tab_contents_->GetRenderWidgetHostView(); - if (rwhv) - rwhv->Focus(); -} - -void TabContentsViewTouch::SetInitialFocus() { - if (tab_contents_->FocusLocationBarByDefault()) - tab_contents_->SetFocusToLocationBar(false); - else - Focus(); -} - -void TabContentsViewTouch::StoreFocus() { - views::ViewStorage* view_storage = views::ViewStorage::GetInstance(); - - if (view_storage->RetrieveView(last_focused_view_storage_id_) != NULL) - view_storage->RemoveView(last_focused_view_storage_id_); - - views::FocusManager* focus_manager = GetFocusManager(); - if (focus_manager) { - // |focus_manager| can be NULL if the tab has been detached but still - // exists. - views::View* focused_view = focus_manager->GetFocusedView(); - if (focused_view) - view_storage->StoreView(last_focused_view_storage_id_, focused_view); - } -} - -void TabContentsViewTouch::RestoreFocus() { - views::ViewStorage* view_storage = views::ViewStorage::GetInstance(); - views::View* last_focused_view = - view_storage->RetrieveView(last_focused_view_storage_id_); - if (!last_focused_view) { - SetInitialFocus(); - } else { - views::FocusManager* focus_manager = GetFocusManager(); - - // If you hit this DCHECK, please report it to Jay (jcampan). - DCHECK(focus_manager != NULL) << "No focus manager when restoring focus."; - - if (last_focused_view->IsFocusableInRootView() && focus_manager && - focus_manager->ContainsView(last_focused_view)) { - last_focused_view->RequestFocus(); - } else { - // The focused view may not belong to the same window hierarchy (e.g. - // if the location bar was focused and the tab is dragged out), or it may - // no longer be focusable (e.g. if the location bar was focused and then - // we switched to fullscreen mode). In that case we default to the - // default focus. - SetInitialFocus(); - } - view_storage->RemoveView(last_focused_view_storage_id_); - } -} - -bool TabContentsViewTouch::IsDoingDrag() const { - return false; -} - -void TabContentsViewTouch::CancelDragAndCloseTab() { -} - -bool TabContentsViewTouch::IsEventTracking() const { - return false; -} - -void TabContentsViewTouch::CloseTabAfterEventTracking() { -} - -void TabContentsViewTouch::GetViewBounds(gfx::Rect* out) const { - out->SetRect(x(), y(), width(), height()); -} - -bool TabContentsViewTouch::OnMousePressed(const views::MouseEvent& event) { - if ((event.flags() & (ui::EF_LEFT_BUTTON_DOWN | - ui::EF_RIGHT_BUTTON_DOWN | - ui::EF_MIDDLE_BUTTON_DOWN))) { - return false; - } - - // It is necessary to look at the native event to determine what special - // button was pressed. - views::NativeEvent2 native_event = event.native_event_2(); - if (!native_event) - return false; - - int button = 0; - switch (native_event->type) { - case ButtonPress: { - button = native_event->xbutton.button; - break; - } - case GenericEvent: { - XIDeviceEvent* xievent = - static_cast<XIDeviceEvent*>(native_event->xcookie.data); - button = xievent->detail; - break; - } - default: - break; - } - - switch (button) { - case 8: - tab_contents_->controller().GoBack(); - return true; - case 9: - tab_contents_->controller().GoForward(); - return true; - } - - return false; -} - -void TabContentsViewTouch::OnBoundsChanged(const gfx::Rect& previous_bounds) { - if (IsVisibleInRootView()) - WasSized(size()); -} - -void TabContentsViewTouch::OnPaint(gfx::Canvas* canvas) { -} - -std::string TabContentsViewTouch::GetClassName() const { - return kViewClassName; -} - -void TabContentsViewTouch::UpdateDragCursor(WebDragOperation operation) { - NOTIMPLEMENTED(); - // It's not even clear a drag cursor will make sense for touch. - // TODO(anicolao): implement dragging -} - -void TabContentsViewTouch::GotFocus() { - if (tab_contents_->delegate()) - tab_contents_->delegate()->TabContentsFocused(tab_contents_); -} - -void TabContentsViewTouch::TakeFocus(bool reverse) { - if (tab_contents_->delegate() && - !tab_contents_->delegate()->TakeFocus(reverse)) { - - views::FocusManager* focus_manager = GetFocusManager(); - - // We may not have a focus manager if the tab has been switched before this - // message arrived. - if (focus_manager) - focus_manager->AdvanceFocus(reverse); - } -} - -void TabContentsViewTouch::VisibilityChanged(views::View *, bool is_visible) { - if (is_visible) { - WasShown(); - } else { - WasHidden(); - } -} - - -void TabContentsViewTouch::CreateNewWindow( - int route_id, - const ViewHostMsg_CreateWindow_Params& params) { - delegate_view_helper_.CreateNewWindowFromTabContents( - tab_contents_, route_id, params); -} - -void TabContentsViewTouch::CreateNewWidget( - int route_id, WebKit::WebPopupType popup_type) { - delegate_view_helper_.CreateNewWidget(route_id, popup_type, - tab_contents_->render_view_host()->process()); -} - -void TabContentsViewTouch::CreateNewFullscreenWidget(int route_id) { - delegate_view_helper_.CreateNewFullscreenWidget( - route_id, tab_contents_->render_view_host()->process()); -} - -void TabContentsViewTouch::ShowCreatedWindow(int route_id, - WindowOpenDisposition disposition, - const gfx::Rect& initial_pos, - bool user_gesture) { - delegate_view_helper_.ShowCreatedWindow( - tab_contents_, route_id, disposition, initial_pos, user_gesture); -} - -void TabContentsViewTouch::ShowCreatedWidget( - int route_id, const gfx::Rect& initial_pos) { - delegate_view_helper_.ShowCreatedWidget( - tab_contents_, route_id, initial_pos); -} - -void TabContentsViewTouch::ShowCreatedFullscreenWidget(int route_id) { - delegate_view_helper_.ShowCreatedFullscreenWidget(tab_contents_, route_id); -} - -void TabContentsViewTouch::ShowContextMenu(const ContextMenuParams& params) { - // Allow delegates to handle the context menu operation first. - if (tab_contents_->delegate() && - tab_contents_->delegate()->HandleContextMenu(params)) - return; - - context_menu_.reset(new RenderViewContextMenuViews(tab_contents_, params)); - context_menu_->Init(); - - gfx::Point screen_point(params.x, params.y); - RenderWidgetHostViewViews* rwhv = static_cast<RenderWidgetHostViewViews*> - (tab_contents_->GetRenderWidgetHostView()); - if (rwhv) { - views::View::ConvertPointToScreen(rwhv, &screen_point); - } - - // Enable recursive tasks on the message loop so we can get updates while - // the context menu is being displayed. - bool old_state = MessageLoop::current()->NestableTasksAllowed(); - MessageLoop::current()->SetNestableTasksAllowed(true); - context_menu_->RunMenuAt(screen_point.x(), screen_point.y()); - MessageLoop::current()->SetNestableTasksAllowed(old_state); -} - -void TabContentsViewTouch::ShowPopupMenu(const gfx::Rect& bounds, - int item_height, - double item_font_size, - int selected_item, - const std::vector<WebMenuItem>& items, - bool right_aligned) { - // External popup menus are only used on Mac. - NOTREACHED(); -} - -void TabContentsViewTouch::WasHidden() { - tab_contents_->HideContents(); -} - -void TabContentsViewTouch::WasShown() { - tab_contents_->ShowContents(); -} - -void TabContentsViewTouch::WasSized(const gfx::Size& size) { - // We have to check that the RenderWidgetHostView is the proper size. - // It can be wrong in cases where the renderer has died and the host - // view needed to be recreated. - bool needs_resize = size != size_; - - if (needs_resize) { - size_ = size; - if (tab_contents_->interstitial_page()) - tab_contents_->interstitial_page()->SetSize(size); - } - - RenderWidgetHostView* rwhv = tab_contents_->GetRenderWidgetHostView(); - if (rwhv && rwhv->GetViewBounds().size() != size) - rwhv->SetSize(size); - - if (needs_resize) - SetFloatingPosition(size); -} - -void TabContentsViewTouch::SetFloatingPosition(const gfx::Size& size) { - // TODO(anicolao): rework this once we have WebUI views for dialogs - SetBounds(x(), y(), size.width(), size.height()); -} diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h b/chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h deleted file mode 100644 index 6397668..0000000 --- a/chrome/browser/ui/views/tab_contents/tab_contents_view_touch.h +++ /dev/null @@ -1,160 +0,0 @@ -// 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. - -#ifndef CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_TOUCH_H_ -#define CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_TOUCH_H_ -#pragma once - -#include <vector> - -#include "base/memory/scoped_ptr.h" -#include "chrome/browser/tab_contents/render_view_host_delegate_helper.h" -#include "content/browser/tab_contents/tab_contents_view.h" -#include "ui/gfx/size.h" -#include "views/view.h" - -class ConstrainedWindowGtk; -typedef struct _GtkFloatingContainer GtkFloatingContainer; -class RenderViewContextMenuViews; -class SadTabView; -class SkBitmap; -class TabContentsDragSource; -class WebDragDestGtk; - -namespace gfx { -class Point; -} // namespace gfx - -namespace views { -class MouseEvent; -class NativeViewHost; -} // namespace views - -// Touch-specific implementation of the TabContentsView for the touch UI. -class TabContentsViewTouch : public TabContentsView, public views::View { - public: - // Internal class name - static const char kViewClassName[]; - - // The corresponding TabContents is passed in the constructor, and manages our - // lifetime. This doesn't need to be the case, but is this way currently - // because that's what was easiest when they were split. - explicit TabContentsViewTouch(TabContents* tab_contents); - virtual ~TabContentsViewTouch(); - - // Unlike Windows, ConstrainedWindows need to collaborate with the - // TabContentsViewTouch to position the dialogs. - void AttachConstrainedWindow(ConstrainedWindowGtk* constrained_window); - void RemoveConstrainedWindow(ConstrainedWindowGtk* constrained_window); - - // TabContentsView implementation - virtual void CreateView(const gfx::Size& initial_size) OVERRIDE; - virtual RenderWidgetHostView* CreateViewForWidget( - RenderWidgetHost* render_widget_host) OVERRIDE; - virtual gfx::NativeView GetNativeView() const OVERRIDE; - virtual gfx::NativeView GetContentNativeView() const OVERRIDE; - virtual gfx::NativeWindow GetTopLevelNativeWindow() const OVERRIDE; - virtual void GetContainerBounds(gfx::Rect* out) const OVERRIDE; - virtual void SetPageTitle(const std::wstring& title) OVERRIDE; - virtual void OnTabCrashed(base::TerminationStatus status, - int error_code) OVERRIDE; - virtual void SizeContents(const gfx::Size& size) OVERRIDE; - virtual void RenderViewCreated(RenderViewHost* host) OVERRIDE; - virtual void Focus() OVERRIDE; - virtual void SetInitialFocus() OVERRIDE; - virtual void StoreFocus() OVERRIDE; - virtual void RestoreFocus() OVERRIDE; - virtual bool IsDoingDrag() const OVERRIDE; - virtual void CancelDragAndCloseTab() OVERRIDE; - virtual bool IsEventTracking() const OVERRIDE; - virtual void CloseTabAfterEventTracking() OVERRIDE; - virtual void GetViewBounds(gfx::Rect* out) const OVERRIDE; - - // views::View implementation - virtual bool OnMousePressed(const views::MouseEvent& event) OVERRIDE; - virtual void OnBoundsChanged(const gfx::Rect& previous_bounds) OVERRIDE; - virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; - virtual std::string GetClassName() const OVERRIDE; - - // Backend implementation of RenderViewHostDelegate::View. - virtual void CreateNewWindow( - int route_id, - const ViewHostMsg_CreateWindow_Params& params); - virtual void CreateNewWidget(int route_id, WebKit::WebPopupType popup_type); - virtual void CreateNewFullscreenWidget(int route_id); - virtual void ShowCreatedWindow(int route_id, - WindowOpenDisposition disposition, - const gfx::Rect& initial_pos, - bool user_gesture); - virtual void ShowCreatedWidget(int route_id, const gfx::Rect& initial_pos); - virtual void ShowCreatedFullscreenWidget(int route_id); - virtual void ShowContextMenu(const ContextMenuParams& params); - virtual void ShowPopupMenu(const gfx::Rect& bounds, - int item_height, - double item_font_size, - int selected_item, - const std::vector<WebMenuItem>& items, - bool right_aligned) OVERRIDE; - virtual void StartDragging(const WebDropData& drop_data, - WebKit::WebDragOperationsMask ops_allowed, - const SkBitmap& image, - const gfx::Point& image_offset) OVERRIDE; - virtual void UpdateDragCursor(WebKit::WebDragOperation operation) OVERRIDE; - virtual void GotFocus() OVERRIDE; - virtual void TakeFocus(bool reverse) OVERRIDE; - virtual void VisibilityChanged(views::View *, bool is_visible) OVERRIDE; - - private: - // Signal handlers ----------------------------------------------------------- - - // Handles notifying the TabContents and other operations when the window was - // shown or hidden. - void WasHidden(); - void WasShown(); - - // Handles resizing of the contents. This will notify the RenderWidgetHostView - // of the change, reposition popups, and the find in page bar. - void WasSized(const gfx::Size& size); - - // For any floating views (ConstrainedDialogs) this function centers them - // within this view. It's called whem a ConstrainedDialog is attached and - // when this view is resized. - void SetFloatingPosition(const gfx::Size& size); - - // The TabContents whose contents we display. - TabContents* tab_contents_; - - // Common implementations of some RenderViewHostDelegate::View methods. - RenderViewHostDelegateViewHelper delegate_view_helper_; - - // Used to render the sad tab. This will be non-NULL only when the sad tab is - // visible. - scoped_ptr<SadTabView> sad_tab_; - - // Whether to ignore the next CHAR keyboard event. - bool ignore_next_char_event_; - - // The id used in the ViewStorage to store the last focused view. - int last_focused_view_storage_id_; - - // The context menu. Callbacks are asynchronous so we need to keep it around. - scoped_ptr<RenderViewContextMenuViews> context_menu_; - - // Handle drags from this TabContentsView. - // TODO(anicolao): figure out what's needed for drag'n'drop - - // The event for the last mouse down we handled. We need this for drags. - GdkEventButton last_mouse_down_; - - // Current size. See comment in NativeWidgetGtk as to why this is cached. - gfx::Size size_; - - // Each individual UI for constrained dialogs currently displayed. The - // objects in this vector are owned by the TabContents, not the view. - std::vector<ConstrainedWindowGtk*> constrained_windows_; - - DISALLOW_COPY_AND_ASSIGN(TabContentsViewTouch); -}; - -#endif // CHROME_BROWSER_UI_VIEWS_TAB_CONTENTS_TAB_CONTENTS_VIEW_TOUCH_H_ diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc b/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc index 0eab11bb..117ba35 100644 --- a/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc +++ b/chrome/browser/ui/views/tab_contents/tab_contents_view_views.cc @@ -52,10 +52,17 @@ TabContentsViewViews::~TabContentsViewViews() { view_storage->RemoveView(last_focused_view_storage_id_); } +void TabContentsViewViews::AttachConstrainedWindow( + ConstrainedWindowGtk* constrained_window) { +} +void TabContentsViewViews::RemoveConstrainedWindow( + ConstrainedWindowGtk* constrained_window) { +} + void TabContentsViewViews::Unparent() { // Remember who our FocusManager is, we won't be able to access it once // un-parented. - focus_manager_ = GetFocusManager(); + focus_manager_ = Widget::GetFocusManager(); CHECK(native_tab_contents_view_); native_tab_contents_view_->Unparent(); } @@ -164,10 +171,15 @@ void TabContentsViewViews::Focus() { } RenderWidgetHostView* rwhv = tab_contents_->GetRenderWidgetHostView(); - views::FocusManager* focus_manager = GetFocusManager(); - if (focus_manager) - focus_manager->FocusNativeView(rwhv ? rwhv->GetNativeView() - : GetNativeView()); + if (rwhv) { + rwhv->Focus(); + } else { + views::FocusManager* focus_manager = GetFocusManager(); + // TODO(oshima): There is no native view for RWHVViews. + // Consider Widget::Focus(). + if (focus_manager) + focus_manager->FocusNativeView(GetNativeView()); + } } void TabContentsViewViews::SetInitialFocus() { @@ -254,7 +266,8 @@ void TabContentsViewViews::GotFocus() { } void TabContentsViewViews::TakeFocus(bool reverse) { - if (!tab_contents_->delegate()->TakeFocus(reverse)) { + if (tab_contents_->delegate() && + !tab_contents_->delegate()->TakeFocus(reverse)) { views::FocusManager* focus_manager = GetFocusManager(); // We may not have a focus manager if the tab has been switched before this diff --git a/chrome/browser/ui/views/tab_contents/tab_contents_view_views.h b/chrome/browser/ui/views/tab_contents/tab_contents_view_views.h index b41f796..fa29b6a 100644 --- a/chrome/browser/ui/views/tab_contents/tab_contents_view_views.h +++ b/chrome/browser/ui/views/tab_contents/tab_contents_view_views.h @@ -13,6 +13,7 @@ #include "content/browser/tab_contents/tab_contents_view.h" #include "views/widget/widget.h" +class ConstrainedWindowGtk; class NativeTabContentsView; class RenderViewContextMenuViews; class SadTabView; @@ -39,6 +40,11 @@ class TabContentsViewViews : public views::Widget, explicit TabContentsViewViews(TabContents* tab_contents); virtual ~TabContentsViewViews(); + // Intermediate code to pass comiplation. This will be removed as a + // part of ConstraintWindow change (http://codereview.chromium.org/7631049). + void AttachConstrainedWindow(ConstrainedWindowGtk* constrained_window); + void RemoveConstrainedWindow(ConstrainedWindowGtk* constrained_window); + // Reset the native parent of this view to NULL. Unparented windows should // not receive any messages. virtual void Unparent(); |