From nobody Sat Apr 11 21:52:35 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1774976946; cv=none; d=zohomail.com; s=zohoarc; b=aliCWxvdQAtEpd6v/kajFH8lfVIAbS39wkUoUM5wtPy7X8WiWPzxs+vjE55cfw6jgsku5vgTq2z3ZYynfYKFCU18Z050hXDTRlH/OYeWuyKIt4yBQV+N1KFTOXzUY2GZwgb9L8GtrjXtKqQOqHJs3RwXuDKcibDGYo1VX5sx7PA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1774976946; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=t6Oeyhq61VM068HLUikqnd7NmAFwnBHXZU5fNxj+eTU=; b=EhjcoJec289rdZIfklUOSTurnN+/q8GFwwmcUaGoKzJWlq/iunPZL2c+WQY18pDjs1Y+kxMirUYzxo2FH24c/SXLqac0m8R0rdRdizbaOZG9uXVd764dDGMMKHfc7w4TBFF7M9pqCo+3vkCzU1gwl1xYV4RIwkiV/I5E08ac7RI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177497694617824.52068709634659; Tue, 31 Mar 2026 10:09:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w7ca3-0003Zi-28; Tue, 31 Mar 2026 13:08:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w7ca0-0003ZD-TN for qemu-devel@nongnu.org; Tue, 31 Mar 2026 13:08:40 -0400 Received: from mail-pf1-x442.google.com ([2607:f8b0:4864:20::442]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w7cZz-0003BZ-Bc for qemu-devel@nongnu.org; Tue, 31 Mar 2026 13:08:40 -0400 Received: by mail-pf1-x442.google.com with SMTP id d2e1a72fcca58-82cd9d0eceaso829347b3a.3 for ; Tue, 31 Mar 2026 10:08:38 -0700 (PDT) Received: from fedora ([103.2.232.250]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-82ca843b818sm13647889b3a.6.2026.03.31.10.08.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Mar 2026 10:08:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774976917; x=1775581717; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=t6Oeyhq61VM068HLUikqnd7NmAFwnBHXZU5fNxj+eTU=; b=V8Z6Wv4XUPaIzvGvJE9kvcLtRVXnpQ03FNvit33g4d8cH2HAXDds5UrU2VQ92w6CBg rDAhdyc/Li6OWaAgBhC73s0YNnfAEftKlGhGfU8pfMCrdE0Wd4XEJ6zzOvR8+O4AY+30 rFTj6VCE3ukztu+TK/npvEIwavCTENUz1c/HZWdO7VFMVQKZtJCsHWzXZ5rxkV8PRhMb 2IMFYF0nccpU4tARwLE4Fe+cbXUq6ZhrehiX7A/8U8GONFmZg0ggaIUo0dRt8POYJC61 d5Wm/sa36e/M5iEWCBWdLzoSdSYc+KTsh2/P5y2SRHB614HxFlQCp6NIFnH4Z6N59dBM CXNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774976917; x=1775581717; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=t6Oeyhq61VM068HLUikqnd7NmAFwnBHXZU5fNxj+eTU=; b=XI0IA6UZ/p1rl1lqoC4TrmDaNmzUXJ8+7vt9ORasPdGycsj1aPlux+gUUH1pR17ToQ pul0aQ4E9oD00J6Qii+TSdXC4RvrWQvmiFmaTCD4/VSB47r6luClsP/ClPK2Q3VBIb+o WykOdbMdBmZmZnsRt3D2D5BCyBQHqJhpsm1PKUC83VQFS5bJi8QUfkKyCRswOuNainYc zEyFEHsbMH2O+OzY5w6Gy37ieUJFz5jB33CTcenzY8ggfRbhWc33FsQls/xK4f3JtBRs GgLJXl/kEJb8DyWdDBPvwzlzO7zMCepdA8R91pC5mH5w0FiXH65tD59dNC2tw78H5neT JOXg== X-Gm-Message-State: AOJu0Ywiw4nfODSmX5GalzxhN2khLCEnOIyADgdueOoZ997TDOwoZA6Y e/a/Rhp97w4u/nXOFAnr9bnkL5JyN60PWb1Py01YI3c4BsR6Zqv/GNKTVm/KmSUJ X-Gm-Gg: ATEYQzwbmVjBXEt9GRU1Z9pDd/MeVOBY5/NLv2ziHbQ9LAkzXpvqpJ4j9jDUyhlboiR GYSXjSjN1XRC2q7AdTJbWyJUzazdHKHXrEmb1SfAIvv9XVAr4e6S4nmzw2Ip11Wyz1hsYjoTRKd rEgTGS09YMcqDgcn56NkXDQZdR72i1wJwGWui1KvfrdeJ/PNHq8CMocivZNGmLZfV30pu6UTRJw Pn1y7UPuWMc4jDQWsrkXm4xrvY7k0VX4w0OiDAw50zYzePD2HBSgrSenEvDfqhCU/BiFN3aZ5A7 SYzW3gZGRUFcpsPEqDwJUpIVmPoeu2K1VPW6BYBXS+3oHJWr2aP+9/6e+Hbgsa/5J0PqO1IW1ss glXriEv+NpCHmEuLPZPDVH7l6ZZwWfBinH5w2kDov1TmXx2ElT7lX9DAHSAZul3gZzlUdA8SpwD 5/qY8ULn70mu6ocLtbhzLEUBlxwMIAiO8/F1jXR4RReEZTpBbzG5DR08BfT1oUhvU3rsBYUpszG ZAoCXzK5ugmZbhkPJsEUm6kgKUezkNLkbLmE2lUHV/ttlAzCReP5Md8Zud+xuvBycrABdRpcw== X-Received: by 2002:a05:6a00:bd03:b0:82a:8865:6fe6 with SMTP id d2e1a72fcca58-82ce8af75f9mr335102b3a.28.1774976917084; Tue, 31 Mar 2026 10:08:37 -0700 (PDT) From: Soumyajyotii Ssarkar To: qemu-devel@nongnu.org Cc: Richard Henderson , Paolo Bonzini , Soumyajyotii Ssarkar , Michael Tokarev , Thomas Lambertz , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Alex Golovko , ShengYi Hung , Soumyajyotii Ssarkar Subject: [RFC PATCH 1/5] input/hid: add horizontal pan to pointer event path Date: Tue, 31 Mar 2026 22:38:19 +0530 Message-ID: <20260331170823.72511-2-soumyajyotisarkar23@gmail.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260331170823.72511-1-soumyajyotisarkar23@gmail.com> References: <20260331170823.72511-1-soumyajyotisarkar23@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::442; envelope-from=soumyajyotisarkar23@gmail.com; helo=mail-pf1-x442.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1774976948382154100 Content-Type: text/plain; charset="utf-8" Add support for horizontal wheel scrolling (pan) in the HID mouse implementation. Extend the HIDPointerEvent structure with "pan" field to track horizontal scroll deltas, similar to the existing 'dz' field for vertical scrolling. Map INPUT_BUTTON_WHEEL_LEFT and INPUT_BUTTON_WHEEL_RIGHT to pan delta changes in the event handler. Integrate pan field handling into event compression logic and queue management to ensure consistent behavior with vertical wheel events. This changes enables subsequent patches to implement multiplier based scaling and protocol aware reporting for horizontal scrolling. Signed-off-by: Soumyajyotii Ssarkar --- hw/input/hid.c | 13 ++++++++++++- include/hw/input/hid.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/hw/input/hid.c b/hw/input/hid.c index de24cd0ef0..457dbb0096 100644 --- a/hw/input/hid.c +++ b/hw/input/hid.c @@ -152,6 +152,10 @@ static void hid_pointer_event(DeviceState *dev, QemuCo= nsole *src, e->dz--; } else if (btn->button =3D=3D INPUT_BUTTON_WHEEL_DOWN) { e->dz++; + } else if (btn->button =3D=3D INPUT_BUTTON_WHEEL_LEFT) { + e->pan--; + } else if (btn->button =3D=3D INPUT_BUTTON_WHEEL_RIGHT) { + e->pan++; } } else { e->buttons_state &=3D ~bmap[btn->button]; @@ -208,6 +212,8 @@ static void hid_pointer_sync(DeviceState *dev) } prev->dz +=3D curr->dz; curr->dz =3D 0; + prev->pan +=3D curr->pan; + curr->pan =3D 0; } else { /* prepare next (clear rel, copy abs + btns) */ if (hs->kind =3D=3D HID_MOUSE) { @@ -218,6 +224,7 @@ static void hid_pointer_sync(DeviceState *dev) next->ydy =3D curr->ydy; } next->dz =3D 0; + next->pan =3D 0; next->buttons_state =3D curr->buttons_state; /* make current guest visible, notify guest */ hs->n++; @@ -357,7 +364,7 @@ void hid_pointer_activate(HIDState *hs) int hid_pointer_poll(HIDState *hs, uint8_t *buf, int len) { - int dx, dy, dz, l; + int dx, dy, dz, pan, l; int index; HIDPointerEvent *e; @@ -381,9 +388,13 @@ int hid_pointer_poll(HIDState *hs, uint8_t *buf, int l= en) } dz =3D int_clamp(e->dz, -127, 127); e->dz -=3D dz; + pan =3D int_clamp(e->pan, -127, 127); + e->pan -=3D pan; + if (hs->n && !e->dz && + !e->pan && (hs->kind =3D=3D HID_TABLET || (!e->xdx && !e->ydy))) { /* that deals with this event */ QUEUE_INCR(hs->head); diff --git a/include/hw/input/hid.h b/include/hw/input/hid.h index 6a9d7bf466..1bb1778ee7 100644 --- a/include/hw/input/hid.h +++ b/include/hw/input/hid.h @@ -10,6 +10,7 @@ typedef struct HIDPointerEvent { int32_t xdx, ydy; /* relative iff it's a mouse, otherwise absolute */ int32_t dz, buttons_state; + int32_t pan; } HIDPointerEvent; #define QUEUE_LENGTH 16 /* should be enough for a triple-click */ -- 2.53.0