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

Unified Diff: ui/events/ozone/evdev/event_converter_evdev_impl.cc

Issue 1017473002: [Merge] Make mouse buttons 8 - 11 navigate forward and back in history (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2311
Patch Set: Created 5 years, 9 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: ui/events/ozone/evdev/event_converter_evdev_impl.cc
diff --git a/ui/events/ozone/evdev/event_converter_evdev_impl.cc b/ui/events/ozone/evdev/event_converter_evdev_impl.cc
index 561b393319fe4200d719dacaa8f0abded6b5650e..f6bb26687c8bb09642852fb21f4da93bec2c8a81 100644
--- a/ui/events/ozone/evdev/event_converter_evdev_impl.cc
+++ b/ui/events/ozone/evdev/event_converter_evdev_impl.cc
@@ -109,6 +109,7 @@ void EventConverterEvdevImpl::AllowAllKeys() {
void EventConverterEvdevImpl::OnStopped() {
ReleaseKeys();
+ ReleaseMouseButtons();
}
void EventConverterEvdevImpl::ProcessEvents(const input_event* inputs,
@@ -175,10 +176,7 @@ void EventConverterEvdevImpl::OnKeyChange(unsigned int key,
return;
// State transition: !(down) -> (down)
- if (down)
- key_state_.set(key);
- else
- key_state_.reset(key);
+ key_state_.set(key, down);
dispatcher_->DispatchKeyEvent(KeyEventParams(id_, key, down, timestamp));
}
@@ -189,21 +187,45 @@ void EventConverterEvdevImpl::ReleaseKeys() {
OnKeyChange(key, false /* down */, timestamp);
}
+void EventConverterEvdevImpl::ReleaseMouseButtons() {
+ base::TimeDelta timestamp = ui::EventTimeForNow();
+ for (int code = BTN_MOUSE; code < BTN_JOYSTICK; ++code)
+ OnButtonChange(code, false /* down */, timestamp);
+}
+
void EventConverterEvdevImpl::OnLostSync() {
LOG(WARNING) << "kernel dropped input events";
// We may have missed key releases. Release everything.
// TODO(spang): Use EVIOCGKEY to avoid releasing keys that are still held.
ReleaseKeys();
+ ReleaseMouseButtons();
}
void EventConverterEvdevImpl::DispatchMouseButton(const input_event& input) {
if (!cursor_)
return;
- dispatcher_->DispatchMouseButtonEvent(MouseButtonEventParams(
- id_, cursor_->GetLocation(), input.code, input.value,
- /* allow_remap */ true, TimeDeltaFromInputEvent(input)));
+ OnButtonChange(input.code, input.value, TimeDeltaFromInputEvent(input));
+}
+
+void EventConverterEvdevImpl::OnButtonChange(int code,
+ bool down,
+ const base::TimeDelta& timestamp) {
+ if (code == BTN_SIDE)
+ code = BTN_BACK;
+ else if (code == BTN_EXTRA)
+ code = BTN_FORWARD;
+
+ int button_offset = code - BTN_MOUSE;
+ if (mouse_button_state_.test(button_offset) == down)
+ return;
+
+ mouse_button_state_.set(button_offset, down);
+
+ dispatcher_->DispatchMouseButtonEvent(
+ MouseButtonEventParams(id_, cursor_->GetLocation(), code, down,
+ /* allow_remap */ true, timestamp));
}
void EventConverterEvdevImpl::FlushEvents(const input_event& input) {
« no previous file with comments | « ui/events/ozone/evdev/event_converter_evdev_impl.h ('k') | ui/events/ozone/evdev/event_converter_evdev_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698