| Index: chrome/browser/renderer_host/render_widget_host_view_gtk.cc
|
| ===================================================================
|
| --- chrome/browser/renderer_host/render_widget_host_view_gtk.cc (revision 17106)
|
| +++ chrome/browser/renderer_host/render_widget_host_view_gtk.cc (working copy)
|
| @@ -15,6 +15,7 @@
|
| #include "base/message_loop.h"
|
| #include "base/string_util.h"
|
| #include "base/task.h"
|
| +#include "base/time.h"
|
| #include "chrome/common/native_web_keyboard_event.h"
|
| #include "chrome/common/render_messages.h"
|
| #include "chrome/common/x11_util.h"
|
| @@ -113,6 +114,26 @@
|
|
|
| static gboolean OnFocusIn(GtkWidget* widget, GdkEventFocus* focus,
|
| RenderWidgetHostViewGtk* host_view) {
|
| + int x, y;
|
| + gtk_widget_get_pointer(widget, &x, &y);
|
| + // If the cursor is in the render view, fake a mouse move event so that
|
| + // webkit updates its state. Otherwise webkit might think the cursor is
|
| + // somewhere it's not.
|
| + if (x >= 0 && y >= 0 && x < widget->allocation.width &&
|
| + y < widget->allocation.height) {
|
| + WebKit::WebMouseEvent fake_event;
|
| + fake_event.timeStampSeconds = base::Time::Now().ToDoubleT();
|
| + fake_event.modifiers = 0;
|
| + fake_event.windowX = fake_event.x = x;
|
| + fake_event.windowY = fake_event.y = y;
|
| + gdk_window_get_origin(widget->window, &x, &y);
|
| + fake_event.globalX = fake_event.x + x;
|
| + fake_event.globalY = fake_event.y + y;
|
| + fake_event.type = WebKit::WebInputEvent::MouseMove;
|
| + fake_event.button = WebKit::WebMouseEvent::ButtonNone;
|
| + host_view->GetRenderWidgetHost()->ForwardMouseEvent(fake_event);
|
| + }
|
| +
|
| host_view->ShowCurrentCursor();
|
| host_view->GetRenderWidgetHost()->Focus();
|
| return FALSE;
|
|
|