Index: chrome/browser/renderer_host/render_widget_host_view_views.cc |
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 7bf7b9d26148a95e91f068ab290fad624b015023..3d7cc05781beb6793f92fc60033ccc1103d75d62 100644 |
--- a/chrome/browser/renderer_host/render_widget_host_view_views.cc |
+++ b/chrome/browser/renderer_host/render_widget_host_view_views.cc |
@@ -40,12 +40,18 @@ |
#include <gtk/gtk.h> |
#include <gtk/gtkwindow.h> |
#include <gdk/gdkx.h> |
+#include "content/browser/renderer_host/gtk_window_utils.h" |
+#include "views/widget/native_widget_gtk.h" |
#endif |
#if defined(TOUCH_UI) |
#include "chrome/browser/renderer_host/accelerated_surface_container_touch.h" |
#endif |
+#if defined(OS_POSIX) |
+#include "content/browser/renderer_host/gtk_window_utils.h" |
+#endif |
+ |
static const int kMaxWindowWidth = 4000; |
static const int kMaxWindowHeight = 4000; |
static const int kTouchControllerUpdateDelay = 150; |
@@ -770,7 +776,7 @@ void RenderWidgetHostViewViews::OnPaint(gfx::Canvas* canvas) { |
paint_rect = paint_rect.Intersect(invalid_rect_); |
if (backing_store) { |
-#if defined(TOOLKIT_USES_GTK) |
+#if defined(TOOLKIT_USES_GTK) && !defined(USE_AURA) |
// 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... |
@@ -790,7 +796,7 @@ void RenderWidgetHostViewViews::OnPaint(gfx::Canvas* canvas) { |
// TODO(sad) |
NOTIMPLEMENTED(); |
} |
-#if defined(TOOLKIT_USES_GTK) |
+#if defined(TOOLKIT_USES_GTK) && !defined(USE_AURA) |
} |
#endif |
if (!whiteout_start_time_.is_null()) { |
@@ -901,3 +907,107 @@ void RenderWidgetHostViewViews::UpdateTouchSelectionController() { |
touch_selection_controller_->SelectionChanged(selection_start_, |
selection_end_); |
} |
+ |
+#if !defined(OS_WIN) |
+void RenderWidgetHostViewViews::UpdateCursor(const WebCursor& cursor) { |
+ // Optimize the common case, where the cursor hasn't changed. |
+ // However, we can switch between different pixmaps, so only on the |
+ // non-pixmap branch. |
+ if (current_cursor_.GetCursorType() != GDK_CURSOR_IS_PIXMAP && |
+ current_cursor_.GetCursorType() == cursor.GetCursorType()) { |
+ return; |
+ } |
+ |
+ current_cursor_ = cursor; |
+ ShowCurrentCursor(); |
+} |
+ |
+void RenderWidgetHostViewViews::ShowCurrentCursor() { |
+#if !defined(USE_AURA) |
+ // 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) |
+ return; |
+#endif |
+ |
+ native_cursor_ = current_cursor_.GetNativeCursor(); |
+} |
+ |
+gfx::NativeView RenderWidgetHostViewViews::GetInnerNativeView() const { |
+#if defined(USE_AURA) |
+ return NULL; |
+#else |
+ 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; |
+#endif |
+} |
+#endif // !OS_WIN |
+ |
+#if defined(TOOLKIT_USES_GTK) |
+void RenderWidgetHostViewViews::CreatePluginContainer( |
+ gfx::PluginWindowHandle id) { |
+ // TODO(anicolao): plugin_container_manager_.CreatePluginContainer(id); |
+} |
+ |
+void RenderWidgetHostViewViews::DestroyPluginContainer( |
+ gfx::PluginWindowHandle id) { |
+ // TODO(anicolao): plugin_container_manager_.DestroyPluginContainer(id); |
+} |
+ |
+void RenderWidgetHostViewViews::AcceleratedCompositingActivated( |
+ bool activated) { |
+ // TODO(anicolao): figure out if we need something here |
+ if (activated) |
+ NOTIMPLEMENTED(); |
+} |
+#endif // TOOLKIT_USES_GTK |
+ |
+#if defined(OS_POSIX) |
+void RenderWidgetHostViewViews::GetDefaultScreenInfo( |
+ WebKit::WebScreenInfo* results) { |
+ NOTIMPLEMENTED(); |
+} |
+ |
+void RenderWidgetHostViewViews::GetScreenInfo(WebKit::WebScreenInfo* results) { |
+#if !defined(USE_AURA) |
+ views::Widget* widget = GetWidget() ? GetWidget()->GetTopLevelWidget() : NULL; |
+ if (widget) |
+ content::GetScreenInfoFromNativeWindow(widget->GetNativeView()->window, |
+ results); |
+#endif |
+} |
+ |
+gfx::Rect RenderWidgetHostViewViews::GetRootWindowBounds() { |
+ views::Widget* widget = GetWidget() ? GetWidget()->GetTopLevelWidget() : NULL; |
+ return widget ? widget->GetWindowScreenBounds() : gfx::Rect(); |
+} |
+#endif |
+ |
+#if !defined(TOUCH_UI) && !defined(OS_WIN) |
+gfx::PluginWindowHandle RenderWidgetHostViewViews::GetCompositingSurface() { |
+ // TODO(oshima): The original implementation was broken as |
+ // GtkNativeViewManager doesn't know about NativeWidgetGtk. Figure |
+ // out if this makes sense without compositor. If it does, then find |
+ // out the right way to handle. |
+ NOTIMPLEMENTED(); |
+ return gfx::kNullPluginWindow; |
+} |
+#endif |
+ |
+#if defined(USE_AURA) |
+// static |
+RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( |
+ RenderWidgetHost* widget) { |
+ return new RenderWidgetHostViewViews(widget); |
+} |
+#endif |