瀏覽代碼

WebContent: Update mouse event data when coalescing consecutive events

When we coalesce mouse wheel events, we need to be sure to include the
previous event's wheel deltas. This was errantly excluded in commit
baf359354b4f55b33372951a2a60f797ad071071.
Timothy Flynn 1 年之前
父節點
當前提交
18b71a363a
共有 1 個文件被更改,包括 16 次插入11 次删除
  1. 16 11
      Userland/Services/WebContent/ConnectionFromClient.cpp

+ 16 - 11
Userland/Services/WebContent/ConnectionFromClient.cpp

@@ -278,24 +278,29 @@ void ConnectionFromClient::key_event(u64 page_id, Web::KeyEvent const& event)
 void ConnectionFromClient::mouse_event(u64 page_id, Web::MouseEvent const& event)
 void ConnectionFromClient::mouse_event(u64 page_id, Web::MouseEvent const& event)
 {
 {
     // OPTIMIZATION: Coalesce consecutive unprocessed mouse move and wheel events.
     // OPTIMIZATION: Coalesce consecutive unprocessed mouse move and wheel events.
-    auto should_coalesce = [&]() {
+    auto event_to_coalesce = [&]() -> Web::MouseEvent const* {
         if (m_input_event_queue.is_empty())
         if (m_input_event_queue.is_empty())
-            return false;
+            return nullptr;
+        if (m_input_event_queue.tail().page_id != page_id)
+            return nullptr;
 
 
         if (event.type != Web::MouseEvent::Type::MouseMove && event.type != Web::MouseEvent::Type::MouseWheel)
         if (event.type != Web::MouseEvent::Type::MouseMove && event.type != Web::MouseEvent::Type::MouseWheel)
-            return false;
-
-        if (m_input_event_queue.tail().page_id != page_id)
-            return false;
+            return nullptr;
 
 
-        if (auto* mouse_event = m_input_event_queue.tail().event.get_pointer<Web::MouseEvent>())
-            return mouse_event->type == event.type;
+        if (auto const* mouse_event = m_input_event_queue.tail().event.get_pointer<Web::MouseEvent>()) {
+            if (mouse_event->type == event.type)
+                return mouse_event;
+        }
 
 
-        return false;
+        return nullptr;
     };
     };
 
 
-    if (should_coalesce()) {
-        m_input_event_queue.tail().event = move(const_cast<Web::MouseEvent&>(event));
+    if (auto const* last_mouse_event = event_to_coalesce()) {
+        auto& mutable_event = const_cast<Web::MouseEvent&>(event);
+        mutable_event.wheel_delta_x += last_mouse_event->wheel_delta_x;
+        mutable_event.wheel_delta_y += last_mouse_event->wheel_delta_y;
+
+        m_input_event_queue.tail().event = move(mutable_event);
         ++m_input_event_queue.tail().coalesced_event_count;
         ++m_input_event_queue.tail().coalesced_event_count;
 
 
         return;
         return;