Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(529)

Unified Diff: chrome/browser/renderer_host/render_widget_host.cc

Issue 147246: Linux: middle-click to navigate (Closed)
Patch Set: ... Created 11 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/renderer_host/render_widget_host.cc
diff --git a/chrome/browser/renderer_host/render_widget_host.cc b/chrome/browser/renderer_host/render_widget_host.cc
index da18bd86582d1f681ca00718f76babb285236043..464e3639c325c96cce0a109b71e218e877d61a06 100644
--- a/chrome/browser/renderer_host/render_widget_host.cc
+++ b/chrome/browser/renderer_host/render_widget_host.cc
@@ -331,6 +331,13 @@ void RenderWidgetHost::ForwardMouseEvent(const WebMouseEvent& mouse_event) {
OnUserGesture();
}
+ if (mouse_event.type == WebInputEvent::MouseUp ||
+ mouse_event.type == WebInputEvent::MouseDown) {
+ // We keep track of these events in case the renderer doesn't handle them.
+ // In that case we can then implement some default behaviour.
+ mouse_button_queue_.push(new WebMouseEvent(mouse_event));
+ }
+
ForwardInputEvent(mouse_event, sizeof(WebMouseEvent));
}
@@ -669,6 +676,10 @@ void RenderWidgetHost::OnMsgInputEventAck(const IPC::Message& message) {
bool r = message.ReadInt(&iter, &type);
DCHECK(r);
+ bool processed = false;
+ r = message.ReadBool(&iter, &processed);
+ DCHECK(r);
+
if (type == WebInputEvent::MouseMove) {
mouse_move_pending_ = false;
@@ -677,9 +688,22 @@ void RenderWidgetHost::OnMsgInputEventAck(const IPC::Message& message) {
DCHECK(next_mouse_move_->type == WebInputEvent::MouseMove);
ForwardMouseEvent(*next_mouse_move_);
}
- }
+ } else if (type == WebInputEvent::MouseDown ||
+ type == WebInputEvent::MouseUp) {
+ if (mouse_button_queue_.size() == 0 ||
+ mouse_button_queue_.front()->type != type) {
+ LOG(ERROR) << "We got a mouse event from the renderer, but we don't "
+ "remember sending it!";
+ } else {
+ const MouseButtonQueue::value_type front_item =
+ mouse_button_queue_.front();
+ mouse_button_queue_.pop();
- if (WebInputEvent::isKeyboardEventType(type)) {
+ if (!processed)
+ UnhandledMouseButtonEvent(front_item);
+ delete front_item;
+ }
+ } else if (WebInputEvent::isKeyboardEventType(type)) {
if (key_queue_.size() == 0) {
LOG(ERROR) << "Got a KeyEvent back from the renderer but we "
<< "don't seem to have sent it to the renderer!";
@@ -688,10 +712,6 @@ void RenderWidgetHost::OnMsgInputEventAck(const IPC::Message& message) {
<< "the renderer. (" << key_queue_.front().type << " vs. "
<< type << "). Ignoring event.";
} else {
- bool processed = false;
- r = message.ReadBool(&iter, &processed);
- DCHECK(r);
-
KeyQueue::value_type front_item = key_queue_.front();
key_queue_.pop();
« no previous file with comments | « chrome/browser/renderer_host/render_widget_host.h ('k') | chrome/browser/tab_contents/tab_contents_view_gtk.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698